Bladeren bron

qcacld-3.0: Add support to configure ER SU for mgmt tx

Add support to configure the HE ER SU for management frame tx
and configuration support to use RU 242 tone for data Tx.

Change-Id: I068c1e7b6808d430d5468bab7ee04e24d5461afd
CRs-Fixed: 2816797
Kiran Kumar Lokere 4 jaren geleden
bovenliggende
commit
311367de65

+ 2 - 0
core/hdd/src/wlan_hdd_assoc.c

@@ -3039,6 +3039,8 @@ hdd_association_completion_handler(struct hdd_adapter *adapter,
 			ucfg_mlme_init_twt_context(hdd_ctx->psoc,
 						   &roam_info->bssid,
 						   WLAN_ALL_SESSIONS_DIALOG_ID);
+			sme_check_enable_ru_242_tx(hdd_ctx->mac_handle,
+						   adapter->vdev_id);
 		}
 
 		/*

+ 9 - 0
core/hdd/src/wlan_hdd_cfg80211.c

@@ -7100,6 +7100,8 @@ wlan_hdd_wifi_test_config_policy[
 			.type = NLA_U8},
 		[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_FULL_BW_UL_MU_MIMO] = {
 			.type = NLA_U8},
+		[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_RU_242_TONE_TX] = {
+			.type = NLA_U8},
 };
 
 /**
@@ -10357,6 +10359,13 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
 					    1, false);
 	}
 
+	cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_RU_242_TONE_TX;
+	if (tb[cmd_id]) {
+		cfg_val = nla_get_u8(tb[cmd_id]);
+		hdd_info("RU 242 tone Tx enable: %d", cfg_val);
+		sme_set_ru_242_tone_tx_cfg(hdd_ctx->mac_handle, cfg_val);
+	}
+
 	cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_FT_REASSOCREQ_RSNXE_USED;
 	if (tb[cmd_id]) {
 		wfa_param.vdev_id = adapter->vdev_id;

+ 13 - 3
core/hdd/src/wlan_hdd_wext.c

@@ -4575,9 +4575,19 @@ static int hdd_we_set_dcm(struct hdd_adapter *adapter, int value)
 
 static int hdd_we_set_range_ext(struct hdd_adapter *adapter, int value)
 {
-	return hdd_we_set_vdev(adapter,
-			       WMI_VDEV_PARAM_HE_RANGE_EXT,
-			       value);
+	int status;
+
+	status = hdd_we_set_vdev(adapter, WMI_VDEV_PARAM_HE_RANGE_EXT, value);
+	if (status)
+		hdd_err("Failed to set HE_RANGE_EXT, errno %d", status);
+
+	status = hdd_we_set_vdev(adapter, WMI_VDEV_PARAM_NON_DATA_HE_RANGE_EXT,
+				 value);
+	if (status)
+		hdd_err("Failed to set NON_DATA_HE_RANGE_EXT, errno %d",
+			status);
+
+	return status;
 }
 
 static int hdd_we_set_dbg(struct hdd_adapter *adapter,

+ 1 - 0
core/mac/inc/ani_global.h

@@ -805,6 +805,7 @@ struct mac_context {
 	uint8_t he_om_ctrl_cfg_tx_nsts;
 	bool he_om_ctrl_ul_mu_data_dis;
 	uint8_t is_usr_cfg_pmf_wep;
+	uint8_t usr_cfg_ru_242_tone_tx;
 #ifdef WLAN_FEATURE_11AX
 	tDot11fIEhe_cap he_cap_2g;
 	tDot11fIEhe_cap he_cap_5g;

+ 29 - 0
core/sme/inc/sme_api.h

@@ -3603,6 +3603,7 @@ bool sme_is_sta_key_exchange_in_progress(mac_handle_t mac_handle,
 bool sme_validate_channel_list(mac_handle_t mac_handle,
 			       uint32_t *chan_freq_list,
 			       uint8_t num_channels);
+
 /**
  * sme_set_amsdu() - set amsdu enable/disable based on user cfg
  * @mac_handle: Opaque handle to the global MAC context
@@ -3624,6 +3625,24 @@ void sme_set_pmf_wep_cfg(mac_handle_t mac_handle, uint8_t pmf_wep_cfg);
 #ifdef WLAN_FEATURE_11AX
 void sme_set_he_testbed_def(mac_handle_t mac_handle, uint8_t vdev_id);
 void sme_reset_he_caps(mac_handle_t mac_handle, uint8_t vdev_id);
+/**
+ * sme_set_ru_242_tone_tx_cfg() - set ru 242 tone tx user cfg
+ * @mac_handle: Opaque handle to the global MAC context
+ * @cfg_val: enable or disable
+ *
+ * Return: None
+ */
+void sme_set_ru_242_tone_tx_cfg(mac_handle_t mac_handle, uint8_t cfg_val);
+
+/**
+ * sme_check_enable_ru_242_tx() - check usr cfg and enable ru 242 tone tx
+ * @mac_handle: Opaque handle to the global MAC context
+ * @vdev_id: VDEV id
+ *
+ * Return: None
+ */
+void sme_check_enable_ru_242_tx(mac_handle_t mac_handle, uint8_t vdev_id);
+
 #else
 static inline void sme_set_he_testbed_def(mac_handle_t mac_handle,
 					  uint8_t vdev_id)
@@ -3632,6 +3651,16 @@ static inline void sme_set_he_testbed_def(mac_handle_t mac_handle,
 static inline void sme_reset_he_caps(mac_handle_t mac_handle, uint8_t vdev_id)
 {
 }
+
+static inline void sme_check_enable_ru_242_tx(mac_handle_t mac_handle,
+					      uint8_t vdev_id)
+{
+}
+
+static inline void sme_set_ru_242_tone_tx_cfg(mac_handle_t mac_handle,
+					      uint8_t cfg_val)
+{
+}
 #endif
 
 /**

+ 22 - 0
core/sme/src/common/sme_api.c

@@ -14838,6 +14838,28 @@ void sme_set_amsdu(mac_handle_t mac_handle, bool enable)
 }
 
 #ifdef WLAN_FEATURE_11AX
+void sme_check_enable_ru_242_tx(mac_handle_t mac_handle, uint8_t vdev_id)
+{
+	struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
+	int ret;
+
+	sme_debug("Config VDEV for RU 242 Tx, usr cfg %d",
+		  mac_ctx->usr_cfg_ru_242_tone_tx);
+	if (mac_ctx->usr_cfg_ru_242_tone_tx) {
+		ret = wma_cli_set_command(vdev_id, WMI_VDEV_PARAM_CHWIDTH,
+					  0, VDEV_CMD);
+		if (ret)
+			sme_err("Failed to set VDEV BW to 20MHz");
+	}
+}
+
+void sme_set_ru_242_tone_tx_cfg(mac_handle_t mac_handle, uint8_t cfg_val)
+{
+	struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
+
+	mac_ctx->usr_cfg_ru_242_tone_tx = cfg_val;
+}
+
 void sme_set_he_testbed_def(mac_handle_t mac_handle, uint8_t vdev_id)
 {
 	struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);