diff options
| author | Akash Patel <akashp@codeaurora.org> | 2014-07-23 10:15:18 -0700 |
|---|---|---|
| committer | Akash Patel <akashp@codeaurora.org> | 2014-07-23 10:16:19 -0700 |
| commit | 9fb236d8c10b6d2a38dc02cc2d91e56c1826aa6c (patch) | |
| tree | b5a5fb6b960c55893c38a1b34d466c23f7a14274 | |
| parent | dec45c723f56f33c5c6acef80e4888b042df249e (diff) | |
| parent | 64e42148585c05714d7a62bfcffc9a8c3d1a80e5 (diff) | |
Release 1.0.0.152 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master'
* origin/caf/caf-wlan/master:
Cafstaging Release 1.0.0.152
wlan: Get stats from firmware irrespective of link-speed configuration
qcacld: Fix debug print for ini config in HDD
qcacld: Add debug id for parser file
cld:Restore the connection state on disconnection failure.
Update proper rate flags to user space while reporting linkspeed
qcacld: Fix of memory corruptions during driver load failure
qcacld: Remove reinit of tx_flow_control_timer
qcacld: sap: dfs nol and channel bonding
qcacld: CL 1034874 - update fw cmn interface files
qcacld: update fw cmn interface files
qcacld: update fw cmn interface files
wlan: report correct max link-speed to UI.
wlan: Map deauth(reason 3) from supplicant properly in driver
qcacld: Send LPASS support configuration to FW
qcacld: Add INI support for enable/disable lpass feature
qcacld: fix result code and message type for ADD_STA failure
qcacld: Fix of scan list empty caused by deauth frames
Change-Id: I102e60661370ed68b0b0f16934ac6e91895103e4
32 files changed, 772 insertions, 169 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 0a3e2aeae6bb..b927c6a7a1bd 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -2716,6 +2716,13 @@ This feature requires the dependent cfg.ini "gRoamPrefer5GHz" set to 1 */ #define CFG_ENABLE_SIFS_BURST_MAX ( 1 ) #define CFG_ENABLE_SIFS_BURST_DEFAULT ( 0 ) +#ifdef WLAN_FEATURE_LPSS +#define CFG_ENABLE_LPASS_SUPPORT "gEnableLpassSupport" +#define CFG_ENABLE_LPASS_SUPPORT_DEFAULT ( 0 ) +#define CFG_ENABLE_LPASS_SUPPORT_MIN ( 0 ) +#define CFG_ENABLE_LPASS_SUPPORT_MAX ( 1 ) +#endif + /*--------------------------------------------------------------------------- Type declarations -------------------------------------------------------------------------*/ @@ -3307,6 +3314,10 @@ typedef struct #endif /* WLAN_LOGGING_SOCK_SVC_ENABLE */ v_BOOL_t enableSifsBurst; + +#ifdef WLAN_FEATURE_LPSS + v_BOOL_t enablelpasssupport; +#endif } hdd_config_t; #ifdef WLAN_FEATURE_MBSSID @@ -3454,4 +3465,6 @@ VOS_STATUS hdd_string_to_u8_array( char *str, tANI_U8 *intArray, tANI_U8 *len, #ifdef WLAN_FEATURE_MBSSID v_VOID_t hdd_mbssid_apply_def_cfg_ini(hdd_adapter_t *pAdapter); #endif + +void print_hdd_cfg(hdd_context_t *pHddCtx); #endif diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index efff5a17b052..08596f3536bd 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -1108,6 +1108,7 @@ struct hdd_adapter_s int connection; #endif v_BOOL_t is_roc_inprogress; + v_U32_t maxRateFlags; #ifdef QCA_LL_TX_FLOW_CT vos_timer_t tx_flow_control_timer; diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index 8689543f1446..7cabad88f76b 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -1378,6 +1378,7 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs "%s: Set HDD connState to eConnectionState_Associated", __func__); hdd_connSetConnectionState( pHddStaCtx, eConnectionState_Associated ); + pAdapter->maxRateFlags = pRoamInfo->maxRateFlags; // Save the connection info from CSR... hdd_connSaveConnectInfo( pAdapter, pRoamInfo, eCSR_BSS_TYPE_INFRASTRUCTURE ); diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index 506e5c1d512d..f0dbbc09677f 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -3729,6 +3729,15 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_ENABLE_SIFS_BURST_DEFAULT, CFG_ENABLE_SIFS_BURST_MIN, CFG_ENABLE_SIFS_BURST_MAX ), + +#ifdef WLAN_FEATURE_LPSS + REG_VARIABLE(CFG_ENABLE_LPASS_SUPPORT, WLAN_PARAM_Integer, + hdd_config_t, enablelpasssupport, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_LPASS_SUPPORT_DEFAULT, + CFG_ENABLE_LPASS_SUPPORT_MIN, + CFG_ENABLE_LPASS_SUPPORT_MAX), +#endif }; #ifdef WLAN_FEATURE_MBSSID @@ -3984,7 +3993,7 @@ config_exit: } -static void print_hdd_cfg(hdd_context_t *pHddCtx) +void print_hdd_cfg(hdd_context_t *pHddCtx) { int i; @@ -4064,6 +4073,17 @@ static void print_hdd_cfg(hdd_context_t *pHddCtx) #ifdef FEATURE_WLAN_OKC VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [OkcEnabled] Value = [%u] ",pHddCtx->cfg_ini->isOkcIniFeatureEnabled); #endif +#ifdef FEATURE_WLAN_SCAN_PNO + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [configPNOScanSupport] Value = [%u] ",pHddCtx->cfg_ini->configPNOScanSupport); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [configPNOScanTimerRepeatValue] Value = [%u] ",pHddCtx->cfg_ini->configPNOScanTimerRepeatValue); +#endif +#ifdef FEATURE_WLAN_TDLS + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fEnableTDLSSupport] Value = [%u] ",pHddCtx->cfg_ini->fEnableTDLSSupport); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fEnableTDLSImplicitTrigger] Value = [%u] ",pHddCtx->cfg_ini->fEnableTDLSImplicitTrigger); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fTDLSExternalControl] Value = [%u] ",pHddCtx->cfg_ini->fTDLSExternalControl); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fTDLSUapsdMask] Value = [%u] ",pHddCtx->cfg_ini->fTDLSUapsdMask); + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [fEnableTDLSBufferSta] Value = [%u] ",pHddCtx->cfg_ini->fEnableTDLSBufferSta); +#endif VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraDirAcVo] Value = [%u] ",pHddCtx->cfg_ini->InfraDirAcVo); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraNomMsduSizeAcVo] Value = [0x%x] ",pHddCtx->cfg_ini->InfraNomMsduSizeAcVo); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [InfraMeanDataRateAcVo] Value = [0x%x] ",pHddCtx->cfg_ini->InfraMeanDataRateAcVo); @@ -4249,6 +4269,12 @@ static void print_hdd_cfg(hdd_context_t *pHddCtx) VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableSifsBurst] Value = [%u]", pHddCtx->cfg_ini->enableSifsBurst); + +#ifdef WLAN_FEATURE_LPSS + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, + "Name = [gEnableLpassSupport] Value = [%u] ", + pHddCtx->cfg_ini->enablelpasssupport); +#endif } #define CFG_VALUE_MAX_LEN 256 @@ -4758,7 +4784,6 @@ static VOS_STATUS hdd_apply_cfg_ini( hdd_context_t *pHddCtx, tCfgIniEntry* iniTa #ifndef QCA_WIFI_2_0 pHddCtx->cfg_ini->enablePowersaveOffload = 0; #endif - print_hdd_cfg(pHddCtx); return( ret_status ); } diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 1bcdf55a3b05..b65d7d16bb05 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -9904,6 +9904,7 @@ static int __wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, int status; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + eConnectionState connState; #ifdef FEATURE_WLAN_TDLS tANI_U8 staIdx; #endif @@ -9930,6 +9931,8 @@ static int __wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, eCsrRoamDisconnectReason reasonCode = eCSR_DISCONNECT_REASON_UNSPECIFIED; hdd_scaninfo_t *pScanInfo; + + connState = pHddStaCtx->conn_info.connState; switch (reason) { case WLAN_REASON_MIC_FAILURE: reasonCode = eCSR_DISCONNECT_REASON_MIC_ERROR; @@ -9943,10 +9946,10 @@ static int __wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, case WLAN_REASON_PREV_AUTH_NOT_VALID: case WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA: + case WLAN_REASON_DEAUTH_LEAVING: reasonCode = eCSR_DISCONNECT_REASON_DEAUTH; break; - case WLAN_REASON_DEAUTH_LEAVING: default: reasonCode = eCSR_DISCONNECT_REASON_UNSPECIFIED; break; @@ -9982,6 +9985,7 @@ static int __wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, status = wlan_hdd_disconnect(pAdapter, reasonCode); if (0 != status) { hddLog(VOS_TRACE_LEVEL_ERROR, FL("failure, returned %d"), status); + pHddStaCtx->conn_info.connState = connState; return -EINVAL; } } else { @@ -10739,7 +10743,7 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( dev ); hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); int ssidlen = pHddStaCtx->conn_info.SSID.SSID.length; - tANI_U8 rate_flags; + tANI_U32 rate_flags; hdd_context_t *pHddCtx = (hdd_context_t*) wiphy_priv(wiphy); hdd_config_t *pCfg = pHddCtx->cfg_ini; @@ -10793,6 +10797,13 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, wlan_hdd_get_station_stats(pAdapter); rate_flags = pAdapter->hdd_stats.ClassA_stat.tx_rate_flags; + /*overwrite rate_flags if MAX link-speed need to be reported*/ + if ((eHDD_LINK_SPEED_REPORT_MAX == pCfg->reportMaxLinkSpeed) || + (eHDD_LINK_SPEED_REPORT_MAX_SCALED == pCfg-> reportMaxLinkSpeed && + sinfo->signal >= pCfg->linkSpeedRssiHigh)) { + rate_flags = pAdapter->maxRateFlags; + } + //convert to the UI units of 100kbps myRate = pAdapter->hdd_stats.ClassA_stat.tx_rate * 5; #ifdef QCA_WIFI_2_0 @@ -11140,29 +11151,29 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, sinfo->txrate.mcs = pAdapter->hdd_stats.ClassA_stat.mcs_index; #ifdef WLAN_FEATURE_11AC sinfo->txrate.nss = nss; + sinfo->txrate.flags |= RATE_INFO_FLAGS_VHT_MCS; if (rate_flags & eHAL_TX_RATE_VHT80) { - sinfo->txrate.flags |= RATE_INFO_FLAGS_VHT_MCS; + sinfo->txrate.flags |= RATE_INFO_FLAGS_80_MHZ_WIDTH; + } + else if (rate_flags & eHAL_TX_RATE_VHT40) + { + sinfo->txrate.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH; } - else #endif /* WLAN_FEATURE_11AC */ + if (rate_flags & (eHAL_TX_RATE_HT20 | eHAL_TX_RATE_HT40)) { sinfo->txrate.flags |= RATE_INFO_FLAGS_MCS; + if (rate_flags & eHAL_TX_RATE_HT40) + { + sinfo->txrate.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH; + } } if (rate_flags & eHAL_TX_RATE_SGI) { + sinfo->txrate.flags |= RATE_INFO_FLAGS_MCS; sinfo->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI; } - if (rate_flags & eHAL_TX_RATE_HT40) - { - sinfo->txrate.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH; - } -#ifdef WLAN_FEATURE_11AC - else if (rate_flags & eHAL_TX_RATE_VHT80) - { - sinfo->txrate.flags |= RATE_INFO_FLAGS_80_MHZ_WIDTH; - } -#endif /* WLAN_FEATURE_11AC */ #ifdef LINKSPEED_DEBUG_ENABLED pr_info("Reporting actual MCS rate %d flags %x\n", sinfo->txrate.mcs, diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 420e8c4eaaee..8c53fa3c2dcb 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -708,16 +708,6 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa pHddApCtx->uBCStaId = pSapEvent->sapevt.sapStartBssCompleteEvent.staId; -#ifdef QCA_LL_TX_FLOW_CT - vos_timer_init(&pHostapdAdapter->tx_flow_control_timer, - VOS_TIMER_TYPE_SW, - hdd_tx_resume_timer_expired_handler, - pHostapdAdapter); - WLANTL_RegisterTXFlowControl(pHddCtx->pvosContext, - hdd_tx_resume_cb, - pHostapdAdapter->sessionId, - (void *)pHostapdAdapter); -#endif //@@@ need wep logic here to set privacy bit vos_status = hdd_softap_Register_BC_STA(pHostapdAdapter, pHddApCtx->uPrivacy); if (!VOS_IS_STATUS_SUCCESS(vos_status)) diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index e1c29e6af151..a34eebd29063 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -6048,6 +6048,8 @@ static void hdd_update_tgt_services(hdd_context_t *hdd_ctx, #ifdef FEATURE_WLAN_SCAN_PNO /* PNO offload */ + hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: PNO Capability in f/w = %d", + __func__,cfg->pno_offload); if (cfg->pno_offload) cfg_ini->PnoOffload = TRUE; #endif @@ -7889,7 +7891,7 @@ VOS_STATUS hdd_init_station_mode( hdd_adapter_t *pAdapter ) eHalStatus halStatus = eHAL_STATUS_SUCCESS; VOS_STATUS status = VOS_STATUS_E_FAILURE; tANI_U32 type, subType; - long rc = 0; + unsigned long rc = 0; int ret_val; INIT_COMPLETION(pAdapter->session_open_comp_var); @@ -7914,11 +7916,10 @@ VOS_STATUS hdd_init_station_mode( hdd_adapter_t *pAdapter ) } //Block on a completion variable. Can't wait forever though. - rc = wait_for_completion_interruptible_timeout( + rc = wait_for_completion_timeout( &pAdapter->session_open_comp_var, msecs_to_jiffies(WLAN_WAIT_TIME_SESSIONOPENCLOSE)); - if (rc <= 0) - { + if (!rc) { hddLog(VOS_TRACE_LEVEL_FATAL, FL("Session is not opened within timeout period code %ld"), rc ); @@ -11465,6 +11466,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) hdd_wdi_trace_enable(eWLAN_MODULE_PAL, pHddCtx->cfg_ini->wdiTraceEnablePAL); + print_hdd_cfg(pHddCtx); if (VOS_FTM_MODE == hdd_get_conparam()) goto ftm_processing; diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 38a8cee7d927..28879d63d3c8 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 151 +#define QWLAN_VERSION_BUILD 152 -#define QWLAN_VERSIONSTR "1.0.0.151A" +#define QWLAN_VERSIONSTR "1.0.0.152" #ifdef QCA_WIFI_2_0 diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index 3df258b9ac50..ee033022ab98 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -1233,6 +1233,9 @@ typedef struct sSirSmeJoinRsp /*Broadcast DPU signature*/ tANI_U8 bcastSig; + /*to report MAX link-speed populate rate-flags from ASSOC RSP frame*/ + tANI_U32 maxRateFlags; + /*Timing measurement capability*/ tANI_U8 timingMeasCap; diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h index c25da409a03d..058ec3a5effc 100644 --- a/CORE/MAC/src/include/sirParams.h +++ b/CORE/MAC/src/include/sirParams.h @@ -69,6 +69,8 @@ typedef enum PHY_CHANNEL_BONDING_STATE_MAX = 11 }ePhyChanBondState; +#define MAX_BONDED_CHANNELS 4 + #define SIR_MIN(a,b) (((a) < (b)) ? (a) : (b)) #define SIR_MAX(a,b) (((a) > (b)) ? (a) : (b)) diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c index 59086acc8c86..fc17889c6943 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c @@ -1913,6 +1913,12 @@ void limProcessStaMlmAddStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ,tpPESess limLog( pMac, LOGE, FL( "Encountered NULL Pointer" )); return; } + + if (psessionEntry->limSmeState == eLIM_SME_WT_REASSOC_STATE) + { + mesgType = LIM_MLM_REASSOC_CNF; + } + if (true == psessionEntry->fDeauthReceived) { PELOGE(limLog(pMac, LOGE, @@ -1944,7 +1950,6 @@ void limProcessStaMlmAddStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ,tpPESess pftPECntxt->PreAuthKeyInfo.extSetStaKeyParamValid = FALSE; } #endif - mesgType = LIM_MLM_REASSOC_CNF; } // // Update the DPH Hash Entry for this STA @@ -1995,7 +2000,10 @@ void limProcessStaMlmAddStaRsp( tpAniSirGlobal pMac, tpSirMsgQ limMsgQ ,tpPESess else { limLog( pMac, LOGE, FL( "ADD_STA failed!")); - mlmAssocCnf.resultCode = (tSirResultCodes) eSIR_SME_REFUSED; + if (psessionEntry->limSmeState == eLIM_SME_WT_REASSOC_STATE) + mlmAssocCnf.resultCode = (tSirResultCodes)eSIR_SME_FT_REASSOC_FAILURE; + else + mlmAssocCnf.resultCode = (tSirResultCodes)eSIR_SME_REFUSED; } end: if( 0 != limMsgQ->bodyptr ) diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c index 19d43d6cd7e9..613210bef9fc 100644 --- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c +++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c @@ -271,6 +271,69 @@ static void limSendSmeJoinReassocRspAfterResume( tpAniSirGlobal pMac, limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); } +/** + * limGetMaxRateFlags() + * + *FUNCTION: + *This function is called by limSendSmeJoinReassocRsp get rateFlags. + *These rateflags are used when MAX link-speed need to be reported + *to UI. + * + *PARAMS: + * @param pStaDs - Pointer to internal STA Datastructure + * @param psessionEntry - Pointer to the session entry + * + *LOGIC: + * + *ASSUMPTIONS: + * + *NOTE: + * + * @return rateFlags + */ +tANI_U32 limGetMaxRateFlags(tpDphHashNode pStaDs, tpPESession psessionEntry) +{ + tANI_U32 rate_flags = 0; + + if (NULL == psessionEntry) + { + return rate_flags; + } + + if(!IS_DOT11_MODE_HT(psessionEntry->dot11mode) && + !IS_DOT11_MODE_VHT(psessionEntry->dot11mode)) + { + rate_flags |= eHAL_TX_RATE_LEGACY; + } + else + { + if(IS_DOT11_MODE_HT(psessionEntry->dot11mode)) + { + if (pStaDs->htShortGI20Mhz || pStaDs->htShortGI40Mhz ) + rate_flags |= eHAL_TX_RATE_SGI; + + if (pStaDs->htDsssCckRate40MHzSupport) + rate_flags |=eHAL_TX_RATE_HT40; + else + rate_flags |=eHAL_TX_RATE_HT20; + } +#ifdef WLAN_FEATURE_11AC + if(IS_DOT11_MODE_VHT(psessionEntry->dot11mode)) + { + if (eHT_CHANNEL_WIDTH_80MHZ == pStaDs->vhtSupportedChannelWidthSet) + rate_flags |= eHAL_TX_RATE_VHT80; + + if (eHT_CHANNEL_WIDTH_40MHZ == pStaDs->vhtSupportedChannelWidthSet) + rate_flags |= eHAL_TX_RATE_VHT40; + + if (eHT_CHANNEL_WIDTH_20MHZ == pStaDs->vhtSupportedChannelWidthSet) + rate_flags |= eHAL_TX_RATE_VHT20; + } +#endif + } + + return rate_flags; +} /** * limSendSmeJoinReassocRsp() @@ -376,6 +439,10 @@ limSendSmeJoinReassocRsp(tpAniSirGlobal pMac, tANI_U16 msgType, pSirSmeJoinRsp->staId = pStaDs->staIndex; pSirSmeJoinRsp->ucastSig = pStaDs->ucUcastSig; pSirSmeJoinRsp->bcastSig = pStaDs->ucBcastSig; + pSirSmeJoinRsp->maxRateFlags = + limGetMaxRateFlags(pStaDs, psessionEntry); + PELOGE(limLog(pMac, LOG1, FL("maxRateFlags: %x"), + pSirSmeJoinRsp->maxRateFlags);) pSirSmeJoinRsp->timingMeasCap = pStaDs->timingMeasCap; } } @@ -550,7 +617,6 @@ limSendSmeJoinReassocRsp(tpAniSirGlobal pMac, tANI_U16 msgType, } /*** end limSendSmeJoinReassocRsp() ***/ - /** * limSendSmeStartBssRsp() * @@ -728,10 +794,6 @@ limSendSmeStartBssRsp(tpAniSirGlobal pMac, limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); } /*** end limSendSmeStartBssRsp() ***/ - - - - #define LIM_MAX_NUM_OF_SCAN_RESULTS_REPORTED 20 #define LIM_SIZE_OF_EACH_BSS 400 // this is a rough estimate diff --git a/CORE/SAP/src/sapApiLinkCntl.c b/CORE/SAP/src/sapApiLinkCntl.c index f5c986c3fe6c..315c1cc3932b 100644 --- a/CORE/SAP/src/sapApiLinkCntl.c +++ b/CORE/SAP/src/sapApiLinkCntl.c @@ -429,7 +429,7 @@ WLANSAP_RoamCallback case eCSR_ROAM_DFS_RADAR_IND: VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, - "In %s, Received Radar Indication", __func__); + FL("Received Radar Indication")); /* sync to latest DFS-NOL */ sapSignalHDDevent(sapContext, NULL, eSAP_DFS_NOL_GET, @@ -437,11 +437,15 @@ WLANSAP_RoamCallback pMac->sap.SapDfsInfo.target_channel = sapIndicateRadar(sapContext, &pCsrRoamInfo->dfs_event); + + /* if there is an assigned next channel hopping */ if (0 < pMac->sap.SapDfsInfo.user_provided_target_channel) { - pMac->sap.SapDfsInfo.target_channel = - pMac->sap.SapDfsInfo.user_provided_target_channel; + pMac->sap.SapDfsInfo.target_channel = + pMac->sap.SapDfsInfo.user_provided_target_channel; + pMac->sap.SapDfsInfo.user_provided_target_channel = 0; } + pMac->sap.SapDfsInfo.cac_state = eSAP_DFS_DO_NOT_SKIP_CAC; sap_CacResetNotify(hHal); diff --git a/CORE/SAP/src/sapChSelect.c b/CORE/SAP/src/sapChSelect.c index 5a0691352b94..113b813e5703 100644 --- a/CORE/SAP/src/sapChSelect.c +++ b/CORE/SAP/src/sapChSelect.c @@ -618,7 +618,8 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle, pSpectCh = (tSapSpectChInfo *)vos_mem_malloc((pSpectInfoParams->numSpectChans) * sizeof(*pSpectCh)); if(pSpectCh == NULL) { - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, "In %s, VOS_MALLOC_ERR", __func__); + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + "In %s, VOS_MALLOC_ERR", __func__); return eSAP_FALSE; } @@ -630,11 +631,14 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle, pChans = pMac->scan.base20MHzChannels.channelList; // Fill the channel number in the spectrum in the operating freq band - for (channelnum = 0; channelnum < pSpectInfoParams->numSpectChans; channelnum++, pChans++) { + for (channelnum = 0; + channelnum < pSpectInfoParams->numSpectChans; + channelnum++, pChans++) { chSafe = VOS_TRUE; /* check if the channel is in NOL blacklist */ - if((sapDfsIsChannelInNolList(pSapCtx, *pChans))) + if(sapDfsIsChannelInNolList(pSapCtx, *pChans, + PHY_SINGLE_CHANNEL_CENTERED)) { VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Ch %d is in NOL list", __func__, *pChans); @@ -647,7 +651,7 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle, if (VOS_IS_DFS_CH(*pChans)) { chSafe = VOS_FALSE; VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, - "In %s, DFS Ch %d not considered for ACS", __func__, + "In %s, DFS Ch %d not considered for ACS", __func__, *pChans); continue; } @@ -658,7 +662,8 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle, if((safeChannels[i].channelNumber == *pChans) && (VOS_FALSE == safeChannels[i].isSafe)) { - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Ch %d is not safe", + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + "In %s, Ch %d is not safe", __func__, *pChans); chSafe = VOS_FALSE; break; diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index a373898fd859..253bcce65bc8 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -869,7 +869,8 @@ static v_U8_t sapRandomChannelSel(ptSapContext sapContext) NV_CHANNEL_DFS) { isChannelNol = sapDfsIsChannelInNolList(sapContext, - sapContext->SapAllChnlList.channelList[i]); + sapContext->SapAllChnlList.channelList[i], + PHY_SINGLE_CHANNEL_CENTERED); if (VOS_TRUE == isChannelNol) { /* @@ -969,16 +970,176 @@ sapAcsChannelCheck(ptSapContext sapContext, v_U8_t channelNumber) } /* - * This Function Checks if a given channel is AVAILABLE or USABLE + * Mark the channels in NOL with time and eSAP_DFS_CHANNEL_UNAVAILABLE + */ +void sapMarkDfsChannels(ptSapContext sapContext, v_U8_t* channels, + v_U8_t numChannels, v_U64_t time) +{ + int i, j; + tSapDfsNolInfo *psapDfsChannelNolList = NULL; + v_U8_t nRegDomainDfsChannels; + tHalHandle hHal; + tpAniSirGlobal pMac; + + hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx); + + if (NULL == channels) + return; + + if (NULL == hHal) { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + FL("invalid hHal")); + return; + } + + pMac = PMAC_STRUCT(hHal); + if (NULL == pMac) { + VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, + FL("invalid pMac")); + return; + } + + /* + * Mark the current channel on which Radar is found + * in the NOL list as eSAP_DFS_CHANNEL_UNAVAILABLE. + */ + + psapDfsChannelNolList = pMac->sap.SapDfsInfo.sapDfsChannelNolList; + nRegDomainDfsChannels = pMac->sap.SapDfsInfo.numCurrentRegDomainDfsChannels; + + for (i = 0; i < numChannels; i++) { + for (j = 0; j <= nRegDomainDfsChannels; j++) + { + if (psapDfsChannelNolList[j].dfs_channel_number == + channels[i]) + { + /* If channel is already in NOL, don't update it again. + * This is useful when marking bonding channels which are + * already unavailable. + */ + if( psapDfsChannelNolList[j].radar_status_flag == + eSAP_DFS_CHANNEL_UNAVAILABLE) + { + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + FL("Channel=%d already in NOL"), + channels[i]); + } + else + { + /* + * Capture the Radar Found timestamp on the Current + * Channel in ms. + */ + psapDfsChannelNolList[j].radar_found_timestamp = time; + /* Mark the Channel to be UNAVAILABLE for next 30 mins */ + psapDfsChannelNolList[j].radar_status_flag = + eSAP_DFS_CHANNEL_UNAVAILABLE; + + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, + FL("Channel=%d Added to NOL LIST"), + channels[i]); + } + } + } + } +} + + +/* + * This Function is to get bonding channels from primary channel. + * + */ +v_U8_t sapGetBondingChannels(ptSapContext sapContext, v_U8_t channel, + v_U8_t* channels, v_U8_t size, ePhyChanBondState chanBondState) +{ + tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx); + tpAniSirGlobal pMac; + v_U8_t numChannel; + + if(channels == NULL) + return 0; + + if(size < MAX_BONDED_CHANNELS) return 0; + + if (NULL != hHal) + { + pMac = PMAC_STRUCT( hHal ); + } + else + return 0; + + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO, + FL("cbmode: %d, channel: %d"), + chanBondState, channel); + + switch (chanBondState) { + case PHY_SINGLE_CHANNEL_CENTERED: + numChannel = 1; + channels[0] = channel; + break; + case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY: + numChannel = 2; + channels[0] = channel - 4; + channels[1] = channel; + break; + case PHY_DOUBLE_CHANNEL_LOW_PRIMARY: + numChannel = 2; + channels[0] = channel; + channels[1] = channel + 4; + break; +#ifdef WLAN_FEATURE_11AC + case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW: + numChannel = 4; + channels[0] = channel; + channels[1] = channel + 4; + channels[2] = channel + 8; + channels[3] = channel + 12; + break; + case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW: + numChannel = 4; + channels[0] = channel - 4; + channels[1] = channel; + channels[2] = channel + 4; + channels[3] = channel + 8; + break; + case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH: + numChannel = 4; + channels[0] = channel - 8; + channels[1] = channel - 4; + channels[2] = channel; + channels[3] = channel + 4; + break; + case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH: + numChannel = 4; + channels[0] = channel - 12; + channels[1] = channel - 8; + channels[2] = channel - 4; + channels[3] = channel; + break; +#endif + default: + numChannel = 1; + channels[0] = channel; + break; + } + + return numChannel; +} + +/* + * This Function Checks if a given bonded channel is AVAILABLE or USABLE * for DFS operation. */ v_BOOL_t -sapDfsIsChannelInNolList(ptSapContext sapContext, v_U8_t channelNumber) +sapDfsIsChannelInNolList(ptSapContext sapContext, v_U8_t channelNumber, + ePhyChanBondState chanBondState) { - int i; - unsigned long timeElapsedSinceLastRadar,timeWhenRadarFound,currentTime = 0; + int i, j; + v_U64_t timeElapsedSinceLastRadar,timeWhenRadarFound,currentTime = 0; tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx); tpAniSirGlobal pMac; + v_U8_t channels[MAX_BONDED_CHANNELS]; + v_U8_t numChannels; if (NULL == hHal) { @@ -1002,17 +1163,24 @@ sapDfsIsChannelInNolList(ptSapContext sapContext, v_U8_t channelNumber) return VOS_FALSE; } - for (i =0 ; i< pMac->sap.SapDfsInfo.numCurrentRegDomainDfsChannels; i++) + /* get the bonded channels */ + numChannels = sapGetBondingChannels(sapContext, channelNumber, channels, + MAX_BONDED_CHANNELS, chanBondState ); + + /* check for NOL, first on will break the loop */ + for (j=0; j < numChannels; j++) { - if(pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] - .dfs_channel_number == channelNumber) - { - if ( (pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] - .radar_status_flag == eSAP_DFS_CHANNEL_USABLE) - || - (pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] - .radar_status_flag == eSAP_DFS_CHANNEL_AVAILABLE) ) - { + for (i =0 ; i< pMac->sap.SapDfsInfo.numCurrentRegDomainDfsChannels; i++) + { + if(pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] + .dfs_channel_number == channels[j]) + { + if ( (pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] + .radar_status_flag == eSAP_DFS_CHANNEL_USABLE) + || + (pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] + .radar_status_flag == eSAP_DFS_CHANNEL_AVAILABLE) ) + { /* * Allow SAP operation on this channel * either the DFS channel has not been used @@ -1021,16 +1189,13 @@ sapDfsIsChannelInNolList(ptSapContext sapContext, v_U8_t channelNumber) * so, return FALSE. */ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_LOW, - "%s[%d]: Channel = %d" - "Not in NOL LIST, CHANNEL AVAILABLE", - __func__, __LINE__, pMac->sap.SapDfsInfo - .sapDfsChannelNolList[i] - .dfs_channel_number); - return VOS_FALSE; - } - else if (pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] - .radar_status_flag == eSAP_DFS_CHANNEL_UNAVAILABLE) - { + FL("Channel = %d not in NOL, CHANNEL AVAILABLE"), + pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] + .dfs_channel_number); + } + else if (pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] + .radar_status_flag == eSAP_DFS_CHANNEL_UNAVAILABLE) + { /* * If a DFS Channel is UNAVAILABLE then * check to see if it is past Non-occupancy-period @@ -1039,44 +1204,67 @@ sapDfsIsChannelInNolList(ptSapContext sapContext, v_U8_t channelNumber) * as the channel is not anymore in NON-Occupancy-Period. */ timeWhenRadarFound = pMac->sap.SapDfsInfo - .sapDfsChannelNolList[i] - .radar_found_timestamp; - currentTime = vos_timer_get_system_time(); + .sapDfsChannelNolList[i] + .radar_found_timestamp; + currentTime = vos_get_monotonic_boottime(); timeElapsedSinceLastRadar = currentTime - timeWhenRadarFound; - if (timeElapsedSinceLastRadar >= SAP_DFS_NON_OCCUPANCY_PERIOD) + if (timeElapsedSinceLastRadar >= SAP_DFS_NON_OCCUPANCY_PERIOD) { - pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] - .radar_status_flag = eSAP_DFS_CHANNEL_AVAILABLE; - - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_LOW, - "%s[%d]:Channel=%d" - "Not in NOL LIST,CHANNEL AVAILABLE", - __func__, __LINE__, pMac->sap.SapDfsInfo - .sapDfsChannelNolList[i] - .dfs_channel_number); - return VOS_FALSE; + pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] + .radar_status_flag = eSAP_DFS_CHANNEL_AVAILABLE; + pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] + .radar_found_timestamp = 0; + + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_LOW, + FL("Channel=%d not in NOL, CHANNEL AVAILABLE"), + pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] + .dfs_channel_number); } else { - /* - * Channel is not still available for SAP operation - * so return TRUE; As the Channel is still - * in Non-occupancy-Period. - */ - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_LOW, - "%s[%d]:Channel=%d" - "still in NOL LIST,CHANNEL UNAVAILABLE", - __func__, __LINE__, pMac->sap.SapDfsInfo - .sapDfsChannelNolList[i] - .dfs_channel_number); - return VOS_TRUE; + /* + * Channel is not still available for SAP operation + * so return TRUE; As the Channel is still + * in Non-occupancy-Period. + */ + VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_LOW, + FL("Channel=%d still in NOL, CHANNEL UNAVAILABLE"), + pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] + .dfs_channel_number); + break; } - } - } + } + } /* if */ + } /* loop for dfs channels */ + + if (i < pMac->sap.SapDfsInfo.numCurrentRegDomainDfsChannels) + break; + + } /* loop for bonded channels */ + + /* if any of the channel is not available, mark all available channels as + * unavailable with same time stamp. + */ + if (j < numChannels && + i < pMac->sap.SapDfsInfo.numCurrentRegDomainDfsChannels) + { + sapMarkDfsChannels(sapContext, + channels, + numChannels, + pMac->sap.SapDfsInfo.sapDfsChannelNolList[i] + .radar_found_timestamp); + + /* set DFS-NOL back to keep it update-to-date in CNSS */ + sapSignalHDDevent(sapContext, NULL, eSAP_DFS_NOL_SET, + (v_PVOID_t) eSAP_STATUS_SUCCESS); + + return VOS_TRUE; } + return VOS_FALSE; } + /*========================================================================== FUNCTION sapGotoChannelSel @@ -2151,6 +2339,7 @@ sapFsm VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE; tHalHandle hHal = VOS_GET_HAL_CB(sapContext->pvosGCtx); tpAniSirGlobal pMac; + v_U32_t cbMode; if (NULL == hHal) { @@ -2309,16 +2498,24 @@ sapFsm } } #endif + + /* get the bonding mode */ + if (sapContext->channel <= 14) + cbMode = sme_GetChannelBondingMode24G(hHal); + else + cbMode = sme_GetChannelBondingMode5G(hHal); + /* check if channel is in DFS_NOL */ - if (sapDfsIsChannelInNolList(sapContext, sapContext->channel)) + if (sapDfsIsChannelInNolList(sapContext, sapContext->channel, + cbMode)) { v_U8_t ch; /* find a new available channel */ ch = sapRandomChannelSel(sapContext); VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, - "%s: channel %d is in DFS_NOL, StartBss on new channel %d", - __func__, sapContext->channel, ch); + FL("channel %d is in NOL, StartBss on new channel %d"), + sapContext->channel, ch); sapContext->channel = ch; sme_SelectCBMode(hHal, @@ -3358,9 +3555,6 @@ static VOS_STATUS sapGet5GHzChannelList(ptSapContext sapContext) v_U8_t sapIndicateRadar(ptSapContext sapContext, tSirSmeDfsEventInd *dfs_event) { v_U8_t target_channel = 0; - int i, j; - tSapDfsNolInfo *psapDfsChannelNolList = NULL; - v_U8_t nRegDomainDfsChannels; tHalHandle hHal; tpAniSirGlobal pMac; @@ -3401,35 +3595,8 @@ v_U8_t sapIndicateRadar(ptSapContext sapContext, tSirSmeDfsEventInd *dfs_event) sapGet5GHzChannelList(sapContext); - /* - * Mark the current channel on which Radar is found - * in the NOL list as eSAP_DFS_CHANNEL_UNAVAILABLE. - */ - - psapDfsChannelNolList = pMac->sap.SapDfsInfo.sapDfsChannelNolList; - nRegDomainDfsChannels = pMac->sap.SapDfsInfo.numCurrentRegDomainDfsChannels; - for (i = 0; i < dfs_event->chan_list.nchannels; i++) { - for (j = 0; j <= nRegDomainDfsChannels; j++) - { - if (psapDfsChannelNolList[j].dfs_channel_number == - dfs_event->chan_list.channels[i]) - { - /* - * Capture the Radar Found timestamp on the Current Channel in - * ms. - */ - psapDfsChannelNolList[j].radar_found_timestamp = - vos_timer_get_system_time(); - /* Mark the Channel to be UNAVAILABLE for next 30 mins */ - psapDfsChannelNolList[j].radar_status_flag = - eSAP_DFS_CHANNEL_UNAVAILABLE; - - VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, - FL("Channel = %d Added to NOL LIST"), - dfs_event->chan_list.channels[i]); - } - } - } + sapMarkDfsChannels(sapContext, dfs_event->chan_list.channels, + dfs_event->chan_list.nchannels, vos_get_monotonic_boottime()); /* * (1) skip static turbo channel as it will require STA to be in @@ -3513,7 +3680,7 @@ static int sapStopDfsCacTimer(ptSapContext sapContext) "In %s invalid hHal", __func__); return 0; } - pMac = PMAC_STRUCT( hHal ); + pMac = PMAC_STRUCT(hHal); if (VOS_TIMER_STATE_RUNNING != vos_timer_getCurrentState( diff --git a/CORE/SAP/src/sapInternal.h b/CORE/SAP/src/sapInternal.h index 46f1f77ecc79..6056e9507637 100644 --- a/CORE/SAP/src/sapInternal.h +++ b/CORE/SAP/src/sapInternal.h @@ -89,8 +89,8 @@ when who what, where, why /*---------------------------------------------------------------------------- * Defines * -------------------------------------------------------------------------*/ -//DFS Non Occupancy Period =30 minutes, in milliseconds -#define SAP_DFS_NON_OCCUPANCY_PERIOD (30 * 60 * 1000 ) +//DFS Non Occupancy Period =30 minutes, in microseconds +#define SAP_DFS_NON_OCCUPANCY_PERIOD (30 * 60 * 1000 * 1000) #define SAP_DEBUG // Used to enable or disable security on the BT-AMP link @@ -830,7 +830,7 @@ sapInitDfsChannelNolList(ptSapContext sapContext); * for DFS operation. */ v_BOOL_t sapDfsIsChannelInNolList(ptSapContext sapContext, - v_U8_t channelNumber); + v_U8_t channelNumber, ePhyChanBondState chanBondState); /*--------------------------------------------------------------------------- FUNCTION sapDfsCacTimerCallback diff --git a/CORE/SAP/src/sapModule.c b/CORE/SAP/src/sapModule.c index 1333f11918b1..14af1d03c609 100644 --- a/CORE/SAP/src/sapModule.c +++ b/CORE/SAP/src/sapModule.c @@ -3245,8 +3245,10 @@ WLANSAP_Get_DfsNol(v_PVOID_t pSapCtx) ptSapContext sapContext = (ptSapContext)pSapCtx; v_PVOID_t hHal = NULL; tpAniSirGlobal pMac = NULL; - unsigned long current_time, elapsed_time, found_time, left_time; + v_U64_t current_time, found_time, elapsed_time; + unsigned long left_time; tSapDfsNolInfo *dfs_nol = NULL; + v_BOOL_t bAvailable = FALSE; if (NULL == sapContext) { @@ -3282,13 +3284,20 @@ WLANSAP_Get_DfsNol(v_PVOID_t pSapCtx) if (!dfs_nol[i].dfs_channel_number) continue; - current_time = vos_timer_get_system_time(); + current_time = vos_get_monotonic_boottime(); found_time = dfs_nol[i].radar_found_timestamp; elapsed_time = abs(current_time - found_time); - /* check if it is out of non occupancy period */ - if (elapsed_time >= SAP_DFS_NON_OCCUPANCY_PERIOD) + /* check if channel is available + * if either channel is usable or available, or timer expired 30mins + */ + bAvailable = + ((dfs_nol[i].radar_status_flag == eSAP_DFS_CHANNEL_AVAILABLE) || + (dfs_nol[i].radar_status_flag == eSAP_DFS_CHANNEL_USABLE) || + (elapsed_time >= SAP_DFS_NON_OCCUPANCY_PERIOD)); + + if (bAvailable) { dfs_nol[i].radar_status_flag = eSAP_DFS_CHANNEL_AVAILABLE; dfs_nol[i].radar_found_timestamp = 0; @@ -3301,10 +3310,10 @@ WLANSAP_Get_DfsNol(v_PVOID_t pSapCtx) /* the time left in min */ left_time = SAP_DFS_NON_OCCUPANCY_PERIOD - elapsed_time; - left_time = left_time / (60 * 1000); + left_time = left_time / (60 * 1000 * 1000); VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR, - "%s: Channel[%d] is UNAVAILABLE [%ld min left]", + "%s: Channel[%d] is UNAVAILABLE [%lu min left]", __func__, dfs_nol[i].dfs_channel_number, left_time); @@ -3429,5 +3438,9 @@ WLANSAP_Set_DfsNol(v_PVOID_t pSapCtx, eSapDfsNolType conf) __func__, conf); } + /* set DFS-NOL back to keep it update-to-date in CNSS */ + sapSignalHDDevent(sapContext, NULL, eSAP_DFS_NOL_SET, + (v_PVOID_t) eSAP_STATUS_SUCCESS); + return VOS_STATUS_SUCCESS; } diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c index 398da417aa3a..574e3f754e04 100644 --- a/CORE/SERVICES/BMI/ol_fw.c +++ b/CORE/SERVICES/BMI/ol_fw.c @@ -1096,6 +1096,27 @@ ol_configure_target(struct ol_softc *scn) } #endif +#ifdef WLAN_FEATURE_LPSS + if (scn->enablelpasssupport) { + if (BMIReadMemory(scn->hif_hdl, + host_interest_item_address(scn->target_type, + offsetof(struct host_interest_s, hi_option_flag2)), + (A_UCHAR *)¶m, 4, scn)!= A_OK) { + printk("BMIReadMemory for setting LPASS Support failed\n"); + return A_ERROR; + } + + param |= HI_OPTION_DBUART_SUPPORT; + if (BMIWriteMemory(scn->hif_hdl, + host_interest_item_address(scn->target_type, + offsetof(struct host_interest_s, hi_option_flag2)), + (A_UCHAR *)¶m, 4, scn) != A_OK) { + printk("BMIWriteMemory for setting LPASS Support failed\n"); + return A_ERROR; + } + } +#endif + /* If host is running on a BE CPU, set the host interest area */ { #ifdef BIG_ENDIAN_HOST diff --git a/CORE/SERVICES/COMMON/ol_if_athvar.h b/CORE/SERVICES/COMMON/ol_if_athvar.h index 1be75d1f54ff..110f4a384fc5 100644 --- a/CORE/SERVICES/COMMON/ol_if_athvar.h +++ b/CORE/SERVICES/COMMON/ol_if_athvar.h @@ -241,6 +241,10 @@ struct ol_softc { unsigned long ramdump_address; unsigned long ramdump_size; #endif + +#ifdef WLAN_FEATURE_LPSS + bool enablelpasssupport; +#endif }; #ifdef PERE_IP_HDR_ALIGNMENT_WAR diff --git a/CORE/SERVICES/COMMON/wmi_services.h b/CORE/SERVICES/COMMON/wmi_services.h index 26c9c7db9f34..b4145db233d4 100644 --- a/CORE/SERVICES/COMMON/wmi_services.h +++ b/CORE/SERVICES/COMMON/wmi_services.h @@ -110,6 +110,7 @@ typedef enum { WMI_SERVICE_D0WOW, /* D0-WOW Support */ WMI_SERVICE_HSOFFLOAD, /* Hotspot offload feature Support */ WMI_SERVICE_ROAM_HO_OFFLOAD, /* roam handover offload */ + WMI_SERVICE_RX_FULL_REORDER, /* target-based Rx full reorder */ WMI_MAX_SERVICE=128 /* max service */ } WMI_SERVICE; diff --git a/CORE/SERVICES/COMMON/wmi_tlv_defs.h b/CORE/SERVICES/COMMON/wmi_tlv_defs.h index c3873665cbca..742549c4286f 100644 --- a/CORE/SERVICES/COMMON/wmi_tlv_defs.h +++ b/CORE/SERVICES/COMMON/wmi_tlv_defs.h @@ -498,6 +498,8 @@ typedef enum { WMITLV_TAG_STRUC_wmi_extwow_enable_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_extwow_set_app_type1_params_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_extwow_set_app_type2_params_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_lpi_status_event_fixed_param, + WMITLV_TAG_STRUC_wmi_lpi_handoff_event_fixed_param, } WMITLV_TAG_ID; /* @@ -766,7 +768,9 @@ typedef enum { OP(WMI_EXTSCAN_HOTLIST_MATCH_EVENTID) \ OP(WMI_EXTSCAN_CAPABILITIES_EVENTID) \ OP(WMI_D0_WOW_DISABLE_ACK_EVENTID) \ - OP(WMI_ROAM_SYNCH_EVENTID) + OP(WMI_ROAM_SYNCH_EVENTID) \ + OP(WMI_LPI_STATUS_EVENTID) \ + OP(WMI_LPI_HANDOFF_EVENTID) /* TLV definitions of WMI commands */ @@ -1805,6 +1809,16 @@ WMITLV_CREATE_PARAM_STRUC(WMI_LPI_STOP_SCAN_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_LPI_RESULT_EVENTID); +/* LPI Status Event */ +#define WMITLV_TABLE_WMI_LPI_STATUS_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_lpi_status_event_fixed_param, wmi_lpi_status_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_LPI_STATUS_EVENTID); + +/* LPI Handoff Event */ +#define WMITLV_TABLE_WMI_LPI_HANDOFF_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_lpi_handoff_event_fixed_param, wmi_lpi_handoff_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_LPI_HANDOFF_EVENTID); + /* Thermal Manager Params*/ #define WMITLV_TABLE_WMI_THERMAL_MGMT_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_thermal_mgmt_cmd_fixed_param, wmi_thermal_mgmt_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h index 64aa45e218f6..cffcb13d4dfa 100644 --- a/CORE/SERVICES/COMMON/wmi_unified.h +++ b/CORE/SERVICES/COMMON/wmi_unified.h @@ -230,7 +230,7 @@ typedef enum { WMI_PDEV_GET_TPC_CONFIG_CMDID, /** set the base MAC address for the physical device before a VDEV is created. - * For firmware that doesn`t support this feature and this command, the pdev + * For firmware that doesnt support this feature and this command, the pdev * MAC address will not be changed. */ WMI_PDEV_SET_BASE_MACADDR_CMDID, @@ -897,6 +897,8 @@ typedef enum { /* LPI Event */ WMI_LPI_RESULT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_LPI), + WMI_LPI_STATUS_EVENTID, + WMI_LPI_HANDOFF_EVENTID, /* ExtScan events */ WMI_EXTSCAN_START_STOP_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_EXTSCAN), @@ -1640,22 +1642,26 @@ typedef struct { /** add wild card ssid probe request even though ssid_list is specified. */ #define WMI_SCAN_ADD_BCAST_PROBE_REQ 0x2 /** add cck rates to rates/xrate ie for the generated probe request */ -#define WMI_SCAN_ADD_CCK_RATES 0x4 +#define WMI_SCAN_ADD_CCK_RATES 0x4 /** add ofdm rates to rates/xrate ie for the generated probe request */ -#define WMI_SCAN_ADD_OFDM_RATES 0x8 +#define WMI_SCAN_ADD_OFDM_RATES 0x8 /** To enable indication of Chan load and Noise floor to host */ -#define WMI_SCAN_CHAN_STAT_EVENT 0x10 +#define WMI_SCAN_CHAN_STAT_EVENT 0x10 /** Filter Probe request frames */ -#define WMI_SCAN_FILTER_PROBE_REQ 0x20 +#define WMI_SCAN_FILTER_PROBE_REQ 0x20 /**When set, not to scan DFS channels*/ -#define WMI_SCAN_BYPASS_DFS_CHN 0x40 +#define WMI_SCAN_BYPASS_DFS_CHN 0x40 /**When set, certain errors are ignored and scan continues. * Different FW scan engine may use its own logic to decide what errors to ignore*/ -#define WMI_SCAN_CONTINUE_ON_ERROR 0x80 +#define WMI_SCAN_CONTINUE_ON_ERROR 0x80 /** Enable promiscous mode for ese */ -#define WMI_SCAN_FILTER_PROMISCOUS 0x100 +#define WMI_SCAN_FILTER_PROMISCOUS 0x100 /** allow to send probe req on DFS channel */ #define WMI_SCAN_FLAG_FORCE_ACTIVE_ON_DFS 0x200 +/** add TPC content in probe req frame */ +#define WMI_SCAN_ADD_TPC_IE_IN_PROBE_REQ 0x400 +/** add DS content in probe req frame */ +#define WMI_SCAN_ADD_DS_IE_IN_PROBE_REQ 0x800 /** WMI_SCAN_CLASS_MASK must be the same value as IEEE80211_SCAN_CLASS_MASK */ #define WMI_SCAN_CLASS_MASK 0xFF000000 @@ -2324,6 +2330,10 @@ typedef enum { WMI_PDEV_PARAM_LED_SYS_STATE, /** Enable/Disable LED */ WMI_PDEV_PARAM_LED_ENABLE, + /** set DIRECT AUDIO time latency */ + WMI_PDEV_PARAM_AUDIO_OVER_WLAN_LATENCY, + /** set DIRECT AUDIO Feature ENABLE */ + WMI_PDEV_PARAM_AUDIO_OVER_WLAN_ENABLE, } WMI_PDEV_PARAM; typedef enum { @@ -7018,10 +7028,23 @@ typedef struct A_UINT32 netWorkStartIndex; /* indicate the start index of network info*/ } wmi_batch_scan_result_scan_list; -#define LPI_IE_BITMAP_BSSID 0x0001 -#define LPI_IE_BITMAP_SSID 0x0002 -#define LPI_IE_BITMAP_RSSI 0x0004 -#define LPI_IE_BITMAP_CHAN 0x0008 +#define LPI_IE_BITMAP_BSSID 0x0001 +#define LPI_IE_BITMAP_IS_PROBE 0x0002 +#define LPI_IE_BITMAP_SSID 0x0004 +#define LPI_IE_BITMAP_RSSI 0x0008 +#define LPI_IE_BITMAP_CHAN 0x0010 +#define LPI_IE_BITMAP_AP_TX_PWR 0x0020 +#define LPI_IE_BITMAP_TX_RATE 0x0040 +#define LPI_IE_BITMAP_80211_MC_SUPPORT 0x0080 +#define LPI_IE_BITMAP_TSF_TIMER_VALUE 0x0100 +#define LPI_IE_BITMAP_AGE_OF_MESAUREMENT 0x0200 +#define LPI_IE_BITMAP_CONN_STATUS 0x0400 +#define LPI_IE_BITMAP_MSAP_IE 0x0800 +#define LPI_IE_BITMAP_SEC_STATUS 0x1000 +#define LPI_IE_BITMAP_DEVICE_TYPE 0x2000 +#define LPI_IE_BITMAP_CHAN_IS_PASSIVE 0x4000 +#define LPI_IE_BITMAP_DWELL_TIME 0x8000 +#define LPI_IE_BITMAP_ALL 0xFFFF typedef struct { A_UINT32 tlv_header; @@ -7098,8 +7121,8 @@ typedef struct { typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_stop_scan_cmd_fixed_param */ - /** requestor requesting cancel */ - A_UINT32 requestor; + /** Scan requestor ID */ + A_UINT32 scan_req_id; /** Scan ID */ A_UINT32 scan_id; /** @@ -7117,16 +7140,57 @@ typedef struct { A_UINT32 vdev_id; } wmi_lpi_stop_scan_cmd_fixed_param; +typedef enum { + WMI_LPI_DEVICE_TYPE_AP = 1, + WMI_LPI_DEVICE_TYPE_P2P = 2, + WMI_LPI_DEVICE_TYPE_NAN = 3, +}wmi_lpi_device_type; + typedef struct { A_UINT32 tlv_header; + /** Scan requestor ID */ + A_UINT32 scan_req_id; A_UINT32 ie_bitmap; A_UINT32 data_len; - /* This buffer is used to send lpi scan result data - * A_UINT8 data[]; // length in byte given by field data_len. - */ } wmi_lpi_result_event_fixed_param; +typedef enum { + /** User scan Request completed */ + WMI_LPI_STATUS_SCAN_REQ_COMPLED = 0, + /** User Request was never serviced */ + WMI_LPI_STATUS_DROPPED_REQ = 1, + /** Illegal channel Req */ + WMI_LPI_STATUS_ILLEGAL_CHAN_REQ = 2, + /** Illegal Operation Req */ + WMI_LPI_STATUS_ILLEGAL_OPER_REQ = 3, + /** Request Aborted */ + WMI_LPI_STATUS_REQ_ABORTED = 4, + /** Request Timed Out */ + WMI_LPI_STATUS_REQ_TIME_OUT = 5, + /** Medium Bussy, already there + * is a scan is going on */ + WMI_LPI_STATUS_MEDIUM_BUSSY = 6, +}wmi_lpi_staus; + +typedef struct +{ + A_UINT32 tlv_header; + wmi_lpi_staus status; + /** Scan requestor ID */ + A_UINT32 scan_req_id; +} wmi_lpi_status_event_fixed_param; + + +typedef struct +{ + A_UINT32 tlv_header; + wmi_mac_addr bssid; + wmi_ssid ssid; + A_UINT16 freq; + A_UINT32 rssi; +} wmi_lpi_handoff_event_fixed_param; + typedef struct { A_UINT32 tlv_header; diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index c2fe8cd0b70d..ff15cbfae4ef 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -1327,6 +1327,7 @@ typedef struct tagCsrRoamInfo tANI_U8* assocReqPtr; tANI_S8 rxRssi; + tANI_U32 maxRateFlags; tSirSmeDfsEventInd dfs_event; tSirChanChangeResponse *channelChangeRespEvent; tANI_U8 timingMeasCap; diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index e3aeb34c3c47..3f2bf6d0ee7b 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -5688,6 +5688,7 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman roamInfo.staId = ( tANI_U8 )pJoinRsp->staId; roamInfo.ucastSig = ( tANI_U8 )pJoinRsp->ucastSig; roamInfo.bcastSig = ( tANI_U8 )pJoinRsp->bcastSig; + roamInfo.maxRateFlags = pJoinRsp->maxRateFlags; roamInfo.timingMeasCap = pJoinRsp->timingMeasCap; #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH if (pMac->roam.configParam.cc_switch_mode @@ -6795,7 +6796,7 @@ eHalStatus csrRoamEnqueuePreauth(tpAniSirGlobal pMac, tANI_U32 sessionId, tpSirB return (status); } -eHalStatus csrRoamDequeuePreauth(tpAniSirGlobal pMac) +eHalStatus csrDequeueRoamCommand(tpAniSirGlobal pMac, eCsrRoamReason reason) { tListElem *pEntry; tSmeCmd *pCommand; @@ -6804,14 +6805,24 @@ eHalStatus csrRoamDequeuePreauth(tpAniSirGlobal pMac) { pCommand = GET_BASE_ADDR( pEntry, tSmeCmd, Link ); if ( (eSmeCommandRoam == pCommand->command) && - (eCsrPerformPreauth == pCommand->u.roamCmd.roamReason)) + (eCsrPerformPreauth == reason)) { smsLog( pMac, LOG1, FL("DQ-Command = %d, Reason = %d"), pCommand->command, pCommand->u.roamCmd.roamReason); if (csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK )) { csrReleaseCommandPreauth( pMac, pCommand ); } - } else { + } + else if ((eSmeCommandRoam == pCommand->command) && + (eCsrSmeIssuedFTReassoc == reason)) + { + smsLog( pMac, LOG1, FL("DQ-Command = %d, Reason = %d"), + pCommand->command, pCommand->u.roamCmd.roamReason); + if (csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK )) { + csrReleaseCommandRoam( pMac, pCommand ); + } + } + else { smsLog( pMac, LOGE, FL("Command = %d, Reason = %d "), pCommand->command, pCommand->u.roamCmd.roamReason); } diff --git a/CORE/SME/src/csr/csrCmdProcess.c b/CORE/SME/src/csr/csrCmdProcess.c index ff05c32bf0ff..9e6cdb3da86c 100644 --- a/CORE/SME/src/csr/csrCmdProcess.c +++ b/CORE/SME/src/csr/csrCmdProcess.c @@ -158,7 +158,20 @@ eHalStatus csrMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf ) } else { - smsLog(pMac, LOGW, " Message 0x%04X is not handled by CSR. CSR state is %d ", pSmeRsp->messageType, pMac->roam.curState[pSmeRsp->sessionId]); + smsLog(pMac, LOGE, "Message 0x%04X is not handled by CSR " + " CSR state is %d session Id %d", pSmeRsp->messageType, + pMac->roam.curState[pSmeRsp->sessionId], pSmeRsp->sessionId); + + if (eWNI_SME_FT_PRE_AUTH_RSP == pSmeRsp->messageType) { + smsLog(pMac, LOGE, "Dequeue eSmeCommandRoam command" + " with reason eCsrPerformPreauth"); + csrDequeueRoamCommand(pMac, eCsrPerformPreauth); + } + else if (eWNI_SME_REASSOC_RSP == pSmeRsp->messageType) { + smsLog(pMac, LOGE, "Dequeue eSmeCommandRoam command" + " with reason eCsrSmeIssuedFTReassoc"); + csrDequeueRoamCommand(pMac, eCsrSmeIssuedFTReassoc); + } } break; } diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h index 46be5f9c1193..d6fc72f0cbc4 100644 --- a/CORE/SME/src/csr/csrInsideApi.h +++ b/CORE/SME/src/csr/csrInsideApi.h @@ -1000,7 +1000,7 @@ eHalStatus csrGetCurrentCountryCode(tpAniSirGlobal pMac, tANI_U8 *pCountry); eHalStatus csrRoamEnqueuePreauth(tpAniSirGlobal pMac, tANI_U32 sessionId, tpSirBssDescription pBssDescription, eCsrRoamReason reason, tANI_BOOLEAN fImmediate); -eHalStatus csrRoamDequeuePreauth(tpAniSirGlobal pMac); +eHalStatus csrDequeueRoamCommand(tpAniSirGlobal pMac, eCsrRoamReason reason); #ifdef FEATURE_WLAN_LFR void csrInitOccupiedChannelsList(tpAniSirGlobal pMac); tANI_BOOLEAN csrNeighborRoamIsNewConnectedProfile(tpAniSirGlobal pMac); diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c index 4062ae50845e..ebae4e53dc2c 100644 --- a/CORE/SME/src/csr/csrNeighborRoam.c +++ b/CORE/SME/src/csr/csrNeighborRoam.c @@ -1512,7 +1512,7 @@ eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus l #endif DEQ_PREAUTH: - csrRoamDequeuePreauth(pMac); + csrDequeueRoamCommand(pMac, eCsrPerformPreauth); return preauthProcessed; } #endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */ diff --git a/CORE/UTILS/FWLOG/dbglog_host.c b/CORE/UTILS/FWLOG/dbglog_host.c index 5a13ba3ed53d..e1fa2f31d964 100644 --- a/CORE/UTILS/FWLOG/dbglog_host.c +++ b/CORE/UTILS/FWLOG/dbglog_host.c @@ -1156,6 +1156,58 @@ char * DBG_MSG_ARR[WLAN_MODULE_ID_MAX][MAX_DBG_MSGS] = "IBSS_PS_DBGID_BCN_ATIM_WIN_MISMATCH", "IBSS_PS_DBGID_RX_CHAINMASK_CHANGE", }, + { + /* HIF UART Interface DBGIDs */ + "HIF_UART_DBGID_START", + "HIF_UART_DBGID_POWER_STATE", + "HIF_UART_DBGID_TXRX_FLOW", + "HIF_UART_DBGID_TXRX_CTRL_CHAR", + "HIF_UART_DBGID_TXRX_BUF_DUMP", + }, + { + /* EXTSCAN DBGIDs */ + "EXTSCAN_START", + "EXTSCAN_STOP", + "EXTSCAN_CLEAR_ENTRY_CONTENT", + "EXTSCAN_GET_FREE_ENTRY_SUCCESS", + "EXTSCAN_GET_FREE_ENTRY_INCONSISTENT", + "EXTSCAN_GET_FREE_ENTRY_NO_MORE_ENTRIES", + "EXTSCAN_CREATE_ENTRY_SUCCESS", + "EXTSCAN_CREATE_ENTRY_ERROR", + "EXTSCAN_SEARCH_SCAN_ENTRY_QUEUE", + "EXTSCAN_SEARCH_SCAN_ENTRY_KEY_FOUND", + "EXTSCAN_SEARCH_SCAN_ENTRY_KEY_NOT_FOUND", + "EXTSCAN_ADD_ENTRY", + "EXTSCAN_BUCKET_SEND_OPERATION_EVENT", + "EXTSCAN_BUCKET_SEND_OPERATION_EVENT_FAILED", + "EXTSCAN_BUCKET_START_SCAN_CYCLE", + "EXTSCAN_BUCKET_PERIODIC_TIMER", + "EXTSCAN_SEND_START_STOP_EVENT", + "EXTSCAN_NOTIFY_WLAN_CHANGE", + "EXTSCAN_NOTIFY_WLAN_HOTLIST_MATCH", + "EXTSCAN_MAIN_RECEIVED_FRAME", + "EXTSCAN_MAIN_NO_SSID_IE", + "EXTSCAN_MAIN_MALFORMED_FRAME", + "EXTSCAN_FIND_BSSID_BY_REFERENCE", + "EXTSCAN_FIND_BSSID_BY_REFERENCE_ERROR", + "EXTSCAN_NOTIFY_TABLE_USAGE", + "EXTSCAN_FOUND_RSSI_ENTRY", + "EXTSCAN_BSSID_FOUND_RSSI_SAMPLE", + "EXTSCAN_BSSID_ADDED_RSSI_SAMPLE", + "EXTSCAN_BSSID_REPLACED_RSSI_SAMPLE", + "EXTSCAN_BSSID_TRANSFER_CURRENT_SAMPLES", + "EXTSCAN_BUCKET_PROCESS_SCAN_EVENT", + "EXTSCAN_BUCKET_CANNOT_FIND_BUCKET", + "EXTSCAN_START_SCAN_REQUEST_FAILED", + "EXTSCAN_BUCKET_STOP_CURRENT_SCANS", + "EXTSCAN_BUCKET_SCAN_STOP_REQUEST", + "EXTSCAN_BUCKET_PERIODIC_TIMER_ERROR", + "EXTSCAN_BUCKET_START_OPERATION", + "EXTSCAN_START_INTERNAL_ERROR", + "EXTSCAN_NOTIFY_HOTLIST_MATCH", + "EXTSCAN_CONFIG_HOTLIST_TABLE", + "EXTSCAN_CONFIG_WLAN_CHANGE_TABLE", + }, }; int dbglog_module_log_enable(wmi_unified_t wmi_handle, A_UINT32 mod_id, diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c index 8965fd5838a7..f72e95c70844 100644 --- a/CORE/VOSS/src/vos_api.c +++ b/CORE/VOSS/src/vos_api.c @@ -365,6 +365,9 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) scn->enableuartprint = pHddCtx->cfg_ini->enablefwprint; scn->enablefwlog = pHddCtx->cfg_ini->enablefwlog; scn->max_no_of_peers = pHddCtx->cfg_ini->maxNumberOfPeers; +#ifdef WLAN_FEATURE_LPSS + scn->enablelpasssupport = pHddCtx->cfg_ini->enablelpasssupport; +#endif /* Initialize BMI and Download firmware */ if (bmi_download_firmware(scn)) { diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini index f5c9eaabb537..c9cdee6e5633 100755 --- a/firmware_bin/WCNSS_qcom_cfg.ini +++ b/firmware_bin/WCNSS_qcom_cfg.ini @@ -583,6 +583,10 @@ gPNOScanSupport=1 # Enable/Disable RX full reorder offload gReorderOffloadSupported=1 +#Enable/Disable LPASS support +# 0 to disable, 1 to enable +gEnableLpassSupport=0 + END # Note: Configuration parser would not read anything past the END marker diff --git a/tools/fwdebuglog/cld-fwlog-parser.c b/tools/fwdebuglog/cld-fwlog-parser.c index c9c449d1ac1f..b90c3445e3ac 100644 --- a/tools/fwdebuglog/cld-fwlog-parser.c +++ b/tools/fwdebuglog/cld-fwlog-parser.c @@ -1111,6 +1111,60 @@ char * DBG_MSG_ARR[WLAN_MODULE_ID_MAX][MAX_DBG_MSGS] = "IBSS_PS_DBGID_PS_DESC_BIN_HWM", "IBSS_PS_DBGID_PS_DESC_BIN_LWM", "IBSS_PS_DBGID_PS_KICKOUT_PEER", + "IBSS_PS_DBGID_SET_PEER_PARAM", + "IBSS_PS_DBGID_BCN_ATIM_WIN_MISMATCH", + }, + { + /* HIF UART Interface DBGIDs */ + "HIF_UART_DBGID_START", + "HIF_UART_DBGID_POWER_STATE", + "HIF_UART_DBGID_TXRX_FLOW", + "HIF_UART_DBGID_TXRX_CTRL_CHAR", + "HIF_UART_DBGID_TXRX_BUF_DUMP", + }, + { + /* EXTSCAN DBGIDs */ + "EXTSCAN_START", + "EXTSCAN_STOP", + "EXTSCAN_CLEAR_ENTRY_CONTENT", + "EXTSCAN_GET_FREE_ENTRY_SUCCESS", + "EXTSCAN_GET_FREE_ENTRY_INCONSISTENT", + "EXTSCAN_GET_FREE_ENTRY_NO_MORE_ENTRIES", + "EXTSCAN_CREATE_ENTRY_SUCCESS", + "EXTSCAN_CREATE_ENTRY_ERROR", + "EXTSCAN_SEARCH_SCAN_ENTRY_QUEUE", + "EXTSCAN_SEARCH_SCAN_ENTRY_KEY_FOUND", + "EXTSCAN_SEARCH_SCAN_ENTRY_KEY_NOT_FOUND", + "EXTSCAN_ADD_ENTRY", + "EXTSCAN_BUCKET_SEND_OPERATION_EVENT", + "EXTSCAN_BUCKET_SEND_OPERATION_EVENT_FAILED", + "EXTSCAN_BUCKET_START_SCAN_CYCLE", + "EXTSCAN_BUCKET_PERIODIC_TIMER", + "EXTSCAN_SEND_START_STOP_EVENT", + "EXTSCAN_NOTIFY_WLAN_CHANGE", + "EXTSCAN_NOTIFY_WLAN_HOTLIST_MATCH", + "EXTSCAN_MAIN_RECEIVED_FRAME", + "EXTSCAN_MAIN_NO_SSID_IE", + "EXTSCAN_MAIN_MALFORMED_FRAME", + "EXTSCAN_FIND_BSSID_BY_REFERENCE", + "EXTSCAN_FIND_BSSID_BY_REFERENCE_ERROR", + "EXTSCAN_NOTIFY_TABLE_USAGE", + "EXTSCAN_FOUND_RSSI_ENTRY", + "EXTSCAN_BSSID_FOUND_RSSI_SAMPLE", + "EXTSCAN_BSSID_ADDED_RSSI_SAMPLE", + "EXTSCAN_BSSID_REPLACED_RSSI_SAMPLE", + "EXTSCAN_BSSID_TRANSFER_CURRENT_SAMPLES", + "EXTSCAN_BUCKET_PROCESS_SCAN_EVENT", + "EXTSCAN_BUCKET_CANNOT_FIND_BUCKET", + "EXTSCAN_START_SCAN_REQUEST_FAILED", + "EXTSCAN_BUCKET_STOP_CURRENT_SCANS", + "EXTSCAN_BUCKET_SCAN_STOP_REQUEST", + "EXTSCAN_BUCKET_PERIODIC_TIMER_ERROR", + "EXTSCAN_BUCKET_START_OPERATION", + "EXTSCAN_START_INTERNAL_ERROR", + "EXTSCAN_NOTIFY_HOTLIST_MATCH", + "EXTSCAN_CONFIG_HOTLIST_TABLE", + "EXTSCAN_CONFIG_WLAN_CHANGE_TABLE", }, }; diff --git a/tools/fwdebuglog/parser.c b/tools/fwdebuglog/parser.c index 7e285ad12256..6c9d2d177c7f 100644 --- a/tools/fwdebuglog/parser.c +++ b/tools/fwdebuglog/parser.c @@ -1120,6 +1120,60 @@ char * DBG_MSG_ARR[WLAN_MODULE_ID_MAX][MAX_DBG_MSGS] = "IBSS_PS_DBGID_PS_DESC_BIN_HWM", "IBSS_PS_DBGID_PS_DESC_BIN_LWM", "IBSS_PS_DBGID_PS_KICKOUT_PEER", + "IBSS_PS_DBGID_SET_PEER_PARAM", + "IBSS_PS_DBGID_BCN_ATIM_WIN_MISMATCH", + }, + { + /* HIF UART Interface DBGIDs */ + "HIF_UART_DBGID_START", + "HIF_UART_DBGID_POWER_STATE", + "HIF_UART_DBGID_TXRX_FLOW", + "HIF_UART_DBGID_TXRX_CTRL_CHAR", + "HIF_UART_DBGID_TXRX_BUF_DUMP", + }, + { + /* EXTSCAN DBGIDs */ + "EXTSCAN_START", + "EXTSCAN_STOP", + "EXTSCAN_CLEAR_ENTRY_CONTENT", + "EXTSCAN_GET_FREE_ENTRY_SUCCESS", + "EXTSCAN_GET_FREE_ENTRY_INCONSISTENT", + "EXTSCAN_GET_FREE_ENTRY_NO_MORE_ENTRIES", + "EXTSCAN_CREATE_ENTRY_SUCCESS", + "EXTSCAN_CREATE_ENTRY_ERROR", + "EXTSCAN_SEARCH_SCAN_ENTRY_QUEUE", + "EXTSCAN_SEARCH_SCAN_ENTRY_KEY_FOUND", + "EXTSCAN_SEARCH_SCAN_ENTRY_KEY_NOT_FOUND", + "EXTSCAN_ADD_ENTRY", + "EXTSCAN_BUCKET_SEND_OPERATION_EVENT", + "EXTSCAN_BUCKET_SEND_OPERATION_EVENT_FAILED", + "EXTSCAN_BUCKET_START_SCAN_CYCLE", + "EXTSCAN_BUCKET_PERIODIC_TIMER", + "EXTSCAN_SEND_START_STOP_EVENT", + "EXTSCAN_NOTIFY_WLAN_CHANGE", + "EXTSCAN_NOTIFY_WLAN_HOTLIST_MATCH", + "EXTSCAN_MAIN_RECEIVED_FRAME", + "EXTSCAN_MAIN_NO_SSID_IE", + "EXTSCAN_MAIN_MALFORMED_FRAME", + "EXTSCAN_FIND_BSSID_BY_REFERENCE", + "EXTSCAN_FIND_BSSID_BY_REFERENCE_ERROR", + "EXTSCAN_NOTIFY_TABLE_USAGE", + "EXTSCAN_FOUND_RSSI_ENTRY", + "EXTSCAN_BSSID_FOUND_RSSI_SAMPLE", + "EXTSCAN_BSSID_ADDED_RSSI_SAMPLE", + "EXTSCAN_BSSID_REPLACED_RSSI_SAMPLE", + "EXTSCAN_BSSID_TRANSFER_CURRENT_SAMPLES", + "EXTSCAN_BUCKET_PROCESS_SCAN_EVENT", + "EXTSCAN_BUCKET_CANNOT_FIND_BUCKET", + "EXTSCAN_START_SCAN_REQUEST_FAILED", + "EXTSCAN_BUCKET_STOP_CURRENT_SCANS", + "EXTSCAN_BUCKET_SCAN_STOP_REQUEST", + "EXTSCAN_BUCKET_PERIODIC_TIMER_ERROR", + "EXTSCAN_BUCKET_START_OPERATION", + "EXTSCAN_START_INTERNAL_ERROR", + "EXTSCAN_NOTIFY_HOTLIST_MATCH", + "EXTSCAN_CONFIG_HOTLIST_TABLE", + "EXTSCAN_CONFIG_WLAN_CHANGE_TABLE", }, }; |
