Browse Source

qcacld-3.0: Add support to configure HE trigger frame MAC padding

Add support to configure HE trigger frame MAC padding and disable
the MU EDCA param update when user configures the padding.

Change-Id: Ief928c5421366b03ee6e1d6253963b10fd3b87b6
CRs-Fixed: 2265331
Kiran Kumar Lokere 6 years ago
parent
commit
f54b85555f

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

@@ -6329,6 +6329,8 @@ wlan_hdd_wifi_test_config_policy[
 			.type = NLA_U8},
 		[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_TX_BEAMFORMEE_NSTS] = {
 			.type = NLA_U8},
+		[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_MAC_PADDING_DUR] = {
+			.type = NLA_U8},
 };
 
 /**
@@ -7585,6 +7587,33 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
 
 	}
 
+	if (tb[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_MAC_PADDING_DUR]) {
+		cfg_val = nla_get_u8(tb[
+				     QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_MAC_PADDING_DUR]);
+		if (cfg_val) {
+			ret_val = sme_cli_set_command(adapter->session_id,
+					WMI_VDEV_PARAM_MU_EDCA_FW_UPDATE_EN,
+					0, VDEV_CMD);
+			if (ret_val)
+				hdd_err("MU_EDCA update disable failed");
+			sme_set_usr_cfg_mu_edca(hdd_ctx->mac_handle, true);
+			sme_set_he_mu_edca_def_cfg(hdd_ctx->mac_handle);
+			if (sme_update_mu_edca_params(hdd_ctx->mac_handle,
+						      adapter->session_id))
+				hdd_err("Failed to send mu edca params");
+		} else {
+			ret_val = sme_cli_set_command(adapter->session_id,
+					WMI_VDEV_PARAM_MU_EDCA_FW_UPDATE_EN,
+					1, VDEV_CMD);
+			sme_set_usr_cfg_mu_edca(hdd_ctx->mac_handle, false);
+		}
+		ret_val = sme_update_he_trigger_frm_mac_pad(hdd_ctx->mac_handle,
+							    adapter->session_id,
+							    cfg_val);
+		if (ret_val)
+			hdd_err("Failed to set Trig frame mac padding cap");
+	}
+
 	if (update_sme_cfg)
 		sme_update_config(mac_handle, sme_config);
 

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

@@ -925,6 +925,7 @@ typedef struct sAniSirGlobal {
 	uint8_t usr_cfg_tx_bfee_nsts;
 	struct mgmt_beacon_probe_filter bcn_filter;
 	tSirMacEdcaParamRecord usr_mu_edca_params[MAX_NUM_AC];
+	bool usr_cfg_mu_edca_params;
 #ifdef WLAN_FEATURE_11AX
 	tDot11fIEhe_cap he_cap_2g;
 	tDot11fIEhe_cap he_cap_5g;

+ 22 - 9
core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c

@@ -996,15 +996,28 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
 		ie_len,
 		beacon);
 
-	if (lim_is_session_he_capable(session_entry) &&
-			assoc_rsp->mu_edca_present) {
-		pe_debug("Send MU EDCA params to FW");
-		mu_edca_set[EDCA_AC_BE] = assoc_rsp->mu_edca.acbe;
-		mu_edca_set[EDCA_AC_BK] = assoc_rsp->mu_edca.acbk;
-		mu_edca_set[EDCA_AC_VI] = assoc_rsp->mu_edca.acvi;
-		mu_edca_set[EDCA_AC_VO] = assoc_rsp->mu_edca.acvo;
-		lim_send_edca_params(mac_ctx, mu_edca_set,
-				sta_ds->bssId, true);
+	if (lim_is_session_he_capable(session_entry)) {
+		if (mac_ctx->usr_cfg_mu_edca_params) {
+			pe_debug("Send user cfg MU EDCA params to FW");
+			mu_edca_set[EDCA_AC_BE] =
+				mac_ctx->usr_mu_edca_params[EDCA_AC_BE];
+			mu_edca_set[EDCA_AC_BK] =
+				mac_ctx->usr_mu_edca_params[EDCA_AC_BK];
+			mu_edca_set[EDCA_AC_VI] =
+				mac_ctx->usr_mu_edca_params[EDCA_AC_VI];
+			mu_edca_set[EDCA_AC_VO] =
+				mac_ctx->usr_mu_edca_params[EDCA_AC_VO];
+			lim_send_edca_params(mac_ctx, mu_edca_set,
+					     sta_ds->bssId, true);
+		} else if (assoc_rsp->mu_edca_present) {
+			pe_debug("Send MU EDCA params to FW");
+			mu_edca_set[EDCA_AC_BE] = assoc_rsp->mu_edca.acbe;
+			mu_edca_set[EDCA_AC_BK] = assoc_rsp->mu_edca.acbk;
+			mu_edca_set[EDCA_AC_VI] = assoc_rsp->mu_edca.acvi;
+			mu_edca_set[EDCA_AC_VO] = assoc_rsp->mu_edca.acvo;
+			lim_send_edca_params(mac_ctx, mu_edca_set,
+					     sta_ds->bssId, true);
+		}
 
 	}
 

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

@@ -2392,6 +2392,25 @@ int sme_update_he_tx_bfee_nsts(mac_handle_t hal, uint8_t session_id,
  */
 int sme_update_he_mcs(tHalHandle hal, uint8_t session_id, uint16_t he_mcs);
 
+/**
+ * sme_update_he_trigger_frm_mac_pad() - sets the HE MAC padding capability
+ * @hal: Pointer to HAL
+ * @session_id: SME session id
+ * @cfg_val: HE MAC padding duration value
+ *
+ * Return: 0 on success else err code
+ */
+int sme_update_he_trigger_frm_mac_pad(mac_handle_t hal, uint8_t session_id,
+				      uint8_t cfg_val);
+/**
+ * sme_set_usr_cfg_mu_edca() - sets the user cfg MU EDCA params flag
+ * @hal: Pointer to HAL
+ * @val: value to be set
+ *
+ * Return: none
+ */
+void sme_set_usr_cfg_mu_edca(mac_handle_t hal, bool val);
+
 /**
  * sme_set_he_mu_edca_def_cfg() - sets the default MU EDCA params values
  * @hal: Pointer to HAL
@@ -2472,6 +2491,17 @@ static inline int sme_update_mu_edca_params(mac_handle_t hal,
 {
 	return 0;
 }
+static inline int sme_update_he_trigger_frm_mac_pad(mac_handle_t hal,
+						    uint8_t session_id,
+						    uint8_t cfg_val)
+{
+	return 0;
+}
+
+static inline void sme_set_usr_cfg_mu_edca(mac_handle_t hal, bool val)
+{
+}
+
 static inline int sme_update_he_tx_stbc_cap(tHalHandle hal, uint8_t session_id,
 					    int value)
 {

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

@@ -12864,6 +12864,13 @@ static int sme_update_he_cap(tHalHandle hal, uint8_t session_id,
 	return 0;
 }
 
+void sme_set_usr_cfg_mu_edca(mac_handle_t hal, bool val)
+{
+	tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
+
+	mac_ctx->usr_cfg_mu_edca_params = val;
+}
+
 int sme_update_mu_edca_params(mac_handle_t hal, uint8_t session_id)
 {
 	struct scheduler_msg msg = {0};
@@ -12903,6 +12910,13 @@ int sme_update_he_tx_bfee_supp(tHalHandle hal, uint8_t session_id,
 				 cfg_val);
 }
 
+int sme_update_he_trigger_frm_mac_pad(mac_handle_t hal, uint8_t session_id,
+				      uint8_t cfg_val)
+{
+	return sme_update_he_cap(hal, session_id, WNI_CFG_HE_TRIG_PAD,
+				 cfg_val);
+}
+
 int sme_update_he_tx_bfee_nsts(mac_handle_t hal, uint8_t session_id,
 			       uint8_t cfg_val)
 {