Merge "wlan: Interface file change to get rssi when disconnect happens."
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 4ffb3b7..a5bd2cf 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -2279,6 +2279,11 @@
#define CFG_IGNORE_PEER_ERP_INFO_MAX ( 1 )
#define CFG_IGNORE_PEER_ERP_INFO_DEFAULT ( 0 )
+#define CFG_IGNORE_PEER_HT_MODE_NAME "gIgnorePeerHTopMode"
+#define CFG_IGNORE_PEER_HT_MODE_MIN ( 0 )
+#define CFG_IGNORE_PEER_HT_MODE_MAX ( 1 )
+#define CFG_IGNORE_PEER_HT_MODE_DEFAULT ( 0 )
+
#define CFG_INITIAL_DWELL_TIME_NAME "gInitialDwellTime"
#define CFG_INITIAL_DWELL_TIME_DEFAULT (0)
#define CFG_INITIAL_DWELL_TIME_MIN (0)
@@ -3021,6 +3026,7 @@
v_U32_t btcStaticOppWlanIdleBtLen;
v_U32_t linkFailTimeout;
v_U32_t linkFailTxCnt;
+ v_BOOL_t ignorePeerHTopMode;
} hdd_config_t;
/*---------------------------------------------------------------------------
Function declarations and documenation
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index cf0274a..37cac84 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3062,6 +3062,14 @@
CFG_IGNORE_PEER_ERP_INFO_MIN,
CFG_IGNORE_PEER_ERP_INFO_MAX ),
+ REG_VARIABLE( CFG_IGNORE_PEER_HT_MODE_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, ignorePeerHTopMode,
+ VAR_FLAGS_OPTIONAL |
+ VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_IGNORE_PEER_HT_MODE_DEFAULT,
+ CFG_IGNORE_PEER_HT_MODE_MIN,
+ CFG_IGNORE_PEER_HT_MODE_MAX ),
+
REG_VARIABLE(CFG_INITIAL_DWELL_TIME_NAME, WLAN_PARAM_Integer,
hdd_config_t, nInitialDwellTime,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -5579,6 +5587,7 @@
smeConfig->csrConfig.nSelect5GHzMargin = pConfig->nSelect5GHzMargin;
}
smeConfig->csrConfig.ignorePeerErpInfo = pConfig->ignorePeerErpInfo;
+ smeConfig->csrConfig.ignorePeerHTopMode = pConfig->ignorePeerHTopMode;
smeConfig->csrConfig.initialScanSkipDFSCh = pConfig->initialScanSkipDFSCh;
smeConfig->csrConfig.isCoalesingInIBSSAllowed =
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 5f2698f..607390c 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -10616,6 +10616,14 @@
return -EBUSY;
}
+ // Don't allow scan if PNO scan is going on.
+ if (pHddCtx->isPnoEnable)
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ FL("pno scan in progress"));
+ return -EBUSY;
+ }
+
//Don't Allow Scan and return busy if Remain On
//Channel and action frame is pending
//Otherwise Cancel Remain On Channel and allow Scan
@@ -13160,13 +13168,12 @@
return status;
}
+ wlan_hdd_get_station_stats(pAdapter);
+ rate_flags = pAdapter->hdd_stats.ClassA_stat.tx_rate_flags;
wlan_hdd_get_rssi(pAdapter, &sinfo->signal);
sinfo->filled |= STATION_INFO_SIGNAL;
- 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 &&
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index b6ec396..ba5274c 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -11733,19 +11733,9 @@
uint16 index;
hdd_staid_hash_node_t *sta_info_node = NULL;
- spin_lock_bh( &pAdapter->sta_hash_lock);
- if (pAdapter->is_sta_id_hash_initialized != VOS_TRUE) {
- spin_unlock_bh( &pAdapter->sta_hash_lock);
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "%s: hash is not initialized for session id %d",
- __func__, pAdapter->sessionId);
- return VOS_STATUS_E_FAILURE;
- }
-
index = hdd_sta_id_hash_calculate_index(pAdapter, mac_addr);
sta_info_node = vos_mem_malloc(sizeof(hdd_staid_hash_node_t));
if (!sta_info_node) {
- spin_unlock_bh( &pAdapter->sta_hash_lock);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: malloc failed", __func__);
return VOS_STATUS_E_NOMEM;
@@ -11754,6 +11744,16 @@
sta_info_node->sta_id = sta_id;
vos_mem_copy(&sta_info_node->mac_addr, mac_addr, sizeof(v_MACADDR_t));
+ spin_lock_bh( &pAdapter->sta_hash_lock);
+ if (pAdapter->is_sta_id_hash_initialized != VOS_TRUE) {
+ spin_unlock_bh( &pAdapter->sta_hash_lock);
+ vos_mem_free(sta_info_node);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ "%s: hash is not initialized for session id %d",
+ __func__, pAdapter->sessionId);
+ return VOS_STATUS_E_FAILURE;
+ }
+
hdd_list_insert_back ( &pAdapter->sta_id_hash.bins[index],
(hdd_list_node_t*) sta_info_node );
spin_unlock_bh( &pAdapter->sta_hash_lock);
diff --git a/CORE/HDD/src/wlan_hdd_oemdata.c b/CORE/HDD/src/wlan_hdd_oemdata.c
index bf1b9f3..2899104 100644
--- a/CORE/HDD/src/wlan_hdd_oemdata.c
+++ b/CORE/HDD/src/wlan_hdd_oemdata.c
@@ -237,6 +237,13 @@
return -EINVAL;
}
+ if (pHddCtx->isPnoEnable)
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ FL("pno scan in progress"));
+ return -EBUSY;
+ }
+
do
{
if (NULL != wrqu->data.pointer)
diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c
index a447308..c3e78e7 100644
--- a/CORE/HDD/src/wlan_hdd_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_tx_rx.c
@@ -1072,6 +1072,7 @@
int i = 0;
int status = 0;
v_ULONG_t diff_in_jiffies = 0;
+ hdd_station_ctx_t *pHddStaCtx = NULL;
VOS_TRACE( VOS_MODULE_ID_HDD_DATA, VOS_TRACE_LEVEL_ERROR,
"%s: Transmission timeout occurred jiffies %lu dev->trans_start %lu",
@@ -1092,6 +1093,14 @@
return;
}
+ pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+ if ( NULL == pHddStaCtx )
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD_DATA, VOS_TRACE_LEVEL_ERROR,
+ FL("pHddStaCtx is NULL"));
+ return;
+ }
+
++pAdapter->hdd_stats.hddTxRxStats.txTimeoutCount;
//Getting here implies we disabled the TX queues for too long. Queues are
@@ -1152,7 +1161,9 @@
//update last jiffies after the check
pAdapter->hdd_stats.hddTxRxStats.jiffiesLastTxTimeOut = jiffies;
- if (WLANTL_IsEAPOLPending(pHddCtx->pvosContext) == VOS_STATUS_SUCCESS) {
+ if (!pHddStaCtx->conn_info.uIsAuthenticated) {
+ VOS_TRACE(VOS_MODULE_ID_HDD_DATA, VOS_TRACE_LEVEL_INFO,
+ FL("TL is not in authenticated state so skipping SSR"));
pAdapter->hdd_stats.hddTxRxStats.continuousTxTimeoutCount = 0;
goto print_log;
}
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index f28dc8e..33c6da9 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -6618,6 +6618,7 @@
case WE_GET_RSSI:
{
v_S7_t s7Rssi = 0;
+ wlan_hdd_get_station_stats(pAdapter);
wlan_hdd_get_rssi(pAdapter, &s7Rssi);
snprintf(extra, WE_MAX_STR_LEN, "rssi=%d",s7Rssi);
wrqu->data.length = strlen(extra)+1;
diff --git a/CORE/MAC/src/dph/dphHashTable.c b/CORE/MAC/src/dph/dphHashTable.c
index c661f94..e6d7dc4 100644
--- a/CORE/MAC/src/dph/dphHashTable.c
+++ b/CORE/MAC/src/dph/dphHashTable.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -134,6 +134,12 @@
tpDphHashNode ptr = NULL;
tANI_U16 index = hashFunction(pMac, staAddr, pDphHashTable->size);
+ if (!pDphHashTable->pHashTable)
+ {
+ limLog(pMac, LOGE, FL(" pHashTable is NULL "));
+ return ptr;
+ }
+
for (ptr = pDphHashTable->pHashTable[index]; ptr; ptr = ptr->next)
{
if (dphCompareMacAddr(staAddr, ptr->staAddr))
diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
index bdd0796..82a4f6f 100644
--- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
@@ -451,6 +451,11 @@
frameLen);
}
pSta = dphLookupHashEntry(pMac, pHdr->sa, &aid, &psessionEntry->dph.dphHashTable);
+ if (pSta == NULL)
+ {
+ PELOGE(limLog(pMac, LOGE, FL("Station context not found"));)
+ return;
+ }
operMode = pSta->vhtSupportedChannelWidthSet ? eHT_CHANNEL_WIDTH_80MHZ : pSta->htSupportedChannelWidthSet ? eHT_CHANNEL_WIDTH_40MHZ: eHT_CHANNEL_WIDTH_20MHZ;
if( operMode != pOperatingModeframe->OperatingMode.chanWidth)
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index a0b1f11..a62d435 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -451,13 +451,9 @@
} else {
vos_mem_copy(gSelfMacAddr, pMac->lim.spoofMacAddr, VOS_MAC_ADDRESS_LEN);
}
- limLog( pMac, LOG1,
- FL("Mac Addr used in Probe Req is: "MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(gSelfMacAddr));
-
limLog(pMac, LOG1,
- FL("sending ProbeReq number %d, for SSID %s on channel: %d"),
- i, pMac->lim.gpLimMlmScanReq->ssId[i].ssId, channelNum);
+ FL(" Mac Addr "MAC_ADDRESS_STR " used in sending ProbeReq number %d, for SSID %s on channel: %d"),
+ MAC_ADDR_ARRAY(gSelfMacAddr) ,i, pMac->lim.gpLimMlmScanReq->ssId[i].ssId, channelNum);
// include additional IE if there is
status = limSendProbeReqMgmtFrame( pMac, &pMac->lim.gpLimMlmScanReq->ssId[i],
pMac->lim.gpLimMlmScanReq->bssId, channelNum, gSelfMacAddr,
@@ -1009,7 +1005,6 @@
SET_LIM_PROCESS_DEFD_MESGS(pMac, false);
MTRACE(macTraceMsgTx(pMac, NO_SESSION, msg.type));
- limLog(pMac, LOG1, FL("Channel %d"), channelNum);
rc = wdaPostCtrlMsg(pMac, &msg);
if (rc == eSIR_SUCCESS) {
@@ -3906,8 +3901,6 @@
if (pMac->lim.gLimMlmState == eLIM_MLM_WT_PROBE_RESP_STATE &&
pMac->lim.gLimHalScanState != eLIM_HAL_FINISH_SCAN_WAIT_STATE)
{
- limLog(pMac, LOG1, FL("Scanning : min channel timeout occurred"));
-
/// Min channel timer timed out
pMac->lim.limTimers.gLimPeriodicProbeReqTimer.sessionId = 0xff;
limDeactivateAndChangeTimer(pMac, eLIM_MIN_CHANNEL_TIMER);
diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
index 7bfb814..ab22c5b 100644
--- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
+++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
@@ -805,10 +805,6 @@
(tANI_U8 *) &ptemp->bssDescription.bssId,
ptemp->bssDescription.length);
- limLog(pMac, LOG1, FL("ScanRsp : msgLen %d, bssDescr Len=%d BssID "),
- msgLen, ptemp->bssDescription.length);
- limPrintMacAddr(pMac, ptemp->bssDescription.bssId, LOG1);
-
pSirSmeScanRsp->sessionId = smesessionId;
pSirSmeScanRsp->transcationId = smetranscationId;
diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c
index 6fb0a00..8cc043a 100644
--- a/CORE/MAC/src/pe/lim/limUtils.c
+++ b/CORE/MAC/src/pe/lim/limUtils.c
@@ -2596,6 +2596,20 @@
return;
}
channel = psessionEntry->gLimChannelSwitch.primaryChannel;
+
+ /*
+ * If Lim allows Switch channel on same channel on which preauth
+ * is going on then LIM will not post resume link(WDA_FINISH_SCAN)
+ * during preauth rsp handling hence firmware may crash on ENTER/
+ * EXIT BMPS request.
+ */
+ if(pMac->ft.ftPEContext.pFTPreAuthReq)
+ {
+ limLog(pMac, LOGE,
+ FL("Avoid Switch Channel req during pre auth"));
+ return;
+ }
+
/*
* This potentially can create issues if the function tries to set
* channel while device is in power-save, hence putting an extra check
diff --git a/CORE/MAC/src/pe/sch/schBeaconProcess.c b/CORE/MAC/src/pe/sch/schBeaconProcess.c
index d295017..6687aec 100644
--- a/CORE/MAC/src/pe/sch/schBeaconProcess.c
+++ b/CORE/MAC/src/pe/sch/schBeaconProcess.c
@@ -202,7 +202,8 @@
//then we need to enable protection from 11g station.
//we don't need protection from 11b because if that's needed then our operating
//mode would have already been set to legacy in the previous blocks.
- if(eSIR_HT_OP_MODE_OVERLAP_LEGACY == pBcnStruct->HTInfo.opMode)
+ if(eSIR_HT_OP_MODE_OVERLAP_LEGACY == pBcnStruct->HTInfo.opMode
+ && !pMac->roam.configParam.ignorePeerHTopMode)
{
if((eSIR_HT_OP_MODE_MIXED != pMac->lim.gHTOperMode) &&
(eSIR_HT_OP_MODE_OVERLAP_LEGACY != pMac->lim.gHTOperMode))
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 4ddbe11..205f992 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1192,6 +1192,7 @@
#endif
tANI_U32 nOBSSScanWidthTriggerInterval;
tANI_U8 roamDelayStatsEnabled;
+ tANI_BOOLEAN ignorePeerHTopMode;
}tCsrConfigParam;
//Tush
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index 579129a..d83162f 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -680,6 +680,7 @@
#endif
tANI_U32 nOBSSScanWidthTriggerInterval;
tANI_U8 roamDelayStatsEnabled;
+ tANI_BOOLEAN ignorePeerHTopMode;
}tCsrConfig;
typedef struct tagCsrChannelPowerInfo
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 7ecfffe..daf5a6a 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1952,6 +1952,7 @@
pMac->roam.configParam.isAmsduSupportInAMPDU = pParam->isAmsduSupportInAMPDU;
pMac->roam.configParam.nSelect5GHzMargin = pParam->nSelect5GHzMargin;
pMac->roam.configParam.ignorePeerErpInfo = pParam->ignorePeerErpInfo;
+ pMac->roam.configParam.ignorePeerHTopMode = pParam->ignorePeerHTopMode;
pMac->roam.configParam.isCoalesingInIBSSAllowed =
pParam->isCoalesingInIBSSAllowed;
pMac->roam.configParam.allowDFSChannelRoam = pParam->allowDFSChannelRoam;
@@ -2099,6 +2100,7 @@
pParam->isAmsduSupportInAMPDU = pMac->roam.configParam.isAmsduSupportInAMPDU;
pParam->nSelect5GHzMargin = pMac->roam.configParam.nSelect5GHzMargin;
pParam->ignorePeerErpInfo = pMac->roam.configParam.ignorePeerErpInfo;
+ pParam->ignorePeerHTopMode = pMac->roam.configParam.ignorePeerHTopMode;
pParam->isCoalesingInIBSSAllowed =
pMac->roam.configParam.isCoalesingInIBSSAllowed;
diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c
index 9d6dce5..d697f3d 100644
--- a/CORE/SME/src/csr/csrApiScan.c
+++ b/CORE/SME/src/csr/csrApiScan.c
@@ -2580,11 +2580,6 @@
csrFreeScanResultEntry( pMac, pBssDesc );
}
}
- else
- {
- smsLog( pMac, LOG1, FL("%d is a Valid channel"),
- pBssDesc->Result.BssDescriptor.channelId);
- }
pEntry = pTempEntry;
}
diff --git a/CORE/VOSS/src/vos_memory.c b/CORE/VOSS/src/vos_memory.c
index ed57298..3b304c1 100644
--- a/CORE/VOSS/src/vos_memory.c
+++ b/CORE/VOSS/src/vos_memory.c
@@ -198,7 +198,7 @@
return NULL;
}
- if (in_interrupt())
+ if (in_interrupt() || irqs_disabled() || in_atomic())
{
flags = GFP_ATOMIC;
}