summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 );