summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnjaneedevi Kapparapu <akappa@codeaurora.org>2014-09-22 23:02:50 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2014-09-22 23:05:52 +0530
commitaec80f7e1ce3c192a7edc1783c8ff5cb45355a95 (patch)
tree490212842e92281d475cc73adf55ebf99be44667
parent77711b22ec6feaf7c576e553d05e4336fffda1cf (diff)
parentc1a0116cd664da880934ef940e3eb086ac13ea46 (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
-rw-r--r--CORE/CLD_TXRX/HTT/htt.c2
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg80211.h35
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h6
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c12
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c128
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c11
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c18
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/inc/sirApi.h1
-rw-r--r--CORE/MAC/inc/wniApi.h2
-rw-r--r--CORE/MAC/src/include/parserApi.h4
-rw-r--r--CORE/MAC/src/include/sirParams.h13
-rw-r--r--CORE/MAC/src/pe/lim/limProcessTdls.c11
-rw-r--r--CORE/MAC/src/pe/lim/limSendManagementFrames.c4
-rw-r--r--CORE/MAC/src/pe/lim/limSendSmeRspMessages.c2
-rw-r--r--CORE/MAC/src/pe/sch/schBeaconGen.c2
-rw-r--r--CORE/SERVICES/HIF/PCIe/hif_pci.c7
-rw-r--r--CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c9
-rw-r--r--CORE/SERVICES/HTC/htc.c3
-rw-r--r--CORE/SERVICES/WMA/wma.c131
-rw-r--r--CORE/SERVICES/WMA/wma.h1
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c17
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c14
-rw-r--r--CORE/SYS/legacy/src/utils/src/parserApi.c8
-rw-r--r--CORE/WDA/inc/wlan_qct_wda.h6
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)
{