diff options
| author | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2014-09-22 23:02:50 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2014-09-22 23:05:52 +0530 |
| commit | aec80f7e1ce3c192a7edc1783c8ff5cb45355a95 (patch) | |
| tree | 490212842e92281d475cc73adf55ebf99be44667 | |
| parent | 77711b22ec6feaf7c576e553d05e4336fffda1cf (diff) | |
| parent | c1a0116cd664da880934ef940e3eb086ac13ea46 (diff) | |
Release 1.0.0.196 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master'
* origin/caf/caf-wlan/master:
Cafstaging Release 1.0.0.196
CLD: Changes to retrieve SNR information from firmware.
wlan :Add NULL check for msg_callbacks
qcacld: Mask HIF interrupts after HTC cleanup
qcacld: Fix ASSERT on beacon Tx indication after session removal
qcacld:Disable Tx Beamformee/Beamformer on TDLS link
qcacld: fix for Primary-AP not found by clients in AP+AP MCC
qca_cld: sdio HIF: x86 SDIO compatible with Tufello
qcacld: Fix coding style as per linux standard
qcacld: Send only one RSSI notification for connect
qcacld: Query supported features from the driver/firmware
qcacld: Fix nested spinlock in bus bandwidth timer callback
wlan: qcacld: LFR3 Exception Handling
qcacld: Enable HTC schedule mechanism on the high latency
Change-Id: I041f2d322f79a7c94d88280b3c40ba173d99b1b2
25 files changed, 364 insertions, 87 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt.c b/CORE/CLD_TXRX/HTT/htt.c index 96cd85ff9abb..c16e6c8d31b6 100644 --- a/CORE/CLD_TXRX/HTT/htt.c +++ b/CORE/CLD_TXRX/HTT/htt.c @@ -439,6 +439,8 @@ htt_htc_attach(struct htt_pdev_t *pdev) /* Should NOT support credit flow control. */ connect.ConnectionFlags |= HTC_CONNECT_FLAGS_DISABLE_CREDIT_FLOW_CTRL; + /* Enable HTC schedule mechanism for TX HTT2 service. */ + connect.ConnectionFlags |= HTC_CONNECT_FLAGS_ENABLE_HTC_SCHEDULE; connect.ServiceID = HTT_DATA2_MSG_SVC; diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h index 6560a5e67aa4..e32ca03a5666 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg80211.h +++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h @@ -164,6 +164,8 @@ enum qca_nl80211_vendor_subcmds { QCA_NL80211_VENDOR_SUBCMD_TDLS_DISABLE = 35, QCA_NL80211_VENDOR_SUBCMD_TDLS_GET_STATUS = 36, QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE = 37, + /* Get supported features */ + QCA_NL80211_VENDOR_SUBCMD_GET_SUPPORTED_FEATURES = 38, }; enum qca_nl80211_vendor_subcmds_index { @@ -789,6 +791,39 @@ enum qca_wlan_vendor_attr_ll_stats_results #endif /* WLAN_FEATURE_LINK_LAYER_STATS */ +enum qca_wlan_vendor_attr_get_supported_features { + QCA_WLAN_VENDOR_ATTR_FEATURE_SET_INVALID = 0, + /* Unsigned 32-bit value */ + QCA_WLAN_VENDOR_ATTR_FEATURE_SET = 1, + /* keep last */ + QCA_WLAN_VENDOR_ATTR_FEATURE_SET_AFTER_LAST, + QCA_WLAN_VENDOR_ATTR_FEATURE_SET_MAX = + QCA_WLAN_VENDOR_ATTR_FEATURE_SET_AFTER_LAST - 1, +}; + +/* Feature defines */ +#define WIFI_FEATURE_INFRA 0x0001 /* Basic infrastructure mode */ +#define WIFI_FEATURE_INFRA_5G 0x0002 /* Support for 5 GHz Band */ +#define WIFI_FEATURE_HOTSPOT 0x0004 /* Support for GAS/ANQP */ +#define WIFI_FEATURE_P2P 0x0008 /* Wifi-Direct */ +#define WIFI_FEATURE_SOFT_AP 0x0010 /* Soft AP */ +#define WIFI_FEATURE_EXTSCAN 0x0020 /* Extended Scan APIs */ +#define WIFI_FEATURE_NAN 0x0040 /* Neighbor Awareness + Networking */ +#define WIFI_FEATURE_D2D_RTT 0x0080 /* Device-to-device RTT */ +#define WIFI_FEATURE_D2AP_RTT 0x0100 /* Device-to-AP RTT */ +#define WIFI_FEATURE_BATCH_SCAN 0x0200 /* Batched Scan (legacy) */ +#define WIFI_FEATURE_PNO 0x0400 /* Preferred network offload */ +#define WIFI_FEATURE_ADDITIONAL_STA 0x0800 /* Support for two STAs */ +#define WIFI_FEATURE_TDLS 0x1000 /* Tunnel directed link + setup */ +#define WIFI_FEATURE_TDLS_OFFCHANNEL 0x2000 /* Support for TDLS off + channel */ +#define WIFI_FEATURE_EPR 0x4000 /* Enhanced power reporting */ +#define WIFI_FEATURE_AP_STA 0x8000 /* Support for AP STA + Concurrency */ +/* Add more features here */ + #if defined(FEATURE_WLAN_CH_AVOID) || defined(FEATURE_WLAN_FORCE_SAP_SCC) #define HDD_MAX_AVOID_FREQ_RANGES 4 diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index b5be5c184620..497e9e28721d 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -224,10 +224,6 @@ #define HDD_MIN_TX_POWER (-100) // minimum tx power #define HDD_MAX_TX_POWER (+100) // maximum tx power -#ifdef WLAN_FEATURE_LPSS -#define HDD_RSSI_THRESHOLD 10 /* RSSI threshold set to 10 for temp */ -#endif - typedef v_U8_t tWlanHddMacAddr[HDD_MAC_ADDR_LEN]; /* @@ -1009,7 +1005,7 @@ struct hdd_adapter_s v_S7_t rssi; #ifdef WLAN_FEATURE_LPSS - v_S7_t last_rssi_send; + v_BOOL_t rssi_send; #endif tANI_U8 snr; diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index 045dc07aeb20..9c6c2a06ec28 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -611,9 +611,6 @@ static void hdd_SendAssociationEvent(struct net_device *dev,tCsrRoamInfo *pCsrRo int we_event; char *msg; int type = -1; -#ifdef MSM_PLATFORM - unsigned long flags; -#endif v_MACADDR_t peerMacAddr; #if defined (WLAN_FEATURE_VOWIFI_11R) @@ -714,11 +711,11 @@ static void hdd_SendAssociationEvent(struct net_device *dev,tCsrRoamInfo *pCsrRo #ifdef MSM_PLATFORM #ifdef CONFIG_CNSS /* start timer in sta/p2p_cli */ - spin_lock_irqsave(&pHddCtx->bus_bw_lock, flags); + spin_lock_bh(&pHddCtx->bus_bw_lock); pAdapter->prev_tx_packets = pAdapter->stats.tx_packets; pAdapter->prev_rx_packets = pAdapter->stats.rx_packets; + spin_unlock_bh(&pHddCtx->bus_bw_lock); hdd_start_bus_bw_compute_timer(pAdapter); - spin_unlock_irqrestore(&pHddCtx->bus_bw_lock, flags); #endif #endif } @@ -761,16 +758,17 @@ static void hdd_SendAssociationEvent(struct net_device *dev,tCsrRoamInfo *pCsrRo } #ifdef WLAN_FEATURE_LPSS + pAdapter->rssi_send = VOS_FALSE; wlan_hdd_send_status_pkg(pAdapter, pHddStaCtx, 1, 0); #endif #ifdef MSM_PLATFORM /* stop timer in sta/p2p_cli */ - spin_lock_irqsave(&pHddCtx->bus_bw_lock, flags); + spin_lock_bh(&pHddCtx->bus_bw_lock); pAdapter->prev_tx_packets = 0; pAdapter->prev_rx_packets = 0; + spin_unlock_bh(&pHddCtx->bus_bw_lock); hdd_stop_bus_bw_compute_timer(pAdapter); - spin_unlock_irqrestore(&pHddCtx->bus_bw_lock, flags); #endif } hdd_dump_concurrency_info(pHddCtx); diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index a1c1911139ac..71d54f3b4027 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -1088,6 +1088,115 @@ int is_driver_dfs_capable(struct wiphy *wiphy, struct wireless_dev *wdev, } +static int +wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy, + struct wireless_dev *wdev, + void *data, int data_len) +{ + hdd_context_t *pHddCtx = wiphy_priv(wiphy); + struct sk_buff *skb = NULL; + tANI_U32 fset = 0; + + if (wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION)) { + hddLog(LOG1, FL("Infra Station mode is supported by driver")); + fset |= WIFI_FEATURE_INFRA; + } + + if (TRUE == hdd_is_5g_supported(pHddCtx)) { + hddLog(LOG1, FL("INFRA_5G is supported by firmware")); + fset |= WIFI_FEATURE_INFRA_5G; + } + +#ifdef WLAN_FEATURE_P2P + if ((wiphy->interface_modes & BIT(NL80211_IFTYPE_P2P_CLIENT)) && + (wiphy->interface_modes & BIT(NL80211_IFTYPE_P2P_GO))) { + hddLog(LOG1, FL("WiFi-Direct is supported by driver")); + fset |= WIFI_FEATURE_P2P; + } +#endif + + /* Soft-AP is supported currently by default */ + fset |= WIFI_FEATURE_SOFT_AP; + +#ifdef FEATURE_WLAN_EXTSCAN + if (sme_IsFeatureSupportedByFW(EXTENDED_SCAN)) { + hddLog(LOG1, FL("EXTScan is supported by firmware")); + fset |= WIFI_FEATURE_EXTSCAN; + } +#endif + +#ifdef WLAN_FEATURE_NAN + if (sme_IsFeatureSupportedByFW(NAN)) { + hddLog(LOG1, FL("NAN is supported by firmware")); + fset |= WIFI_FEATURE_NAN; + } +#endif + + if (sme_IsFeatureSupportedByFW(RTT)) { + hddLog(LOG1, FL("RTT is supported by firmware")); + fset |= WIFI_FEATURE_D2D_RTT; + fset |= WIFI_FEATURE_D2AP_RTT; + } + +#ifdef FEATURE_WLAN_BATCH_SCAN + if (sme_IsFeatureSupportedByFW(BATCH_SCAN)) { + hddLog(LOG1, FL("Batch scan is supported by firmware")); + fset |= WIFI_FEATURE_BATCH_SCAN; + } +#endif + +#ifdef FEATURE_WLAN_SCAN_PNO + if (pHddCtx->cfg_ini->configPNOScanSupport && + sme_IsFeatureSupportedByFW(PNO)) { + hddLog(LOG1, FL("PNO is supported by firmware")); + fset |= WIFI_FEATURE_PNO; + } +#endif + + /* STA+STA is supported currently by default */ + fset |= WIFI_FEATURE_ADDITIONAL_STA; + +#ifdef FEATURE_WLAN_TDLS + if ((TRUE == pHddCtx->cfg_ini->fEnableTDLSSupport) && + sme_IsFeatureSupportedByFW(TDLS)) { + hddLog(LOG1, FL("TDLS is supported by firmware")); + fset |= WIFI_FEATURE_TDLS; + } + + if (sme_IsFeatureSupportedByFW(TDLS) && + (TRUE == pHddCtx->cfg_ini->fEnableTDLSOffChannel) && + sme_IsFeatureSupportedByFW(TDLS_OFF_CHANNEL)) { + hddLog(LOG1, FL("TDLS off-channel is supported by firmware")); + fset |= WIFI_FEATURE_TDLS_OFFCHANNEL; + } +#endif + +#ifdef WLAN_AP_STA_CONCURRENCY + /* AP+STA concurrency is supported currently by default */ + fset |= WIFI_FEATURE_AP_STA; +#endif + + skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, sizeof(fset) + + NLMSG_HDRLEN); + + if (!skb) { + hddLog(LOGE, FL("cfg80211_vendor_cmd_alloc_reply_skb failed")); + return -EINVAL; + } + hddLog(LOG1, FL("Supported Features : 0x%x"), fset); + + if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_FEATURE_SET, fset)) { + hddLog(LOGE, FL("nla put fail")); + goto nla_put_failure; + } + + return cfg80211_vendor_cmd_reply(skb); + +nla_put_failure: + kfree_skb(skb); + return -EINVAL; +} + #ifdef WLAN_FEATURE_STATS_EXT static int wlan_hdd_cfg80211_stats_ext_request(struct wiphy *wiphy, struct wireless_dev *wdev, @@ -3816,6 +3925,13 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = WIPHY_VENDOR_CMD_NEED_NETDEV, .doit = wlan_hdd_cfg80211_exttdls_get_status }, + { + .info.vendor_id = QCA_NL80211_VENDOR_ID, + .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_GET_SUPPORTED_FEATURES, + .flags = WIPHY_VENDOR_CMD_NEED_WDEV | + WIPHY_VENDOR_CMD_NEED_NETDEV, + .doit = wlan_hdd_cfg80211_get_supported_features + }, }; @@ -11057,10 +11173,6 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, eDataRate11ACMaxMcs vhtMaxMcs; #endif /* WLAN_FEATURE_11AC */ -#ifdef WLAN_FEATURE_LPSS - v_S7_t last_rssi_send; -#endif /* WLAN_FEATURE_LPSS */ - ENTER(); if ((eConnectionState_Associated != pHddStaCtx->conn_info.connState) || @@ -11081,16 +11193,12 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, return status; } -#ifdef WLAN_FEATURE_LPSS - last_rssi_send = pAdapter->last_rssi_send; -#endif wlan_hdd_get_rssi(pAdapter, &sinfo->signal); sinfo->filled |= STATION_INFO_SIGNAL; #ifdef WLAN_FEATURE_LPSS - if ((pAdapter->rssi >= last_rssi_send + HDD_RSSI_THRESHOLD) || - (pAdapter->rssi <= last_rssi_send - HDD_RSSI_THRESHOLD)) { - pAdapter->last_rssi_send = pAdapter->rssi; + if (!pAdapter->rssi_send) { + pAdapter->rssi_send = VOS_TRUE; wlan_hdd_send_status_pkg(pAdapter, pHddStaCtx, 1, 1); } #endif diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index ef542f96d445..4ee985fdc803 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -840,9 +840,6 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa #ifdef WLAN_FEATURE_MBSSID hdd_adapter_t *con_sap_adapter; #endif -#ifdef MSM_PLATFORM - unsigned long flags; -#endif VOS_STATUS status = VOS_STATUS_SUCCESS; #if defined CONFIG_CNSS int ret = 0; @@ -1263,11 +1260,11 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa /* start timer in sap/p2p_go */ if (pHddApCtx->bApActive == VOS_FALSE) { - spin_lock_irqsave(&pHddCtx->bus_bw_lock, flags); + spin_lock_bh(&pHddCtx->bus_bw_lock); pHostapdAdapter->prev_tx_packets = pHostapdAdapter->stats.tx_packets; pHostapdAdapter->prev_rx_packets = pHostapdAdapter->stats.rx_packets; + spin_unlock_bh(&pHddCtx->bus_bw_lock); hdd_start_bus_bw_compute_timer(pHostapdAdapter); - spin_unlock_irqrestore(&pHddCtx->bus_bw_lock, flags); } #endif pHddApCtx->bApActive = VOS_TRUE; @@ -1421,11 +1418,11 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa /*stop timer in sap/p2p_go */ if (pHddApCtx->bApActive == FALSE) { - spin_lock_irqsave(&pHddCtx->bus_bw_lock, flags); + spin_lock_bh(&pHddCtx->bus_bw_lock); pHostapdAdapter->prev_tx_packets = 0; pHostapdAdapter->prev_rx_packets = 0; + spin_unlock_bh(&pHddCtx->bus_bw_lock); hdd_stop_bus_bw_compute_timer(pHostapdAdapter); - spin_unlock_irqrestore(&pHddCtx->bus_bw_lock, flags); } #endif #ifdef FEATURE_GREEN_AP diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 6bdaf8466d5e..5ecd1fe48733 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -8757,17 +8757,16 @@ VOS_STATUS hdd_check_for_existing_macaddr( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter; VOS_STATUS status; - status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode ); + status = hdd_get_front_adapter(pHddCtx, &pAdapterNode); - while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status ) - { + while (NULL != pAdapterNode && VOS_STATUS_SUCCESS == status) { pAdapter = pAdapterNode->pAdapter; - if( pAdapter && vos_mem_compare( pAdapter->macAddressCurrent.bytes, - macAddr, sizeof(tSirMacAddr) ) ) { + if (pAdapter && vos_mem_compare(pAdapter->macAddressCurrent.bytes, + macAddr, sizeof(tSirMacAddr))) { return VOS_STATUS_E_FAILURE; } - status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); + status = hdd_get_next_adapter(pHddCtx, pAdapterNode, &pNext); pAdapterNode = pNext; } @@ -11362,13 +11361,10 @@ static void hdd_bus_bw_compute_cbk(void *priv) hdd_context_t *pHddCtx = (hdd_context_t *)priv; hdd_adapter_t *pAdapter = NULL; uint64_t tx_packets= 0, rx_packets= 0; - unsigned long flags; hdd_adapter_list_node_t *pAdapterNode = NULL; VOS_STATUS status = 0; v_BOOL_t connected = FALSE; - spin_lock_irqsave(&pHddCtx->bus_bw_lock, flags); - for (status = hdd_get_front_adapter(pHddCtx, &pAdapterNode); NULL != pAdapterNode && VOS_STATUS_SUCCESS == status; status = hdd_get_next_adapter(pHddCtx, pAdapterNode, &pAdapterNode)) @@ -11397,13 +11393,13 @@ static void hdd_bus_bw_compute_cbk(void *priv) rx_packets += HDD_BW_GET_DIFF(pAdapter->stats.rx_packets, pAdapter->prev_rx_packets); + spin_lock_bh(&pHddCtx->bus_bw_lock); pAdapter->prev_tx_packets = pAdapter->stats.tx_packets; pAdapter->prev_rx_packets = pAdapter->stats.rx_packets; + spin_unlock_bh(&pHddCtx->bus_bw_lock); connected = TRUE; } - spin_unlock_irqrestore(&pHddCtx->bus_bw_lock, flags); - if (!connected) { VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "bus bandwidth timer running in disconnected state"); diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 64000ca07af5..00ee539e2415 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -42,9 +42,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 0 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 195 +#define QWLAN_VERSION_BUILD 196 -#define QWLAN_VERSIONSTR "1.0.0.195" +#define QWLAN_VERSIONSTR "1.0.0.196" #define AR6320_REV1_VERSION 0x5000000 diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index 2a6821d615b8..da2bf9d7e22e 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -2213,6 +2213,7 @@ typedef struct sAniGetSnrReq tANI_U8 staId; void *snrCallback; void *pDevContext; //device context + tANI_S8 snr; } tAniGetSnrReq, *tpAniGetSnrReq; #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR) diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h index 146c7a1f6469..f0c9ad24d78b 100644 --- a/CORE/MAC/inc/wniApi.h +++ b/CORE/MAC/inc/wniApi.h @@ -400,7 +400,7 @@ enum eWniMsgTypes eWNI_SME_READY_TO_EXTWOW_IND, #endif eWNI_SME_MSG_GET_TEMPERATURE_IND, - + eWNI_SME_SNR_IND, eWNI_SME_MSG_TYPES_END }; diff --git a/CORE/MAC/src/include/parserApi.h b/CORE/MAC/src/include/parserApi.h index d92f101f9988..da715687130c 100644 --- a/CORE/MAC/src/include/parserApi.h +++ b/CORE/MAC/src/include/parserApi.h @@ -894,7 +894,9 @@ PopulateDot11fVHTCaps(tpAniSirGlobal pMac, tpPESession psessionEntry, tDot11fIEVHTCaps *pDot11f); tSirRetStatus -PopulateDot11fVHTOperation(tpAniSirGlobal pMac, tDot11fIEVHTOperation *pDot11f); +PopulateDot11fVHTOperation(tpAniSirGlobal pMac, + tpPESession psessionEntry, + tDot11fIEVHTOperation *pDot11f); tSirRetStatus PopulateDot11fVHTExtBssLoad(tpAniSirGlobal pMac, tDot11fIEVHTExtBssLoad *pDot11f); diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h index 280a18bbc157..9c784237833c 100644 --- a/CORE/MAC/src/include/sirParams.h +++ b/CORE/MAC/src/include/sirParams.h @@ -82,6 +82,16 @@ typedef enum { TDLS = 6, P2P_GO_NOA_DECOUPLE_INIT_SCAN = 7, WLANACTIVE_OFFLOAD = 8, +#ifdef FEATURE_WLAN_EXTSCAN + EXTENDED_SCAN = 9, +#endif +#ifdef FEATURE_WLAN_SCAN_PNO + PNO = 10, +#endif +#ifdef WLAN_FEATURE_NAN + NAN = 11, +#endif + RTT = 12, WOW = 22, #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD WLAN_ROAM_SCAN_OFFLOAD = 23, @@ -90,10 +100,11 @@ typedef enum { WLAN_PERIODIC_TX_PTRN = 28, #ifdef FEATURE_WLAN_TDLS ADVANCE_TDLS = 29, + TDLS_OFF_CHANNEL = 30, #endif #ifdef FEATURE_WLAN_BATCH_SCAN - BATCH_SCAN = 30, + BATCH_SCAN = 31, #endif //MAX_FEATURE_SUPPORTED = 128 } placeHolderInCapBitmap; diff --git a/CORE/MAC/src/pe/lim/limProcessTdls.c b/CORE/MAC/src/pe/lim/limProcessTdls.c index 280c7074a2b7..f9fc4d15f6b4 100644 --- a/CORE/MAC/src/pe/lim/limProcessTdls.c +++ b/CORE/MAC/src/pe/lim/limProcessTdls.c @@ -576,6 +576,9 @@ static void PopulateDot11fTdlsHtVhtCap(tpAniSirGlobal pMac, uint32 selfDot11Mode /* Include VHT Capability IE */ PopulateDot11fVHTCaps( pMac, psessionEntry, vhtCap ); vhtCap->suBeamformeeCap = 0; + vhtCap->suBeamFormerCap = 0; + vhtCap->muBeamformeeCap = 0; + vhtCap->muBeamformerCap = 0; } else { @@ -1523,7 +1526,9 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac, /* Check peer is VHT capable*/ if (CHECK_BIT(peerCapability, TDLS_PEER_VHT_CAP)) { - PopulateDot11fVHTOperation( pMac, &tdlsSetupCnf.VHTOperation); + PopulateDot11fVHTOperation(pMac, + psessionEntry, + &tdlsSetupCnf.VHTOperation); PopulateDot11fHTInfo( pMac, &tdlsSetupCnf.HTInfo, psessionEntry ); } else if (CHECK_BIT(peerCapability, TDLS_PEER_HT_CAP)) /* Check peer is HT capable */ @@ -1840,8 +1845,8 @@ limTdlsPopulateDot11fVHTCaps(tpAniSirGlobal pMac, pDot11f->suBeamformeeCap = 0; pDot11f->csnofBeamformerAntSup = uVHTCapabilityInfo.vhtCapInfo.csnofBeamformerAntSup; pDot11f->numSoundingDim = uVHTCapabilityInfo.vhtCapInfo.numSoundingDim; - pDot11f->muBeamformerCap = uVHTCapabilityInfo.vhtCapInfo.muBeamformerCap; - pDot11f->muBeamformeeCap = uVHTCapabilityInfo.vhtCapInfo.muBeamformeeCap; + pDot11f->muBeamformerCap = 0; + pDot11f->muBeamformeeCap = 0; pDot11f->vhtTXOPPS = uVHTCapabilityInfo.vhtCapInfo.vhtTXOPPS; pDot11f->htcVHTCap = uVHTCapabilityInfo.vhtCapInfo.htcVHTCap; pDot11f->maxAMPDULenExp = uVHTCapabilityInfo.vhtCapInfo.maxAMPDULenExp; diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c index cbe451cbba77..ca13c053d8c8 100644 --- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c +++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c @@ -832,7 +832,7 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac, { limLog( pMac, LOG1, FL("Populate VHT IE in Probe Response")); PopulateDot11fVHTCaps( pMac, psessionEntry, &pFrm->VHTCaps ); - PopulateDot11fVHTOperation( pMac, &pFrm->VHTOperation ); + PopulateDot11fVHTOperation( pMac, psessionEntry, &pFrm->VHTOperation ); // we do not support multi users yet //PopulateDot11fVHTExtBssLoad( pMac, &frm.VHTExtBssLoad ); isVHTEnabled = eANI_BOOLEAN_TRUE; @@ -1460,7 +1460,7 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac, { limLog( pMac, LOG1, FL("Populate VHT IEs in Assoc Response")); PopulateDot11fVHTCaps( pMac, psessionEntry, &frm.VHTCaps ); - PopulateDot11fVHTOperation( pMac, &frm.VHTOperation); + PopulateDot11fVHTOperation( pMac, psessionEntry, &frm.VHTOperation); isVHTEnabled = eANI_BOOLEAN_TRUE; } #endif diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c index ad56d7c774a8..b5d6ff70046e 100644 --- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c +++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c @@ -3209,7 +3209,7 @@ limProcessBeaconTxSuccessInd(tpAniSirGlobal pMac, tANI_U16 msgType, void *event) if((psessionEntry = peFindSessionByBssIdx(pMac, pBcnTxInd->bssIdx))== NULL) { - limLog(pMac, LOGP,FL("Session Does not exist for given sessionID")); + limLog(pMac, LOGE,FL("Session Does not exist for given sessionID")); return; } diff --git a/CORE/MAC/src/pe/sch/schBeaconGen.c b/CORE/MAC/src/pe/sch/schBeaconGen.c index 10e7b7ef3aa7..12d2ea834676 100644 --- a/CORE/MAC/src/pe/sch/schBeaconGen.c +++ b/CORE/MAC/src/pe/sch/schBeaconGen.c @@ -374,7 +374,7 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn { schLog( pMac, LOGW, FL("Populate VHT IEs in Beacon")); PopulateDot11fVHTCaps( pMac, psessionEntry, &pBcn2->VHTCaps ); - PopulateDot11fVHTOperation( pMac, &pBcn2->VHTOperation); + PopulateDot11fVHTOperation( pMac, psessionEntry, &pBcn2->VHTOperation); isVHTEnabled = eANI_BOOLEAN_TRUE; // we do not support multi users yet //PopulateDot11fVHTExtBssLoad( pMac, &bcn2.VHTExtBssLoad); diff --git a/CORE/SERVICES/HIF/PCIe/hif_pci.c b/CORE/SERVICES/HIF/PCIe/hif_pci.c index c819226cff7e..adcf2abfa6cb 100644 --- a/CORE/SERVICES/HIF/PCIe/hif_pci.c +++ b/CORE/SERVICES/HIF/PCIe/hif_pci.c @@ -713,7 +713,12 @@ hif_completion_thread(struct HIF_CE_state *hif_state) return 0; } - + /* Make sure that HTC registered call backs with the HIF are valid */ + if (!msg_callbacks->fwEventHandler + || !msg_callbacks->txCompletionHandler + || !msg_callbacks->rxCompletionHandler) { + return 0; + } while (atomic_read(&hif_state->fw_event_pending) > 0) { /* diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c index 60e8d0796d55..b696a03334dc 100644 --- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c +++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c @@ -77,9 +77,18 @@ unsigned int forcesleepmode = 0; module_param(forcesleepmode, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); MODULE_PARM_DESC(forcesleepmode, "Set sleep mode: 0-host capbility, 1-force WOW, 2-force DeepSleep, 3-force CutPower"); +/* Some laptop with JMicron SDIO host has compitable + * issue with asyncintdelay value, + * change default value to 2 under X86 */ +#ifdef CONFIG_X86 +unsigned int asyncintdelay = 2; +module_param(asyncintdelay, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); +MODULE_PARM_DESC(asyncintdelay, "Delay clock count for aysnc interrupt, 2 is default, vaild values are 1 and 2"); +#else unsigned int asyncintdelay = 0; module_param(asyncintdelay, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); MODULE_PARM_DESC(asyncintdelay, "Delay clock count for aysnc interrupt, 0 is default, vaild values are 1 and 2"); +#endif unsigned int forcecard = 0; module_param(forcecard, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); diff --git a/CORE/SERVICES/HTC/htc.c b/CORE/SERVICES/HTC/htc.c index 1c74c6c3f2e2..602bddfbfe46 100644 --- a/CORE/SERVICES/HTC/htc.c +++ b/CORE/SERVICES/HTC/htc.c @@ -146,6 +146,9 @@ static void HTCCleanup(HTC_TARGET *target) if (target->hif_dev != NULL) { HIFDetachHTC(target->hif_dev); +#ifdef HIF_SDIO + HIFMaskInterrupt(target->hif_dev); +#endif target->hif_dev = NULL; } diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index a849c5ad2f17..16d005cfa488 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -2034,7 +2034,9 @@ static void wma_update_vdev_stats(tp_wma_handle wma, struct wma_txrx_node *node; tANI_U8 i; v_S7_t rssi = 0; + VOS_STATUS vos_status; tAniGetRssiReq *pGetRssiReq = (tAniGetRssiReq*)wma->pGetRssiReq; + vos_msg_t sme_msg = {0} ; node = &wma->interfaces[vdev_stats->vdev_id]; stats_rsp_params = node->stats_rsp; @@ -2065,6 +2067,11 @@ static void wma_update_vdev_stats(tp_wma_handle wma, } } + WMA_LOGD("vdev id %d beancon snr %d data snr %d", + vdev_stats->vdev_id, + vdev_stats->vdev_snr.bcn_snr, + vdev_stats->vdev_snr.dat_snr); + if (pGetRssiReq && pGetRssiReq->sessionId == vdev_stats->vdev_id) { if ((vdev_stats->vdev_snr.bcn_snr == WMA_TGT_INVALID_SNR) && @@ -2091,10 +2098,6 @@ static void wma_update_vdev_stats(tp_wma_handle wma, rssi = rssi + WMA_TGT_NOISE_FLOOR_DBM; } - WMA_LOGD("vdev id %d beancon snr %d data snr %d", - vdev_stats->vdev_id, - vdev_stats->vdev_snr.bcn_snr, - vdev_stats->vdev_snr.dat_snr); WMA_LOGD("Average Rssi = %d, vdev id= %d", rssi, pGetRssiReq->sessionId); @@ -2107,6 +2110,29 @@ static void wma_update_vdev_stats(tp_wma_handle wma, adf_os_mem_free(pGetRssiReq); wma->pGetRssiReq = NULL; } + + if (node->psnr_req) { + tAniGetSnrReq *p_snr_req = node->psnr_req; + + if (vdev_stats->vdev_snr.bcn_snr != WMA_TGT_INVALID_SNR) + p_snr_req->snr = vdev_stats->vdev_snr.bcn_snr; + else if (vdev_stats->vdev_snr.dat_snr != WMA_TGT_INVALID_SNR) + p_snr_req->snr = vdev_stats->vdev_snr.dat_snr; + else + p_snr_req->snr = WMA_TGT_INVALID_SNR; + + sme_msg.type = eWNI_SME_SNR_IND; + sme_msg.bodyptr = p_snr_req; + sme_msg.bodyval = 0; + + vos_status = vos_mq_post_message(VOS_MODULE_ID_SME, &sme_msg); + if (!VOS_IS_STATUS_SUCCESS(vos_status)) { + WMA_LOGE("%s: Fail to post snr ind msg", __func__); + vos_mem_free(p_snr_req); + } + + node->psnr_req = NULL; + } } static void wma_post_stats(tp_wma_handle wma, struct wma_txrx_node *node) @@ -7064,6 +7090,67 @@ VOS_STATUS wma_send_snr_request(tp_wma_handle wma_handle, void *pGetRssiReq, return VOS_STATUS_SUCCESS; } +VOS_STATUS WDA_GetSnr(tAniGetSnrReq *psnr_req) +{ + wmi_buf_t buf; + wmi_request_stats_cmd_fixed_param *cmd; + tAniGetSnrReq *psnr_req_bkp; + u_int8_t len = sizeof(wmi_request_stats_cmd_fixed_param); + void *vos_context = vos_get_global_context(VOS_MODULE_ID_WDA, NULL); + tp_wma_handle wma_handle = NULL; + struct wma_txrx_node *intr; + + wma_handle = vos_get_context(VOS_MODULE_ID_WDA, vos_context); + + if (NULL == wma_handle) { + WMA_LOGE("%s : Failed to get wma_handle", __func__); + return VOS_STATUS_E_FAULT; + } + + intr = &wma_handle->interfaces[psnr_req->sessionId]; + /* command is in progess */ + if(NULL != intr->psnr_req) { + WMA_LOGE("%s : previous snr request is pending", __func__); + return VOS_STATUS_SUCCESS; + } + + psnr_req_bkp = adf_os_mem_alloc(NULL, sizeof(tAniGetSnrReq)); + if (!psnr_req_bkp) { + WMA_LOGE("Failed to allocate memory for tAniGetSnrReq"); + return VOS_STATUS_E_FAILURE; + } + + adf_os_mem_set(psnr_req_bkp, 0, sizeof(tAniGetSnrReq)); + psnr_req_bkp->staId = psnr_req->staId; + psnr_req_bkp->pDevContext = psnr_req->pDevContext; + psnr_req_bkp->snrCallback = psnr_req->snrCallback; + buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + if (!buf) { + WMA_LOGE("%s: wmi_buf_alloc failed", __func__); + adf_os_mem_free(psnr_req_bkp); + return VOS_STATUS_E_FAILURE; + } + + cmd = (wmi_request_stats_cmd_fixed_param *)wmi_buf_data(buf); + cmd->vdev_id = psnr_req->sessionId; + + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_request_stats_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_request_stats_cmd_fixed_param)); + cmd->stats_id = WMI_REQUEST_VDEV_STAT; + intr->psnr_req = (void *)psnr_req_bkp; + if (wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len, + WMI_REQUEST_STATS_CMDID)) { + WMA_LOGE("Failed to send host stats request to fw"); + wmi_buf_free(buf); + adf_os_mem_free(psnr_req_bkp); + intr->psnr_req = NULL; + return VOS_STATUS_E_FAILURE; + } + + return VOS_STATUS_SUCCESS; +} + /* function : wma_start_scan * Description : * Args : @@ -14194,6 +14281,11 @@ static void wma_delete_bss(tp_wma_handle wma, tpDeleteBssParams params) wma->interfaces[params->smesessionId].stats_rsp = NULL; } + if (wma->interfaces[params->smesessionId].psnr_req) { + vos_mem_free(wma->interfaces[params->smesessionId].psnr_req); + wma->interfaces[params->smesessionId].psnr_req = NULL; + } + if (wlan_op_mode_ibss == txrx_vdev->opmode) { wma->ibss_started = 0; } @@ -22651,7 +22743,11 @@ static void wma_roam_ho_fail_handler(tp_wma_handle wma, u_int32_t vdev_id) return; } ho_failure_ind->sessionId = vdev_id; - + /* Hand Off Failure could happen as an exception, when a roam synch + * indication is posted to Host, but a roam synch complete is not + * posted to the firmware.So, clear the roam synch in progress + * flag before disconnecting the session through this event.*/ + wma->interfaces[vdev_id].roam_synch_in_progress = VOS_FALSE; sme_msg.type = eWNI_SME_HO_FAIL_IND; sme_msg.bodyptr = ho_failure_ind; sme_msg.bodyval = 0; @@ -24044,15 +24140,27 @@ static inline void wma_update_target_services(tp_wma_handle wh, } #endif +#ifdef FEATURE_WLAN_EXTSCAN + if (WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, + WMI_SERVICE_EXTSCAN)) { + gFwWlanFeatCaps |= (1 << EXTENDED_SCAN); + } +#endif cfg->lte_coex_ant_share = WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, WMI_SERVICE_LTE_ANT_SHARE_SUPPORT); #ifdef FEATURE_WLAN_TDLS /* Enable TDLS */ - cfg->en_tdls = WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, - WMI_SERVICE_TDLS); + if (WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, WMI_SERVICE_TDLS)) { + cfg->en_tdls = 1; + gFwWlanFeatCaps |= (1 << TDLS); + } /* Enable advanced TDLS features */ - cfg->en_tdls_offchan = WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, - WMI_SERVICE_TDLS_OFFCHAN); + if (WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, + WMI_SERVICE_TDLS_OFFCHAN)) { + cfg->en_tdls_offchan = 1; + gFwWlanFeatCaps |= (1 << TDLS_OFF_CHANNEL); + } + cfg->en_tdls_uapsd_buf_sta = WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, WMI_SERVICE_TDLS_UAPSD_BUFFER_STA); cfg->en_tdls_uapsd_sleep_sta = WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, @@ -24065,6 +24173,11 @@ static inline void wma_update_target_services(tp_wma_handle wh, cfg->en_roam_offload = WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, WMI_SERVICE_ROAM_HO_OFFLOAD); #endif + if (WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, WMI_SERVICE_NAN)) + gFwWlanFeatCaps |= (1 << NAN); + + if (WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, WMI_SERVICE_RTT)) + gFwWlanFeatCaps |= (1 << RTT); } static inline void wma_update_target_ht_cap(tp_wma_handle wh, diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index 5e1701f369e3..8412e008c973 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -530,6 +530,7 @@ struct wma_txrx_node { u_int32_t peer_count; v_BOOL_t roam_synch_in_progress; void *plink_status_req; + void *psnr_req; }; #if defined(QCA_WIFI_FTM) diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 7ec7eee514ab..27b4b2e6e24a 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -9660,26 +9660,14 @@ static void csrUpdateRssi(tpAniSirGlobal pMac, void* pMsg) static void csrUpdateSnr(tpAniSirGlobal pMac, void* pMsg) { - tANI_S8 snr = 0; tAniGetSnrReq *pGetSnrReq = (tAniGetSnrReq*)pMsg; if (pGetSnrReq) { if (VOS_STATUS_SUCCESS != - WDA_GetSnr(pGetSnrReq->staId, &snr)) + WDA_GetSnr(pGetSnrReq)) { - smsLog(pMac, LOGE, FL("Error in WLANTL_GetSnr")); - return; - } - - if (pGetSnrReq->snrCallback) - { - ((tCsrSnrCallback)(pGetSnrReq->snrCallback))(snr, pGetSnrReq->staId, - pGetSnrReq->pDevContext); - } - else - { - smsLog(pMac, LOGE, FL("pGetSnrReq->snrCallback is NULL")); + smsLog(pMac, LOGE, FL("Error in WDA_GetSnr")); return; } } @@ -9687,6 +9675,7 @@ static void csrUpdateSnr(tpAniSirGlobal pMac, void* pMsg) { smsLog(pMac, LOGE, FL("pGetSnrReq is NULL")); } + return; } #if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR) diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 86d308224398..5cd2eefd396c 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -2789,7 +2789,6 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) } break; } - case eWNI_SME_MSG_GET_TEMPERATURE_IND: if (pMac->sme.pGetTemperatureCb) { @@ -2797,7 +2796,20 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) pMac->sme.pTemperatureCbContext); } break; + case eWNI_SME_SNR_IND: + { + tAniGetSnrReq *pSnrReq = (tAniGetSnrReq *) pMsg->bodyptr; + if (pSnrReq) { + if (pSnrReq->snrCallback) { + ((tCsrSnrCallback)(pSnrReq->snrCallback))(pSnrReq->snr, + pSnrReq->staId, + pSnrReq->pDevContext); + } + vos_mem_free(pSnrReq); + } + break; + } default: if ( ( pMsg->type >= eWNI_SME_MSG_TYPES_BEGIN ) diff --git a/CORE/SYS/legacy/src/utils/src/parserApi.c b/CORE/SYS/legacy/src/utils/src/parserApi.c index c6eb89562043..492ee9c51cda 100644 --- a/CORE/SYS/legacy/src/utils/src/parserApi.c +++ b/CORE/SYS/legacy/src/utils/src/parserApi.c @@ -995,7 +995,8 @@ PopulateDot11fVHTCaps(tpAniSirGlobal pMac, tSirRetStatus PopulateDot11fVHTOperation(tpAniSirGlobal pMac, - tDot11fIEVHTOperation *pDot11f) + tpPESession psessionEntry, + tDot11fIEVHTOperation *pDot11f) { tSirRetStatus nStatus; tANI_U32 nCfgValue=0; @@ -1005,10 +1006,7 @@ PopulateDot11fVHTOperation(tpAniSirGlobal pMac, CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_CHANNEL_WIDTH, nCfgValue ); pDot11f->chanWidth = (tANI_U8)nCfgValue; - nCfgValue = 0; - CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT1, - nCfgValue ); - pDot11f->chanCenterFreqSeg1 = (tANI_U8)nCfgValue; + pDot11f->chanCenterFreqSeg1 = psessionEntry->apCenterChan; nCfgValue = 0; CFG_GET_INT( nStatus, pMac, WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT2, diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h index 6e04487c63a0..37c3a0f5ef9b 100644 --- a/CORE/WDA/inc/wlan_qct_wda.h +++ b/CORE/WDA/inc/wlan_qct_wda.h @@ -1026,17 +1026,13 @@ tSirRetStatus wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg); VOS_STATUS WDA_SetIdlePsConfig(void *wda_handle, tANI_U32 idle_ps); VOS_STATUS WDA_notify_modem_power_state(void *wda_handle, tANI_U32 value); +VOS_STATUS WDA_GetSnr(tAniGetSnrReq *psnr_req); static inline void WDA_UpdateSnrBmps(v_PVOID_t pvosGCtx, v_U8_t staId, v_S7_t snr) { } -static inline int WDA_GetSnr(tANI_U8 ucSTAId, tANI_S8* pSnr) -{ - return VOS_STATUS_SUCCESS; -} - static inline void WDA_UpdateLinkCapacity(v_PVOID_t pvosGCtx, v_U8_t staId, v_U32_t linkCapacity) { |
