Explorar o código

qcacld-3.0: Configure capabilities of ul mu-mimo

Add code logic to configure capabilities of ul mu-mimo.

Change-Id: Ia498962072383c195f9b6c5c1370aa5c1bb22782
CRs-Fixed: 2816961
Paul Zhang %!s(int64=4) %!d(string=hai) anos
pai
achega
a1e54f9b9e

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

@@ -7061,6 +7061,8 @@ wlan_hdd_wifi_test_config_policy[
 			.type = NLA_U8},
 		[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_FILS_DISCOVERY_FRAMES_TX] = {
 			.type = NLA_U8},
+		[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_FULL_BW_UL_MU_MIMO] = {
+			.type = NLA_U8},
 };
 
 /**
@@ -9683,6 +9685,7 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
 	struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_MAX + 1];
 	int ret_val = 0;
 	uint8_t cfg_val = 0;
+	uint8_t ini_val = 0;
 	uint8_t set_val = 0;
 	struct sme_config_params *sme_config;
 	bool update_sme_cfg = false;
@@ -10159,6 +10162,39 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy,
 							cfg_val);
 	}
 
+	cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_FULL_BW_UL_MU_MIMO;
+	if (tb[cmd_id]) {
+		cfg_val = nla_get_u8(tb[cmd_id]);
+		ini_val = cfg_get(hdd_ctx->psoc, CFG_HE_UL_MUMIMO);
+		hdd_debug("fullbw_ulmumimo: cfg %d, ini %d", cfg_val, ini_val);
+		if (cfg_val) {
+			switch (ini_val) {
+			case CFG_NO_SUPPORT_UL_MUMIMO:
+			case CFG_FULL_BW_SUPPORT_UL_MUMIMO:
+				cfg_val = CFG_FULL_BW_SUPPORT_UL_MUMIMO;
+				break;
+			case CFG_PARTIAL_BW_SUPPORT_UL_MUMIMO:
+			case CFG_FULL_PARTIAL_BW_SUPPORT_UL_MUMIMO:
+				cfg_val = CFG_FULL_PARTIAL_BW_SUPPORT_UL_MUMIMO;
+				break;
+			}
+		} else {
+			switch (ini_val) {
+			case CFG_NO_SUPPORT_UL_MUMIMO:
+			case CFG_FULL_BW_SUPPORT_UL_MUMIMO:
+				cfg_val = CFG_NO_SUPPORT_UL_MUMIMO;
+				break;
+			case CFG_PARTIAL_BW_SUPPORT_UL_MUMIMO:
+			case CFG_FULL_PARTIAL_BW_SUPPORT_UL_MUMIMO:
+				cfg_val = CFG_PARTIAL_BW_SUPPORT_UL_MUMIMO;
+				break;
+			}
+		}
+		ret_val = sme_update_he_full_ul_mumimo(hdd_ctx->mac_handle,
+						       adapter->vdev_id,
+						       cfg_val);
+	}
+
 	cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_PMF_PROTECTION;
 	if (tb[cmd_id]) {
 		cfg_val = nla_get_u8(tb[cmd_id]);

+ 5 - 0
core/hdd/src/wlan_hdd_cfg80211.h

@@ -277,6 +277,11 @@ typedef enum {
 #define CFG_PROPAGATION_DELAY_BASE             (64)
 #define CFG_AGG_RETRY_MIN                      (5)
 
+#define CFG_NO_SUPPORT_UL_MUMIMO		(0)
+#define CFG_FULL_BW_SUPPORT_UL_MUMIMO		(1)
+#define CFG_PARTIAL_BW_SUPPORT_UL_MUMIMO	(2)
+#define CFG_FULL_PARTIAL_BW_SUPPORT_UL_MUMIMO	(3)
+
 #define PCL_CHANNEL_SUPPORT_GO			BIT(0)
 #define PCL_CHANNEL_SUPPORT_CLI			BIT(1)
 #define PCL_CHANNEL_EXCLUDE_IN_GO_NEG		BIT(3)

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

@@ -3391,6 +3391,17 @@ int sme_update_he_ldpc_supp(mac_handle_t mac_handle, uint8_t session_id,
  */
 int sme_update_he_twt_req_support(mac_handle_t mac_handle, uint8_t session_id,
 				  uint8_t cfg_val);
+
+/**
+ * sme_update_he_full_ul_mumimo() - Configure full bandwidth of ul mu-mimo
+ * @mac_handle: Opaque handle to the global MAC context
+ * @session_id: SME session id
+ * @value: set value
+ *
+ * Return: 0 on success else err code
+ */
+int sme_update_he_full_ul_mumimo(mac_handle_t mac_handle, uint8_t session_id,
+				 uint8_t cfg_val);
 #else
 static inline void sme_update_tgt_he_cap(mac_handle_t mac_handle,
 					 struct wma_tgt_cfg *cfg,
@@ -3522,6 +3533,13 @@ static inline int sme_update_he_twt_req_support(mac_handle_t mac_handle,
 	return 0;
 }
 
+static inline int sme_update_he_full_ul_mumimo(mac_handle_t mac_handle,
+					       uint8_t session_id,
+					       uint8_t cfg_val)
+{
+	return 0;
+}
+
 #endif
 
 /**

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

@@ -11894,6 +11894,25 @@ int sme_update_he_twt_req_support(mac_handle_t mac_handle, uint8_t session_id,
 
 	return 0;
 }
+
+int sme_update_he_full_ul_mumimo(mac_handle_t mac_handle, uint8_t session_id,
+				 uint8_t cfg_val)
+{
+	struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
+	struct csr_roam_session *session;
+
+	session = CSR_GET_SESSION(mac_ctx, session_id);
+
+	if (!session) {
+		sme_err("No session for id %d", session_id);
+		return -EINVAL;
+	}
+	mac_ctx->mlme_cfg->he_caps.dot11_he_cap.ul_mu = cfg_val;
+
+	csr_update_session_he_cap(mac_ctx, session);
+
+	return 0;
+}
 #endif
 
 QDF_STATUS