Selaa lähdekoodia

qcacmn: Add TSF offset field in per-STA profile subelement

As per draft 2.0, add TSF offset field in per-STA profile
sub element.

CRs-Fixed: 3221744
Change-Id: I4c38012054decb5366b1e280c671f254fe5dffdf
Edayilliam Jayadev 3 vuotta sitten
vanhempi
sitoutus
23ab68e55c

+ 13 - 4
umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h

@@ -2237,17 +2237,20 @@ struct wlan_ml_bv_linfo_perstaprof {
 /* Beacon Interval Present */
 #define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_BCNINTP_IDX             6
 #define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_BCNINTP_BITS            1
+/* TSF Offset Present */
+#define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_TSFOFFSETP_IDX          7
+#define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_TSFOFFSETP_BITS         1
 /* DTIM Info Present */
-#define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_DTIMINFOP_IDX           7
+#define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_DTIMINFOP_IDX           8
 #define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_DTIMINFOP_BITS          1
 /* NSTR Link Pair Present */
-#define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_NSTRLINKPRP_IDX         8
+#define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_NSTRLINKPRP_IDX         9
 #define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_NSTRLINKPRP_BITS        1
 /* NSTR Bitmap Size */
-#define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_NSTRBMSZ_IDX            9
+#define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_NSTRBMSZ_IDX            10
 #define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_NSTRBMSZ_BITS           1
 /* BSS Parameters Change Count Present */
-#define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_BSSPARAMCHNGCNTP_IDX    10
+#define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_BSSPARAMCHNGCNTP_IDX    11
 #define WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_BSSPARAMCHNGCNTP_BITS   1
 
 /* Definitions for subfields in STA Info field of Per-STA Profile subelement
@@ -2256,6 +2259,11 @@ struct wlan_ml_bv_linfo_perstaprof {
 /* STA Info Length */
 #define WLAN_ML_BV_LINFO_PERSTAPROF_STAINFO_LENGTH_SIZE             1
 
+/* Size in octets of the TSF Offset in STA info field of Per-STA Profile
+ * subelement in Basic variant Multi-Link element Link Info field.
+ */
+#define WLAN_ML_TSF_OFFSET_SIZE             8
+
 /**
  * wlan_ml_bv_linfo_perstaprof_stactrl_nstrbmsz - Encoding for NSTR Bitmap Size
  * in STA Control field of Per-STA Profile subelement in Basic variant
@@ -2299,6 +2307,7 @@ struct wlan_ml_bv_linfo_perstaprof_stainfo_dtiminfo {
 	(WLAN_ML_BV_LINFO_PERSTAPROF_STAINFO_LENGTH_SIZE + \
 	 QDF_MAC_ADDR_SIZE + \
 	 WLAN_BEACONINTERVAL_LEN + \
+	 WLAN_ML_TSF_OFFSET_SIZE + \
 	 sizeof(struct wlan_ml_bv_linfo_perstaprof_stainfo_dtiminfo) + \
 	 WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_NSTRBMSZ_MAX + \
 	 WLAN_ML_BSSPARAMCHNGCNT_SIZE)

+ 22 - 0
umac/mlo_mgr/src/utils_mlo.c

@@ -497,6 +497,28 @@ util_parse_bvmlie_perstaprofile_stactrl(uint8_t *subelempayload,
 		parsed_payload_len += WLAN_BEACONINTERVAL_LEN;
 	}
 
+	/* Check TSF Offset present bit */
+	if (QDF_GET_BITS(stacontrol,
+			 WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_TSFOFFSETP_IDX,
+			 WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_TSFOFFSETP_BITS)) {
+		if (!completeprofile) {
+			mlo_err_rl("TSF offset is expected only for complete profiles");
+			return QDF_STATUS_E_PROTO;
+		}
+
+		if (subelempayloadlen <
+				(parsed_payload_len +
+				 WLAN_ML_TSF_OFFSET_SIZE)) {
+			mlo_err_rl("Length of subelement payload %zu octets not sufficient to contain TSF Offset of size %u octets after parsed payload length of %zu octets.",
+				   subelempayloadlen,
+				   WLAN_ML_TSF_OFFSET_SIZE,
+				   parsed_payload_len);
+			return QDF_STATUS_E_PROTO;
+		}
+
+		parsed_payload_len += WLAN_ML_TSF_OFFSET_SIZE;
+	}
+
 	/* Check DTIM Info present bit */
 	if (QDF_GET_BITS(stacontrol,
 			 WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_DTIMINFOP_IDX,