summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKalikinkar dhara <c_kaliki@qca.qualcomm.com>2014-06-05 21:05:38 -0700
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-06-11 12:23:29 -0700
commit664196ce8abcc162cbda5023535d5d960d7c1189 (patch)
tree8fcad59bbb911b53999700572db421fbe5d6fd12
parentca74728f45e1e618a637b0657cd5ec0e90e083ec (diff)
qcacld: HDD: Sessionized Probe Rsp update for AP+AP
For AP+AP, additional IE coming from HDD were passed through a common wlan_cfg buffer. This will cause wrong values to be read by consuming modules for multiple session case (AP+AP). To fix this, additional IE are passed to consumer modules via sessionized buffer thus avoiding any conflict. Change-Id: I5a865e920d1bc0c31e9a7d38946653f5d998a82d CRs-fixed: 649786
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c221
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c52
2 files changed, 63 insertions, 210 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 538eef5e8b75..8c0a47bd06b5 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -1714,8 +1714,10 @@ static int wlan_hdd_cfg80211_update_apies(hdd_adapter_t* pHostapdAdapter,
{
v_U8_t *genie;
v_U8_t total_ielen = 0;
- v_U8_t addIE[1] = {0};
int ret = 0;
+ tsap_Config_t *pConfig;
+
+ pConfig = &pHostapdAdapter->sessionCtx.ap.sapConfig;
genie = vos_mem_malloc(MAX_GENIE_LEN);
@@ -1778,124 +1780,27 @@ static int wlan_hdd_cfg80211_update_apies(hdd_adapter_t* pHostapdAdapter,
}
// Added for ProResp IE
- if ( (params->proberesp_ies != NULL) && (params->proberesp_ies_len != 0) )
- {
- u16 rem_probe_resp_ie_len = params->proberesp_ies_len;
- u8 probe_rsp_ie_len[3] = {0};
- u8 counter = 0;
- /* Check Probe Resp Length if it is greater then 255 then Store
- Probe Resp IEs into WNI_CFG_PROBE_RSP_ADDNIE_DATA1 &
- WNI_CFG_PROBE_RSP_ADDNIE_DATA2 CFG Variable As We are not able
- Store More then 255 bytes into One Variable.
- */
- while ((rem_probe_resp_ie_len > 0) && (counter < 3))
- {
- if (rem_probe_resp_ie_len > MAX_CFG_STRING_LEN)
- {
- probe_rsp_ie_len[counter++] = MAX_CFG_STRING_LEN;
- rem_probe_resp_ie_len -= MAX_CFG_STRING_LEN;
- }
- else
- {
- probe_rsp_ie_len[counter++] = rem_probe_resp_ie_len;
- rem_probe_resp_ie_len = 0;
- }
- }
-
- rem_probe_resp_ie_len = 0;
-
- if (probe_rsp_ie_len[0] > 0)
- {
- if (ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal,
- WNI_CFG_PROBE_RSP_ADDNIE_DATA1,
- (tANI_U8*)&params->proberesp_ies[rem_probe_resp_ie_len],
- probe_rsp_ie_len[0], NULL,
- eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
- {
- hddLog(LOGE,
- "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA1 to CCM");
- ret = -EINVAL;
- goto done;
- }
- rem_probe_resp_ie_len += probe_rsp_ie_len[0];
- }
-
- if (probe_rsp_ie_len[1] > 0)
- {
- if (ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal,
- WNI_CFG_PROBE_RSP_ADDNIE_DATA2,
- (tANI_U8*)&params->proberesp_ies[rem_probe_resp_ie_len],
- probe_rsp_ie_len[1], NULL,
- eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
- {
- hddLog(LOGE,
- "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA2 to CCM");
- ret = -EINVAL;
- goto done;
- }
- rem_probe_resp_ie_len += probe_rsp_ie_len[1];
- }
-
- if (probe_rsp_ie_len[2] > 0)
- {
- if (ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal,
- WNI_CFG_PROBE_RSP_ADDNIE_DATA3,
- (tANI_U8*)&params->proberesp_ies[rem_probe_resp_ie_len],
- probe_rsp_ie_len[2], NULL,
- eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
- {
- hddLog(LOGE,
- "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA3 to CCM");
- ret = -EINVAL;
- goto done;
- }
- rem_probe_resp_ie_len += probe_rsp_ie_len[2];
- }
-
- if (probe_rsp_ie_len[1] == 0 )
- {
- if ( eHAL_STATUS_FAILURE == ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal,
- WNI_CFG_PROBE_RSP_ADDNIE_DATA2, (tANI_U8*)addIE, 0, NULL,
- eANI_BOOLEAN_FALSE) )
- {
- hddLog(LOGE,
- "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA2 to CCM");
- }
- }
-
- if (probe_rsp_ie_len[2] == 0 )
- {
- if ( eHAL_STATUS_FAILURE == ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal,
- WNI_CFG_PROBE_RSP_ADDNIE_DATA3, (tANI_U8*)addIE, 0, NULL,
- eANI_BOOLEAN_FALSE) )
- {
- hddLog(LOGE,
- "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA3 to CCM");
- }
- }
-
- if (ccmCfgSetInt((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal,
- WNI_CFG_PROBE_RSP_ADDNIE_FLAG, 1,NULL,
- test_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags) ?
- eANI_BOOLEAN_TRUE : eANI_BOOLEAN_FALSE)
- == eHAL_STATUS_FAILURE)
+ if (test_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags))
+ {
+ if (sme_UpdateAddIE(WLAN_HDD_GET_HAL_CTX(pHostapdAdapter),
+ pHostapdAdapter->sessionId,
+ pHostapdAdapter->macAddressCurrent.bytes,
+ (tANI_U8*)params->proberesp_ies,
+ params->proberesp_ies_len,
+ VOS_FALSE) == eHAL_STATUS_FAILURE)
{
- hddLog(LOGE,
- "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_FLAG to CCM");
- ret = -EINVAL;
- goto done;
+ hddLog(LOGE, FL("Could not pass on Probe Resp Add Ie"));
+ ret = -EINVAL;
+ goto done;
}
+ WLANSAP_ResetSapConfigAddIE(pConfig);
}
else
{
- // Reset WNI_CFG_PROBE_RSP Flags
- wlan_hdd_reset_prob_rspies(pHostapdAdapter);
-
- hddLog(VOS_TRACE_LEVEL_INFO,
- "%s: No Probe Response IE received in set beacon",
- __func__);
+ WLANSAP_UpdateSapConfigAddIE(pConfig,
+ params->proberesp_ies,
+ params->proberesp_ies_len);
}
-
// Added for AssocResp IE
if ( (params->assocresp_ies != NULL) && (params->assocresp_ies_len != 0) )
{
@@ -2654,6 +2559,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
if ( 0 != wlan_hdd_cfg80211_update_apies(pHostapdAdapter, params) )
{
hddLog(LOGE, FL("SAP Not able to set AP IEs"));
+ WLANSAP_ResetSapConfigAddIE(pConfig);
return -EINVAL;
}
@@ -2686,6 +2592,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
if(test_bit(SOFTAP_BSS_STARTED, &pHostapdAdapter->event_flags))
{
+ WLANSAP_ResetSapConfigAddIE(pConfig);
//Bss already started. just return.
//TODO Probably it should update some beacon params.
hddLog( LOGE, "Bss Already started...Ignore the request");
@@ -2735,6 +2642,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
pSapEventCallback, pConfig, (v_PVOID_t)pHostapdAdapter->dev);
if (!VOS_IS_STATUS_SUCCESS(status))
{
+ WLANSAP_ResetSapConfigAddIE(pConfig);
hddLog(LOGE,FL("SAP Start Bss fail"));
return -EINVAL;
}
@@ -2744,6 +2652,8 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
status = vos_wait_single_event(&pHostapdState->vosEvent, 10000);
+ WLANSAP_ResetSapConfigAddIE(pConfig);
+
if (!VOS_IS_STATUS_SUCCESS(status))
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
@@ -6644,86 +6554,15 @@ int wlan_hdd_cfg80211_set_ie( hdd_adapter_t *pAdapter,
if ( (NULL != (genie - 2)) && (0 != eLen + 2) )
{
u16 rem_probe_resp_ie_len = eLen + 2;
- u8 probe_rsp_ie_len[3] = {0};
- u8 counter = 0;
-
- /* Check Probe Resp Length if it is greater then 255 then
- Store Probe Rsp IEs into WNI_CFG_PROBE_RSP_ADDNIE_DATA1
- & WNI_CFG_PROBE_RSP_ADDNIE_DATA2 CFG Variable As We are
- not able Store More then 255 bytes into One Variable */
-
- while ((rem_probe_resp_ie_len > 0) && (counter < 3))
- {
- if (rem_probe_resp_ie_len > MAX_CFG_STRING_LEN)
- {
- probe_rsp_ie_len[counter++] = MAX_CFG_STRING_LEN;
- rem_probe_resp_ie_len -= MAX_CFG_STRING_LEN;
- }
- else
- {
- probe_rsp_ie_len[counter++] = rem_probe_resp_ie_len;
- rem_probe_resp_ie_len = 0;
- }
- }
-
- rem_probe_resp_ie_len = 0;
-
- if (probe_rsp_ie_len[0] > 0)
- {
- if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter),
- WNI_CFG_PROBE_RSP_ADDNIE_DATA1,
- (tANI_U8*)(genie - 2),
- probe_rsp_ie_len[0], NULL,
- eANI_BOOLEAN_FALSE)
- == eHAL_STATUS_FAILURE)
- {
- hddLog(LOGE,
- "Could not pass"
- "on WNI_CFG_PROBE_RSP_ADDNIE_DATA1 to CCM");
- }
- rem_probe_resp_ie_len += probe_rsp_ie_len[0];
- }
-
- if (probe_rsp_ie_len[1] > 0)
+ if (sme_UpdateAddIE(WLAN_HDD_GET_HAL_CTX(pAdapter),
+ pAdapter->sessionId,
+ pAdapter->macAddressCurrent.bytes,
+ (tANI_U8*)(genie - 2),
+ rem_probe_resp_ie_len,
+ VOS_TRUE) == eHAL_STATUS_FAILURE)
{
- if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter),
- WNI_CFG_PROBE_RSP_ADDNIE_DATA2,
- (tANI_U8*)(genie - (2 + rem_probe_resp_ie_len)),
- probe_rsp_ie_len[1], NULL,
- eANI_BOOLEAN_FALSE)
- == eHAL_STATUS_FAILURE)
- {
- hddLog(LOGE,
- "Could not pass"
- "on WNI_CFG_PROBE_RSP_ADDNIE_DATA2 to CCM");
- }
- rem_probe_resp_ie_len += probe_rsp_ie_len[1];
+ hddLog(LOGE, "Could not pass ADDNIE data to PE");
}
-
- if (probe_rsp_ie_len[2] > 0)
- {
- if (ccmCfgSetStr(WLAN_HDD_GET_HAL_CTX(pAdapter),
- WNI_CFG_PROBE_RSP_ADDNIE_DATA3,
- (tANI_U8*)(genie - (2 + rem_probe_resp_ie_len)),
- probe_rsp_ie_len[2], NULL,
- eANI_BOOLEAN_FALSE)
- == eHAL_STATUS_FAILURE)
- {
- hddLog(LOGE,
- "Could not pass"
- "on WNI_CFG_PROBE_RSP_ADDNIE_DATA3 to CCM");
- }
- rem_probe_resp_ie_len += probe_rsp_ie_len[2];
- }
-
- if (ccmCfgSetInt(WLAN_HDD_GET_HAL_CTX(pAdapter),
- WNI_CFG_PROBE_RSP_ADDNIE_FLAG, 1,NULL,
- eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
- {
- hddLog(LOGE,
- "Could not pass"
- "on WNI_CFG_PROBE_RSP_ADDNIE_FLAG to CCM");
- }
}
else
{
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index ef7392956183..ddebd777538d 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -8782,30 +8782,44 @@ VOS_STATUS hdd_close_all_adapters( hdd_context_t *pHddCtx )
void wlan_hdd_reset_prob_rspies(hdd_adapter_t* pHostapdAdapter)
{
- v_U8_t addIE[1] = {0};
-
- if ( eHAL_STATUS_FAILURE == ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal,
- WNI_CFG_PROBE_RSP_ADDNIE_DATA1,(tANI_U8*)addIE, 0, NULL,
- eANI_BOOLEAN_FALSE) )
+ tANI_U8 *bssid = NULL;
+ switch (pHostapdAdapter->device_mode)
+ {
+ case WLAN_HDD_INFRA_STATION:
+ case WLAN_HDD_P2P_CLIENT:
{
- hddLog(LOGE,
- "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA1 to CCM");
+ hdd_station_ctx_t * pHddStaCtx =
+ WLAN_HDD_GET_STATION_CTX_PTR(pHostapdAdapter);
+ bssid = (tANI_U8*)&pHddStaCtx->conn_info.bssId;
+ break;
}
-
- if ( eHAL_STATUS_FAILURE == ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal,
- WNI_CFG_PROBE_RSP_ADDNIE_DATA2, (tANI_U8*)addIE, 0, NULL,
- eANI_BOOLEAN_FALSE) )
+ case WLAN_HDD_SOFTAP:
+ case WLAN_HDD_P2P_GO:
+ case WLAN_HDD_IBSS:
{
- hddLog(LOGE,
- "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA2 to CCM");
+ bssid = pHostapdAdapter->macAddressCurrent.bytes;
+ break;
}
-
- if ( eHAL_STATUS_FAILURE == ccmCfgSetStr((WLAN_HDD_GET_CTX(pHostapdAdapter))->hHal,
- WNI_CFG_PROBE_RSP_ADDNIE_DATA3, (tANI_U8*)addIE, 0, NULL,
- eANI_BOOLEAN_FALSE) )
+ case WLAN_HDD_MONITOR:
+ case WLAN_HDD_FTM:
+ case WLAN_HDD_P2P_DEVICE:
+ default:
+ /*
+ * wlan_hdd_reset_prob_rspies should not have been called
+ * for these kind of devices
+ */
+ hddLog(LOGE, FL("Unexpected request for the current device type %d"),
+ pHostapdAdapter->device_mode);
+ return;
+ }
+ if (sme_UpdateAddIE(WLAN_HDD_GET_HAL_CTX(pHostapdAdapter),
+ pHostapdAdapter->sessionId,
+ bssid,
+ NULL,
+ 0,
+ VOS_TRUE) == eHAL_STATUS_FAILURE)
{
- hddLog(LOGE,
- "Could not pass on WNI_CFG_PROBE_RSP_ADDNIE_DATA3 to CCM");
+ hddLog(LOGE, "Could not pass on Additional IE data to PE");
}
}