summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-06-30 12:13:50 -0600
committerLinux Build Service Account <lnxbuild@localhost>2016-06-30 12:13:50 -0600
commit388be7afab0500aba4e2f85cf7693d2dd734f5d9 (patch)
treecb0e15fae5a1592c85b880cb5abeec4542e5cf2a
parent06f1d1b2564227ddf9fdecff611abcf56c4fc654 (diff)
parentf0dd9902ddb6a3b3e55efadcbd2658e643fe9b39 (diff)
Promotion of wlan-cld2.driver.lnx.1.0-00041.
CRs Change ID Subject -------------------------------------------------------------------------------------------------------------- 1033836 Icc0f5b576ff71776dc448a673b6e12defe0c514e qcacld-2.0: Fix mgmtFrameSessionId in limSendP2PActionFr 1035125 Ice4c32caf65f5fc6fceaf3fbcf536baabd58f716 qcacld-2.0: Fix static code analysis error 688141 I35e3b32b78d5682401521c9111d50ecac94b0e19 Release 4.0.11.111 688141 I4d2b7c578001ae10c05814dcbefbbea541ddf502 Release 4.0.11.110 1023547 I9aaacf035efb042f8216ca0d7f1ec3f21f11b212 qcacld-2.0: Set number of clients separately for SAP and 1035799 Icbd195702dd70f5bbb97eefc2c3044d0e46a76e4 Revert "qcacld-2.0: WAR for dfs false detection" 1033754 I7c8e2f2dabd5713cb25523df5b25e59d0c4b06aa qcacld-2.0: Clean up enum station_info_flags for Kernel 1033220 I5eb63b42de0f2327b391427dd5b43235103ed06b qcacld-2.0: Correctly handle the error conditions in the Change-Id: I6b073d118955e9d494a1764d9b1fb2fc0fd51e71 CRs-Fixed: 1033220, 1035125, 1033836, 1033754, 688141, 1023547, 1035799
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx.c6
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h17
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg80211.h2
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h1
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c25
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c11
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c2
-rwxr-xr-x[-rw-r--r--]CORE/HDD/src/wlan_hdd_main.c31
-rw-r--r--CORE/MAC/inc/aniGlobal.h2
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/inc/wniCfgAp.h23
-rw-r--r--CORE/MAC/inc/wniCfgSta.h14
-rw-r--r--CORE/MAC/src/cfg/cfgProcMsg.c16
-rw-r--r--CORE/MAC/src/pe/lim/limAIDmgmt.c12
-rw-r--r--CORE/MAC/src/pe/lim/limApi.c13
-rw-r--r--CORE/MAC/src/pe/lim/limP2P.c4
-rw-r--r--CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c14
-rw-r--r--CORE/MAC/src/pe/lim/limProcessCfgUpdates.c18
-rw-r--r--CORE/SERVICES/DFS/inc/dfs.h7
-rw-r--r--CORE/SERVICES/DFS/src/dfs.c69
-rw-r--r--CORE/SERVICES/DFS/src/dfs_debug.c23
-rw-r--r--CORE/SERVICES/DFS/src/dfs_init.c125
-rw-r--r--CORE/SERVICES/DFS/src/dfs_process_radarevent.c199
-rw-r--r--CORE/VOSS/inc/vos_types.h6
-rw-r--r--CORE/VOSS/src/vos_api.c6
25 files changed, 195 insertions, 455 deletions
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx.c b/CORE/CLD_TXRX/TXRX/ol_tx.c
index a2bd003e2502..dae35b756bbc 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx.c
@@ -81,6 +81,12 @@ ol_tx_ll(ol_txrx_vdev_handle vdev, adf_nbuf_t msdu_list)
v_CONTEXT_t vos_ctx = vos_get_global_context(VOS_MODULE_ID_SYS, NULL);
void *adf_ctx = vos_get_context(VOS_MODULE_ID_ADF, vos_ctx);
+ if (!adf_ctx) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ "%s: adf_ctx is NULL\n", __func__);
+ return msdu_list;
+ }
+
msdu_info.htt.info.l2_hdr_type = vdev->pdev->htt_pkt_type;
msdu_info.htt.action.tx_comp_req = 0;
/*
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 828f126c8333..06d44639c416 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -2661,12 +2661,26 @@ This feature requires the dependent cfg.ini "gRoamPrefer5GHz" set to 1 */
#define CFG_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_MAX (1)
#define CFG_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_DEFAULT (0)
+/*
+ * Max peers number of SAP
+ */
#define CFG_SAP_MAX_NO_PEERS "gSoftApMaxPeers"
#define CFG_SAP_MAX_NO_PEERS_MIN (1)
#define CFG_SAP_MAX_NO_PEERS_MAX (32)
#define CFG_SAP_MAX_NO_PEERS_DEFAULT (32)
/*
+ * Max peers number of P2P GO
+ * To make it backward compatible with old INI file which only set
+ * gSoftApMaxPeers, set gGoMaxPeers default value to 0, and add logic
+ * to set this item same as gSoftApMaxPeers if the value is 0
+ */
+#define CFG_GO_MAX_NO_PEERS "gGoMaxPeers"
+#define CFG_GO_MAX_NO_PEERS_MIN (0)
+#define CFG_GO_MAX_NO_PEERS_MAX (32)
+#define CFG_GO_MAX_NO_PEERS_DEFAULT (0)
+
+/*
* Connection related log Enable/Disable.
* 0x1 - Enable mgmt pkt logs (no probe req/rsp).
* 0x2 - Enable EAPOL pkt logs.
@@ -4399,7 +4413,8 @@ struct hdd_config {
#endif
v_U8_t maxWoWFilters;
v_U8_t wowEnable;
- v_U8_t maxNumberOfPeers;
+ v_U8_t max_sap_peers;
+ v_U8_t max_go_peers;
v_U8_t disableDFSChSwitch;
v_U8_t enableDFSMasterCap;
v_U16_t thermalTempMinLevel0;
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index 6fc13ed3588f..86225855b675 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -1961,7 +1961,7 @@ int wlan_hdd_cfg80211_init(struct device *dev,
void wlan_hdd_cfg80211_deinit(struct wiphy *wiphy);
void wlan_hdd_update_wiphy(struct wiphy *wiphy,
- hdd_config_t *pCfg);
+ hdd_context_t *ctx);
int wlan_hdd_cfg80211_register( struct wiphy *wiphy);
void wlan_hdd_cfg80211_register_frames(hdd_adapter_t* pAdapter);
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index e5cdec427b15..1de463f16776 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -1835,6 +1835,7 @@ struct hdd_context_s
bool driver_being_stopped; /* Track if DRIVER STOP cmd is sent */
uint8_t max_mc_addr_list;
struct acs_dfs_policy acs_policy;
+ uint8_t max_peers;
};
/*---------------------------------------------------------------------------
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 3c1e918f7982..edd01861f435 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3001,12 +3001,19 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_IBSS_ATIM_WIN_SIZE_MAX ),
REG_VARIABLE( CFG_SAP_MAX_NO_PEERS, WLAN_PARAM_Integer,
- hdd_config_t, maxNumberOfPeers,
+ hdd_config_t, max_sap_peers,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_SAP_MAX_NO_PEERS_DEFAULT,
CFG_SAP_MAX_NO_PEERS_MIN,
CFG_SAP_MAX_NO_PEERS_MAX),
+ REG_VARIABLE( CFG_GO_MAX_NO_PEERS, WLAN_PARAM_Integer,
+ hdd_config_t, max_go_peers,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_GO_MAX_NO_PEERS_DEFAULT,
+ CFG_GO_MAX_NO_PEERS_MIN,
+ CFG_GO_MAX_NO_PEERS_MAX),
+
REG_VARIABLE( CFG_IBSS_IS_POWER_SAVE_ALLOWED_NAME , WLAN_PARAM_Integer,
hdd_config_t, isIbssPowerSaveAllowed,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -6857,7 +6864,7 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx )
}
else
{
- val = pConfig->maxNumberOfPeers;
+ val = pHddCtx->max_peers;
}
if(ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ASSOC_STA_LIMIT, val,
@@ -6866,6 +6873,20 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx )
fStatus = FALSE;
hddLog(LOGE,"Failure: Could not pass on WNI_CFG_ASSOC_STA_LIMIT configuration info to CCM");
}
+
+ if(ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ASSOC_STA_LIMIT_AP,
+ pConfig->max_sap_peers, NULL, eANI_BOOLEAN_FALSE)
+ == eHAL_STATUS_FAILURE) {
+ fStatus = FALSE;
+ hddLog(LOGE,"can't pass WNI_CFG_ASSOC_STA_LIMIT_AP to CCM");
+ }
+
+ if(ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ASSOC_STA_LIMIT_GO,
+ pConfig->max_go_peers, NULL, eANI_BOOLEAN_FALSE)
+ == eHAL_STATUS_FAILURE) {
+ fStatus = FALSE;
+ hddLog(LOGE,"can't pass WNI_CFG_ASSOC_STA_LIMIT_GO to CCM");
+ }
#endif
if(ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION,
pConfig->enableLpwrImgTransition, NULL, eANI_BOOLEAN_FALSE)
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index b15735a861bb..340f70c87c83 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -12055,7 +12055,7 @@ int wlan_hdd_cfg80211_init(struct device *dev,
}
#endif
- wiphy->max_ap_assoc_sta = pCfg->maxNumberOfPeers;
+ wiphy->max_ap_assoc_sta = pHddCtx->max_peers;
#ifdef QCA_HT_2040_COEX
wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
#endif
@@ -12098,9 +12098,9 @@ void wlan_hdd_cfg80211_deinit(struct wiphy *wiphy)
* of all required members can be done here.
*/
void wlan_hdd_update_wiphy(struct wiphy *wiphy,
- hdd_config_t *pCfg)
+ hdd_context_t *ctx)
{
- wiphy->max_ap_assoc_sta = pCfg->maxNumberOfPeers;
+ wiphy->max_ap_assoc_sta = ctx->max_peers;
if (!sme_IsFeatureSupportedByFW(DOT11AC)) {
wiphy->bands[IEEE80211_BAND_2GHZ]->vht_cap.vht_supported = 0;
wiphy->bands[IEEE80211_BAND_2GHZ]->vht_cap.cap = 0;
@@ -20691,8 +20691,13 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy,
}
if (rssi_stats_valid) {
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0))
sinfo->filled |= STATION_INFO_CHAIN_SIGNAL_AVG;
sinfo->filled |= STATION_INFO_SIGNAL_AVG;
+#else
+ sinfo->filled |= BIT(NL80211_STA_INFO_CHAIN_SIGNAL_AVG);
+ sinfo->filled |= BIT(NL80211_STA_INFO_CHAIN_SIGNAL);
+#endif
}
#endif
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 2a806fe8c5ac..480aafb07d5b 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -5398,7 +5398,7 @@ hdd_softap_get_sta_info(hdd_adapter_t *pAdapter, v_U8_t *pBuf, int buf_len)
pBuf += len;
buf_len -= len;
- maxSta = pHddCtx->cfg_ini->maxNumberOfPeers;
+ maxSta = pHddCtx->max_peers;
for (i = 0; i <= maxSta; i++)
{
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 77c3338c9ab7..53f5106dd59d 100644..100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -14630,6 +14630,12 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
goto err_config;
}
+ if (0 == pHddCtx->cfg_ini->max_go_peers)
+ pHddCtx->cfg_ini->max_go_peers = pHddCtx->cfg_ini->max_sap_peers;
+
+ pHddCtx->max_peers = MAX(pHddCtx->cfg_ini->max_sap_peers,
+ pHddCtx->cfg_ini->max_go_peers);
+
((VosContextType*)pVosContext)->pHIFContext = hif_sc;
/* store target type and target version info in hdd ctx */
@@ -14771,7 +14777,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
if(!VOS_IS_STATUS_SUCCESS( status ))
{
hddLog(VOS_TRACE_LEVEL_FATAL,"%s: vos_watchdog_open failed",__func__);
- goto err_wdclose;
+ goto err_nl_srv;
}
}
@@ -14816,7 +14822,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
goto err_vosclose;
}
- wlan_hdd_update_wiphy(wiphy, pHddCtx->cfg_ini);
+ wlan_hdd_update_wiphy(wiphy, pHddCtx);
if (sme_IsFeatureSupportedByFW(DOT11AC)) {
hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: support 11ac", __func__);
@@ -15002,7 +15008,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
if ( VOS_STATUS_SUCCESS != wlan_hdd_ftm_open(pHddCtx) )
{
hddLog(VOS_TRACE_LEVEL_FATAL,"%s: wlan_hdd_ftm_open Failed",__func__);
- goto err_config;
+ goto err_nl_srv;
}
#if defined(QCA_WIFI_FTM)
if (hdd_ftm_start(pHddCtx))
@@ -15225,7 +15231,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
if(btc_activate_service(pHddCtx) != 0)
{
hddLog(VOS_TRACE_LEVEL_FATAL,"%s: btc_activate_service failed",__func__);
- goto err_nl_srv;
+ goto err_reg_netdev;
}
#ifdef FEATURE_OEM_DATA_SUPPORT
@@ -15234,7 +15240,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
{
hddLog(VOS_TRACE_LEVEL_FATAL,
"%s: oem_activate_service failed", __func__);
- goto err_nl_srv;
+ goto err_reg_netdev;
}
#endif
@@ -15243,7 +15249,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
if(ptt_sock_activate_svc(pHddCtx) != 0)
{
hddLog(VOS_TRACE_LEVEL_FATAL,"%s: ptt_sock_activate_svc failed",__func__);
- goto err_nl_srv;
+ goto err_reg_netdev;
}
#endif
@@ -15255,7 +15261,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
{
hddLog(VOS_TRACE_LEVEL_FATAL,
"%s: cnss_diag_activate_service failed", __func__);
- goto err_nl_srv;
+ goto err_close_cesium;
}
hdd_register_mcast_bcast_filter(pHddCtx);
@@ -15279,7 +15285,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
if (ret < 0) {
hddLog(VOS_TRACE_LEVEL_ERROR,"%s: register_netdevice_notifier failed",
__func__);
- goto err_nl_srv;
+ goto err_close_cesium;
}
reg_netdev_notifier_done = TRUE;
#endif
@@ -15385,7 +15391,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: Memory allocation for TxPowerLimit "
"failed!", __func__);
- goto err_nl_srv;
+ goto err_close_cesium;
}
hddtxlimit->txPower2g = pHddCtx->cfg_ini->TxPower2g;
hddtxlimit->txPower5g = pHddCtx->cfg_ini->TxPower5g;
@@ -15492,10 +15498,10 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
complete(&wlan_comp.wlan_start_comp);
goto success;
-err_nl_srv:
- nl_srv_exit();
+err_close_cesium:
hdd_close_cesium_nl_sock();
+err_reg_netdev:
if (rtnl_lock_enable == TRUE) {
rtnl_lock_enable = FALSE;
rtnl_unlock();
@@ -15568,7 +15574,8 @@ err_free_ftm_open:
if (VOS_FTM_MODE != hdd_get_conparam())
wlan_hdd_logging_sock_deactivate_svc(pHddCtx);
-
+err_nl_srv:
+ nl_srv_exit();
err_config:
kfree(pHddCtx->cfg_ini);
pHddCtx->cfg_ini= NULL;
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index aac66ec46068..4c1235f8dabc 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -592,6 +592,8 @@ typedef struct sAniSirLim
/// Variable to keep track of number of currently associated STAs
tANI_U16 gLimNumOfAniSTAs; // count of ANI peers
tANI_U16 gLimAssocStaLimit;
+ uint16_t glim_assoc_sta_limit_ap;
+ uint16_t glim_assoc_sta_limit_go;
// Heart-Beat interval value
tANI_U32 gLimHeartBeatCount;
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index a3ea6db5fbdd..60aa350d1459 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 11
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 109
+#define QWLAN_VERSION_BUILD 111
-#define QWLAN_VERSIONSTR "4.0.11.109"
+#define QWLAN_VERSIONSTR "4.0.11.111"
#define AR6320_REV1_VERSION 0x5000000
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index a99db6140104..dbc5ab58d29f 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -343,7 +343,8 @@
#define WNI_CFG_VHT_ENABLE_TXBF_20MHZ 296
#define WNI_CFG_TDLS_WMM_MODE_ENABLED 297
#define WNI_CFG_TGT_GTX_USR_CFG 298
-
+#define WNI_CFG_ASSOC_STA_LIMIT_GO 299
+#define WNI_CFG_ASSOC_STA_LIMIT_AP 300
/*
* String parameter lengths
*/
@@ -2516,10 +2517,26 @@
#define WNI_CFG_TGT_GTX_USR_CFG_APMAX 32
#define WNI_CFG_TGT_GTX_USR_CFG_APDEF 32
-#define CFG_PARAM_MAX_NUM 299
+#define WNI_CFG_ASSOC_STA_LIMIT_AP_STAMIN 1
+#define WNI_CFG_ASSOC_STA_LIMIT_AP_STAMAX 32
+#define WNI_CFG_ASSOC_STA_LIMIT_AP_STADEF 10
+
+#define WNI_CFG_ASSOC_STA_LIMIT_AP_APMIN 1
+#define WNI_CFG_ASSOC_STA_LIMIT_AP_APMAX 32
+#define WNI_CFG_ASSOC_STA_LIMIT_AP_APDEF 10
+
+#define WNI_CFG_ASSOC_STA_LIMIT_GO_STAMIN 1
+#define WNI_CFG_ASSOC_STA_LIMIT_GO_STAMAX 32
+#define WNI_CFG_ASSOC_STA_LIMIT_GO_STADEF 10
+
+#define WNI_CFG_ASSOC_STA_LIMIT_GO_APMIN 1
+#define WNI_CFG_ASSOC_STA_LIMIT_GO_APMAX 32
+#define WNI_CFG_ASSOC_STA_LIMIT_GO_APDEF 10
+
+#define CFG_PARAM_MAX_NUM 301
#define CFG_AP_IBUF_MAX_SIZE 246
#define CFG_AP_SBUF_MAX_SIZE 3233
-#define CFG_STA_IBUF_MAX_SIZE 242
+#define CFG_STA_IBUF_MAX_SIZE 244
#define CFG_STA_SBUF_MAX_SIZE 3199
#define CFG_SEM_MAX_NUM 19
diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wniCfgSta.h
index cfeafbc91051..2ae9de219ba1 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -337,6 +337,8 @@
#define WNI_CFG_VHT_ENABLE_TXBF_20MHZ 296
#define WNI_CFG_TDLS_WMM_MODE_ENABLED 297
#define WNI_CFG_TGT_GTX_USR_CFG 298
+#define WNI_CFG_ASSOC_STA_LIMIT_GO 299
+#define WNI_CFG_ASSOC_STA_LIMIT_AP 300
/*
* String parameter lengths
@@ -1609,8 +1611,16 @@
#define WNI_CFG_TGT_GTX_USR_CFG_STAMAX 32
#define WNI_CFG_TGT_GTX_USR_CFG_STADEF 32
-#define CFG_PARAM_MAX_NUM 299
-#define CFG_STA_IBUF_MAX_SIZE 242
+#define WNI_CFG_ASSOC_STA_LIMIT_AP_STAMIN 1
+#define WNI_CFG_ASSOC_STA_LIMIT_AP_STAMAX 32
+#define WNI_CFG_ASSOC_STA_LIMIT_AP_STADEF 10
+
+#define WNI_CFG_ASSOC_STA_LIMIT_GO_STAMIN 1
+#define WNI_CFG_ASSOC_STA_LIMIT_GO_STAMAX 32
+#define WNI_CFG_ASSOC_STA_LIMIT_GO_STADEF 10
+
+#define CFG_PARAM_MAX_NUM 301
+#define CFG_STA_IBUF_MAX_SIZE 244
#define CFG_STA_SBUF_MAX_SIZE 3199
#define CFG_SEM_MAX_NUM 19
diff --git a/CORE/MAC/src/cfg/cfgProcMsg.c b/CORE/MAC/src/cfg/cfgProcMsg.c
index f81af89754ca..943ba48cab56 100644
--- a/CORE/MAC/src/cfg/cfgProcMsg.c
+++ b/CORE/MAC/src/cfg/cfgProcMsg.c
@@ -1905,7 +1905,21 @@ struct cgstatic cfg_static[CFG_PARAM_MAX_NUM] = {
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT,
WNI_CFG_TGT_GTX_USR_CFG_STAMIN,
WNI_CFG_TGT_GTX_USR_CFG_STAMAX,
- WNI_CFG_TGT_GTX_USR_CFG_STADEF}
+ WNI_CFG_TGT_GTX_USR_CFG_STADEF},
+
+ {WNI_CFG_ASSOC_STA_LIMIT_AP,
+ CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
+ CFG_CTL_NTF_LIM,
+ WNI_CFG_ASSOC_STA_LIMIT_AP_STAMIN,
+ WNI_CFG_ASSOC_STA_LIMIT_AP_STAMAX,
+ WNI_CFG_ASSOC_STA_LIMIT_AP_STADEF},
+
+ {WNI_CFG_ASSOC_STA_LIMIT_GO,
+ CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
+ CFG_CTL_NTF_LIM,
+ WNI_CFG_ASSOC_STA_LIMIT_GO_STAMIN,
+ WNI_CFG_ASSOC_STA_LIMIT_GO_STAMAX,
+ WNI_CFG_ASSOC_STA_LIMIT_GO_STADEF}
};
struct cfgstatic_string cfg_static_string[CFG_MAX_STATIC_STRING] = {
diff --git a/CORE/MAC/src/pe/lim/limAIDmgmt.c b/CORE/MAC/src/pe/lim/limAIDmgmt.c
index d26a23b07dd0..3d3d7a3aad8f 100644
--- a/CORE/MAC/src/pe/lim/limAIDmgmt.c
+++ b/CORE/MAC/src/pe/lim/limAIDmgmt.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -134,10 +134,18 @@ tANI_U16
limAssignPeerIdx(tpAniSirGlobal pMac, tpPESession pSessionEntry)
{
tANI_U16 peerId;
+ uint8 max_peer = 0;
+
+ if (pSessionEntry->pePersona == VOS_STA_SAP_MODE)
+ max_peer = pMac->lim.glim_assoc_sta_limit_ap;
+
+ if (pSessionEntry->pePersona == VOS_P2P_GO_MODE)
+ max_peer = pMac->lim.glim_assoc_sta_limit_go;
// make sure we haven't exceeded the configurable limit on associations
// This count is global to ensure that it doesnt exceed the hardware limits.
- if (peGetCurrentSTAsCount(pMac) >= pMac->lim.gLimAssocStaLimit)
+ if (peGetCurrentSTAsCount(pMac) >= pMac->lim.gLimAssocStaLimit ||
+ pSessionEntry->gLimNumOfCurrentSTAs >= max_peer)
{
// too many associations already active
return 0;
diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c
index 068620d8d6c0..4b41ef7f6d2e 100644
--- a/CORE/MAC/src/pe/lim/limApi.c
+++ b/CORE/MAC/src/pe/lim/limApi.c
@@ -305,6 +305,19 @@ static void __limInitAssocVars(tpAniSirGlobal pMac)
}
pMac->lim.gLimAssocStaLimit = val;
pMac->lim.gLimIbssStaLimit = val;
+ if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT_AP, &val) != eSIR_SUCCESS)
+ limLog( pMac, LOGP, FL( "cfg get assoc sta of AP limit failed" ));
+
+ pMac->lim.glim_assoc_sta_limit_ap = val;
+
+ if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT_GO, &val) != eSIR_SUCCESS)
+ limLog( pMac, LOGP, FL( "cfg get assoc sta of GO limit failed" ));
+
+ pMac->lim.glim_assoc_sta_limit_go = val;
+
+ limLog(pMac, LOG1, FL("max_peer:%d ap_peer:%d go_peer:%d"),
+ pMac->lim.gLimAssocStaLimit, pMac->lim.glim_assoc_sta_limit_ap,
+ pMac->lim.glim_assoc_sta_limit_go);
// Place holder for current authentication request
// being handled
pMac->lim.gpLimMlmAuthReq = NULL;
diff --git a/CORE/MAC/src/pe/lim/limP2P.c b/CORE/MAC/src/pe/lim/limP2P.c
index 266c1b218205..832d907ca940 100644
--- a/CORE/MAC/src/pe/lim/limP2P.c
+++ b/CORE/MAC/src/pe/lim/limP2P.c
@@ -768,6 +768,7 @@ void limSendP2PActionFrame(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
{
limLog(pMac, LOGE,
FL("Remain on channel is not running"));
+ pMac->lim.mgmtFrameSessionId = pMbMsg->sessionId;
limP2PActionCnf(pMac, false);
return;
}
@@ -805,6 +806,7 @@ void limSendP2PActionFrame(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
}
if( !isSessionActive )
{
+ pMac->lim.mgmtFrameSessionId = pMbMsg->sessionId;
limP2PActionCnf(pMac, false);
return;
}
@@ -963,6 +965,7 @@ send_action_frame:
{
limLog(pMac, LOGE,
FL("Failed to Send Action frame"));
+ pMac->lim.mgmtFrameSessionId = pMbMsg->sessionId;
limP2PActionCnf(pMac, false);
return;
}
@@ -1044,6 +1047,7 @@ send_frame1:
if (!pMbMsg->noack)
{
+ pMac->lim.mgmtFrameSessionId = pMbMsg->sessionId;
limP2PActionCnf(pMac, (HAL_STATUS_SUCCESS(halstatus)) ?
true : false);
}
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
index cc24b8f76fae..c3934ef6bd0d 100644
--- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
@@ -253,6 +253,7 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,
tANI_U16 assocId = 0;
bool assoc_req_copied = false;
tDot11fIEVHTCaps *vht_caps;
+ uint8 max_peer = 0;
limGetPhyMode(pMac, &phyMode, psessionEntry);
@@ -847,10 +848,21 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,
/// Extract pre-auth context for the STA, if any.
pStaPreAuthContext = limSearchPreAuthList(pMac, pHdr->sa);
+ limLog(pMac, LOG1, FL( "max:%d ap:%d go:%d mode:%d"),
+ pMac->lim.gLimAssocStaLimit, pMac->lim.glim_assoc_sta_limit_ap,
+ pMac->lim.glim_assoc_sta_limit_go, psessionEntry->pePersona);
+
+ if (psessionEntry->pePersona == VOS_STA_SAP_MODE)
+ max_peer = pMac->lim.glim_assoc_sta_limit_ap;
+
+ if (psessionEntry->pePersona == VOS_P2P_GO_MODE)
+ max_peer = pMac->lim.glim_assoc_sta_limit_go;
+
if (pStaDs == NULL)
{
/// Requesting STA is not currently associated
- if (peGetCurrentSTAsCount(pMac) == pMac->lim.gLimAssocStaLimit)
+ if ((peGetCurrentSTAsCount(pMac) == pMac->lim.gLimAssocStaLimit)||
+ (psessionEntry->gLimNumOfCurrentSTAs == max_peer))
{
/**
* Maximum number of STAs that AP can handle reached.
diff --git a/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c b/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c
index 37e45a8e3c72..ee433aedc5b5 100644
--- a/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c
+++ b/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c
@@ -552,6 +552,24 @@ limHandleCFGparamUpdate(tpAniSirGlobal pMac, tANI_U32 cfgId)
pMac->lim.gLimAssocStaLimit = (tANI_U16)val1;
break;
+ case WNI_CFG_ASSOC_STA_LIMIT_GO:
+ if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT_GO, &val1)
+ != eSIR_SUCCESS) {
+ limLog(pMac, LOGE, FL("Unable to get WNI_CFG_ASSOC_STA_LIMIT_GO"));
+ break;
+ }
+ pMac->lim.glim_assoc_sta_limit_go = (tANI_U16)val1;
+ break;
+
+ case WNI_CFG_ASSOC_STA_LIMIT_AP:
+ if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT_AP, &val1)
+ != eSIR_SUCCESS) {
+ limLog(pMac, LOGE, FL("Unable to get WNI_CFG_ASSOC_STA_LIMIT_AP"));
+ break;
+ }
+ pMac->lim.glim_assoc_sta_limit_ap = (tANI_U16)val1;
+ break;
+
case WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC:
if (wlan_cfgGetInt
(pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, &val1) !=
diff --git a/CORE/SERVICES/DFS/inc/dfs.h b/CORE/SERVICES/DFS/inc/dfs.h
index 52ae15f1dea4..632636296b08 100644
--- a/CORE/SERVICES/DFS/inc/dfs.h
+++ b/CORE/SERVICES/DFS/inc/dfs.h
@@ -89,7 +89,6 @@
#include "dfs_interface.h"
#include "_ieee80211_common.h"
#include "vos_api.h"
-#include "sirDebug.h"
#define ATH_SUPPORT_DFS 1
#define CHANNEL_TURBO 0x00010
@@ -129,7 +128,6 @@
//#define MAX_BIN5_DUR 131 /* 105 * 1.25*/
#define MAX_BIN5_DUR 145 /* use 145 for osprey */ //conversion is already done using dfs->dur_multiplier//
#define MAX_BIN5_DUR_MICROSEC 105
-#define MAX_DFS_RADAR_TYPE 256
#define DFS_MARGIN_EQUAL(a, b, margin) ((DFS_DIFF(a,b)) <= margin)
#define DFS_MAX_STAGGERED_BURSTS 3
@@ -267,7 +265,6 @@ struct dfs_pulseline {
#define DFS_EVENT_HW_CHIRP 0x02 /* hardware chirp */
#define DFS_EVENT_SW_CHIRP 0x04 /* software chirp */
-
/*
* Use this only if the event has CHECKCHIRP set.
*/
@@ -301,7 +298,6 @@ struct dfs_event {
#pragma pack(pop, dfs_event)
#endif
-#define DFS_FILTER_DEFAULT_PRI 1000000
#define DFS_AR_MAX_ACK_RADAR_DUR 511
#define DFS_AR_MAX_NUM_PEAKS 3
#define DFS_AR_ARQ_SIZE 2048 /* 8K AR events for buffer size */
@@ -573,13 +569,10 @@ struct ath_dfs {
/* dfs_radarf - One filter for each radar pulse type */
struct dfs_filtertype *dfs_radarf[DFS_MAX_RADAR_TYPES];
- struct dfs_filtertype *dfs_dc_radarf[DFS_MAX_RADAR_TYPES];
struct dfs_info dfs_rinfo; /* State vars for radar processing */
struct dfs_bin5radars *dfs_b5radars;/* array of bin5 radar events */
int8_t **dfs_radartable; /* map of radar durs to filter types */
- /* map of dc radar durs to filter types */
- int8_t **dfs_dc_radartable;
#ifndef ATH_DFS_RADAR_DETECTION_ONLY
struct dfs_nolelem *dfs_nol; /* Non occupancy list for radar */
int dfs_nol_count; /* How many items? */
diff --git a/CORE/SERVICES/DFS/src/dfs.c b/CORE/SERVICES/DFS/src/dfs.c
index 8677cc29ee21..04cafdd2cccc 100644
--- a/CORE/SERVICES/DFS/src/dfs.c
+++ b/CORE/SERVICES/DFS/src/dfs.c
@@ -344,7 +344,7 @@ dfs_attach(struct ieee80211com *ic)
dfs->pulses->pl_lastelem = DFS_MAX_PULSE_BUFFER_MASK;
- /* Allocate memory for radar filters */
+ /* Allocate memory for radar filters */
for (n=0; n<DFS_MAX_RADAR_TYPES; n++) {
dfs->dfs_radarf[n] = (struct dfs_filtertype *)OS_MALLOC(NULL, sizeof(struct dfs_filtertype),GFP_ATOMIC);
if (dfs->dfs_radarf[n] == NULL) {
@@ -357,23 +357,7 @@ dfs_attach(struct ieee80211com *ic)
goto bad1;
}
}
-
- /* Allocate memory for dc radar filters */
- for (n = 0; n < DFS_MAX_RADAR_TYPES; n++) {
- dfs->dfs_dc_radarf[n] =
- (struct dfs_filtertype *)OS_MALLOC(NULL,
- sizeof(struct dfs_filtertype), GFP_ATOMIC);
- if (!(dfs->dfs_dc_radarf[n])) {
- DFS_PRINTK("%s: cannot allocate memory for dc radar filter types\n",
- __func__);
- goto bad1;
- }
- vos_mem_zero(dfs->dfs_dc_radarf[n], sizeof(struct dfs_filtertype));
- if (0 != dfs_alloc_mem_filter(dfs->dfs_radarf[n]))
- goto bad4;
- }
-
- /* Allocate memory for radar table */
+ /* Allocate memory for radar table */
dfs->dfs_radartable = (int8_t **)OS_MALLOC(NULL, 256*sizeof(int8_t *), GFP_ATOMIC);
if (dfs->dfs_radartable == NULL) {
DFS_PRINTK("%s: cannot allocate memory for radar table\n",
@@ -390,26 +374,6 @@ dfs_attach(struct ieee80211com *ic)
}
}
- /* Allocate memory for dc radar table */
- dfs->dfs_dc_radartable = (int8_t **)OS_MALLOC(NULL,
- MAX_DFS_RADAR_TYPE * sizeof(int8_t *),
- GFP_ATOMIC);
- if (!dfs->dfs_dc_radartable) {
- DFS_PRINTK("%s: cannot allocate memory for radar table\n",
- __func__);
- goto bad2;
- }
- for (n = 0; n < MAX_DFS_RADAR_TYPE; n++) {
- dfs->dfs_dc_radartable[n] = OS_MALLOC(NULL,
- DFS_MAX_RADAR_OVERLAP * sizeof(int8_t),
- GFP_ATOMIC);
- if (!(dfs->dfs_dc_radartable[n])) {
- DFS_PRINTK("%s: cannot allocate memory for dc radar table entry\n",
- __func__);
- goto bad3;
- }
- }
-
if (usenol == 0)
DFS_PRINTK("%s: NOL disabled\n", __func__);
else if (usenol == 2)
@@ -447,19 +411,9 @@ dfs_attach(struct ieee80211com *ic)
dfs->ath_dfs_nol_timeout = DFS_NOL_TIMEOUT_S;
return 0;
-bad3:
- OS_FREE(dfs->dfs_dc_radartable);
- dfs->dfs_dc_radartable = NULL;
bad2:
OS_FREE(dfs->dfs_radartable);
dfs->dfs_radartable = NULL;
-bad4:
- for (n = 0; n < DFS_MAX_RADAR_TYPES; n++) {
- if (!(dfs->dfs_dc_radarf[n])) {
- OS_FREE(dfs->dfs_dc_radarf[n]);
- dfs->dfs_dc_radarf[n] = NULL;
- }
- }
bad1:
for (n=0; n<DFS_MAX_RADAR_TYPES; n++) {
if (dfs->dfs_radarf[n] != NULL) {
@@ -565,14 +519,6 @@ dfs_detach(struct ieee80211com *ic)
dfs->dfs_radarf[n] = NULL;
}
}
- for (n = 0; n < DFS_MAX_RADAR_TYPES; n++) {
- if (!(dfs->dfs_dc_radarf[n])) {
- dfs_free_filter(dfs->dfs_dc_radarf[n]);
- OS_FREE(dfs->dfs_dc_radarf[n]);
- dfs->dfs_dc_radarf[n] = NULL;
- }
- }
-
if (dfs->dfs_radartable != NULL) {
@@ -589,17 +535,6 @@ dfs_detach(struct ieee80211com *ic)
#endif
}
- if (!(dfs->dfs_dc_radartable)) {
- for (n = 0; n < DFS_MAX_RADAR_TYPES; n++) {
- if (!(dfs->dfs_dc_radartable[n])) {
- OS_FREE(dfs->dfs_dc_radartable[n]);
- dfs->dfs_dc_radartable[n] = NULL;
- }
- }
- OS_FREE(dfs->dfs_dc_radartable);
- dfs->dfs_dc_radartable = NULL;
- }
-
if (dfs->dfs_b5radars != NULL) {
OS_FREE(dfs->dfs_b5radars);
dfs->dfs_b5radars=NULL;
diff --git a/CORE/SERVICES/DFS/src/dfs_debug.c b/CORE/SERVICES/DFS/src/dfs_debug.c
index efe88520852a..534d09d54add 100644
--- a/CORE/SERVICES/DFS/src/dfs_debug.c
+++ b/CORE/SERVICES/DFS/src/dfs_debug.c
@@ -109,8 +109,7 @@ dfs_print_filters(struct ath_dfs *dfs)
ft = dfs->dfs_radarf[i];
if((ft->ft_numfilters > DFS_MAX_NUM_RADAR_FILTERS) || (!ft->ft_numfilters))
continue;
- DFS_PRINTK("===========ft->ft_numfilters=%u===========\n",
- ft->ft_numfilters);
+ DFS_PRINTK("===========ft->ft_numfilters=%u===========\n", ft->ft_numfilters);
for (j=0; j<ft->ft_numfilters; j++) {
rf = ft->ft_filters[j];
DFS_PRINTK("filter[%d] filterID = %d rf_numpulses=%u; rf->rf_minpri=%u; rf->rf_maxpri=%u; rf->rf_threshold=%u; rf->rf_filterlen=%u; rf->rf_mindur=%u; rf->rf_maxdur=%u\n",j, rf->rf_pulseid,
@@ -118,26 +117,6 @@ dfs_print_filters(struct ath_dfs *dfs)
}
}
}
-
- for (i=0; i < DFS_MAX_RADAR_TYPES; i++) {
- if (dfs->dfs_dc_radarf[i])
- continue;
-
- ft = dfs->dfs_dc_radarf[i];
- if ((ft->ft_numfilters > DFS_MAX_NUM_RADAR_FILTERS) ||
- (!ft->ft_numfilters))
- continue;
- DFS_PRINTK("===========DC ft->ft_numfilters=%u===========\n",
- ft->ft_numfilters);
- for (j = 0; j < ft->ft_numfilters; j++) {
- rf = ft->ft_filters[j];
- DFS_PRINTK("DC filter[%d] filterID = %d rf_numpulses=%u; rf->rf_minpri=%u; rf->rf_maxpri=%u; rf->rf_threshold=%u; rf->rf_filterlen=%u; rf->rf_mindur=%u; rf->rf_maxdur=%u\n",
- j, rf->rf_pulseid, rf->rf_numpulses, rf->rf_minpri,
- rf->rf_maxpri, rf->rf_threshold, rf->rf_filterlen,
- rf->rf_mindur, rf->rf_maxdur);
- }
- }
-
}
void dfs_print_activity(struct ath_dfs *dfs)
diff --git a/CORE/SERVICES/DFS/src/dfs_init.c b/CORE/SERVICES/DFS/src/dfs_init.c
index b85b5a8a29a4..afa03e94d800 100644
--- a/CORE/SERVICES/DFS/src/dfs_init.c
+++ b/CORE/SERVICES/DFS/src/dfs_init.c
@@ -115,22 +115,6 @@ void dfs_reset_alldelaylines(struct ath_dfs *dfs)
}
}
}
- for (i = 0; i < DFS_MAX_RADAR_TYPES; i++) {
- if (dfs->dfs_dc_radarf[i] == NULL)
- continue;
-
- ft = dfs->dfs_dc_radarf[i];
- for (j = 0; j < ft->ft_numfilters; j++) {
- rf = ft->ft_filters[j];
- dl = &(rf->rf_dl);
- if (dl == NULL)
- continue;
-
- OS_MEMZERO(dl, sizeof(struct dfs_delayline));
- dl->dl_lastelem = (0xFFFFFFFF) & DFS_MAX_DL_MASK;
- }
- }
-
for (i = 0; i < dfs->dfs_rinfo.rn_numbin5radars; i++) {
OS_MEMZERO(&(dfs->dfs_b5radars[i].br_elems[0]), sizeof(struct dfs_bin5elem)*DFS_MAX_B5_SIZE);
dfs->dfs_b5radars[i].br_firstelem = 0;
@@ -246,12 +230,6 @@ int dfs_init_radar_filters(struct ieee80211com *ic,
for (i=0;i<DFS_MAX_RADAR_OVERLAP; i++)
(dfs->dfs_radartable[n])[i] = -1;
}
- /* Clear dc filter type table */
- for (n = 0; n < 256; n++) {
- for (i = 0;i < DFS_MAX_RADAR_OVERLAP; i++)
- (dfs->dfs_dc_radartable[n])[i] = -1;
- }
-
/* Now, initialize the radar filters */
for (p=0; p<numradars; p++) {
ft = NULL;
@@ -341,109 +319,8 @@ int dfs_init_radar_filters(struct ieee80211com *ic,
}
- /* Initialize dc radar filters */
- for (p = 0; p < numradars; p++) {
- ft = NULL;
- for (n = 0; n < dfs->dfs_rinfo.rn_numradars; n++) {
- if ((dfs_radars[p].rp_pulsedur ==
- dfs->dfs_dc_radarf[n]->ft_filterdur) &&
- (dfs_radars[p].rp_numpulses ==
- dfs->dfs_dc_radarf[n]->ft_numpulses) &&
- (dfs_radars[p].rp_mindur == dfs->dfs_dc_radarf[n]->ft_mindur) &&
- (dfs_radars[p].rp_maxdur == dfs->dfs_dc_radarf[n]->ft_maxdur)) {
-
- ft = dfs->dfs_dc_radarf[n];
- break;
- }
- }
- if (ft == NULL) {
- /* No filter of the appropriate dur was found */
- if ((dfs->dfs_rinfo.rn_numradars+1) > DFS_MAX_RADAR_TYPES) {
- DFS_DPRINTK(dfs, ATH_DEBUG_DFS, "%s: Too many filter types",
- __func__);
- goto bad4;
- }
- ft = dfs->dfs_dc_radarf[dfs->dfs_rinfo.rn_numradars];
- ft->ft_numfilters = 0;
- ft->ft_numpulses = dfs_radars[p].rp_numpulses;
- ft->ft_patterntype = dfs_radars[p].rp_patterntype;
- ft->ft_mindur = dfs_radars[p].rp_mindur;
- ft->ft_maxdur = dfs_radars[p].rp_maxdur;
- ft->ft_filterdur = dfs_radars[p].rp_pulsedur;
- ft->ft_rssithresh = dfs_radars[p].rp_rssithresh;
- ft->ft_rssimargin = dfs_radars[p].rp_rssimargin;
- ft->ft_minpri = DFS_FILTER_DEFAULT_PRI;
-
- if (ft->ft_rssithresh < min_rssithresh)
- min_rssithresh = ft->ft_rssithresh;
- if (ft->ft_maxdur > max_pulsedur)
- max_pulsedur = ft->ft_maxdur;
- for (i = ft->ft_mindur; i <= ft->ft_maxdur; i++) {
- u_int32_t stop = 0, tableindex = 0;
-
- while ((tableindex < DFS_MAX_RADAR_OVERLAP) && (!stop)) {
- if ((dfs->dfs_dc_radartable[i])[tableindex] == -1)
- stop = 1;
- else
- tableindex++;
- }
- if (stop) {
- (dfs->dfs_dc_radartable[i])[tableindex] =
- (int8_t) (dfs->dfs_rinfo.rn_numradars);
- } else {
- DFS_DPRINTK(dfs, ATH_DEBUG_DFS,
- "%s: Too many overlapping dc radar filters",
- __func__);
- goto bad4;
- }
- }
- dfs->dfs_rinfo.rn_numradars++;
- }
- rf = ft->ft_filters[ft->ft_numfilters++];
- dfs_reset_delayline(&rf->rf_dl);
- numpulses = dfs_radars[p].rp_numpulses;
-
- rf->rf_numpulses = numpulses;
- rf->rf_patterntype = dfs_radars[p].rp_patterntype;
- rf->rf_pulseid = dfs_radars[p].rp_pulseid;
- rf->rf_mindur = dfs_radars[p].rp_mindur;
- rf->rf_maxdur = dfs_radars[p].rp_maxdur;
- rf->rf_numpulses = dfs_radars[p].rp_numpulses;
- rf->rf_ignore_pri_window = dfs_radars[p].rp_ignore_pri_window;
- T = (100000000/dfs_radars[p].rp_max_pulsefreq) -
- 100*(dfs_radars[p].rp_meanoffset);
- rf->rf_minpri =
- dfs_round((int32_t)T - (100*(dfs_radars[p].rp_pulsevar)));
- Tmax = (100000000/dfs_radars[p].rp_pulsefreq) -
- 100*(dfs_radars[p].rp_meanoffset);
- rf->rf_maxpri =
- dfs_round((int32_t)Tmax + (100*(dfs_radars[p].rp_pulsevar)));
-
- if(rf->rf_minpri < ft->ft_minpri)
- ft->ft_minpri = rf->rf_minpri;
-
- rf->rf_fixed_pri_radar_pulse =
- (dfs_radars[p].rp_max_pulsefreq ==
- dfs_radars[p].rp_pulsefreq) ? 1 : 0;
- /* for pulseid 5, increase threshould by 1 */
- if (dfs_radars[p].rp_pulseid == 5)
- rf->rf_threshold = dfs_radars[p].rp_threshold + 1;
- else
- rf->rf_threshold = dfs_radars[p].rp_threshold;
-
- rf->rf_filterlen = rf->rf_maxpri * rf->rf_numpulses;
-
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO, "%s[%d]: minprf = %d maxprf = %d pulsevar = %d thresh=%d",
- __func__, __LINE__, dfs_radars[p].rp_pulsefreq,
- dfs_radars[p].rp_max_pulsefreq, dfs_radars[p].rp_pulsevar,
- rf->rf_threshold);
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO, "%s[%d]:minpri = %d maxpri = %d filterlen = %d filterID = %d",
- __func__, __LINE__, rf->rf_minpri, rf->rf_maxpri,
- rf->rf_filterlen, rf->rf_pulseid);
-
- }
#ifdef DFS_DEBUG
- dfs_print_filters(dfs);
+ dfs_print_filters(ic);
#endif
dfs->dfs_rinfo.rn_numbin5radars = numb5radars;
if (dfs->dfs_b5radars != NULL)
diff --git a/CORE/SERVICES/DFS/src/dfs_process_radarevent.c b/CORE/SERVICES/DFS/src/dfs_process_radarevent.c
index 45176f5706d0..156a229dd0cd 100644
--- a/CORE/SERVICES/DFS/src/dfs_process_radarevent.c
+++ b/CORE/SERVICES/DFS/src/dfs_process_radarevent.c
@@ -108,175 +108,6 @@ dfs_process_pulse_dur(struct ath_dfs *dfs, u_int8_t re_dur)
}
/*
- * dfs_process_dc_pulse: process dc pulses
- * @dfs: pointer to dfs structure
- * @event: dfs event
- * @retval: current found status
- * @this_ts: event's ts
- *
- * Return: None
- */
-static void dfs_process_dc_pulse(struct ath_dfs *dfs, struct dfs_event *event,
- int *retval, int this_ts)
-{
- struct dfs_event re;
- struct dfs_state *rs=NULL;
- struct dfs_filtertype *ft;
- struct dfs_filter *rf;
- int found, p, empty;
- int min_pri, miss_pulse_number = 0, deviation = 0;
- u_int32_t tabledepth = 0;
- u_int64_t deltaT;
- int ext_chan_event_flag = 0;
- int i;
-
- OS_MEMCPY(&re, event, sizeof(*event));
- if (re.re_chanindex < DFS_NUM_RADAR_STATES)
- rs = &dfs->dfs_radar[re.re_chanindex];
-
- while ((tabledepth < DFS_MAX_RADAR_OVERLAP) &&
- ((dfs->dfs_dc_radartable[re.re_dur])[tabledepth] != -1) &&
- (!*retval)) {
- ft = dfs->dfs_dc_radarf[((dfs->dfs_dc_radartable
- [re.re_dur])[tabledepth])];
-
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
- FL("** RD (%d): ts %x dur %u rssi %u"),
- rs->rs_chan.ic_freq,
- re.re_ts, re.re_dur, re.re_rssi);
-
- deltaT = this_ts - ft->ft_last_ts;
- if (re.re_rssi < ft->ft_rssithresh && re.re_dur > 4) {
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
- FL("Rejecting on rssi rssi=%u thresh=%u depth=%d"),
- re.re_rssi, ft->ft_rssithresh,
- tabledepth);
- tabledepth++;
- dfs_reset_filter_delaylines(ft);
- ATH_DFSQ_LOCK(dfs);
- empty = STAILQ_EMPTY(&(dfs->dfs_radarq));
- ATH_DFSQ_UNLOCK(dfs);
- continue;
- }
- if ((deltaT < ft->ft_minpri) && (deltaT !=0)) {
- /* This check is for the whole filter type. Individual filters
- * will check this again. This is first line of filtering. */
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
- FL("Rejecting on pri pri=%lld minpri=%u depth=%d"),
- (unsigned long long)deltaT,
- ft->ft_minpri, tabledepth);
- dfs_reset_filter_delaylines(ft);
- tabledepth++;
- continue;
- }
- for (p = 0, found = 0; (p < ft->ft_numfilters) && (!found); p++) {
- rf = ft->ft_filters[p];
- if ((re.re_dur >= rf->rf_mindur) &&
- (re.re_dur <= rf->rf_maxdur)) {
- deltaT = (this_ts < rf->rf_dl.dl_last_ts) ?
- (int64_t) ((DFS_TSF_WRAP - rf->rf_dl.dl_last_ts) +
- this_ts + 1) :
- this_ts - rf->rf_dl.dl_last_ts;
-
- if ((deltaT < rf->rf_minpri) && (deltaT != 0)) {
- /* Second line of PRI filtering. */
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
- FL("filterID=%d :: Rejected and cleared individual filter min PRI deltaT=%lld rf->rf_minpri=%u"),
- rf->rf_pulseid,
- (unsigned long long)deltaT, rf->rf_minpri);
- dfs_reset_delayline(&rf->rf_dl);
- rf->rf_dl.dl_last_ts = this_ts;
- continue;
- }
-
- if (rf->rf_ignore_pri_window > 0) {
- if (deltaT < rf->rf_minpri) {
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
- FL("filterID=%d :: Rejected and cleared on individual filter max PRI deltaT=%lld rf->rf_minpri=%u"),
- rf->rf_pulseid,
- (unsigned long long)deltaT, rf->rf_minpri);
- dfs_reset_delayline(&rf->rf_dl);
- rf->rf_dl.dl_last_ts = this_ts;
- continue;
- }
- } else {
- if (deltaT < rf->rf_minpri) {
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
- FL("filterID=%d :: Rejected and cleared on individual filter max PRI deltaT=%lld rf->rf_minpri=%u"),
- rf->rf_pulseid,
- (unsigned long long)deltaT, rf->rf_minpri);
- dfs_reset_delayline(&rf->rf_dl);
- rf->rf_dl.dl_last_ts = this_ts;
- continue;
- }
- }
- dfs_add_pulse(dfs, rf, &re, deltaT, this_ts);
-
- /* extra WAR */
- if ((dfs->dfsdomain == DFS_FCC_DOMAIN &&
- dfs->dfsdomain == DFS_MKK4_DOMAIN) &&
- ((rf->rf_pulseid != 31) && (rf->rf_pulseid != 32))) {
-
- min_pri = 0xffff;
- for (i = 0; i < rf->rf_dl.dl_numelems; i++) {
- if (rf->rf_dl.dl_elems[i].de_time < min_pri)
- min_pri = rf->rf_dl.dl_elems[i].de_time;
- }
-
- for (i=0; i < rf->rf_dl.dl_numelems; i++) {
- miss_pulse_number = vos_round_div(
- (rf->rf_dl.dl_elems[i].de_time), min_pri);
- deviation = __adf_os_abs(min_pri *
- miss_pulse_number -
- rf->rf_dl.dl_elems[i].de_time);
- if (deviation > miss_pulse_number*3) {
- dfs_reset_delayline(&rf->rf_dl);
- VOS_TRACE(VOS_MODULE_ID_SAP,
- VOS_TRACE_LEVEL_INFO,
- FL("filterID=%d :: cleared individual deleyline min_pri =%d miss_pulse_number =%d deviation =%d"),
- rf->rf_pulseid,
- min_pri, miss_pulse_number, deviation);
- }
- }
- }
-
- /* If this is an extension channel event,
- * flag it for false alarm reduction */
- if (re.re_chanindex == dfs->dfs_extchan_radindex)
- ext_chan_event_flag = 1;
-
- if (rf->rf_patterntype == 2)
- found = dfs_staggered_check(dfs, rf, (uint32_t)deltaT,
- re.re_dur);
- else
- found = dfs_bin_check(dfs, rf, (uint32_t) deltaT,
- re.re_dur, ext_chan_event_flag);
-
- if (dfs->dfs_debug_mask & ATH_DEBUG_DFS2)
- dfs_print_delayline(dfs, &rf->rf_dl);
-
- rf->rf_dl.dl_last_ts = this_ts;
- } else {
- /* if we are rejecting this, clear the queue */
- dfs_reset_delayline(&rf->rf_dl);
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
- FL("filterID= %d :: cleared individual deleyline"),
- rf->rf_pulseid);
- }
- }
- ft->ft_last_ts = this_ts;
- *retval |= found;
- if (found) {
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
- FL(":## Radar Found minDur=%d, filterId=%d ##"),
- ft->ft_mindur,
- rf != NULL ? rf->rf_pulseid : -1);
- }
- tabledepth++;
- }
-}
-
-/*
* Process a radar event.
*
* If a radar event is found, return 1. Otherwise, return 0.
@@ -550,11 +381,9 @@ dfs_process_radarevent(struct ath_dfs *dfs, struct ieee80211_channel *chan)
dfs->radar_log[i].dur = re.re_dur;
dfs->dfs_event_log_count++;
}
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
- "%s[%d]:xxxxx ts =%u re.re_dur=%u re.re_rssi =%u diff =%u sidx = %u flags = %x pl->pl_lastelem.p_time=%llu xxxxx",
- __func__, __LINE__, (u_int32_t)this_ts,
- re.re_dur, re.re_rssi, diff_ts, re.sidx, re.re_flags,
- (unsigned long long)pl->pl_elems[index].p_time);
+ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO, "%s[%d]:xxxxx ts =%u re.re_dur=%u re.re_rssi =%u diff =%u pl->pl_lastelem.p_time=%llu xxxxx",__func__,__LINE__,(u_int32_t)this_ts, re.re_dur, re.re_rssi, diff_ts, (unsigned long long)pl->pl_elems[index].p_time);
+
+
/* If diff_ts is very small, we might be getting false pulse detects
* due to heavy interference. We might be getting spectral splatter
@@ -698,26 +527,7 @@ dfs_process_radarevent(struct ath_dfs *dfs, struct ieee80211_channel *chan)
DFS_DPRINTK(dfs, ATH_DEBUG_DFS1," *** chan freq (%d): ts %llu dur %u rssi %u",
rs->rs_chan.ic_freq, (unsigned long long)this_ts, re.re_dur, re.re_rssi);
-
- /*
- * DC pulses processing will be done in this seperate block since some
- * device may generate pulse which may cause false detection.
- * This processing is similar kind as of normal pulse processing with
- * some exception such as:
- * 1. Clear the queue if pulse doesn't belong to it
- * 2. Remove chan load optimization(can cause some valid pulses to drop)
- * 3. Drop pulses on basis of mean deviation for some filters
- */
- if (((re.sidx == 0) && DFS_EVENT_NOTCHIRP(&re)) &&
- ((dfs->dfsdomain == DFS_FCC_DOMAIN) ||
- (dfs->dfsdomain == DFS_MKK4_DOMAIN) ||
- (dfs->dfsdomain == DFS_ETSI_DOMAIN && re.re_dur < 18))) {
- dfs_process_dc_pulse(dfs, &re, &retval, this_ts);
- }
-
- /* Pulse not at DC position */
- else {
- while ((tabledepth < DFS_MAX_RADAR_OVERLAP) &&
+ while ((tabledepth < DFS_MAX_RADAR_OVERLAP) &&
((dfs->dfs_radartable[re.re_dur])[tabledepth] != -1) &&
(!retval)) {
ft = dfs->dfs_radarf[((dfs->dfs_radartable[re.re_dur])[tabledepth])];
@@ -821,7 +631,6 @@ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO, "%s[%d]:filterID= %d :: Rejec
rf != NULL ? rf->rf_pulseid : -1);
}
tabledepth++;
- }
}
ATH_DFSQ_LOCK(dfs);
empty = STAILQ_EMPTY(&(dfs->dfs_radarq));
diff --git a/CORE/VOSS/inc/vos_types.h b/CORE/VOSS/inc/vos_types.h
index a9198201600a..960226fa75ce 100644
--- a/CORE/VOSS/inc/vos_types.h
+++ b/CORE/VOSS/inc/vos_types.h
@@ -58,12 +58,6 @@
// macro to return the floor of an integer division operation
#define VOS_FLOOR_DIV( _a, _b ) ( ( (_a) - ( (_a) % (_b) ) ) / (_b) )
-static inline unsigned int vos_round_div(unsigned int dividend,
- unsigned int divisor)
-{
- return (dividend + (divisor / 2)) / divisor;
-}
-
#define VOS_SWAP_U16(_x) \
( ( ( (_x) << 8 ) & 0xFF00 ) | ( ( (_x) >> 8 ) & 0x00FF ) )
diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c
index b80c021b9499..dc96f4f4d7b6 100644
--- a/CORE/VOSS/src/vos_api.c
+++ b/CORE/VOSS/src/vos_api.c
@@ -496,7 +496,7 @@ 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->enableFwSelfRecovery = pHddCtx->cfg_ini->enableFwSelfRecovery;
- scn->max_no_of_peers = pHddCtx->cfg_ini->maxNumberOfPeers;
+ scn->max_no_of_peers = pHddCtx->max_peers;
#ifdef WLAN_FEATURE_LPSS
scn->enablelpasssupport = pHddCtx->cfg_ini->enablelpasssupport;
#endif
@@ -661,9 +661,9 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize )
/* Number of peers limit differs in each chip version. If peer max
* limit configured in ini exceeds more than supported, WMA adjusts
* and keeps correct limit in macOpenParms.maxStation. So, make sure
- * ini entry pHddCtx->cfg_ini->maxNumberOfPeers has adjusted value
+ * pHddCtx->max_peers has adjusted value
*/
- pHddCtx->cfg_ini->maxNumberOfPeers = macOpenParms.maxStation;
+ pHddCtx->max_peers = macOpenParms.maxStation;
HTCHandle = vos_get_context(VOS_MODULE_ID_HTC, gpVosContext);
if (!HTCHandle) {
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,