diff options
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 27 | ||||
| -rw-r--r-- | CORE/SAP/inc/sapApi.h | 5 | ||||
| -rw-r--r-- | CORE/SAP/src/sapFsm.c | 16 | ||||
| -rw-r--r-- | CORE/SME/inc/csrApi.h | 4 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 89 |
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 ); |
