Эх сурвалжийг харах

qcacld-3.0: Add support to configure HE fragmentaion

Add support to configure HE fragmentation support using NL
command.

Change-Id: I49b81df96a9c8199a1cc5994762aeba0ed9676b0
CRs-Fixed: 2166782
Kiran Kumar Lokere 7 жил өмнө
parent
commit
5cc2f0da1f

+ 1 - 1
core/hdd/inc/wlan_hdd_cfg.h

@@ -15120,11 +15120,11 @@ struct hdd_config {
 	enum active_bpf_mode active_uc_bpf_mode;
 	enum active_bpf_mode active_mc_bc_bpf_mode;
 	bool enable_bcast_probe_rsp;
+	uint8_t he_dynamic_frag_support;
 #ifdef WLAN_FEATURE_11AX
 	bool enable_ul_mimo;
 	bool enable_ul_ofdma;
 	uint32_t he_sta_obsspd;
-	uint8_t he_dynamic_frag_support;
 #endif
 	enum l1ss_sleep_allowed l1ss_sleep_allowed;
 	uint32_t arp_ac_category;

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

@@ -6272,6 +6272,8 @@ wlan_hdd_wifi_test_config_policy[
 			.type = NLA_U8},
 		[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_SEND_ADDBA_REQ] = {
 			.type = NLA_U8},
+		[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_FRAGMENTATION] = {
+			.type = NLA_U8},
 };
 
 /**
@@ -7336,6 +7338,20 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
 				WMI_VDEV_PARAM_BA_MODE, set_val, VDEV_CMD);
 	}
 
+	if (tb[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_FRAGMENTATION]) {
+		cfg_val = nla_get_u8(tb[
+			QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_FRAGMENTATION]
+			);
+		if (cfg_val > HE_FRAG_LEVEL1)
+			set_val = HE_FRAG_LEVEL1;
+		else
+			set_val = cfg_val;
+
+		hdd_debug("set HE fragmention to %d", set_val);
+		ret_val = sme_update_he_frag_supp(hdd_ctx->hHal,
+				adapter->session_id, set_val);
+	}
+
 	return ret_val;
 }
 

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

@@ -2145,6 +2145,17 @@ int sme_update_he_tx_stbc_cap(tHalHandle hal, uint8_t session_id, int value);
  * Return: 0 on success else err code
  */
 int sme_update_he_rx_stbc_cap(tHalHandle hal, uint8_t session_id, int value);
+
+/**
+ * sme_update_he_frag_supp() - sets the HE fragmentation support
+ * @hal: Pointer to HAL
+ * @session_id: SME session id
+ * @he_frag: HE fragmention support value
+ *
+ * Return: 0 on success else err code
+ */
+int sme_update_he_frag_supp(tHalHandle hal, uint8_t session_id,
+		uint16_t he_frag);
 #else
 static inline void sme_update_he_cap_nss(tHalHandle hal, uint8_t session_id,
 		uint8_t nss)
@@ -2165,6 +2176,12 @@ static inline int sme_update_he_rx_stbc_cap(tHalHandle hal, uint8_t session_id,
 {
 	return 0;
 }
+
+static inline int sme_update_he_frag_supp(tHalHandle hal, uint8_t session_id,
+		uint16_t he_frag)
+{
+	return 0;
+}
 #endif
 
 /**

+ 18 - 7
core/sme/src/common/sme_api.c

@@ -13235,15 +13235,13 @@ static int sme_update_he_cap(tHalHandle hal, uint8_t session_id,
 {
 	tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
 	struct csr_roam_session *session;
-	uint32_t he_cap_val = 0;
 
 	session = CSR_GET_SESSION(mac_ctx, session_id);
 	if (!session) {
 		sme_err("No session for id %d", session_id);
 		return -EINVAL;
 	}
-	he_cap_val = value ? 1 : 0;
-	sme_cfg_set_int(mac_ctx, he_cap, he_cap_val);
+	sme_cfg_set_int(mac_ctx, he_cap, value);
 	csr_update_session_he_cap(mac_ctx, session);
 
 	return 0;
@@ -13252,27 +13250,40 @@ static int sme_update_he_cap(tHalHandle hal, uint8_t session_id,
 int sme_update_he_tx_stbc_cap(tHalHandle hal, uint8_t session_id, int value)
 {
 	int ret;
+	uint32_t he_cap_val = 0;
+
+	he_cap_val = value ? 1 : 0;
 
 	ret = sme_update_he_cap(hal, session_id,
-			 WNI_CFG_HE_TX_STBC_LT80, value);
+			 WNI_CFG_HE_TX_STBC_LT80, he_cap_val);
 	if (ret)
 		return ret;
 
 	return sme_update_he_cap(hal, session_id,
-			 WNI_CFG_HE_TX_STBC_GT80, value);
+			 WNI_CFG_HE_TX_STBC_GT80, he_cap_val);
 }
 
 int sme_update_he_rx_stbc_cap(tHalHandle hal, uint8_t session_id, int value)
 {
 	int ret;
+	uint32_t he_cap_val = 0;
+
+	he_cap_val = value ? 1 : 0;
 
 	ret = sme_update_he_cap(hal, session_id,
-			 WNI_CFG_HE_RX_STBC_LT80, value);
+			 WNI_CFG_HE_RX_STBC_LT80, he_cap_val);
 	if (ret)
 		return ret;
 
 	return sme_update_he_cap(hal, session_id,
-			 WNI_CFG_HE_RX_STBC_GT80, value);
+			 WNI_CFG_HE_RX_STBC_GT80, he_cap_val);
+}
+
+int sme_update_he_frag_supp(tHalHandle hal, uint8_t session_id,
+		uint16_t he_frag)
+{
+	return sme_update_he_cap(hal, session_id,
+			 WNI_CFG_HE_FRAGMENTATION, he_frag);
 }
 #endif