Forráskód Böngészése

qcacmn: Add support to parse reconfig ML IE

Add support to parse Reconifg ML IE and fill ml info in the scan
cache entry.

Change-Id: Ieb7ba1731d82474fbead1d6edbe1584fbdb42e0d
CRs-Fixed: 3347362
Deeksha Gupta 2 éve
szülő
commit
de6b627426

+ 3 - 1
umac/scan/dispatcher/inc/wlan_scan_public_structs.h

@@ -205,8 +205,9 @@ struct channel_info {
  * @rsnxe: Pointer to rsnxe IE
  * @ehtcap: pointer to ehtcap ie
  * @ehtop: pointer to eht op ie
- * @t2lm: array of pointers to t2lm op ie
  * @multi_link_bv: pointer to multi link basic variant IE
+ * @multi_link_rv: pointer to multi link reconfig IE
+ * @t2lm: array of pointers to t2lm op ie
  * @bwnss_map: pointer to NSS map IE
  * @secchanoff: pointer to secondary chan IE
  * @mdie: pointer to md IE
@@ -274,6 +275,7 @@ struct ie_list {
 #endif
 #ifdef WLAN_FEATURE_11BE_MLO
 	uint8_t *multi_link_bv;
+	uint8_t *multi_link_rv;
 	uint8_t *t2lm[WLAN_MAX_T2LM_IE];
 #endif
 	uint8_t *qcn;

+ 2 - 0
umac/scan/dispatcher/inc/wlan_scan_utils_api.h

@@ -742,6 +742,8 @@ util_scan_copy_beacon_data(struct scan_cache_entry *new_entry,
 #ifdef WLAN_FEATURE_11BE_MLO
 	ie_lst->multi_link_bv =
 			conv_ptr(ie_lst->multi_link_bv, old_ptr, new_ptr);
+	ie_lst->multi_link_rv =
+			conv_ptr(ie_lst->multi_link_rv, old_ptr, new_ptr);
 	for (i = 0; i < WLAN_MAX_T2LM_IE; i++)
 		ie_lst->t2lm[i] = conv_ptr(ie_lst->t2lm[i], old_ptr, new_ptr);
 #endif

+ 29 - 1
umac/scan/dispatcher/src/wlan_scan_utils_api.c

@@ -33,6 +33,7 @@
 #ifdef WLAN_FEATURE_11BE_MLO
 #include <wlan_utility.h>
 #include "wlan_mlo_mgr_public_structs.h"
+#include <utils_mlo.h>
 #endif
 #include "wlan_psoc_mlme_api.h"
 #include "reg_services_public_struct.h"
@@ -1173,8 +1174,35 @@ util_scan_parse_t2lm_ie(struct scan_cache_entry *scan_params,
 static void util_scan_parse_ml_ie(struct scan_cache_entry *scan_params,
 				  struct extn_ie_header *extn_ie)
 {
-	if (extn_ie->ie_extn_id == WLAN_EXTN_ELEMID_MULTI_LINK)
+	uint8_t *ml_ie;
+	uint32_t ml_ie_len;
+	enum wlan_ml_variant ml_variant;
+	QDF_STATUS ret;
+
+	if (extn_ie->ie_extn_id != WLAN_EXTN_ELEMID_MULTI_LINK)
+		return;
+
+	ml_ie = (uint8_t *)extn_ie;
+	ml_ie_len = ml_ie[TAG_LEN_POS];
+
+	/* Adding the size of IE header to ML IE length */
+	ml_ie_len += sizeof(struct ie_header);
+	ret = util_get_mlie_variant(ml_ie, ml_ie_len, (int *)&ml_variant);
+	if (ret) {
+		scm_err("Unable to get ml variant");
+		return;
+	}
+
+	switch (ml_variant) {
+	case WLAN_ML_VARIANT_BASIC:
 		scan_params->ie_list.multi_link_bv = (uint8_t *)extn_ie;
+		break;
+	case WLAN_ML_VARIANT_RECONFIG:
+		scan_params->ie_list.multi_link_rv = (uint8_t *)extn_ie;
+		break;
+	default:
+		break;
+	}
 }
 #else
 static void util_scan_parse_ml_ie(struct scan_cache_entry *scan_params,