diff options
| author | Hong Shi <hongsh@codeaurora.org> | 2017-02-20 00:57:22 +0800 |
|---|---|---|
| committer | qcabuildsw <qcabuildsw@localhost> | 2017-02-28 23:41:00 -0800 |
| commit | 6aa9836f2f7edf650df9023b8d923d5930b06b19 (patch) | |
| tree | df958061ad6ccf40098ca6e3cec4c2f733a9a97c | |
| parent | cb32fd17caec67c07a5649ba9ac369c7cad76f7b (diff) | |
qcacld-3.0: Add ini config for tx mgmt frame rate
qcacld-2.0 to qcacld-3.0 propagation
Add an ini option for configuring rate for tx mgmt frame.
It sets the existed wmi cmd: WMI_VDEV_PARAM_MGMT_TX_RATE right
after vdev created. Since FW resets mgmt during vdev up, also
sets mgmt rate after sap/sta vdev up.
CRs-Fixed: 1103895
Change-Id: I93bbe0978963abf0b887dbf2add5bfc2912f6de1
| -rw-r--r-- | core/hdd/inc/wlan_hdd_cfg.h | 20 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_cfg.c | 14 | ||||
| -rw-r--r-- | core/mac/inc/wni_cfg.h | 5 | ||||
| -rw-r--r-- | core/mac/src/cfg/cfg_param_name.c | 1 | ||||
| -rw-r--r-- | core/mac/src/cfg/cfg_proc_msg.c | 7 | ||||
| -rw-r--r-- | core/wma/inc/wma_internal.h | 1 | ||||
| -rw-r--r-- | core/wma/src/wma_dev_if.c | 4 | ||||
| -rw-r--r-- | core/wma/src/wma_mgmt.c | 40 |
8 files changed, 90 insertions, 2 deletions
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 32a9fbecc8e0..0c46c03b9add 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -5711,6 +5711,25 @@ typedef enum { /* * <ini> + * gRateForTxMgmt - rate for tx mgmt frame + * @Min: 0x0 + * @Max: 0xFF + * @Default: 0xFF + * + * This ini is used to configure the rate for tx + * mgmt frame. Default 0xFF means disable. + * + * Usage: External + * + * </ini> + */ +#define CFG_RATE_FOR_TX_MGMT "gRateForTxMgmt" +#define CFG_RATE_FOR_TX_MGMT_MIN (WNI_CFG_RATE_FOR_TX_MGMT_STAMIN) +#define CFG_RATE_FOR_TX_MGMT_MAX (WNI_CFG_RATE_FOR_TX_MGMT_STAMAX) +#define CFG_RATE_FOR_TX_MGMT_DEFAULT (WNI_CFG_RATE_FOR_TX_MGMT_STADEF) + +/* + * <ini> * gTDLSTxPacketThreshold - Tx/Rx Packet threshold for initiating TDLS. * @Min: 0 * @Max: 4294967295 @@ -10117,6 +10136,7 @@ struct hdd_config { bool fRegChangeDefCountry; uint16_t max_ht_mcs_txdata; bool disable_abg_rate_txdata; + uint8_t rate_for_tx_mgmt; #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL uint32_t TxFlowLowWaterMark; uint32_t TxFlowHighWaterMarkOffset; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 45df03ed3553..6b64466740f4 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -2186,6 +2186,13 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_DISABLE_ABG_RATE_FOR_TX_DATA_MIN, CFG_DISABLE_ABG_RATE_FOR_TX_DATA_MAX), + REG_VARIABLE(CFG_RATE_FOR_TX_MGMT, WLAN_PARAM_HexInteger, + struct hdd_config, rate_for_tx_mgmt, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_RATE_FOR_TX_MGMT_DEFAULT, + CFG_RATE_FOR_TX_MGMT_MIN, + CFG_RATE_FOR_TX_MGMT_MAX), + REG_VARIABLE(CFG_ENABLE_FIRST_SCAN_2G_ONLY_NAME, WLAN_PARAM_Integer, struct hdd_config, enableFirstScan2GOnly, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -6925,6 +6932,13 @@ bool hdd_update_config_cfg(hdd_context_t *hdd_ctx) hdd_err("Couldn't pass on WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA to CCM"); } + if (sme_cfg_set_int(hdd_ctx->hHal, WNI_CFG_RATE_FOR_TX_MGMT, + config->rate_for_tx_mgmt) == + QDF_STATUS_E_FAILURE) { + status = false; + hdd_err("Couldn't pass on WNI_CFG_RATE_FOR_TX_MGMT to CCM"); + } + return status; } #ifdef FEATURE_WLAN_SCAN_PNO diff --git a/core/mac/inc/wni_cfg.h b/core/mac/inc/wni_cfg.h index 3cca6c6dbacd..13472dbddcec 100644 --- a/core/mac/inc/wni_cfg.h +++ b/core/mac/inc/wni_cfg.h @@ -253,6 +253,7 @@ enum { WNI_CFG_TGT_GTX_USR_CFG, WNI_CFG_MAX_HT_MCS_TX_DATA, WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA, + WNI_CFG_RATE_FOR_TX_MGMT, /* Any new items to be added should be above this strictly */ CFG_PARAM_MAX_NUM }; @@ -1270,6 +1271,10 @@ enum { #define WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA_STAMAX 1 #define WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA_STADEF 0 +#define WNI_CFG_RATE_FOR_TX_MGMT_STAMIN 0x0 +#define WNI_CFG_RATE_FOR_TX_MGMT_STAMAX 0xFF +#define WNI_CFG_RATE_FOR_TX_MGMT_STADEF 0xFF + #define CFG_STA_MAGIC_DWORD 0xbeefbeef #endif diff --git a/core/mac/src/cfg/cfg_param_name.c b/core/mac/src/cfg/cfg_param_name.c index 3e4cf7efcc78..0e67f6bbf00f 100644 --- a/core/mac/src/cfg/cfg_param_name.c +++ b/core/mac/src/cfg/cfg_param_name.c @@ -325,4 +325,5 @@ unsigned char *g_cfg_param_name[] = { (unsigned char *)"TGT_GTX_USR_CFG", (unsigned char *)"MAX_HT_MCS_TX_DATA", (unsigned char *)"DISABLE_ABG_RATE_TX_DATA", + (unsigned char *)"RATE_FOR_TX_MGMT", }; diff --git a/core/mac/src/cfg/cfg_proc_msg.c b/core/mac/src/cfg/cfg_proc_msg.c index 4fd502524952..a0e27eb666ee 100644 --- a/core/mac/src/cfg/cfg_proc_msg.c +++ b/core/mac/src/cfg/cfg_proc_msg.c @@ -1188,7 +1188,12 @@ cgstatic cfg_static[CFG_PARAM_MAX_NUM] = { CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT, WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA_STAMIN, WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA_STAMAX, - WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA_STADEF} + WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA_STADEF}, + {WNI_CFG_RATE_FOR_TX_MGMT, + CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT, + WNI_CFG_RATE_FOR_TX_MGMT_STAMIN, + WNI_CFG_RATE_FOR_TX_MGMT_STAMAX, + WNI_CFG_RATE_FOR_TX_MGMT_STADEF} }; diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h index bf7b0975f67d..b9679928671e 100644 --- a/core/wma/inc/wma_internal.h +++ b/core/wma/inc/wma_internal.h @@ -1193,6 +1193,7 @@ struct dfs_ieee80211_channel *wma_dfs_configure_channel( uint32_t band_center_freq2, struct wma_vdev_start_req *req); +void wma_set_vdev_mgmt_rate(tp_wma_handle wma, uint8_t vdev_id); void wma_set_sap_keepalive(tp_wma_handle wma, uint8_t vdev_id); int wma_rssi_breached_event_handler(void *handle, diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 3ddd0fce2fca..1c8eae3e3d3c 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -1876,6 +1876,9 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, } else { WMA_LOGE("Failed to get value of HT_CAP, TX STBC unchanged"); } + + wma_set_vdev_mgmt_rate(wma_handle, self_sta_req->session_id); + /* Initialize roaming offload state */ if ((self_sta_req->type == WMI_VDEV_TYPE_STA) && (self_sta_req->sub_type == 0)) { @@ -4171,6 +4174,7 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params) status = QDF_STATUS_E_FAILURE; } else { wma->interfaces[params->smesessionId].vdev_up = true; + wma_set_vdev_mgmt_rate(wma, params->smesessionId); } qdf_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STARTED); diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index a99b930e66a1..0916c12b1879 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -577,6 +577,44 @@ static inline void wma_get_link_probe_timeout(struct sAniSirGlobal *mac, } /** + * wma_set_mgmt_rate() - set vdev mgmt rate. + * @wma: wma handle + * @vdev_id: vdev id + * + * Return: None + */ +void wma_set_vdev_mgmt_rate(tp_wma_handle wma, uint8_t vdev_id) +{ + uint32_t cfg_val; + int ret; + struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE); + + if (NULL == mac) { + WMA_LOGE("%s: Failed to get mac", __func__); + return; + } + + if (wlan_cfg_get_int(mac, WNI_CFG_RATE_FOR_TX_MGMT, + &cfg_val) == eSIR_SUCCESS) { + if (cfg_val == WNI_CFG_RATE_FOR_TX_MGMT_STADEF) { + WMA_LOGD("default WNI_CFG_RATE_FOR_TX_MGMT, ignore"); + } else { + ret = wma_vdev_set_param( + wma->wmi_handle, + vdev_id, + WMI_VDEV_PARAM_MGMT_TX_RATE, + cfg_val); + if (ret) + WMA_LOGE( + "Failed to set WMI_VDEV_PARAM_MGMT_TX_RATE" + ); + } + } else { + WMA_LOGE("Failed to get value of WNI_CFG_RATE_FOR_TX_MGMT"); + } +} + +/** * wma_set_sap_keepalive() - set SAP keep alive parameters to fw * @wma: wma handle * @vdev_id: vdev id @@ -2497,7 +2535,7 @@ void wma_send_beacon(tp_wma_handle wma, tpSendbeaconParams bcn_info) } wma->interfaces[vdev_id].vdev_up = true; wma_set_sap_keepalive(wma, vdev_id); - + wma_set_vdev_mgmt_rate(wma, vdev_id); } } } |
