summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHong Shi <hongsh@codeaurora.org>2016-12-21 15:38:53 +0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-02-11 06:19:02 -0800
commit878886cb32a1f5e8a73721f8efdfd3a073cc374c (patch)
tree81d3bb13dec324fcbfb3629a072763030e7cfbb9
parent1817eea307474d3ae577993378c38fa4ab6edcae (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.h20
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c13
-rw-r--r--CORE/MAC/inc/wni_cfg.h7
-rw-r--r--CORE/MAC/src/cfg/cfgParamName.c1
-rw-r--r--CORE/MAC/src/cfg/cfgProcMsg.c5
-rw-r--r--CORE/SERVICES/WMA/wma.c46
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);
}
}
}