summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkash Patel <akashp@codeaurora.org>2014-07-23 10:15:18 -0700
committerAkash Patel <akashp@codeaurora.org>2014-07-23 10:16:19 -0700
commit9fb236d8c10b6d2a38dc02cc2d91e56c1826aa6c (patch)
treeb5a5fb6b960c55893c38a1b34d466c23f7a14274
parentdec45c723f56f33c5c6acef80e4888b042df249e (diff)
parent64e42148585c05714d7a62bfcffc9a8c3d1a80e5 (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
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h13
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h1
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c1
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c29
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c39
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c10
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c10
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/inc/sirApi.h3
-rw-r--r--CORE/MAC/src/include/sirParams.h2
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c12
-rw-r--r--CORE/MAC/src/pe/lim/limSendSmeRspMessages.c72
-rw-r--r--CORE/SAP/src/sapApiLinkCntl.c10
-rw-r--r--CORE/SAP/src/sapChSelect.c15
-rw-r--r--CORE/SAP/src/sapFsm.c345
-rw-r--r--CORE/SAP/src/sapInternal.h6
-rw-r--r--CORE/SAP/src/sapModule.c25
-rw-r--r--CORE/SERVICES/BMI/ol_fw.c21
-rw-r--r--CORE/SERVICES/COMMON/ol_if_athvar.h4
-rw-r--r--CORE/SERVICES/COMMON/wmi_services.h1
-rw-r--r--CORE/SERVICES/COMMON/wmi_tlv_defs.h16
-rw-r--r--CORE/SERVICES/COMMON/wmi_unified.h98
-rw-r--r--CORE/SME/inc/csrApi.h1
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c17
-rw-r--r--CORE/SME/src/csr/csrCmdProcess.c15
-rw-r--r--CORE/SME/src/csr/csrInsideApi.h2
-rw-r--r--CORE/SME/src/csr/csrNeighborRoam.c2
-rw-r--r--CORE/UTILS/FWLOG/dbglog_host.c52
-rw-r--r--CORE/VOSS/src/vos_api.c3
-rwxr-xr-xfirmware_bin/WCNSS_qcom_cfg.ini4
-rw-r--r--tools/fwdebuglog/cld-fwlog-parser.c54
-rw-r--r--tools/fwdebuglog/parser.c54
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 *)&param, 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 *)&param, 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",
},
};