summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2014-09-06 00:59:07 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2014-09-06 00:59:07 -0700
commit321efd2e52e2a4cdf378eba487857f8adf36f6d5 (patch)
tree08016f6866ceaaa568739b71e0dd41f5625a35c5
parent95b5f88f4905df0b6ea417a04feb4a623eb68cc4 (diff)
parent182072e3e38844ea07f5839f4183cf377fa24013 (diff)
Merge "Release 1.0.0.185 QCACLD WLAN Driver"
-rw-r--r--CORE/CLD_TXRX/HTT/htt.c2
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h8
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h4
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c2
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c20
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c106
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c60
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c29
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c36
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/SAP/inc/sapApi.h46
-rw-r--r--CORE/SAP/src/sapApiLinkCntl.c13
-rw-r--r--CORE/SAP/src/sapFsm.c241
-rw-r--r--CORE/SAP/src/sapInternal.h8
-rw-r--r--CORE/SAP/src/sapModule.c101
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c16
-rw-r--r--CORE/SME/src/csr/csrNeighborRoam.c6
-rw-r--r--CORE/SYS/legacy/src/system/src/macInitApi.c2
-rwxr-xr-xfirmware_bin/WCNSS_qcom_cfg.ini4
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