Procházet zdrojové kódy

qcacld-3.0: Configuration support for HE testbed defaults

Add support to configure HE testbed defaults configuration
settings.

Change-Id: I13a2158ac2e1fd05465bd74103a96fb427592de0
CRs-Fixed: 2414928
Kiran Kumar Lokere před 6 roky
rodič
revize
921b5a5213

+ 1 - 0
components/mlme/dispatcher/inc/wlan_mlme_public_struct.h

@@ -823,6 +823,7 @@ struct wlan_mlme_qos {
  */
  */
 struct wlan_mlme_he_caps {
 struct wlan_mlme_he_caps {
 	tDot11fIEhe_cap dot11_he_cap;
 	tDot11fIEhe_cap dot11_he_cap;
+	tDot11fIEhe_cap he_cap_orig;
 	uint8_t he_ppet_2g[MLME_HE_PPET_LEN];
 	uint8_t he_ppet_2g[MLME_HE_PPET_LEN];
 	uint8_t he_ppet_5g[MLME_HE_PPET_LEN];
 	uint8_t he_ppet_5g[MLME_HE_PPET_LEN];
 	uint32_t he_ops_basic_mcs_nss;
 	uint32_t he_ops_basic_mcs_nss;

+ 1 - 0
components/mlme/dispatcher/src/wlan_mlme_api.c

@@ -776,6 +776,7 @@ QDF_STATUS mlme_update_tgt_he_caps_in_cfg(struct wlan_objmgr_psoc *psoc,
 	qdf_mem_copy(mlme_obj->cfg.he_caps.he_ppet_5g, wma_cfg->ppet_5g,
 	qdf_mem_copy(mlme_obj->cfg.he_caps.he_ppet_5g, wma_cfg->ppet_5g,
 		     HE_MAX_PPET_SIZE);
 		     HE_MAX_PPET_SIZE);
 
 
+	mlme_obj->cfg.he_caps.he_cap_orig = mlme_obj->cfg.he_caps.dot11_he_cap;
 	return status;
 	return status;
 }
 }
 #endif
 #endif

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

@@ -5359,6 +5359,8 @@ wlan_hdd_wifi_test_config_policy[
 			.type = NLA_NESTED},
 			.type = NLA_NESTED},
 		[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_ACTION_TX_TB_PPDU] = {
 		[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_ACTION_TX_TB_PPDU] = {
 			.type = NLA_U8},
 			.type = NLA_U8},
+		[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_SET_HE_TESTBED_DEFAULTS]
+			= {.type = NLA_U8},
 };
 };
 
 
 /**
 /**
@@ -7142,6 +7144,18 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
 					  (cfg_val ? true : false));
 					  (cfg_val ? true : false));
 	}
 	}
 
 
+	cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_SET_HE_TESTBED_DEFAULTS;
+	if (tb[cmd_id]) {
+		cfg_val = nla_get_u8(tb[cmd_id]);
+		hdd_debug("Configure HE testbed defaults %d", cfg_val);
+		if (!cfg_val)
+			sme_reset_he_caps(hdd_ctx->mac_handle,
+					  adapter->vdev_id);
+		else
+			sme_set_he_testbed_def(hdd_ctx->mac_handle,
+					       adapter->vdev_id);
+	}
+
 	cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_ACTION_TX_TB_PPDU;
 	cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_HE_ACTION_TX_TB_PPDU;
 	if (tb[cmd_id]) {
 	if (tb[cmd_id]) {
 		cfg_val = nla_get_u8(tb[cmd_id]);
 		cfg_val = nla_get_u8(tb[cmd_id]);

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

@@ -2988,6 +2988,19 @@ bool sme_validate_channel_list(mac_handle_t mac_handle,
  */
  */
 void sme_set_amsdu(mac_handle_t mac_handle, bool enable);
 void sme_set_amsdu(mac_handle_t mac_handle, bool enable);
 
 
+#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);
+#else
+static inline void sme_set_he_testbed_def(mac_handle_t mac_handle,
+					  uint8_t vdev_id)
+{
+}
+static inline void sme_reset_he_caps(mac_handle_t mac_handle, uint8_t vdev_id)
+{
+}
+#endif
+
 /**
 /**
  * sme_get_mcs_idx() - gets mcs index
  * sme_get_mcs_idx() - gets mcs index
  * @max_rate: max rate
  * @max_rate: max rate

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

@@ -14625,6 +14625,51 @@ void sme_set_amsdu(mac_handle_t mac_handle, bool enable)
 	mac_ctx->is_usr_cfg_amsdu_enabled = enable;
 	mac_ctx->is_usr_cfg_amsdu_enabled = enable;
 }
 }
 
 
+#ifdef WLAN_FEATURE_11AX
+void sme_set_he_testbed_def(mac_handle_t mac_handle, uint8_t vdev_id)
+{
+	struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
+	struct csr_roam_session *session;
+
+	session = CSR_GET_SESSION(mac_ctx, vdev_id);
+
+	if (!session) {
+		sme_debug("No session for id %d", vdev_id);
+		return;
+	}
+	sme_debug("set HE testbed defaults");
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap.amsdu_in_ampdu = 0;
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap.twt_request = 0;
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap.omi_a_ctrl = 0;
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap.he_ppdu_20_in_160_80p80Mhz = 0;
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap.he_ppdu_20_in_40Mhz_2G = 0;
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap.he_ppdu_80_in_160_80p80Mhz = 0;
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap.dcm_enc_tx = 0;
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap.dcm_enc_rx = 0;
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap.max_nc = 0;
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap.trigger_frm_mac_pad =
+					QCA_WLAN_HE_16US_OF_PROCESS_TIME;
+	csr_update_session_he_cap(mac_ctx, session);
+}
+
+void sme_reset_he_caps(mac_handle_t mac_handle, uint8_t vdev_id)
+{
+	struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
+	struct csr_roam_session *session;
+
+	session = CSR_GET_SESSION(mac_ctx, vdev_id);
+
+	if (!session) {
+		sme_err("No session for id %d", vdev_id);
+		return;
+	}
+	sme_debug("reset HE caps");
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap =
+		mac_ctx->mlme_cfg->he_caps.he_cap_orig;
+	csr_update_session_he_cap(mac_ctx, session);
+}
+#endif
+
 uint8_t sme_get_mcs_idx(uint16_t max_rate, uint8_t rate_flags,
 uint8_t sme_get_mcs_idx(uint16_t max_rate, uint8_t rate_flags,
 			uint8_t *nss, uint8_t *mcs_rate_flags)
 			uint8_t *nss, uint8_t *mcs_rate_flags)
 {
 {