diff options
| author | Hong Shi <hongsh@codeaurora.org> | 2016-12-21 15:38:53 +0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-02-11 06:19:02 -0800 |
| commit | 878886cb32a1f5e8a73721f8efdfd3a073cc374c (patch) | |
| tree | 81d3bb13dec324fcbfb3629a072763030e7cfbb9 | |
| parent | 1817eea307474d3ae577993378c38fa4ab6edcae (diff) | |
qcacld-2.0: Add ini config for tx mgmt frame rate
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
set 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 | 13 | ||||
| -rw-r--r-- | CORE/MAC/inc/wni_cfg.h | 7 | ||||
| -rw-r--r-- | CORE/MAC/src/cfg/cfgParamName.c | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/cfg/cfgProcMsg.c | 5 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 46 |
6 files changed, 91 insertions, 1 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 6fe284a2a886..7355f128982e 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -1584,6 +1584,25 @@ typedef enum #define CFG_DISABLE_ABG_RATE_FOR_TX_DATA_DEFAULT (WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA_STADEF) /* + * <ini> + * gRateForTxMgmt - rate for tx mgmt frame + * @Min: 0x0 + * @Max: 0xFF + * @Default: 0x0 + * + * This ini is used to configure the rate for tx + * mgmt frame. + * + * 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) + +/* * RSSI Thresholds * Used when eHDD_LINK_SPEED_REPORT_SCALED is selected */ @@ -5059,6 +5078,7 @@ struct hdd_config { uint16_t max_ht_mcs_txdata; bool sap_get_peer_info; bool disable_abg_rate_txdata; + uint8_t rate_for_tx_mgmt; #ifdef QCA_LL_TX_FLOW_CT v_U32_t TxFlowLowWaterMark; v_U32_t TxFlowHighWaterMarkOffset; diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index 8ed54bbb3850..03dac1b066b5 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -2422,6 +2422,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, + hdd_config_t, 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, hdd_config_t, enableFirstScan2GOnly, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -7558,6 +7565,12 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx ) hddLog(LOGE, "Could not pass on WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA to CCM"); } + if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_RATE_FOR_TX_MGMT, + pConfig->rate_for_tx_mgmt, NULL, + eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE) { + fStatus = FALSE; + hddLog(LOGE, "Could not pass on WNI_CFG_RATE_FOR_TX_MGMT to CCM"); + } return fStatus; } diff --git a/CORE/MAC/inc/wni_cfg.h b/CORE/MAC/inc/wni_cfg.h index 6d2a9080a272..5ec0a7eb55a4 100644 --- a/CORE/MAC/inc/wni_cfg.h +++ b/CORE/MAC/inc/wni_cfg.h @@ -330,6 +330,7 @@ enum { WNI_CFG_ASSOC_STA_LIMIT_AP, WNI_CFG_MAX_HT_MCS_TX_DATA, WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA, + WNI_CFG_RATE_FOR_TX_MGMT, WNI_CFG_MAX, }; @@ -1621,7 +1622,11 @@ enum { #define WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA_STAMAX 1 #define WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA_STADEF 0 -#define CFG_STA_IBUF_MAX_SIZE 246 +#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 0x0 + +#define CFG_STA_IBUF_MAX_SIZE 247 #define CFG_STA_SBUF_MAX_SIZE 3199 #define CFG_STA_MAGIC_DWORD 0xbeefbeef diff --git a/CORE/MAC/src/cfg/cfgParamName.c b/CORE/MAC/src/cfg/cfgParamName.c index 4a2d5fa8d2fe..2cc879b1f87a 100644 --- a/CORE/MAC/src/cfg/cfgParamName.c +++ b/CORE/MAC/src/cfg/cfgParamName.c @@ -338,4 +338,5 @@ unsigned char *gCfgParamName[] = { (unsigned char *)"ASSOC_STA_LIMIT_AP", (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/cfgProcMsg.c b/CORE/MAC/src/cfg/cfgProcMsg.c index 8da3a08edca6..be88a377cabb 100644 --- a/CORE/MAC/src/cfg/cfgProcMsg.c +++ b/CORE/MAC/src/cfg/cfgProcMsg.c @@ -1909,6 +1909,11 @@ struct cgstatic cfg_static[WNI_CFG_MAX] = { WNI_CFG_DISABLE_ABG_RATE_FOR_TX_DATA_STAMAX, 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}, }; struct cfgstatic_string cfg_static_string[CFG_MAX_STATIC_STRING] = { diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index ebff00115fc7..2946215de3ff 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -467,6 +467,7 @@ static VOS_STATUS wma_stop_scan(tp_wma_handle wma_handle, tAbortScanParams *abort_scan_req); static void wma_set_sap_keepalive(tp_wma_handle wma, u_int8_t vdev_id); +static void wma_set_vdev_mgmt_rate(tp_wma_handle wma, u_int8_t vdev_id); static int wma_smps_force_mode_callback(WMA_HANDLE handle, uint8_t *event_buf, uint32_t len); @@ -9567,6 +9568,47 @@ static inline void wma_get_link_probe_timeout(struct sAniSirGlobal *mac, *max_unresponsive_time = *max_inactive_time + keep_alive; } +/** + * wma_set_mgmt_rate() - set vdev mgmt rate. + * @wma: wma handle + * @vdev_id: vdev id + * + * Return: None + */ +static void wma_set_vdev_mgmt_rate(tp_wma_handle wma, u_int8_t vdev_id) +{ + uint32_t cfg_val; + int ret; + struct sAniSirGlobal *mac = + (struct sAniSirGlobal*)vos_get_context(VOS_MODULE_ID_PE, + wma->vos_context); + + if (NULL == mac) { + WMA_LOGE("%s: Failed to get mac", __func__); + return; + } + + if (wlan_cfgGetInt(mac, WNI_CFG_RATE_FOR_TX_MGMT, + &cfg_val) == eSIR_SUCCESS) { + if (!cfg_val) { + WMA_LOGD("WNI_CFG_RATE_FOR_TX_MGMT " + "is 0, ignore"); + } else { + ret = wmi_unified_vdev_set_param_send( + 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"); + } +} + static void wma_set_sap_keepalive(tp_wma_handle wma, u_int8_t vdev_id) { tANI_U32 min_inactive_time, max_inactive_time, max_unresponsive_time; @@ -10114,6 +10156,8 @@ static 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->sessionId); /* Initialize roaming offload state */ if ((self_sta_req->type == WMI_VDEV_TYPE_STA) && (self_sta_req->subType == 0)) { @@ -18586,6 +18630,7 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params) } else { wma->interfaces[params->smesessionId].vdev_up = TRUE; + wma_set_vdev_mgmt_rate(wma, params->smesessionId); } adf_os_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STARTED); @@ -20402,6 +20447,7 @@ static 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); } } } |
