diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2014-09-06 00:59:07 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2014-09-06 00:59:07 -0700 |
| commit | 321efd2e52e2a4cdf378eba487857f8adf36f6d5 (patch) | |
| tree | 08016f6866ceaaa568739b71e0dd41f5625a35c5 | |
| parent | 95b5f88f4905df0b6ea417a04feb4a623eb68cc4 (diff) | |
| parent | 182072e3e38844ea07f5839f4183cf377fa24013 (diff) | |
Merge "Release 1.0.0.185 QCACLD WLAN Driver"
| -rw-r--r-- | CORE/CLD_TXRX/HTT/htt.c | 2 | ||||
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_cfg.h | 8 | ||||
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_main.h | 4 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_assoc.c | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg.c | 20 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 106 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 60 | ||||
| -rwxr-xr-x | CORE/HDD/src/wlan_hdd_main.c | 29 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_wext.c | 36 | ||||
| -rw-r--r-- | CORE/MAC/inc/qwlan_version.h | 4 | ||||
| -rw-r--r-- | CORE/SAP/inc/sapApi.h | 46 | ||||
| -rw-r--r-- | CORE/SAP/src/sapApiLinkCntl.c | 13 | ||||
| -rw-r--r-- | CORE/SAP/src/sapFsm.c | 241 | ||||
| -rw-r--r-- | CORE/SAP/src/sapInternal.h | 8 | ||||
| -rw-r--r-- | CORE/SAP/src/sapModule.c | 101 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 16 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrNeighborRoam.c | 6 | ||||
| -rw-r--r-- | CORE/SYS/legacy/src/system/src/macInitApi.c | 2 | ||||
| -rwxr-xr-x | firmware_bin/WCNSS_qcom_cfg.ini | 4 |
19 files changed, 514 insertions, 194 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt.c b/CORE/CLD_TXRX/HTT/htt.c index c16e6c8d31b6..96cd85ff9abb 100644 --- a/CORE/CLD_TXRX/HTT/htt.c +++ b/CORE/CLD_TXRX/HTT/htt.c @@ -439,8 +439,6 @@ htt_htc_attach(struct htt_pdev_t *pdev) /* Should NOT support credit flow control. */ connect.ConnectionFlags |= HTC_CONNECT_FLAGS_DISABLE_CREDIT_FLOW_CTRL; - /* Enable HTC schedule mechanism for TX HTT2 service. */ - connect.ConnectionFlags |= HTC_CONNECT_FLAGS_ENABLE_HTC_SCHEDULE; connect.ServiceID = HTT_DATA2_MSG_SVC; diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index c7ef7af5109d..75cb83eb514f 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -304,6 +304,11 @@ typedef enum #define CFG_DOT11_MODE_DEFAULT eHDD_DOT11_MODE_11n #endif +#define CFG_SAP_FORCE_11AC_FOR_11N "gSapForce11ACFor11n" +#define CFG_SAP_FORCE_11AC_FOR_11N_MIN ( 0 ) +#define CFG_SAP_FORCE_11AC_FOR_11N_MAX ( 1 ) +#define CFG_SAP_FORCE_11AC_FOR_11N_DEFAULT ( 1 ) + #define CFG_CHANNEL_BONDING_MODE_24GHZ_NAME "gChannelBondingMode24GHz" #define CFG_CHANNEL_BONDING_MODE_MIN WNI_CFG_CHANNEL_BONDING_MODE_STAMIN #define CFG_CHANNEL_BONDING_MODE_MAX WNI_CFG_CHANNEL_BONDING_MODE_STAMAX @@ -2881,6 +2886,7 @@ typedef struct v_U8_t apEndChannelNum; v_U8_t apOperatingBand; v_BOOL_t apAutoChannelSelection; + v_BOOL_t apForce11ACFor11n; v_U8_t enableLTECoex; v_U32_t apKeepAlivePeriod; v_U32_t goKeepAlivePeriod; @@ -3356,7 +3362,6 @@ typedef struct #endif v_BOOL_t enableSelfRecovery; - #ifdef FEATURE_WLAN_FORCE_SAP_SCC v_U8_t SapSccChanAvoidance; #endif /* FEATURE_WLAN_FORCE_SAP_SCC */ @@ -3389,6 +3394,7 @@ typedef struct mbssid_sap_dyn_ini_config { char acsAllowedChnls[CFG_MAX_STR_LEN]; v_U8_t acsScanBandPreference; v_U16_t acsBandSwitchThreshold; + v_BOOL_t apForce11ACFor11n; } mbssid_sap_dyn_ini_config_t; #endif diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index cb740ee986ad..b51075bed7ed 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -1484,6 +1484,10 @@ struct hdd_context_s hdd_green_ap_ctx_t *green_ap_ctx; #endif fw_log_info fw_log_settings; +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + vos_timer_t skip_acs_scan_timer; + v_U8_t skip_acs_scan_status; +#endif vos_wake_lock_t sap_dfs_wakelock; atomic_t sap_dfs_ref_cnt; diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index c32a6f70561d..1632ddf5dd0d 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -3201,10 +3201,10 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, //Clear saved connection information in HDD hdd_connRemoveConnectInfo( WLAN_HDD_GET_STATION_CTX_PTR(pAdapter) ); } + halStatus = hdd_AssociationCompletionHandler( pAdapter, pRoamInfo, roamId, roamStatus, roamResult ); #ifdef WLAN_FEATURE_ROAM_OFFLOAD pRoamInfo->roamSynchInProgress = VOS_FALSE; #endif - halStatus = hdd_AssociationCompletionHandler( pAdapter, pRoamInfo, roamId, roamStatus, roamResult ); break; case eCSR_ROAM_ASSOCIATION_FAILURE: halStatus = hdd_AssociationCompletionHandler( pAdapter, diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index ee47a5c01fcd..cffc7e6e4f89 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -579,6 +579,16 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_DOT11_MODE_MIN, CFG_DOT11_MODE_MAX ), + REG_VARIABLE( CFG_SAP_FORCE_11AC_FOR_11N, WLAN_PARAM_Integer, + hdd_config_t, apForce11ACFor11n, +#ifndef WLAN_FEATURE_MBSSID + VAR_FLAGS_DYNAMIC_CFG | +#endif + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, + CFG_SAP_FORCE_11AC_FOR_11N_DEFAULT, + CFG_SAP_FORCE_11AC_FOR_11N_MIN, + CFG_SAP_FORCE_11AC_FOR_11N_MAX ), + REG_VARIABLE( CFG_CHANNEL_BONDING_MODE_24GHZ_NAME, WLAN_PARAM_Integer, hdd_config_t, nChannelBondingMode24GHz, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, @@ -3930,6 +3940,14 @@ REG_TABLE_ENTRY mbssid_sap_dyn_ini_reg_table[] = CFG_ACS_BAND_SWITCH_THRESHOLD_MIN, CFG_ACS_BAND_SWITCH_THRESHOLD_MAX ), + REG_VARIABLE( CFG_SAP_FORCE_11AC_FOR_11N, WLAN_PARAM_Integer, + mbssid_sap_dyn_ini_config_t, apForce11ACFor11n, + VAR_FLAGS_DYNAMIC_CFG | + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, + CFG_SAP_FORCE_11AC_FOR_11N_DEFAULT, + CFG_SAP_FORCE_11AC_FOR_11N_MIN, + CFG_SAP_FORCE_11AC_FOR_11N_MAX ), + }; #endif @@ -4994,7 +5012,7 @@ v_VOID_t hdd_mbssid_apply_def_cfg_ini(hdd_adapter_t *pAdapter) sap_ini_cfg->acsBandSwitchThreshold = iniConfig->acsBandSwitchThreshold; vos_mem_copy(sap_ini_cfg->acsAllowedChnls, iniConfig->acsAllowedChnls, CFG_MAX_STR_LEN); - + sap_ini_cfg->apForce11ACFor11n = iniConfig->apForce11ACFor11n; } #endif diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 986686e4d6dc..569ed3e588d6 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -4820,6 +4820,14 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, v_SINT_t i; hdd_config_t *iniConfig; hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pHostapdAdapter); +#ifdef WLAN_FEATURE_11AC + v_BOOL_t sapForce11ACFor11n = +#ifdef WLAN_FEATURE_MBSSID + pHostapdAdapter->sap_dyn_ini_cfg.apForce11ACFor11n; +#else + pHddCtx->cfg_ini->apForce11ACFor11n; +#endif +#endif tSmeConfigParams *psmeConfig; v_BOOL_t MFPCapable = VOS_FALSE; v_BOOL_t MFPRequired = VOS_FALSE; @@ -5247,6 +5255,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, * Otherwise, leave whatever is set in hostapd (a OR b OR g OR n mode) */ if( ((pConfig->SapHw_mode == eSAP_DOT11_MODE_11n) || (pConfig->SapHw_mode == eSAP_DOT11_MODE_11n_ONLY)) && + sapForce11ACFor11n && (( (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->dot11Mode == eHDD_DOT11_MODE_AUTO ) || ( (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->dot11Mode == eHDD_DOT11_MODE_11ac ) || ( (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->dot11Mode == eHDD_DOT11_MODE_11ac_ONLY )) ) @@ -5374,11 +5383,108 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, pHostapdAdapter->sap_dyn_ini_cfg.apStartChannelNum; pConfig->apEndChannelNum = pHostapdAdapter->sap_dyn_ini_cfg.apEndChannelNum; + pConfig->apOperatingBand = pHostapdAdapter->sap_dyn_ini_cfg.apOperatingBand; #else pConfig->acsBandSwitchThreshold = iniConfig->acsBandSwitchThreshold; pConfig->apAutoChannelSelection = iniConfig->apAutoChannelSelection; pConfig->apStartChannelNum = iniConfig->apStartChannelNum; pConfig->apEndChannelNum = iniConfig->apEndChannelNum; + pConfig->apOperatingBand = iniConfig->apOperatingBand; +#endif + +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + if (vos_concurrent_sap_sessions_running() && + pConfig->channel == AUTO_CHANNEL_SELECT) { + hdd_adapter_t *con_sap_adapter; + tsap_Config_t *con_sap_config = NULL; + + con_sap_adapter = hdd_get_con_sap_adapter(pHostapdAdapter); + + if (con_sap_adapter) + con_sap_config = &con_sap_adapter->sessionCtx.ap.sapConfig; + + pConfig->skip_acs_scan_status = eSAP_DO_NEW_ACS_SCAN; + + hddLog(LOG1, FL("HDD_ACS_SKIP_STATUS = %d"), + pHddCtx->skip_acs_scan_status); + + if (con_sap_config && con_sap_config->channel == AUTO_CHANNEL_SELECT && + pHddCtx->skip_acs_scan_status == eSAP_SKIP_ACS_SCAN) { + + hddLog(LOG1, FL("Operating Band: PriAP: %d SecAP: %d"), + con_sap_config->apOperatingBand, pConfig->apOperatingBand); + + if (con_sap_config->apOperatingBand == 5 && + pConfig->apOperatingBand > 0) { + pConfig->skip_acs_scan_status = eSAP_SKIP_ACS_SCAN; + + } else if (con_sap_config->apOperatingBand + == pConfig->apOperatingBand) { + v_U8_t con_sap_st_ch, con_sap_end_ch; + v_U8_t cur_sap_st_ch, cur_sap_end_ch; + v_U8_t bandStartChannel, bandEndChannel; + + con_sap_st_ch = con_sap_config->apStartChannelNum; + con_sap_end_ch = con_sap_config->apEndChannelNum; + cur_sap_st_ch = pConfig->apStartChannelNum; + cur_sap_end_ch = pConfig->apEndChannelNum; + + WLANSAP_extend_to_acs_range(pConfig->apOperatingBand, + &cur_sap_st_ch, &cur_sap_end_ch, + &bandStartChannel, &bandEndChannel); + + WLANSAP_extend_to_acs_range(con_sap_config->apOperatingBand, + &con_sap_st_ch, &con_sap_end_ch, + &bandStartChannel, &bandEndChannel); + + if (con_sap_st_ch <= cur_sap_st_ch && + con_sap_end_ch >= cur_sap_end_ch) { + + pConfig->skip_acs_scan_status = eSAP_SKIP_ACS_SCAN; + + } else if (con_sap_st_ch >= cur_sap_st_ch && + con_sap_end_ch >= cur_sap_end_ch) { + + pConfig->skip_acs_scan_status = eSAP_DO_PAR_ACS_SCAN; + + pConfig->skip_acs_scan_range1_stch = cur_sap_st_ch; + pConfig->skip_acs_scan_range1_endch = con_sap_st_ch - 1; + pConfig->skip_acs_scan_range2_stch = 0; + pConfig->skip_acs_scan_range2_endch = 0; + + } else if (con_sap_st_ch <= cur_sap_st_ch && + con_sap_end_ch <= cur_sap_end_ch) { + + pConfig->skip_acs_scan_status = eSAP_DO_PAR_ACS_SCAN; + + pConfig->skip_acs_scan_range1_stch = con_sap_end_ch + 1; + pConfig->skip_acs_scan_range1_endch = cur_sap_end_ch; + pConfig->skip_acs_scan_range2_stch = 0; + pConfig->skip_acs_scan_range2_endch = 0; + + } else if (con_sap_st_ch >= cur_sap_st_ch && + con_sap_end_ch <= cur_sap_end_ch) { + + pConfig->skip_acs_scan_status = eSAP_DO_PAR_ACS_SCAN; + + pConfig->skip_acs_scan_range1_stch = cur_sap_st_ch; + pConfig->skip_acs_scan_range1_endch = con_sap_st_ch - 1; + pConfig->skip_acs_scan_range2_stch = con_sap_end_ch; + pConfig->skip_acs_scan_range2_endch = cur_sap_end_ch + 1; + + } else + pConfig->skip_acs_scan_status = eSAP_DO_NEW_ACS_SCAN; + + hddLog(LOG1, + FL("SecAP ACS Skip = %d, ACS CH RANGE = %d-%d, %d-%d"), + pConfig->skip_acs_scan_status, + pConfig->skip_acs_scan_range1_stch, + pConfig->skip_acs_scan_range1_endch, + pConfig->skip_acs_scan_range2_stch, + pConfig->skip_acs_scan_range2_endch); + } + } + } #endif pSapEventCallback = hdd_hostapd_SAPEventCB; diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index c9bd4ee7fa6d..c99ce91040d5 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -115,6 +115,7 @@ extern int process_wma_set_command(int sessid, int paramid, #define HT_RC_2_STREAMS_11AC(_rc) ((((_rc) & 0x30) >> 4) + 1) #define SAP_24GHZ_CH_COUNT (14) +#define ACS_SCAN_EXPIRY_TIMEOUT_S 4 /*--------------------------------------------------------------------------- * Function definitions @@ -1439,6 +1440,19 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa /* TODO Need to indicate operating channel change to hostapd */ return VOS_STATUS_SUCCESS; +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + case eSAP_ACS_SCAN_SUCCESS_EVENT: + pHddCtx->skip_acs_scan_status = eSAP_SKIP_ACS_SCAN; + hddLog(LOG1, FL("Reusing Last ACS scan result for %d sec"), + ACS_SCAN_EXPIRY_TIMEOUT_S); + vos_timer_stop( &pHddCtx->skip_acs_scan_timer); + vos_status = vos_timer_start( &pHddCtx->skip_acs_scan_timer, + ACS_SCAN_EXPIRY_TIMEOUT_S * 1000); + if (!VOS_IS_STATUS_SUCCESS(vos_status)) + hddLog(LOGE, FL("Failed to start ACS scan expiry timer")); + return VOS_STATUS_SUCCESS; +#endif + case eSAP_DFS_NOL_GET: hddLog(VOS_TRACE_LEVEL_INFO, FL("Received eSAP_DFS_NOL_GET event")); @@ -3082,52 +3096,6 @@ static int iw_softap_set_trafficmonitor(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { - hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); - int *isSetTrafficMon = (int *)wrqu->data.pointer; - hdd_context_t *pHddCtx; - int status; - - pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - - status = wlan_hdd_validate_context(pHddCtx); - - if (0 != status) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: HDD context is not valid", __func__); - return status; - } - - hddLog(VOS_TRACE_LEVEL_INFO, "%s : ", __func__); - - if (NULL == isSetTrafficMon) - { - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - "%s: Invalid SAP pointer from extra", __func__); - return -ENOMEM; - } - - if (TRUE == *isSetTrafficMon) - { - pHddCtx->cfg_ini->enableTrafficMonitor= TRUE; - if (VOS_STATUS_SUCCESS != hdd_start_trafficMonitor(pAdapter)) - { - VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, - "%s: failed to Start Traffic Monitor timer ", __func__ ); - return -EIO; - } - } - else if (FALSE == *isSetTrafficMon) - { - pHddCtx->cfg_ini->enableTrafficMonitor= FALSE; - if (VOS_STATUS_SUCCESS != hdd_stop_trafficMonitor(pAdapter)) - { - VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR, - "%s: failed to Stop Traffic Monitor timer ", __func__ ); - return -EIO; - } - - } return 0; } diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 0190f3db0e35..aef77a2e8647 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -10655,6 +10655,19 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) } #endif +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + if (VOS_TIMER_STATE_RUNNING == + vos_timer_getCurrentState(&pHddCtx->skip_acs_scan_timer)) { + vos_timer_stop(&pHddCtx->skip_acs_scan_timer); + } + + if (!VOS_IS_STATUS_SUCCESS(vos_timer_destroy( + &pHddCtx->skip_acs_scan_timer))) { + hddLog(VOS_TRACE_LEVEL_ERROR, + "%s: Cannot deallocate ACS Skip timer", __func__); + } +#endif + if (pConfig && !pConfig->enablePowersaveOffload) { //Disable IMPS/BMPS as we do not want the device to enter any power @@ -10899,6 +10912,15 @@ void __hdd_wlan_exit(void) EXIT(); } +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE +void hdd_skip_acs_scan_timer_handler(void * data) +{ + hdd_context_t *pHddCtx = (hdd_context_t *) data; + hddLog(LOG1, FL("ACS Scan result expired. Reset ACS scan skip")); + pHddCtx->skip_acs_scan_status = eSAP_DO_NEW_ACS_SCAN; +} +#endif + #ifdef QCA_HT_2040_COEX /**-------------------------------------------------------------------------- @@ -12082,6 +12104,13 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) hddLog(LOGE, FL("Auto shutdown feature could not be enabled")); #endif +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + status = vos_timer_init(&pHddCtx->skip_acs_scan_timer, VOS_TIMER_TYPE_SW, + hdd_skip_acs_scan_timer_handler, (void *)pHddCtx); + if (!VOS_IS_STATUS_SUCCESS(status)) + hddLog(LOGE, FL("Failed to init ACS Skip timer\n")); +#endif + #ifdef FEATURE_GREEN_AP if (!VOS_IS_STATUS_SUCCESS( hdd_wlan_green_ap_attach(pHddCtx))) { diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c index e21d394d6bcf..c234648d9d47 100644 --- a/CORE/HDD/src/wlan_hdd_wext.c +++ b/CORE/HDD/src/wlan_hdd_wext.c @@ -4346,7 +4346,10 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, v_BOOL_t band_24 = VOS_FALSE, band_5g = VOS_FALSE; v_BOOL_t ch_bond24 = VOS_FALSE, ch_bond5g = VOS_FALSE; tSmeConfigParams smeconfig; - tANI_U32 vhtchanwidth, chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; + tANI_U32 chwidth = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; +#ifdef WLAN_FEATURE_11AC + tANI_U32 vhtchanwidth; +#endif eCsrPhyMode phymode = -EIO, old_phymode; eCsrBand curr_band = eCSR_BAND_ALL; @@ -4467,21 +4470,8 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, #ifdef WLAN_FEATURE_11AC case IEEE80211_MODE_11AC_VHT20: case IEEE80211_MODE_11AC_VHT40: - if ((vhtchanwidth == eHT_CHANNEL_WIDTH_20MHZ || - vhtchanwidth == eHT_CHANNEL_WIDTH_40MHZ) && - band_5g) { - sme_SetPhyMode(hal, eCSR_DOT11_MODE_11ac); - if ((hdd_setBand(net, WLAN_HDD_UI_BAND_5_GHZ) == 0)) { - phymode = eCSR_DOT11_MODE_11ac; - } else { - sme_SetPhyMode(hal, old_phymode); - return -EIO; - } - } - break; case IEEE80211_MODE_11AC_VHT80: - if ((vhtchanwidth == eHT_CHANNEL_WIDTH_80MHZ) && - band_5g) { + if (band_5g) { sme_SetPhyMode(hal, eCSR_DOT11_MODE_11ac); if ((hdd_setBand(net, WLAN_HDD_UI_BAND_5_GHZ) == 0)) { phymode = eCSR_DOT11_MODE_11ac; @@ -4518,6 +4508,19 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, return -EIO; } +#ifdef WLAN_FEATURE_11AC + switch (new_phymode) { + case IEEE80211_MODE_11AC_VHT20: + vhtchanwidth = eHT_CHANNEL_WIDTH_20MHZ; + case IEEE80211_MODE_11AC_VHT40: + vhtchanwidth = eHT_CHANNEL_WIDTH_40MHZ; + case IEEE80211_MODE_11AC_VHT80: + vhtchanwidth = eHT_CHANNEL_WIDTH_80MHZ; + default: + vhtchanwidth = phddctx->cfg_ini->vhtChannelWidth; + } +#endif + if (phymode != -EIO) { sme_GetConfigParam(hal, &smeconfig); smeconfig.csrConfig.phyMode = phymode; @@ -4538,6 +4541,9 @@ int wlan_hdd_update_phymode(struct net_device *net, tHalHandle hal, smeconfig.csrConfig.channelBondingMode5GHz = phddctx->cfg_ini->nChannelBondingMode5GHz; } +#ifdef WLAN_FEATURE_11AC + smeconfig.csrConfig.nVhtChannelWidth = vhtchanwidth; +#endif VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "SET PHY MODE=%d", diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 64f094220626..7c1083fbf0af 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -42,9 +42,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 0 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 184 +#define QWLAN_VERSION_BUILD 185 -#define QWLAN_VERSIONSTR "1.0.0.184A" +#define QWLAN_VERSIONSTR "1.0.0.185" #define AR6320_REV1_VERSION 0x5000000 diff --git a/CORE/SAP/inc/sapApi.h b/CORE/SAP/inc/sapApi.h index 204bca409ede..1fefaa7819d1 100644 --- a/CORE/SAP/inc/sapApi.h +++ b/CORE/SAP/inc/sapApi.h @@ -207,6 +207,9 @@ typedef enum { eSAP_DFS_NOL_GET, /* Event sent when user need to get the DFS NOL from CNSS */ eSAP_DFS_NOL_SET, /* Event sent when user need to set the DFS NOL to CNSS */ eSAP_DFS_NO_AVAILABLE_CHANNEL, /* No ch available after DFS RADAR detect */ +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + eSAP_ACS_SCAN_SUCCESS_EVENT, +#endif } eSapHddEvent; typedef enum { @@ -486,6 +489,16 @@ typedef struct sap_Config { v_BOOL_t apAutoChannelSelection; v_U8_t apStartChannelNum; v_U8_t apEndChannelNum; + v_U8_t apOperatingBand; + +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + v_U8_t skip_acs_scan_status; + v_U8_t skip_acs_scan_range1_stch; + v_U8_t skip_acs_scan_range1_endch; + v_U8_t skip_acs_scan_range2_stch; + v_U8_t skip_acs_scan_range2_endch; +#endif + #ifdef WLAN_FEATURE_11W v_BOOL_t mfpRequired; v_BOOL_t mfpCapable; @@ -505,8 +518,16 @@ typedef struct sap_Config { } tsap_Config_t; +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE +typedef enum { + eSAP_DO_NEW_ACS_SCAN, + eSAP_DO_PAR_ACS_SCAN, + eSAP_SKIP_ACS_SCAN +} tSap_skip_acs_scan; +#endif + typedef enum { - eSAP_WPS_PROBE_RSP_IE, + eSAP_WPS_PROBE_RSP_IE, eSAP_WPS_BEACON_IE, eSAP_WPS_ASSOC_RSP_IE } eSapWPSIE_CODE; @@ -2126,6 +2147,29 @@ SIDE EFFECTS eCsrPhyMode sapConvertSapPhyModeToCsrPhyMode( eSapPhyMode sapPhyMode ); /*========================================================================== +FUNCTION WLANSAP_extend_to_acs_range + +DESCRIPTION Function extends give channel range to consider ACS chan bonding + +DEPENDENCIES PARAMETERS + +IN /OUT +*startChannelNum : ACS extend start ch +*endChannelNum : ACS extended End ch +*bandStartChannel: Band start ch +*bandEndChannel : Band end ch + +RETURN VALUE NONE + +SIDE EFFECTS +============================================================================*/ +v_VOID_t WLANSAP_extend_to_acs_range(v_U8_t operatingBand, + v_U8_t *startChannelNum, + v_U8_t *endChannelNum, + v_U8_t *bandStartChannel, + v_U8_t *bandEndChannel); + +/*========================================================================== FUNCTION WLANSAP_Get_DfsNol DESCRIPTION diff --git a/CORE/SAP/src/sapApiLinkCntl.c b/CORE/SAP/src/sapApiLinkCntl.c index adbcaff458a2..23e76c0842d9 100644 --- a/CORE/SAP/src/sapApiLinkCntl.c +++ b/CORE/SAP/src/sapApiLinkCntl.c @@ -163,11 +163,20 @@ WLANSAP_ScanCallback __func__, scanGetResultStatus); break; } - +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + if (scanID != 0) { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "%s: Sending ACS Scan skip event", __func__); + sapSignalHDDevent(psapContext, NULL, + eSAP_ACS_SCAN_SUCCESS_EVENT, + (v_PVOID_t) eSAP_STATUS_SUCCESS); + } else + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "%s: ACS scan id: %d (skipped ACS SCAN)", __func__, scanID); +#endif operChannel = sapSelectChannel(halHandle, psapContext, pResult); sme_ScanResultPurge(halHandle, pResult); - sme_ScanFlushResult(halHandle, psapContext->sessionId); event = eSAP_MAC_SCAN_COMPLETE; break; diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index 8ef407ef3d74..7a86b075264a 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -1557,80 +1557,118 @@ sapGotoChannelSel if (sapContext->channel == AUTO_CHANNEL_SELECT) { - vos_mem_zero(&scanRequest, sizeof(scanRequest)); +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "%s skip_acs_status = %d ", __func__, + sapContext->skip_acs_scan_status); + if (sapContext->skip_acs_scan_status != eSAP_SKIP_ACS_SCAN) { +#endif + vos_mem_zero(&scanRequest, sizeof(scanRequest)); - /* Set scanType to Passive scan */ - scanRequest.scanType = eSIR_PASSIVE_SCAN; + /* Set scanType to Passive scan */ + scanRequest.scanType = eSIR_PASSIVE_SCAN; - /* Set min and max channel time to zero */ - scanRequest.minChnTime = 0; - scanRequest.maxChnTime = 0; + /* Set min and max channel time to zero */ + scanRequest.minChnTime = 0; + scanRequest.maxChnTime = 0; - /* Set BSSType to default type */ - scanRequest.BSSType = eCSR_BSS_TYPE_ANY; + /* Set BSSType to default type */ + scanRequest.BSSType = eCSR_BSS_TYPE_ANY; #ifndef SOFTAP_CHANNEL_RANGE - /*Scan all the channels */ - scanRequest.ChannelInfo.numOfChannels = 0; + /*Scan all the channels */ + scanRequest.ChannelInfo.numOfChannels = 0; - scanRequest.ChannelInfo.ChannelList = NULL; + scanRequest.ChannelInfo.ChannelList = NULL; - scanRequest.requestType = eCSR_SCAN_REQUEST_FULL_SCAN;//eCSR_SCAN_REQUEST_11D_SCAN; + scanRequest.requestType = eCSR_SCAN_REQUEST_FULL_SCAN; + //eCSR_SCAN_REQUEST_11D_SCAN; #else - sapGetChannelList(sapContext, &channelList, &numOfChannels); - - /*Scan the channels in the list*/ - scanRequest.ChannelInfo.numOfChannels = numOfChannels; + sapGetChannelList(sapContext, &channelList, &numOfChannels); +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + if (numOfChannels != 0) { +#endif + /*Scan the channels in the list*/ + scanRequest.ChannelInfo.numOfChannels = numOfChannels; - scanRequest.ChannelInfo.ChannelList = channelList; + scanRequest.ChannelInfo.ChannelList = channelList; - scanRequest.requestType = eCSR_SCAN_SOFTAP_CHANNEL_RANGE; + scanRequest.requestType = eCSR_SCAN_SOFTAP_CHANNEL_RANGE; - sapContext->channelList = channelList; + sapContext->channelList = channelList; #endif - /* Set requestType to Full scan */ + /* Set requestType to Full scan */ - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, calling sme_ScanRequest", __func__); - - halStatus = sme_ScanRequest(hHal, + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "In %s, calling sme_ScanRequest", __func__); +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + if (sapContext->skip_acs_scan_status == eSAP_DO_NEW_ACS_SCAN) { +#endif + sme_ScanFlushResult(hHal, sapContext->sessionId); +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + } +#endif + halStatus = sme_ScanRequest(hHal, sapContext->sessionId, &scanRequest, - &scanRequestID,//, when ID == 0 11D scan/active scan with callback, min-maxChntime set in csrScanRequest()? - &WLANSAP_ScanCallback,//csrScanCompleteCallback callback, - sapContext);//void * pContext scanRequestID filled up - if (eHAL_STATUS_SUCCESS != halStatus) - { - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "%s:sme_ScanRequest fail %d!!!", __func__, halStatus); - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "SoftAP Configuring for default channel, Ch= %d", sapContext->channel); - /* In case of error, switch to default channel */ - sapContext->channel = SAP_DEFAULT_CHANNEL; + /*, when ID == 0 11D scan/active scan with callback, + * min-maxChntime set in csrScanRequest()? + */ + &scanRequestID, + /*csrScanCompleteCallback callback,*/ + &WLANSAP_ScanCallback, + /* pContext scanRequestID filled up*/ + sapContext); + if (eHAL_STATUS_SUCCESS != halStatus) + { + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + "%s:sme_ScanRequest fail %d!!!", __func__, halStatus); + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "SoftAP Configuring for default channel, Ch= %d", + sapContext->channel); + /* In case of error, switch to default channel */ + sapContext->channel = SAP_DEFAULT_CHANNEL; #ifdef SOFTAP_CHANNEL_RANGE - if(sapContext->channelList != NULL) - { - sapContext->channel = sapContext->channelList[0]; - vos_mem_free(sapContext->channelList); - sapContext->channelList = NULL; - } + if(sapContext->channelList != NULL) + { + sapContext->channel = sapContext->channelList[0]; + vos_mem_free(sapContext->channelList); + sapContext->channelList = NULL; + } #endif - /* Fill in the event structure */ - sapEventInit(sapEvent); - /* Handle event */ - vosStatus = sapFsm(sapContext, sapEvent); - } - else - { - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, return from sme_ScanRequest, scanRequestID=%d, Ch= %d", - __func__, scanRequestID, sapContext->channel); + /* Fill in the event structure */ + sapEventInit(sapEvent); + /* Handle event */ + vosStatus = sapFsm(sapContext, sapEvent); + } + else + { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "In %s, return from sme_ScanReq, scanID=%d, Ch= %d", + __func__, scanRequestID, sapContext->channel); + } +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + } else + sapContext->skip_acs_scan_status = eSAP_SKIP_ACS_SCAN; } + if (sapContext->skip_acs_scan_status == eSAP_SKIP_ACS_SCAN) { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "## %s SKIPPED ACS SCAN", __func__); + WLANSAP_ScanCallback(hHal, sapContext, sapContext->sessionId, 0, + eCSR_SCAN_SUCCESS); + } +#endif } else { - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, for configured channel, Ch= %d", __func__, sapContext->channel); + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "In %s, for configured channel, Ch= %d", + __func__, sapContext->channel); /* Fill in the event structure */ // Eventhough scan was not done, means a user set channel was chosen sapEventInit(sapEvent); @@ -1992,6 +2030,9 @@ sapSignalHDDevent VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, SAP event callback event = %s : %d", __func__, "eSAP_DFS event", sapHddevent); +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + case eSAP_ACS_SCAN_SUCCESS_EVENT: +#endif sapApAppEvent.sapHddEventCode = sapHddevent; sapApAppEvent.sapevt.sapStopBssCompleteEvent.status = (eSapStatus )context; @@ -3499,14 +3540,14 @@ sapIsPeerMacAllowed(ptSapContext sapContext, v_U8_t *peerMac) static VOS_STATUS sapGetChannelList(ptSapContext sapContext, v_U8_t **channelList, v_U8_t *numberOfChannels) { - v_U32_t startChannelNum; - v_U32_t endChannelNum; + v_U32_t cfg_startChannelNum; + v_U32_t cfg_endChannelNum; v_U32_t operatingBand; v_U8_t loopCount; v_U8_t *list; v_U8_t channelCount; - v_U8_t bandStartChannel; - v_U8_t bandEndChannel ; + v_U8_t startChannelNum, bandStartChannel; + v_U8_t endChannelNum, bandEndChannel ; v_U32_t enableLTECoex; tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx); #ifdef FEATURE_WLAN_CH_AVOID @@ -3524,66 +3565,18 @@ static VOS_STATUS sapGetChannelList(ptSapContext sapContext, if ( eCSR_BAND_ALL == sapContext->scanBandPreference) { - ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL, &startChannelNum); - ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL, &endChannelNum); + ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL, &cfg_startChannelNum); + ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL, &cfg_endChannelNum); ccmCfgGetInt(hHal, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND, &operatingBand); VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO, "%s: startChannel %d,EndChannel %d,Operatingband:%d", __func__,startChannelNum,endChannelNum,operatingBand); - switch(operatingBand) - { - case eSAP_RF_SUBBAND_2_4_GHZ: - bandStartChannel = RF_CHAN_1; - bandEndChannel = RF_CHAN_14; - startChannelNum = startChannelNum > 5 ? (startChannelNum - 4): 1; - endChannelNum = (endChannelNum + 4) <= 14 ? (endChannelNum + 4):14; - break; - - case eSAP_RF_SUBBAND_5_LOW_GHZ: - bandStartChannel = RF_CHAN_36; - bandEndChannel = RF_CHAN_64; - startChannelNum = (startChannelNum - 12) > 36 ? (startChannelNum - 12):36; - endChannelNum = (endChannelNum + 12) <= 64? (endChannelNum + 12):64; - break; - - case eSAP_RF_SUBBAND_5_MID_GHZ: - bandStartChannel = RF_CHAN_100; - startChannelNum = (startChannelNum - 12) > 100 ? (startChannelNum - 12):100; -#ifndef FEATURE_WLAN_CH144 - bandEndChannel = RF_CHAN_140; - endChannelNum = (endChannelNum + 12) <= 140? (endChannelNum + 12):140; -#else - bandEndChannel = RF_CHAN_144; - endChannelNum = (endChannelNum + 12) <= 144? (endChannelNum + 12):144; -#endif /* FEATURE_WLAN_CH144 */ - break; - - case eSAP_RF_SUBBAND_5_HIGH_GHZ: - bandStartChannel = RF_CHAN_149; - bandEndChannel = RF_CHAN_165; - startChannelNum = (startChannelNum - 12) > 149 ? (startChannelNum - 12):149; - endChannelNum = (endChannelNum + 12) <= 165? (endChannelNum + 12):165; - break; - - case eSAP_RF_SUBBAND_5_ALL_GHZ: - bandStartChannel = RF_CHAN_36; - bandEndChannel = RF_CHAN_165; - startChannelNum = (startChannelNum - 12) > 36 ? (startChannelNum - 12):36; - endChannelNum = (endChannelNum + 12) <= 165? (endChannelNum + 12):165; - break; - - default: - VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - "sapGetChannelList:OperatingBand not valid "); - /* assume 2.4 GHz */ - bandStartChannel = RF_CHAN_1; - bandEndChannel = RF_CHAN_14; - startChannelNum = startChannelNum > 5 ? (startChannelNum - 4): 1; - endChannelNum = (endChannelNum + 4) <= 14 ? (endChannelNum + 4):14; - break; - } + startChannelNum = cfg_startChannelNum; + endChannelNum = cfg_endChannelNum; + WLANSAP_extend_to_acs_range(operatingBand, &startChannelNum, &endChannelNum, + &bandStartChannel, &bandEndChannel); VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO, "%s: expanded startChannel %d,EndChannel %d,Operatingband:%d", @@ -3671,9 +3664,43 @@ static VOS_STATUS sapGetChannelList(ptSapContext sapContext, if(VOS_TRUE == safeChannels[i].isSafe) { #endif +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + v_U8_t ch; + ch = rfChannels[loopCount].channelNum; + if ((sapContext->skip_acs_scan_status + == eSAP_DO_PAR_ACS_SCAN)) { + if ((ch >= sapContext->skip_acs_scan_range1_stch && + ch <= sapContext->skip_acs_scan_range1_endch) || + (ch >= sapContext->skip_acs_scan_range2_stch && + ch <= sapContext->skip_acs_scan_range2_endch)) { + + list[channelCount] = + rfChannels[loopCount].channelNum; + channelCount++; + VOS_TRACE( VOS_MODULE_ID_SAP, + VOS_TRACE_LEVEL_INFO, + "%s:%d %d added to ACS ch range", + __func__, channelCount, ch); + } else + VOS_TRACE( VOS_MODULE_ID_SAP, + VOS_TRACE_LEVEL_INFO_HIGH, + "%s:%d %d skipped from ACS ch range", + __func__, channelCount, ch); + + } else { + list[channelCount] = + rfChannels[loopCount].channelNum; + channelCount++; + VOS_TRACE( VOS_MODULE_ID_SAP, + VOS_TRACE_LEVEL_INFO, + "%s:%d %d added to ACS ch range", + __func__, channelCount, ch); + } +#else list[channelCount] = - rfChannels[loopCount].channelNum; + rfChannels[loopCount].channelNum; channelCount++; +#endif #ifdef FEATURE_WLAN_CH_AVOID } break; diff --git a/CORE/SAP/src/sapInternal.h b/CORE/SAP/src/sapInternal.h index b6458774a8b5..5c24701091ba 100644 --- a/CORE/SAP/src/sapInternal.h +++ b/CORE/SAP/src/sapInternal.h @@ -247,6 +247,14 @@ typedef struct sSapContext { #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH v_U8_t cc_switch_mode; #endif +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + v_U8_t skip_acs_scan_status; + v_U8_t skip_acs_scan_range1_stch; + v_U8_t skip_acs_scan_range1_endch; + v_U8_t skip_acs_scan_range2_stch; + v_U8_t skip_acs_scan_range2_endch; +#endif + #if defined(FEATURE_WLAN_STA_AP_MODE_DFS_DISABLE) ||\ defined(WLAN_FEATURE_MBSSID) v_BOOL_t dfs_ch_disable; diff --git a/CORE/SAP/src/sapModule.c b/CORE/SAP/src/sapModule.c index d72c1eef3eca..e3f0852ef86b 100644 --- a/CORE/SAP/src/sapModule.c +++ b/CORE/SAP/src/sapModule.c @@ -678,7 +678,13 @@ WLANSAP_StartBss pSapCtx->apAutoChannelSelection = pConfig->apAutoChannelSelection; pSapCtx->apStartChannelNum = pConfig->apStartChannelNum; pSapCtx->apEndChannelNum = pConfig->apEndChannelNum; - +#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE + pSapCtx->skip_acs_scan_status = pConfig->skip_acs_scan_status; + pSapCtx->skip_acs_scan_range1_endch = pConfig->skip_acs_scan_range1_endch; + pSapCtx->skip_acs_scan_range1_stch = pConfig->skip_acs_scan_range1_stch; + pSapCtx->skip_acs_scan_range2_endch = pConfig->skip_acs_scan_range2_endch; + pSapCtx->skip_acs_scan_range2_stch = pConfig->skip_acs_scan_range2_stch; +#endif pSapCtx->enableOverLapCh = pConfig->enOverLapCh; if (strlen(pConfig->acsAllowedChnls) > 0) { @@ -3229,6 +3235,99 @@ WLANSAP_ResetSapConfigAddIE(tsap_Config_t *pConfig, } /*========================================================================== +FUNCTION WLANSAP_extend_to_acs_range + +DESCRIPTION Function extends give channel range to consider ACS chan bonding + +DEPENDENCIES PARAMETERS + +IN /OUT +*startChannelNum : ACS extend start ch +*endChannelNum : ACS extended End ch +*bandStartChannel: Band start ch +*bandEndChannel : Band end ch + +RETURN VALUE NONE + +SIDE EFFECTS +============================================================================*/ +v_VOID_t WLANSAP_extend_to_acs_range(v_U8_t operatingBand, + v_U8_t *startChannelNum, + v_U8_t *endChannelNum, + v_U8_t *bandStartChannel, + v_U8_t *bandEndChannel) +{ +#define ACS_2G_EXTEND 4 +#define ACS_5G_EXTEND 12 + + switch(operatingBand) + { + case eSAP_RF_SUBBAND_2_4_GHZ: + *bandStartChannel = RF_CHAN_1; + *bandEndChannel = RF_CHAN_14; + *startChannelNum = *startChannelNum > 5 ? + (*startChannelNum - ACS_2G_EXTEND): 1; + *endChannelNum = (*endChannelNum + ACS_2G_EXTEND) <= 14 ? + (*endChannelNum + ACS_2G_EXTEND):14; + break; + + case eSAP_RF_SUBBAND_5_LOW_GHZ: + *bandStartChannel = RF_CHAN_36; + *bandEndChannel = RF_CHAN_64; + *startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 36 ? + (*startChannelNum - ACS_5G_EXTEND):36; + *endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 64? + (*endChannelNum + ACS_5G_EXTEND):64; + break; + + case eSAP_RF_SUBBAND_5_MID_GHZ: + *bandStartChannel = RF_CHAN_100; + *startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 100 ? + (*startChannelNum - ACS_5G_EXTEND):100; +#ifndef FEATURE_WLAN_CH144 + *bandEndChannel = RF_CHAN_140; + *endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 140 ? + (*endChannelNum + ACS_5G_EXTEND):140; +#else + *bandEndChannel = RF_CHAN_144; + *endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 144 ? + (*endChannelNum + ACS_5G_EXTEND):144; +#endif /* FEATURE_WLAN_CH144 */ + break; + + case eSAP_RF_SUBBAND_5_HIGH_GHZ: + *bandStartChannel = RF_CHAN_149; + *bandEndChannel = RF_CHAN_165; + *startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 149 ? + (*startChannelNum - ACS_5G_EXTEND):149; + *endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 165 ? + (*endChannelNum + ACS_5G_EXTEND):165; + break; + + case eSAP_RF_SUBBAND_5_ALL_GHZ: + *bandStartChannel = RF_CHAN_36; + *bandEndChannel = RF_CHAN_165; + *startChannelNum = (*startChannelNum - ACS_5G_EXTEND) > 36 ? + (*startChannelNum - ACS_5G_EXTEND):36; + *endChannelNum = (*endChannelNum + ACS_5G_EXTEND) <= 165 ? + (*endChannelNum + ACS_5G_EXTEND):165; + break; + + default: + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + "sapGetChannelList:OperatingBand not valid "); + /* assume 2.4 GHz */ + *bandStartChannel = RF_CHAN_1; + *bandEndChannel = RF_CHAN_14; + *startChannelNum = *startChannelNum > 5 ? + (*startChannelNum - ACS_2G_EXTEND): 1; + *endChannelNum = (*endChannelNum + ACS_2G_EXTEND) <= 14 ? + (*endChannelNum + ACS_2G_EXTEND):14; + break; + } +} + +/*========================================================================== FUNCTION WLANSAP_Get_DfsNol DESCRIPTION diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index b8e5432efc35..8de3b3eb8759 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -5458,6 +5458,7 @@ eHalStatus csrRoamOffloadSendSynchCnf(tpAniSirGlobal pMac, tANI_U8 sessionId) { tpSirSmeRoamOffloadSynchCnf pRoamOffloadSynchCnf; vos_msg_t msg; + tCsrRoamSession *pSession = &pMac->roam.roamSession[sessionId]; pRoamOffloadSynchCnf = vos_mem_malloc(sizeof(tSirSmeRoamOffloadSynchCnf)); if (NULL == pRoamOffloadSynchCnf) @@ -5466,6 +5467,7 @@ eHalStatus csrRoamOffloadSendSynchCnf(tpAniSirGlobal pMac, tANI_U8 sessionId) VOS_TRACE_LEVEL_ERROR, "%s: not able to allocate memory for roam" "offload synch confirmation data", __func__); + pSession->roamOffloadSynchParams.bRoamSynchInProgress = VOS_FALSE; return eHAL_STATUS_FAILURE; } pRoamOffloadSynchCnf->sessionId = sessionId; @@ -5477,14 +5479,14 @@ eHalStatus csrRoamOffloadSendSynchCnf(tpAniSirGlobal pMac, tANI_U8 sessionId) if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message( VOS_MODULE_ID_WDA, &msg))) { - VOS_TRACE(VOS_MODULE_ID_SME, - VOS_TRACE_LEVEL_DEBUG, - "%s: Not able to post" - "WDA_ROAM_OFFLOAD_SYNCH_CNF message to WDA", - __func__); - vos_mem_free(pRoamOffloadSynchCnf); - return eHAL_STATUS_FAILURE; + VOS_TRACE(VOS_MODULE_ID_SME,VOS_TRACE_LEVEL_DEBUG, + "%s: Not able to post WDA_ROAM_OFFLOAD_SYNCH_CNF message to WDA", + __func__); + vos_mem_free(pRoamOffloadSynchCnf); + pSession->roamOffloadSynchParams.bRoamSynchInProgress = VOS_FALSE; + return eHAL_STATUS_FAILURE; } + pSession->roamOffloadSynchParams.bRoamSynchInProgress = VOS_FALSE; return eHAL_STATUS_SUCCESS; } #endif diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c index 17b7420a4b09..e22549b85858 100644 --- a/CORE/SME/src/csr/csrNeighborRoam.c +++ b/CORE/SME/src/csr/csrNeighborRoam.c @@ -4974,7 +4974,9 @@ eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac, } #endif #ifdef WLAN_FEATURE_ROAM_OFFLOAD - if (pSession->roamOffloadSynchParams.bRoamSynchInProgress) + if (pSession->roamOffloadSynchParams.bRoamSynchInProgress && + (eSIR_ROAM_AUTH_STATUS_AUTHENTICATED == + pSession->roamOffloadSynchParams.authStatus)) { VOS_TRACE (VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG, "LFR3:csrNeighborRoamIndicateConnect"); @@ -5138,8 +5140,6 @@ eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac, "LFR3:Send SynchCnf auth status authenticated"); csrRoamOffloadSendSynchCnf( pMac, sessionId); } - pSession->roamOffloadSynchParams.bRoamSynchInProgress = - VOS_FALSE; } else #endif csrRoamOffloadScan(pMac, sessionId, diff --git a/CORE/SYS/legacy/src/system/src/macInitApi.c b/CORE/SYS/legacy/src/system/src/macInitApi.c index 30cd55e5fe3f..344efcde3ca1 100644 --- a/CORE/SYS/legacy/src/system/src/macInitApi.c +++ b/CORE/SYS/legacy/src/system/src/macInitApi.c @@ -236,7 +236,7 @@ tSirRetStatus macOpen(tHalHandle *pHalHandle, tHddHandle hHdd, tMacOpenParameter { pMac->psOffloadEnabled = FALSE; } - + pMac->scan.nextScanID = 1; /* FW: 0 to 2047 and Host: 2048 to 4095 */ pMac->mgmtSeqNum = WLAN_HOST_SEQ_NUM_MIN-1; diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini index c7c297aeb913..ec6f8eababcb 100755 --- a/firmware_bin/WCNSS_qcom_cfg.ini +++ b/firmware_bin/WCNSS_qcom_cfg.ini @@ -459,10 +459,6 @@ gEnableDirectedScanOffload=1 #Default is set to 0 (disable) gFlexConnectPowerFactor=0 -#SAP/P2P-GO mode traffic monitor -gEnableTrafficMonitor=0 -gTrafficIdleTimeout=3000 - #Disable split scan, the FW will take care of it gNumChanCombinedConc=60 |
