Ver código fonte

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
set mgmt rate after sap/sta vdev up.

CRs-Fixed: 1103895
Change-Id: I93bbe0978963abf0b887dbf2add5bfc2912f6de1
Hong Shi 8 anos atrás
pai
commit
b90718f3e7

+ 20 - 0
core/hdd/inc/wlan_hdd_cfg.h

@@ -5006,6 +5006,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: 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.
@@ -9165,6 +9184,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;

+ 14 - 0
core/hdd/src/wlan_hdd_cfg.c

@@ -2139,6 +2139,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,
@@ -6706,6 +6713,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

+ 5 - 0
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

+ 1 - 0
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",
 };

+ 6 - 1
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}
 };
 
 

+ 1 - 0
core/wma/inc/wma_internal.h

@@ -1153,6 +1153,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,

+ 4 - 0
core/wma/src/wma_dev_if.c

@@ -1743,6 +1743,9 @@ struct cdp_vdev *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)) {
@@ -3987,6 +3990,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);

+ 39 - 1
core/wma/src/wma_mgmt.c

@@ -564,6 +564,44 @@ 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
+ */
+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
@@ -2496,7 +2534,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);
 		}
 	}
 }