diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-06-30 12:13:50 -0600 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2016-06-30 12:13:50 -0600 |
| commit | 388be7afab0500aba4e2f85cf7693d2dd734f5d9 (patch) | |
| tree | cb0e15fae5a1592c85b880cb5abeec4542e5cf2a | |
| parent | 06f1d1b2564227ddf9fdecff611abcf56c4fc654 (diff) | |
| parent | f0dd9902ddb6a3b3e55efadcbd2658e643fe9b39 (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
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, |
