wlan: Enhance EXTScan to Separate data between HDD and SME
This commit enhances EXTScan implementation to ensure SME does a
separate copy of HDD data.Also, this commit checks for this feature
capability before functioning and returns failure if not enabled.
Change-Id: I7f226e480c538fcfc4be0f5d7d9a084d1dbe5c89
CRs-Fixed: 689684
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 32d438c..a8766d8 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1846,6 +1846,13 @@
#define CFG_LINK_LAYER_STATS_ENABLE_DEFAULT (0)
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+#define CFG_EXTSCAN_ENABLE "gEnableEXTScan"
+#define CFG_EXTSCAN_ENABLE_MIN (0)
+#define CFG_EXTSCAN_ENABLE_MAX (1)
+#define CFG_EXTSCAN_ENABLE_DEFAULT (0)
+#endif
+
#ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE
#define CFG_ACTIVEMODE_OFFLOAD_ENABLE "gEnableActiveModeOffload"
#define CFG_ACTIVEMODE_OFFLOAD_ENABLE_MIN ( 0 )
@@ -2588,6 +2595,9 @@
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
v_BOOL_t fEnableLLStats;
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ v_BOOL_t fEnableEXTScan;
+#endif
#ifdef WLAN_SOFTAP_VSTA_FEATURE
v_BOOL_t fEnableVSTASupport;
#endif
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 0c2f800..b8c60be 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -2548,6 +2548,14 @@
CFG_LINK_LAYER_STATS_ENABLE_MIN,
CFG_LINK_LAYER_STATS_ENABLE_MAX ),
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+REG_VARIABLE( CFG_EXTSCAN_ENABLE, WLAN_PARAM_Integer,
+ hdd_config_t, fEnableEXTScan,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_EXTSCAN_ENABLE_DEFAULT,
+ CFG_EXTSCAN_ENABLE_MIN,
+ CFG_EXTSCAN_ENABLE_MAX ),
+#endif
#ifdef WLAN_SOFTAP_VSTA_FEATURE
REG_VARIABLE( CFG_VSTA_SUPPORT_ENABLE, WLAN_PARAM_Integer,
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index f7323f0..fe5b2de 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -2886,7 +2886,7 @@
struct wireless_dev *wdev,
void *data, int dataLen)
{
- tpSirGetEXTScanCapabilitiesReqParams pReqMsg = NULL;
+ tSirGetEXTScanCapabilitiesReqParams reqMsg;
struct net_device *dev = wdev->netdev;
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
hdd_context_t *pHddCtx = wiphy_priv(wiphy);
@@ -2902,6 +2902,15 @@
FL("HDD context is not valid"));
return -EINVAL;
}
+ /* check the EXTScan Capability */
+ if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
+ (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)))
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("EXTScan not enabled/supported by Firmware"));
+ return -EINVAL;
+ }
+
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
wlan_hdd_extscan_config_policy)) {
@@ -2915,25 +2924,18 @@
return -EINVAL;
}
- pReqMsg = (tpSirGetEXTScanCapabilitiesReqParams)
- vos_mem_malloc(sizeof(*pReqMsg));
- if (!pReqMsg) {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("vos_mem_malloc failed"));
- return -ENOMEM;
- }
- pReqMsg->requestId = nla_get_u32(
+ reqMsg.requestId = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_REQUEST_ID]);
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), pReqMsg->requestId);
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), reqMsg.requestId);
- pReqMsg->sessionId = pAdapter->sessionId;
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Session Id (%d)"), pReqMsg->sessionId);
+ reqMsg.sessionId = pAdapter->sessionId;
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Session Id (%d)"), reqMsg.sessionId);
- status = sme_EXTScanGetCapabilities(pHddCtx->hHal, pReqMsg);
+ status = sme_EXTScanGetCapabilities(pHddCtx->hHal, &reqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
hddLog(VOS_TRACE_LEVEL_ERROR,
FL("sme_EXTScanGetCapabilities failed(err=%d)"), status);
- vos_mem_free(pReqMsg);
return -EINVAL;
}
@@ -2945,7 +2947,7 @@
struct wireless_dev *wdev,
void *data, int dataLen)
{
- tpSirEXTScanGetCachedResultsReqParams pReqMsg = NULL;
+ tSirEXTScanGetCachedResultsReqParams reqMsg;
struct net_device *dev = wdev->netdev;
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
hdd_context_t *pHddCtx = wiphy_priv(wiphy);
@@ -2960,6 +2962,15 @@
FL("HDD context is not valid"));
return -EINVAL;
}
+ /* check the EXTScan Capability */
+ if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
+ (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)))
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("EXTScan not enabled/supported by Firmware"));
+ return -EINVAL;
+ }
+
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
wlan_hdd_extscan_config_policy)) {
@@ -2971,20 +2982,14 @@
hddLog(VOS_TRACE_LEVEL_ERROR, FL("attr request id failed"));
return -EINVAL;
}
- pReqMsg = (tpSirEXTScanGetCachedResultsReqParams)
- vos_mem_malloc(sizeof(*pReqMsg));
- if (!pReqMsg) {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("vos_mem_malloc failed"));
- return -ENOMEM;
- }
- pReqMsg->requestId = nla_get_u32(
+ reqMsg.requestId = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_REQUEST_ID]);
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), pReqMsg->requestId);
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), reqMsg.requestId);
- pReqMsg->sessionId = pAdapter->sessionId;
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Session Id (%d)"), pReqMsg->sessionId);
+ reqMsg.sessionId = pAdapter->sessionId;
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Session Id (%d)"), reqMsg.sessionId);
/* Parse and fetch flush parameter */
if (!tb
@@ -2993,22 +2998,20 @@
hddLog(VOS_TRACE_LEVEL_ERROR, FL("attr flush failed"));
goto failed;
}
- pReqMsg->flush = nla_get_u8(
+ reqMsg.flush = nla_get_u8(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_GET_CACHED_SCAN_RESULTS_CONFIG_PARAM_FLUSH]);
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Flush (%d)"), pReqMsg->flush);
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Flush (%d)"), reqMsg.flush);
- status = sme_getCachedResults(pHddCtx->hHal, pReqMsg);
+ status = sme_getCachedResults(pHddCtx->hHal, &reqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
hddLog(VOS_TRACE_LEVEL_ERROR,
FL("sme_getCachedResults failed(err=%d)"), status);
- vos_mem_free(pReqMsg);
return -EINVAL;
}
return 0;
failed:
- vos_mem_free(pReqMsg);
return -EINVAL;
}
@@ -3036,6 +3039,15 @@
FL("HDD context is not valid"));
return -EINVAL;
}
+ /* check the EXTScan Capability */
+ if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
+ (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)))
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("EXTScan not enabled/supported by Firmware"));
+ return -EINVAL;
+ }
+
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
wlan_hdd_extscan_config_policy)) {
@@ -3048,7 +3060,6 @@
hddLog(VOS_TRACE_LEVEL_ERROR, FL("attr request id failed"));
return -EINVAL;
}
-
pReqMsg = (tpSirEXTScanSetBssidHotListReqParams)
vos_mem_malloc(sizeof(*pReqMsg));
if (!pReqMsg) {
@@ -3056,6 +3067,7 @@
return -ENOMEM;
}
+
pReqMsg->requestId = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_REQUEST_ID]);
hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), pReqMsg->requestId);
@@ -3130,6 +3142,8 @@
return -EINVAL;
}
+ vos_mem_free(pReqMsg);
+
return 0;
fail:
@@ -3161,6 +3175,15 @@
FL("HDD context is not valid"));
return -EINVAL;
}
+ /* check the EXTScan Capability */
+ if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
+ (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)))
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("EXTScan not enabled/supported by Firmware"));
+ return -EINVAL;
+ }
+
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
wlan_hdd_extscan_config_policy)) {
@@ -3173,14 +3196,15 @@
hddLog(VOS_TRACE_LEVEL_ERROR, FL("attr request id failed"));
return -EINVAL;
}
-
pReqMsg = (tpSirEXTScanSetSignificantChangeReqParams)
- vos_mem_malloc(sizeof(*pReqMsg));
+ vos_mem_malloc(sizeof(*pReqMsg));
if (!pReqMsg) {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("vos_mem_malloc failed"));
- return -ENOMEM;
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("vos_mem_malloc failed"));
+ return -ENOMEM;
}
+
+
pReqMsg->requestId = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_REQUEST_ID]);
hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), pReqMsg->requestId);
@@ -3285,7 +3309,7 @@
vos_mem_free(pReqMsg);
return -EINVAL;
}
-
+ vos_mem_free(pReqMsg);
hddLog(VOS_TRACE_LEVEL_ERROR, FL(" Exiting"));
return 0;
@@ -3316,6 +3340,15 @@
FL("HDD context is not valid"));
return -EINVAL;
}
+ /* check the EXTScan Capability */
+ if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
+ (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)))
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("EXTScan not enabled/supported by Firmware"));
+ return -EINVAL;
+ }
+
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
wlan_hdd_extscan_config_policy)) {
@@ -3381,7 +3414,7 @@
struct wireless_dev *wdev,
void *data, int dataLen)
{
- tpSirEXTScanStartReqParams pReqMsg = NULL;
+ tpSirEXTScanStartReqParams pReqMsg = NULL;
struct net_device *dev = wdev->netdev;
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
hdd_context_t *pHddCtx = wiphy_priv(wiphy);
@@ -3403,6 +3436,15 @@
FL("HDD context is not valid"));
return -EINVAL;
}
+ /* check the EXTScan Capability */
+ if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
+ (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)))
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("EXTScan not enabled/supported by Firmware"));
+ return -EINVAL;
+ }
+
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
wlan_hdd_extscan_config_policy)) {
@@ -3416,10 +3458,11 @@
return -EINVAL;
}
- pReqMsg = (tpSirEXTScanStartReqParams) vos_mem_malloc(sizeof(*pReqMsg));
+ pReqMsg = (tpSirEXTScanStartReqParams)
+ vos_mem_malloc(sizeof(*pReqMsg));
if (!pReqMsg) {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("vos_mem_malloc failed"));
- return -ENOMEM;
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("vos_mem_malloc failed"));
+ return -ENOMEM;
}
pReqMsg->requestId = nla_get_u32(
@@ -3595,6 +3638,7 @@
return -EINVAL;
}
+ vos_mem_free(pReqMsg);
return 0;
fail:
@@ -3606,7 +3650,7 @@
struct wireless_dev *wdev,
void *data, int dataLen)
{
- tpSirEXTScanStopReqParams pReqMsg = NULL;
+ tSirEXTScanStopReqParams reqMsg;
struct net_device *dev = wdev->netdev;
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
hdd_context_t *pHddCtx = wiphy_priv(wiphy);
@@ -3620,6 +3664,15 @@
FL("HDD context is not valid"));
return -EINVAL;
}
+ /* check the EXTScan Capability */
+ if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
+ (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)))
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("EXTScan not enabled/supported by Firmware"));
+ return -EINVAL;
+ }
+
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
wlan_hdd_extscan_config_policy)) {
@@ -3633,24 +3686,17 @@
return -EINVAL;
}
- pReqMsg = (tpSirEXTScanStopReqParams) vos_mem_malloc(sizeof(*pReqMsg));
- if (!pReqMsg) {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("vos_mem_malloc failed"));
- return -ENOMEM;
- }
-
- pReqMsg->requestId = nla_get_u32(
+ reqMsg.requestId = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_REQUEST_ID]);
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), pReqMsg->requestId);
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), reqMsg.requestId);
- pReqMsg->sessionId = pAdapter->sessionId;
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Session Id (%d)"), pReqMsg->sessionId);
+ reqMsg.sessionId = pAdapter->sessionId;
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Session Id (%d)"), reqMsg.sessionId);
- status = sme_EXTScanStop(pHddCtx->hHal, pReqMsg);
+ status = sme_EXTScanStop(pHddCtx->hHal, &reqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
hddLog(VOS_TRACE_LEVEL_ERROR,
FL("sme_EXTScanStop failed(err=%d)"), status);
- vos_mem_free(pReqMsg);
return -EINVAL;
}
@@ -3661,7 +3707,7 @@
struct wireless_dev *wdev,
void *data, int dataLen)
{
- tpSirEXTScanResetBssidHotlistReqParams pReqMsg = NULL;
+ tSirEXTScanResetBssidHotlistReqParams reqMsg;
struct net_device *dev = wdev->netdev;
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
hdd_context_t *pHddCtx = wiphy_priv(wiphy);
@@ -3675,6 +3721,15 @@
FL("HDD context is not valid"));
return -EINVAL;
}
+ /* check the EXTScan Capability */
+ if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
+ (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)))
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("EXTScan not enabled/supported by Firmware"));
+ return -EINVAL;
+ }
+
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
wlan_hdd_extscan_config_policy)) {
@@ -3688,25 +3743,17 @@
return -EINVAL;
}
- pReqMsg = (tpSirEXTScanResetBssidHotlistReqParams)
- vos_mem_malloc(sizeof(*pReqMsg));
- if (!pReqMsg) {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("vos_mem_malloc failed"));
- return -ENOMEM;
- }
-
- pReqMsg->requestId = nla_get_u32(
+ reqMsg.requestId = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_REQUEST_ID]);
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), pReqMsg->requestId);
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), reqMsg.requestId);
- pReqMsg->sessionId = pAdapter->sessionId;
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Session Id (%d)"), pReqMsg->sessionId);
+ reqMsg.sessionId = pAdapter->sessionId;
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Session Id (%d)"), reqMsg.sessionId);
- status = sme_ResetBssHotlist(pHddCtx->hHal, pReqMsg);
+ status = sme_ResetBssHotlist(pHddCtx->hHal, &reqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
hddLog(VOS_TRACE_LEVEL_ERROR,
FL("sme_ResetBssHotlist failed(err=%d)"), status);
- vos_mem_free(pReqMsg);
return -EINVAL;
}
@@ -3718,7 +3765,7 @@
struct wireless_dev *wdev,
void *data, int dataLen)
{
- tpSirEXTScanResetSignificantChangeReqParams pReqMsg = NULL;
+ tSirEXTScanResetSignificantChangeReqParams reqMsg;
struct net_device *dev = wdev->netdev;
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
hdd_context_t *pHddCtx = wiphy_priv(wiphy);
@@ -3733,6 +3780,15 @@
FL("HDD context is not valid"));
return -EINVAL;
}
+ /* check the EXTScan Capability */
+ if ( (TRUE != pHddCtx->cfg_ini->fEnableEXTScan) ||
+ (TRUE != sme_IsFeatureSupportedByFW(EXTENDED_SCAN)))
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("EXTScan not enabled/supported by Firmware"));
+ return -EINVAL;
+ }
+
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, dataLen,
wlan_hdd_extscan_config_policy)) {
@@ -3746,25 +3802,18 @@
return -EINVAL;
}
- pReqMsg = (tpSirEXTScanResetSignificantChangeReqParams)
- vos_mem_malloc(sizeof(*pReqMsg));
- if (!pReqMsg) {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("vos_mem_malloc failed"));
- return -ENOMEM;
- }
- pReqMsg->requestId = nla_get_u32(
+ reqMsg.requestId = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_REQUEST_ID]);
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), pReqMsg->requestId);
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Req Id (%d)"), reqMsg.requestId);
- pReqMsg->sessionId = pAdapter->sessionId;
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Session Id (%d)"), pReqMsg->sessionId);
+ reqMsg.sessionId = pAdapter->sessionId;
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Session Id (%d)"), reqMsg.sessionId);
- status = sme_ResetSignificantChange(pHddCtx->hHal, pReqMsg);
+ status = sme_ResetSignificantChange(pHddCtx->hHal, &reqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
hddLog(VOS_TRACE_LEVEL_ERROR,
FL("sme_ResetSignificantChange failed(err=%d)"), status);
- vos_mem_free(pReqMsg);
return -EINVAL;
}
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index cc61609..8c7b20f 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -108,6 +108,9 @@
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
LINK_LAYER_STATS_MEAS = 40,
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ EXTENDED_SCAN = 42,
+#endif
//MAX_FEATURE_SUPPORTED = 128
} placeHolderInCapBitmap;
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index a111913..c337320 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -537,7 +537,7 @@
vos_mem_copy(&tEXTScanFullScanResult.ap.bssid,
pHdr->bssId, sizeof(tSirMacAddr));
- limPrintMacAddr(pMac, pHdr->bssId, LOGE);
+ limPrintMacAddr(pMac, pHdr->bssId, LOG2);
rfBand = WDA_GET_RX_RFBAND(pRxPacketInfo);
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index bfbdc5a..2e0220f 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -11046,12 +11046,26 @@
VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
vos_msg_t vosMessage;
+ tSirGetEXTScanCapabilitiesReqParams *pGetEXTScanCapabilitiesReq;
+
+ pGetEXTScanCapabilitiesReq =
+ vos_mem_malloc(sizeof(*pGetEXTScanCapabilitiesReq));
+ if ( !pGetEXTScanCapabilitiesReq)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Not able to allocate memory for "
+ "WDA_EXTSCAN_GET_CAPABILITIES_REQ",
+ __func__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ *pGetEXTScanCapabilitiesReq = *pReq;
MTRACE(vos_trace(VOS_MODULE_ID_SME,
TRACE_CODE_SME_RX_HDD_EXTSCAN_GET_CAPABILITIES, NO_SESSION, 0));
if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) {
/* Serialize the req through MC thread */
- vosMessage.bodyptr = pReq;
+ vosMessage.bodyptr = pGetEXTScanCapabilitiesReq;
vosMessage.type = WDA_EXTSCAN_GET_CAPABILITIES_REQ;
vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage);
if (!VOS_IS_STATUS_SUCCESS(vosStatus))
@@ -11076,12 +11090,26 @@
VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
vos_msg_t vosMessage;
+ tSirEXTScanStartReqParams *pextScanStartReq;
+
+ pextScanStartReq = vos_mem_malloc(sizeof(*pextScanStartReq));
+ if ( !pextScanStartReq)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Not able to allocate memory for "
+ "WDA_EXTSCAN_START_REQ",
+ __func__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ *pextScanStartReq = *pStartCmd;
+
MTRACE(vos_trace(VOS_MODULE_ID_SME,
TRACE_CODE_SME_RX_HDD_EXTSCAN_START, NO_SESSION, 0));
if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) {
/* Serialize the req through MC thread */
- vosMessage.bodyptr = pStartCmd;
+ vosMessage.bodyptr = pextScanStartReq;
vosMessage.type = WDA_EXTSCAN_START_REQ;
vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage);
if (!VOS_IS_STATUS_SUCCESS(vosStatus))
@@ -11105,13 +11133,26 @@
VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
vos_msg_t vosMessage;
+ tSirEXTScanStopReqParams *pEXTScanStopReq;
+
+ pEXTScanStopReq = vos_mem_malloc(sizeof(*pEXTScanStopReq));
+ if ( !pEXTScanStopReq)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Not able to allocate memory for "
+ "WDA_EXTSCAN_STOP_REQ",
+ __func__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ *pEXTScanStopReq = *pStopReq;
MTRACE(vos_trace(VOS_MODULE_ID_SME,
TRACE_CODE_SME_RX_HDD_EXTSCAN_STOP, NO_SESSION, 0));
if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme)))
{
/* Serialize the req through MC thread */
- vosMessage.bodyptr = pStopReq;
+ vosMessage.bodyptr = pEXTScanStopReq;
vosMessage.type = WDA_EXTSCAN_STOP_REQ;
vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage);
if (!VOS_IS_STATUS_SUCCESS(vosStatus))
@@ -11137,12 +11178,26 @@
VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
vos_msg_t vosMessage;
+ tSirEXTScanSetBssidHotListReqParams *pEXTScanSetBssidHotlistReq;
+
+ pEXTScanSetBssidHotlistReq =
+ vos_mem_malloc(sizeof(*pEXTScanSetBssidHotlistReq));
+ if ( !pEXTScanSetBssidHotlistReq)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Not able to allocate memory for "
+ "WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ",
+ __func__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ *pEXTScanSetBssidHotlistReq = *pSetHotListReq;
MTRACE(vos_trace(VOS_MODULE_ID_SME,
TRACE_CODE_SME_RX_HDD_EXTSCAN_SET_BSS_HOTLIST, NO_SESSION, 0));
if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) {
/* Serialize the req through MC thread */
- vosMessage.bodyptr = pSetHotListReq;
+ vosMessage.bodyptr = pEXTScanSetBssidHotlistReq;
vosMessage.type = WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ;
vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage);
if (!VOS_IS_STATUS_SUCCESS(vosStatus))
@@ -11168,12 +11223,26 @@
VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
vos_msg_t vosMessage;
+ tSirEXTScanResetBssidHotlistReqParams *pEXTScanHotlistResetReq;
+
+ pEXTScanHotlistResetReq = vos_mem_malloc(sizeof(*pEXTScanHotlistResetReq));
+ if ( !pEXTScanHotlistResetReq)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Not able to allocate memory for "
+ "WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ",
+ __func__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ *pEXTScanHotlistResetReq = *pResetReq;
+
MTRACE(vos_trace(VOS_MODULE_ID_SME,
TRACE_CODE_SME_RX_HDD_EXTSCAN_RESET_BSS_HOTLIST, NO_SESSION, 0));
if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) {
/* Serialize the req through MC thread */
- vosMessage.bodyptr = pResetReq;
+ vosMessage.bodyptr = pEXTScanHotlistResetReq;
vosMessage.type = WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ;
vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage);
if (!VOS_IS_STATUS_SUCCESS(vosStatus))
@@ -11198,12 +11267,27 @@
VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
vos_msg_t vosMessage;
+ tSirEXTScanSetSignificantChangeReqParams *pEXTScanSetSignificantReq;
+
+ pEXTScanSetSignificantReq = vos_mem_malloc(sizeof(*pEXTScanSetSignificantReq));
+ if ( !pEXTScanSetSignificantReq)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Not able to allocate memory for "
+ "WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ",
+ __func__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ *pEXTScanSetSignificantReq = *pSetSignificantChangeReq;
+
+
MTRACE(vos_trace(VOS_MODULE_ID_SME,
TRACE_CODE_SME_RX_HDD_EXTSCAN_SET_SIGNF_CHANGE, NO_SESSION, 0));
if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) {
/* Serialize the req through MC thread */
- vosMessage.bodyptr = pSetSignificantChangeReq;
+ vosMessage.bodyptr = pEXTScanSetSignificantReq;
vosMessage.type = WDA_EXTSCAN_SET_SIGNF_RSSI_CHANGE_REQ;
vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage);
if (!VOS_IS_STATUS_SUCCESS(vosStatus))
@@ -11228,12 +11312,26 @@
VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
vos_msg_t vosMessage;
+ tSirEXTScanResetSignificantChangeReqParams *pEXTScanResetSignificantReq;
+
+ pEXTScanResetSignificantReq =
+ vos_mem_malloc(sizeof(*pEXTScanResetSignificantReq));
+ if ( !pEXTScanResetSignificantReq)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Not able to allocate memory for "
+ "WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ",
+ __func__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ *pEXTScanResetSignificantReq = *pResetReq;
MTRACE(vos_trace(VOS_MODULE_ID_SME,
TRACE_CODE_SME_RX_HDD_EXTSCAN_RESET_SIGNF_CHANGE, NO_SESSION, 0));
if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) {
/* Serialize the req through MC thread */
- vosMessage.bodyptr = pResetReq;
+ vosMessage.bodyptr = pEXTScanResetSignificantReq;
vosMessage.type = WDA_EXTSCAN_RESET_SIGNF_RSSI_CHANGE_REQ;
vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage);
if (!VOS_IS_STATUS_SUCCESS(vosStatus))
@@ -11258,12 +11356,27 @@
VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
vos_msg_t vosMessage;
+ tSirEXTScanGetCachedResultsReqParams *pEXTScanCachedResultsReq;
+
+ pEXTScanCachedResultsReq =
+ vos_mem_malloc(sizeof(*pEXTScanCachedResultsReq));
+ if ( !pEXTScanCachedResultsReq)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Not able to allocate memory for "
+ "WDA_EXTSCAN_GET_CACHED_RESULTS_REQ",
+ __func__);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ *pEXTScanCachedResultsReq = *pCachedResultsReq;
+
MTRACE(vos_trace(VOS_MODULE_ID_SME,
TRACE_CODE_SME_RX_HDD_EXTSCAN_GET_CACHED_RESULTS, NO_SESSION, 0));
if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) {
/* Serialize the req through MC thread */
- vosMessage.bodyptr = pCachedResultsReq;
+ vosMessage.bodyptr = pEXTScanCachedResultsReq;
vosMessage.type = WDA_EXTSCAN_GET_CACHED_RESULTS_REQ;
vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage);
if (!VOS_IS_STATUS_SUCCESS(vosStatus))
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index ce2733b..309aa0e 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -180,6 +180,12 @@
#else
,FEATURE_NOT_SUPPORTED //40
#endif
+ ,FEATURE_NOT_SUPPORTED //41
+#ifdef WLAN_FEATURE_EXTSCAN
+ ,EXTENDED_SCAN //42
+#else
+ ,FEATURE_NOT_SUPPORTED //42
+#endif
};
@@ -1352,6 +1358,11 @@
pCapStr += strlen("LINK_LAYER_STATS_MEAS");
break;
#endif
+#ifdef WLAN_FEATURE_EXTSCAN
+ case EXTENDED_SCAN: snprintf(pCapStr, sizeof("EXTENDED_SCAN"), "%s", "EXTENDED_SCAN");
+ pCapStr += strlen("EXTENDED_SCAN");
+ break;
+#endif
}
*pCapStr++ = ',';