Pārlūkot izejas kodu

qcacld-3.0: Define TID to link mapping IE

Tid to link mapping IE is defined as a data buffer.
It's an optional IE that can be present in beacon,
probe response, association and re-association frames.

Change-Id: I30575115836be54fdbaab93d2e45ac4980f6e281
CRs-Fixed: 3256064
Amruta Kulkarni 2 gadi atpakaļ
vecāks
revīzija
58271d00af

+ 13 - 0
core/mac/src/cfg/cfgUtil/dot11f.frms

@@ -3828,6 +3828,11 @@ IE mlo_ie (EID_EXTN_ID_ELEMENT) OUI (0x6B)
     data[9..255];
 }
 
+IE t2lm_ie (EID_EXTN_ID_ELEMENT) OUI (0x6D)
+{
+    data[3..255];
+}
+
 /////////////////////////////////////////////////////////////////////////////
 // Frames
 
@@ -3887,6 +3892,7 @@ FRAME Beacon                              // C.f. Sec. 7.2.3.1
     OPTIE  eht_cap;
     OPTIE  eht_op;
     OPTIE  mlo_ie;
+    OPTIE  t2lm_ie;
 
     OPTIE  WPA;
     OPTIE  WMMInfoAp;
@@ -3992,6 +3998,7 @@ FRAME Beacon2
     OPTIE  eht_cap;
     OPTIE  eht_op;
     OPTIE  mlo_ie;
+    OPTIE  t2lm_ie;
 
     OPTIE  WPA;
     OPTIE  WMMInfoAp;
@@ -4071,6 +4078,7 @@ FRAME BeaconIEs
     OPTIE  eht_cap;
     OPTIE  eht_op;
     OPTIE  mlo_ie;
+    OPTIE  t2lm_ie;
 
     OPTIE  WPA;
     OPTIE  WMMInfoAp;
@@ -4131,6 +4139,7 @@ FRAME AssocRequest                        // 7.2.3.4
     OPTIE  dh_parameter_element;
     OPTIE  eht_cap;
     OPTIE  mlo_ie;
+    OPTIE  t2lm_ie;
 
     OPTIE  WPAOpaque;
     OPTIE  WMMCaps;
@@ -4188,6 +4197,7 @@ FRAME AssocResponse                       // 7.2.3.5
     OPTIE  eht_cap;
     OPTIE  eht_op;
     OPTIE  mlo_ie;
+    OPTIE  t2lm_ie;
 
     OPTIE  WPA;
     OPTIE  WMMParams;
@@ -4234,6 +4244,7 @@ FRAME ReAssocRequest                      // 7.2.3.6
     OPTIE  ESECckmOpaque;
     OPTIE  eht_cap;
     OPTIE  mlo_ie;
+    OPTIE  t2lm_ie;
 
     OPTIE  WPAOpaque;
     OPTIE  WMMCaps;
@@ -4285,6 +4296,7 @@ FRAME ReAssocResponse                     // 7.2.3.7
     OPTIE  eht_cap;
     OPTIE  eht_op;
     OPTIE  mlo_ie;
+    OPTIE  t2lm_ie;
 
     OPTIE  WPA;
     OPTIE  WMMParams;
@@ -4373,6 +4385,7 @@ FRAME ProbeResponse                       // 7.2.3.9
     OPTIE  eht_cap;
     OPTIE  eht_op;
     OPTIE  mlo_ie;
+    OPTIE  t2lm_ie;
 
     OPTIE  WPA;
     OPTIE  WMMInfoAp;

+ 49 - 1
core/mac/src/include/dot11f.h

@@ -27,7 +27,7 @@
  *
  *
  * This file was automatically generated by 'framesc'
- * Mon Jun 27 14:45:04 2022 from the following file(s):
+ * Thu Jul 28 13:24:31 2022 from the following file(s):
  *
  * dot11f.frms
  *
@@ -10407,6 +10407,46 @@ uint32_t dot11f_get_packed_ie_spatial_reuse(
 }; /* End extern "C". */
 #endif /* C++ */
 
+/* EID 255 (0xff) Extended EID 109 (0x6d) */
+typedef struct sDot11fIEt2lm_ie {
+	uint8_t             present;
+	uint8_t             num_data;
+	uint8_t             data[255];
+} tDot11fIEt2lm_ie;
+
+#define DOT11F_EID_T2LM_IE (255)
+
+/* N.B. These #defines do *not* include the EID & length */
+#define DOT11F_IE_T2LM_IE_MIN_LEN (3)
+
+#define DOT11F_IE_T2LM_IE_MAX_LEN (255)
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+__must_check uint32_t dot11f_unpack_ie_t2lm_ie(
+	tpAniSirGlobal,
+	uint8_t *,
+	uint8_t,
+	tDot11fIEt2lm_ie*,
+	bool);
+
+uint32_t dot11f_pack_ie_t2lm_ie(
+	tpAniSirGlobal,
+	tDot11fIEt2lm_ie *,
+	uint8_t *,
+	uint32_t,
+	uint32_t*);
+
+uint32_t dot11f_get_packed_ie_t2lm_ie(
+	tpAniSirGlobal,
+	tDot11fIEt2lm_ie *,
+	uint32_t*);
+
+#ifdef __cplusplus
+}; /* End extern "C". */
+#endif /* C++ */
+
 /* EID 221 (0xdd) {OUI 0x00, 0x90, 0x4c, 0x04} */
 typedef struct sDot11fIEvendor_vht_ie {
 	uint8_t                      present;
@@ -10558,6 +10598,7 @@ typedef struct sDot11fAssocRequest{
 	tDot11fIEdh_parameter_element          dh_parameter_element;
 	tDot11fIEeht_cap                       eht_cap;
 	tDot11fIEmlo_ie                        mlo_ie;
+	tDot11fIEt2lm_ie                       t2lm_ie;
 	tDot11fIEWPAOpaque                     WPAOpaque;
 	tDot11fIEWMMCaps                       WMMCaps;
 	tDot11fIEWMMInfoStation                WMMInfoStation;
@@ -10633,6 +10674,7 @@ typedef struct sDot11fAssocResponse{
 	tDot11fIEeht_cap                        eht_cap;
 	tDot11fIEeht_op                         eht_op;
 	tDot11fIEmlo_ie                         mlo_ie;
+	tDot11fIEt2lm_ie                        t2lm_ie;
 	tDot11fIEWPA                            WPA;
 	tDot11fIEWMMParams                      WMMParams;
 	tDot11fIEWMMCaps                        WMMCaps;
@@ -10761,6 +10803,7 @@ typedef struct sDot11fBeacon{
 	tDot11fIEeht_cap                        eht_cap;
 	tDot11fIEeht_op                         eht_op;
 	tDot11fIEmlo_ie                         mlo_ie;
+	tDot11fIEt2lm_ie                        t2lm_ie;
 	tDot11fIEWPA                            WPA;
 	tDot11fIEWMMInfoAp                      WMMInfoAp;
 	tDot11fIEWMMParams                      WMMParams;
@@ -10871,6 +10914,7 @@ typedef struct sDot11fBeacon2{
 	tDot11fIEeht_cap                        eht_cap;
 	tDot11fIEeht_op                         eht_op;
 	tDot11fIEmlo_ie                         mlo_ie;
+	tDot11fIEt2lm_ie                        t2lm_ie;
 	tDot11fIEWPA                            WPA;
 	tDot11fIEWMMInfoAp                      WMMInfoAp;
 	tDot11fIEWMMParams                      WMMParams;
@@ -10961,6 +11005,7 @@ typedef struct sDot11fBeaconIEs{
 	tDot11fIEeht_cap                        eht_cap;
 	tDot11fIEeht_op                         eht_op;
 	tDot11fIEmlo_ie                         mlo_ie;
+	tDot11fIEt2lm_ie                        t2lm_ie;
 	tDot11fIEWPA                            WPA;
 	tDot11fIEWMMInfoAp                      WMMInfoAp;
 	tDot11fIEWMMParams                      WMMParams;
@@ -11393,6 +11438,7 @@ typedef struct sDot11fProbeResponse{
 	tDot11fIEeht_cap                        eht_cap;
 	tDot11fIEeht_op                         eht_op;
 	tDot11fIEmlo_ie                         mlo_ie;
+	tDot11fIEt2lm_ie                        t2lm_ie;
 	tDot11fIEWPA                            WPA;
 	tDot11fIEWMMInfoAp                      WMMInfoAp;
 	tDot11fIEWMMParams                      WMMParams;
@@ -11545,6 +11591,7 @@ typedef struct sDot11fReAssocRequest{
 	tDot11fIEESECckmOpaque               ESECckmOpaque;
 	tDot11fIEeht_cap                     eht_cap;
 	tDot11fIEmlo_ie                      mlo_ie;
+	tDot11fIEt2lm_ie                     t2lm_ie;
 	tDot11fIEWPAOpaque                   WPAOpaque;
 	tDot11fIEWMMCaps                     WMMCaps;
 	tDot11fIEWMMInfoStation              WMMInfoStation;
@@ -11615,6 +11662,7 @@ typedef struct sDot11fReAssocResponse{
 	tDot11fIEeht_cap                        eht_cap;
 	tDot11fIEeht_op                         eht_op;
 	tDot11fIEmlo_ie                         mlo_ie;
+	tDot11fIEt2lm_ie                        t2lm_ie;
 	tDot11fIEWPA                            WPA;
 	tDot11fIEWMMParams                      WMMParams;
 	tDot11fIEESERadMgmtCap                  ESERadMgmtCap;

+ 104 - 2
core/mac/src/sys/legacy/src/utils/src/dot11f.c

@@ -25,7 +25,7 @@
  *
  *
  * This file was automatically generated by 'framesc'
- * Mon Jun 27 14:45:04 2022 from the following file(s):
+ * Thu Jul 28 13:24:31 2022 from the following file(s):
  *
  * dot11f.frms
  *
@@ -10591,6 +10591,26 @@ uint32_t dot11f_unpack_ie_spatial_reuse(tpAniSirGlobal pCtx,
 #define SigIespatial_reuse (0x00a1)
 
 
+uint32_t dot11f_unpack_ie_t2lm_ie(tpAniSirGlobal pCtx,
+				  uint8_t *pBuf,
+				  uint8_t ielen,
+				  tDot11fIEt2lm_ie *pDst,
+				  bool append_ie)
+{
+	uint32_t status = DOT11F_PARSE_SUCCESS;
+	(void) pBuf; (void)ielen; /* Shutup the compiler */
+	if (pDst->present)
+		return DOT11F_DUPLICATE_IE;
+	pDst->present = 1;
+	pDst->num_data = (uint8_t)(ielen);
+	DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (ielen));
+	(void)pCtx;
+	return status;
+} /* End dot11f_unpack_ie_t2lm_ie. */
+
+#define SigIet2lm_ie (0x00a2)
+
+
 static const tFFDefn FFS_vendor_vht_ie[] = {
 	{ NULL, 0, 0, 0,},
 };
@@ -10637,7 +10657,7 @@ uint32_t dot11f_unpack_ie_vendor_vht_ie(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_vendor_vht_ie. */
 
-#define SigIevendor_vht_ie (0x00a2)
+#define SigIevendor_vht_ie (0x00a3)
 
 
 static const tFFDefn FFS_AddTSRequest[] = {
@@ -10873,6 +10893,9 @@ static const tIEDefn IES_AssocRequest[] = {
 	{ offsetof(tDot11fAssocRequest, mlo_ie), offsetof(tDot11fIEmlo_ie,
 	present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
 	0, DOT11F_EID_MLO_IE, 107, 0, },
+	{ offsetof(tDot11fAssocRequest, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
+	present), 0, "t2lm_ie", 0, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
+	0, DOT11F_EID_T2LM_IE, 109, 0, },
 	{ offsetof(tDot11fAssocRequest, WPAOpaque), offsetof(tDot11fIEWPAOpaque,
 	present), 0, "WPAOpaque", 0, 8, 255, SigIeWPAOpaque, {0, 80, 242, 1, 0},
 	4, DOT11F_EID_WPAOPAQUE, 0, 0, },
@@ -11075,6 +11098,9 @@ static const tIEDefn IES_AssocResponse[] = {
 	{ offsetof(tDot11fAssocResponse, mlo_ie), offsetof(tDot11fIEmlo_ie,
 	present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
 	0, DOT11F_EID_MLO_IE, 107, 0, },
+	{ offsetof(tDot11fAssocResponse, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
+	present), 0, "t2lm_ie", 0, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
+	0, DOT11F_EID_T2LM_IE, 109, 0, },
 	{ offsetof(tDot11fAssocResponse, WPA), offsetof(tDot11fIEWPA, present), 0,
 	"WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
 	{ offsetof(tDot11fAssocResponse, WMMParams), offsetof(tDot11fIEWMMParams,
@@ -11386,6 +11412,9 @@ static const tIEDefn IES_Beacon[] = {
 	{ offsetof(tDot11fBeacon, mlo_ie), offsetof(tDot11fIEmlo_ie, present), 0,
 	"mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
 	0, DOT11F_EID_MLO_IE, 107, 0, },
+	{ offsetof(tDot11fBeacon, t2lm_ie), offsetof(tDot11fIEt2lm_ie, present), 0,
+	"t2lm_ie", 0, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
+	0, DOT11F_EID_T2LM_IE, 109, 0, },
 	{ offsetof(tDot11fBeacon, WPA), offsetof(tDot11fIEWPA, present), 0, "WPA",
 	0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
 	{ offsetof(tDot11fBeacon, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
@@ -11642,6 +11671,9 @@ static const tIEDefn IES_Beacon2[] = {
 	{ offsetof(tDot11fBeacon2, mlo_ie), offsetof(tDot11fIEmlo_ie, present), 0,
 	"mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
 	0, DOT11F_EID_MLO_IE, 107, 0, },
+	{ offsetof(tDot11fBeacon2, t2lm_ie), offsetof(tDot11fIEt2lm_ie, present),
+	0, "t2lm_ie", 0, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
+	0, DOT11F_EID_T2LM_IE, 109, 0, },
 	{ offsetof(tDot11fBeacon2, WPA), offsetof(tDot11fIEWPA, present), 0, "WPA",
 	0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
 	{ offsetof(tDot11fBeacon2, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
@@ -11889,6 +11921,9 @@ static const tIEDefn IES_BeaconIEs[] = {
 	{ offsetof(tDot11fBeaconIEs, mlo_ie), offsetof(tDot11fIEmlo_ie, present),
 	0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
 	0, DOT11F_EID_MLO_IE, 107, 0, },
+	{ offsetof(tDot11fBeaconIEs, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
+	present), 0, "t2lm_ie", 0, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
+	0, DOT11F_EID_T2LM_IE, 109, 0, },
 	{ offsetof(tDot11fBeaconIEs, WPA), offsetof(tDot11fIEWPA, present), 0,
 	"WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
 	{ offsetof(tDot11fBeaconIEs, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
@@ -12569,6 +12604,9 @@ static const tIEDefn IES_ProbeResponse[] = {
 	{ offsetof(tDot11fProbeResponse, mlo_ie), offsetof(tDot11fIEmlo_ie,
 	present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
 	0, DOT11F_EID_MLO_IE, 107, 0, },
+	{ offsetof(tDot11fProbeResponse, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
+	present), 0, "t2lm_ie", 0, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
+	0, DOT11F_EID_T2LM_IE, 109, 0, },
 	{ offsetof(tDot11fProbeResponse, WPA), offsetof(tDot11fIEWPA, present), 0,
 	"WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0}, 4, DOT11F_EID_WPA, 0, 0, },
 	{ offsetof(tDot11fProbeResponse, WMMInfoAp), offsetof(tDot11fIEWMMInfoAp,
@@ -12847,6 +12885,9 @@ static const tIEDefn IES_ReAssocRequest[] = {
 	{ offsetof(tDot11fReAssocRequest, mlo_ie), offsetof(tDot11fIEmlo_ie,
 	present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
 	0, DOT11F_EID_MLO_IE, 107, 0, },
+	{ offsetof(tDot11fReAssocRequest, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
+	present), 0, "t2lm_ie", 0, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
+	0, DOT11F_EID_T2LM_IE, 109, 0, },
 	{ offsetof(tDot11fReAssocRequest, WPAOpaque),
 	offsetof(tDot11fIEWPAOpaque, present), 0, "WPAOpaque",
 	0, 8, 255, SigIeWPAOpaque, {0, 80, 242, 1, 0},
@@ -13031,6 +13072,9 @@ static const tIEDefn IES_ReAssocResponse[] = {
 	{ offsetof(tDot11fReAssocResponse, mlo_ie), offsetof(tDot11fIEmlo_ie,
 	present), 0, "mlo_ie", 0, 11, 257, SigIemlo_ie, {0, 0, 0, 0, 0},
 	0, DOT11F_EID_MLO_IE, 107, 0, },
+	{ offsetof(tDot11fReAssocResponse, t2lm_ie), offsetof(tDot11fIEt2lm_ie,
+	present), 0, "t2lm_ie", 0, 5, 257, SigIet2lm_ie, {0, 0, 0, 0, 0},
+	0, DOT11F_EID_T2LM_IE, 109, 0, },
 	{ offsetof(tDot11fReAssocResponse, WPA), offsetof(tDot11fIEWPA, present),
 	0, "WPA", 0, 8, 50, SigIeWPA, {0, 80, 242, 1, 0},
 	4, DOT11F_EID_WPA, 0, 0, },
@@ -16138,6 +16182,16 @@ static uint32_t unpack_core(tpAniSirGlobal pCtx,
 						    countOffset),
 						    append_ie);
 					break;
+				case SigIet2lm_ie:
+					status |=
+						dot11f_unpack_ie_t2lm_ie(
+						    pCtx, pBufRemaining, len,
+						    (tDot11fIEt2lm_ie *)
+						    (pFrm + pIe->offset +
+						    sizeof(tDot11fIEt2lm_ie) *
+						    countOffset),
+						    append_ie);
+					break;
 				case SigIevendor_vht_ie:
 					status |=
 						dot11f_unpack_ie_vendor_vht_ie(
@@ -19600,6 +19654,15 @@ static uint32_t get_packed_size_core(tpAniSirGlobal pCtx,
 						(pFrm + pIe->offset + offset * i),
 						pnNeeded);
 					break;
+				case SigIet2lm_ie:
+					offset = sizeof(tDot11fIEt2lm_ie);
+					byteCount = ((tDot11fIEt2lm_ie *)
+					  (pFrm + pIe->offset + offset * i))->
+					  num_data;
+					pIePresent = ((tDot11fIEt2lm_ie *)
+					  (pFrm + pIe->offset + offset * i))->
+					  present;
+					break;
 				case SigIevendor_vht_ie:
 					offset = sizeof(tDot11fIEvendor_vht_ie);
 					status |=
@@ -30076,6 +30139,37 @@ uint32_t dot11f_pack_ie_spatial_reuse(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_pack_ie_spatial_reuse. */
 
+uint32_t dot11f_pack_ie_t2lm_ie(tpAniSirGlobal pCtx,
+				tDot11fIEt2lm_ie *pSrc,
+				uint8_t *pBuf,
+				uint32_t nBuf,
+				uint32_t *pnConsumed)
+{
+	uint8_t *pIeLen = 0;
+	uint32_t nConsumedOnEntry = *pnConsumed;
+	uint32_t nNeeded = 0U;
+	nNeeded  +=  pSrc->num_data;
+	while (pSrc->present) {
+		if (nNeeded > nBuf)
+			return DOT11F_BUFFER_OVERFLOW;
+		*pBuf = 255;
+		++pBuf; ++(*pnConsumed);
+		pIeLen = pBuf;
+		++pBuf; ++(*pnConsumed);
+		*pBuf = 109;
+		++pBuf; ++(*pnConsumed);
+		DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
+		*pnConsumed += pSrc->num_data;
+		/* fieldsEndFlag = 1 */
+		break;
+	}
+	(void)pCtx;
+	if (pIeLen) {
+		*pIeLen = *pnConsumed - nConsumedOnEntry - 2;
+	}
+	return DOT11F_PARSE_SUCCESS;
+} /* End dot11f_pack_ie_t2lm_ie. */
+
 uint32_t dot11f_pack_ie_vendor_vht_ie(tpAniSirGlobal pCtx,
 				      tDot11fIEvendor_vht_ie *pSrc,
 				      uint8_t *pBuf,
@@ -32466,6 +32560,14 @@ static uint32_t pack_core(tpAniSirGlobal pCtx,
 				sizeof(tDot11fIEspatial_reuse) * i),
 				pBufRemaining, nBufRemaining, &len);
 			break;
+			case SigIet2lm_ie:
+			status |=
+				dot11f_pack_ie_t2lm_ie(
+				pCtx, (tDot11fIEt2lm_ie *)
+				(pSrc + pIe->offset +
+				sizeof(tDot11fIEt2lm_ie) * i),
+				pBufRemaining, nBufRemaining, &len);
+			break;
 			case SigIevendor_vht_ie:
 			status |=
 				dot11f_pack_ie_vendor_vht_ie(