summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHong Shi <hongsh@codeaurora.org>2017-02-20 00:57:22 +0800
committerqcabuildsw <qcabuildsw@localhost>2017-02-28 23:41:00 -0800
commit6aa9836f2f7edf650df9023b8d923d5930b06b19 (patch)
treedf958061ad6ccf40098ca6e3cec4c2f733a9a97c
parentcb32fd17caec67c07a5649ba9ac369c7cad76f7b (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.h20
-rw-r--r--core/hdd/src/wlan_hdd_cfg.c14
-rw-r--r--core/mac/inc/wni_cfg.h5
-rw-r--r--core/mac/src/cfg/cfg_param_name.c1
-rw-r--r--core/mac/src/cfg/cfg_proc_msg.c7
-rw-r--r--core/wma/inc/wma_internal.h1
-rw-r--r--core/wma/src/wma_dev_if.c4
-rw-r--r--core/wma/src/wma_mgmt.c40
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);
}
}
}