summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAgrawal Ashish <ashishka@qti.qualcomm.com>2016-05-23 18:07:17 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-07-12 15:12:13 +0530
commit329c3375edfcf5c434ed57fdec5dd27229611d8a (patch)
treea30e4c591b5944f059d7334db24dd4c0b57c44dd
parent66249f5e496cdae1b5d1f771b39ca277d70c4e3e (diff)
qcacld-2.0: Populate correct supported rates from hostapd.conf file
Currently driver populate default supported and extended supported rates in beacons even if hostapd.conf file wants to change supported and extended supported rates. Fix this by parsing beacon head and tail to get supported and extended rates and populate them in sap config. Change-Id: I3226438b908a96f1b1bd3c2968a0c20eef81a799 CRs-Fixed: 1035768
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c27
-rw-r--r--CORE/SAP/inc/sapApi.h5
-rw-r--r--CORE/SAP/src/sapFsm.c16
-rw-r--r--CORE/SME/inc/csrApi.h4
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c89
5 files changed, 79 insertions, 62 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 799f89c9d963..7c731a5a8488 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -13934,6 +13934,33 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
}
}
+ pIe = wlan_hdd_cfg80211_get_ie_ptr(&pMgmt_frame->u.beacon.variable[0],
+ pBeacon->head_len, WLAN_EID_SUPP_RATES);
+ if (pIe != NULL) {
+ pIe++;
+ pConfig->supported_rates.numRates = pIe[0];
+ pIe++;
+ for (i = 0; i < pConfig->supported_rates.numRates; i++)
+ if (pIe[i]) {
+ pConfig->supported_rates.rate[i]= pIe[i];
+ hddLog(LOG1, FL("Configured Supported rate is %2x"),
+ pConfig->supported_rates.rate[i]);
+ }
+ }
+ pIe = wlan_hdd_cfg80211_get_ie_ptr(pBeacon->tail, pBeacon->tail_len,
+ WLAN_EID_EXT_SUPP_RATES);
+ if (pIe != NULL) {
+ pIe++;
+ pConfig->extended_rates.numRates = pIe[0];
+ pIe++;
+ for (i = 0; i < pConfig->extended_rates.numRates; i++)
+ if (pIe[i]){
+ pConfig->extended_rates.rate[i]= pIe[i];
+ hddLog(LOG1, FL("Configured extended Supported rate is %2x"),
+ pConfig->extended_rates.rate[i]);
+ }
+ }
+
wlan_hdd_set_sapHwmode(pHostapdAdapter);
if (pHddCtx->cfg_ini->sap_force_11n_for_11ac) {
diff --git a/CORE/SAP/inc/sapApi.h b/CORE/SAP/inc/sapApi.h
index c64cb1bf7b79..9a8f915f8725 100644
--- a/CORE/SAP/inc/sapApi.h
+++ b/CORE/SAP/inc/sapApi.h
@@ -543,7 +543,6 @@ typedef struct sap_Config {
v_PVOID_t pProbeRespBcnIEsBuffer; /* buffer for addn ies comes from hostapd*/
uint8_t sap_dot11mc; /* Specify if 11MC is enabled or disabled*/
enum sap_acs_dfs_mode acs_dfs_mode;
-
uint16_t beacon_tx_rate;
uint8_t *vendor_ie;
enum vendor_ie_access_policy vendor_ie_access_policy;
@@ -552,8 +551,8 @@ typedef struct sap_Config {
uint8_t short_retry_limit;
uint8_t long_retry_limit;
uint8_t ampdu_size;
- tSirMacRateSet supp_rate_set;
- tSirMacRateSet extended_rate_set;
+ tSirMacRateSet supported_rates;
+ tSirMacRateSet extended_rates;
} tsap_Config_t;
#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c
index f85bf9c34ffd..7d5d2390cc99 100644
--- a/CORE/SAP/src/sapFsm.c
+++ b/CORE/SAP/src/sapFsm.c
@@ -4137,6 +4137,22 @@ sapconvertToCsrProfile(tsap_Config_t *pconfig_params, eCsrRoamBssType bssType, t
}
profile->sap_dot11mc = pconfig_params->sap_dot11mc;
+ if (pconfig_params->supported_rates.numRates) {
+ vos_mem_copy(profile->supported_rates.rate,
+ pconfig_params->supported_rates.rate,
+ pconfig_params->supported_rates.numRates);
+ profile->supported_rates.numRates =
+ pconfig_params->supported_rates.numRates;
+ }
+
+ if (pconfig_params->extended_rates.numRates) {
+ vos_mem_copy(profile->extended_rates.rate,
+ pconfig_params->extended_rates.rate,
+ pconfig_params->extended_rates.numRates);
+ profile->extended_rates.numRates =
+ pconfig_params->extended_rates.numRates;
+ }
+
return eSAP_STATUS_SUCCESS; /* Success. */
}
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 953a54022542..3f7f473334b2 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1018,8 +1018,8 @@ typedef struct tagCsrRoamProfile
uint8_t sap_dot11mc;
bool do_not_roam;
uint16_t beacon_tx_rate;
- tSirMacRateSet supp_rate_set;
- tSirMacRateSet extended_rate_set;
+ tSirMacRateSet supported_rates;
+ tSirMacRateSet extended_rates;
}tCsrRoamProfile;
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 9873b8884de3..6f65413a57e9 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -6970,6 +6970,20 @@ eHalStatus csrRoamCopyProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pDstProfile,
sizeof(tSirAddIeParams));
pDstProfile->beacon_tx_rate = pSrcProfile->beacon_tx_rate;
+ if (pSrcProfile->supported_rates.numRates) {
+ vos_mem_copy(pDstProfile->supported_rates.rate,
+ pSrcProfile->supported_rates.rate,
+ pSrcProfile->supported_rates.numRates);
+ pDstProfile->supported_rates.numRates =
+ pSrcProfile->supported_rates.numRates;
+ }
+ if (pSrcProfile->extended_rates.numRates) {
+ vos_mem_copy(pDstProfile->extended_rates.rate,
+ pSrcProfile->extended_rates.rate,
+ pSrcProfile->extended_rates.numRates);
+ pDstProfile->extended_rates.numRates =
+ pSrcProfile->extended_rates.numRates;
+ }
}while(0);
@@ -12621,23 +12635,30 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf
pParam->extendedRateSet.numRates = 0;
+ if (pProfile->supported_rates.numRates) {
+ pParam->operationalRateSet.numRates =
+ pProfile->supported_rates.numRates;
+ vos_mem_copy(pParam->operationalRateSet.rate,
+ pProfile->supported_rates.rate,
+ pProfile->supported_rates.numRates);
+ }
+
+ if (pProfile->extended_rates.numRates) {
+ pParam->extendedRateSet.numRates =
+ pProfile->extended_rates.numRates;
+ vos_mem_copy(pParam->extendedRateSet.rate,
+ pProfile->extended_rates.rate,
+ pProfile->extended_rates.numRates);
+ }
+
+
+
switch ( nwType )
{
default:
smsLog(pMac, LOGE, FL("sees an unknown pSirNwType (%d)"), nwType);
case eSIR_11A_NW_TYPE:
- pParam->operationalRateSet.numRates = 8;
-
- pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_6 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_9;
- pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_12 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_18;
- pParam->operationalRateSet.rate[4] = SIR_MAC_RATE_24 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[5] = SIR_MAC_RATE_36;
- pParam->operationalRateSet.rate[6] = SIR_MAC_RATE_48;
- pParam->operationalRateSet.rate[7] = SIR_MAC_RATE_54;
-
if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel )
{
channel = csrRoamGetIbssStartChannelNumber50( pMac );
@@ -12650,11 +12671,6 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf
//We only do this here because csrRoamGetPhyModeBandForBss always picks 11a for AUTO
nwType = eSIR_11B_NW_TYPE;
channel = csrRoamGetIbssStartChannelNumber24( pMac );
- pParam->operationalRateSet.numRates = 4;
- pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_1 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_2 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_5_5 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_11 | CSR_DOT11_BASIC_RATE_MASK;
}
}
else
@@ -12664,11 +12680,6 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf
break;
case eSIR_11B_NW_TYPE:
- pParam->operationalRateSet.numRates = 4;
- pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_1 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_2 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_5_5 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_11 | CSR_DOT11_BASIC_RATE_MASK;
if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel )
{
channel = csrRoamGetIbssStartChannelNumber24( pMac );
@@ -12680,42 +12691,6 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf
break;
case eSIR_11G_NW_TYPE:
- /* For P2P Client and P2P GO, disable 11b rates */
- if( (pProfile->csrPersona == VOS_P2P_CLIENT_MODE) ||
- (pProfile->csrPersona == VOS_P2P_GO_MODE) ||
- (eCSR_CFG_DOT11_MODE_11G_ONLY == pParam->uCfgDot11Mode)
- )
- {
- pParam->operationalRateSet.numRates = 8;
-
- pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_6 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_9;
- pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_12 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_18;
- pParam->operationalRateSet.rate[4] = SIR_MAC_RATE_24 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[5] = SIR_MAC_RATE_36;
- pParam->operationalRateSet.rate[6] = SIR_MAC_RATE_48;
- pParam->operationalRateSet.rate[7] = SIR_MAC_RATE_54;
- }
- else
- {
- pParam->operationalRateSet.numRates = 4;
- pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_1 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_2 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_5_5 | CSR_DOT11_BASIC_RATE_MASK;
- pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_11 | CSR_DOT11_BASIC_RATE_MASK;
-
- pParam->extendedRateSet.numRates = 8;
- pParam->extendedRateSet.rate[0] = SIR_MAC_RATE_6;
- pParam->extendedRateSet.rate[1] = SIR_MAC_RATE_9;
- pParam->extendedRateSet.rate[2] = SIR_MAC_RATE_12;
- pParam->extendedRateSet.rate[3] = SIR_MAC_RATE_18;
- pParam->extendedRateSet.rate[4] = SIR_MAC_RATE_24;
- pParam->extendedRateSet.rate[5] = SIR_MAC_RATE_36;
- pParam->extendedRateSet.rate[6] = SIR_MAC_RATE_48;
- pParam->extendedRateSet.rate[7] = SIR_MAC_RATE_54;
- }
-
if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel )
{
channel = csrRoamGetIbssStartChannelNumber24( pMac );