ソースを参照

qcacld-3.0: Add edca_pifs_param attribute in QCN ie

Add edca_pifs_param attribute in QCN ie. This attribute will
be use to configure edca and pifs param for XPAN.

Change-Id: Iab16c36fbdb2f66afb6c1cebee10b43d64aec4a6
CRs-Fixed: 3334861
Jyoti Kumari 2 年 前
コミット
0ff4e53681

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

@@ -2737,6 +2737,10 @@ IE TimeAdvertisement (EID_TIME_ADVERTISEMENT)   // 8.4.2.63
     time_error[5];
 }
 
+/**
+ * This all attributes are defined under qcn_attribute_id enum of
+ * cmn code in wlan_cmn_ieee80211.h file.
+ */
 const TLV_VERSION_ATTR_ID                 = 1;
 const TLV_VHT_MCS_10_11_ATTR_ID           = 2;
 const TLV_HE_400NS_SGI_SUPP_ATTR_ID       = 3;
@@ -2746,6 +2750,7 @@ const TLV_TRANSITION_REASONP_ATTR_ID      = 6;
 const TLV_TRANSITION_REJECTIONP_ATTR_ID   = 7;
 const TLV_HE_DL_MUMIMO_SUPPP_ATTR_ID      = 8;
 const TLV_HE_MCS_11_12_ATTR_ID            = 9;
+const TLV_EDCA_PIFS_PARAM_ATTR_ID         = 13;
 
 TLV qcn_version(TLV_VERSION_ATTR_ID) ( 1 : 1 ) LSB
 {
@@ -2794,6 +2799,13 @@ TLV he_mcs13_attr (TLV_HE_MCS_11_12_ATTR_ID) ( 1 : 1 ) LSB
    he_mcs_12_13_supp_160, 1;
 }
 
+TLV edca_pifs_param_attr (TLV_EDCA_PIFS_PARAM_ATTR_ID) ( 1 : 1 ) LSB
+{
+   // Configure EDCA or PIFS param based on edca_param_type
+   edca_param_type, 1;
+   data[3..4];
+}
+
 MULTIIE qcn_ie (EID_VENDOR_SPECIFIC) OUI ( 0x8C, 0xFD, 0xF0, 0x01 )
 {
    OPTIONALTLV qcn_version;
@@ -2805,6 +2817,7 @@ MULTIIE qcn_ie (EID_VENDOR_SPECIFIC) OUI ( 0x8C, 0xFD, 0xF0, 0x01 )
    OPTIONALTLV trans_rejectp_attr;
    OPTIONALTLV he_dl_mumimo_attr;
    OPTIONALTLV he_mcs13_attr;
+   OPTIONALTLV edca_pifs_param_attr;
 }
 
 IE esp_information (EID_EXTN_ID_ELEMENT) OUI ( 0x0B )

+ 43 - 2
core/mac/src/include/dot11f.h

@@ -27,7 +27,7 @@
  *
  *
  * This file was automatically generated by 'framesc'
- * Mon Oct 31 15:26:23 2022 from the following file(s):
+ * Mon Nov 14 15:58:33 2022 from the following file(s):
  *
  * dot11f.frms
  *
@@ -2213,6 +2213,46 @@ uint32_t dot11f_get_packed_tlv_cellular_data_con_pref(
 }; /* End extern "C". */
 #endif /* C++ */
 
+/* ID 13 (0x000d) */
+typedef struct sDot11fTLVedca_pifs_param_attr {
+	uint8_t             present;
+	uint8_t             edca_param_type;
+	uint8_t             num_data;
+	uint8_t             data[4];
+} tDot11fTLVedca_pifs_param_attr;
+
+#define DOT11F_TLV_EDCA_PIFS_PARAM_ATTR (13)
+
+/* N.B. These #defines do *not* include the ID & length */
+#define DOT11F_TLV_EDCA_PIFS_PARAM_ATTR_MIN_LEN (4)
+
+#define DOT11F_TLV_EDCA_PIFS_PARAM_ATTR_MAX_LEN (5)
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+uint32_t dot11f_unpack_tlv_edca_pifs_param_attr(
+	tpAniSirGlobal,
+	uint8_t *,
+	uint16_t,
+	tDot11fTLVedca_pifs_param_attr*);
+
+uint32_t dot11f_pack_tlv_edca_pifs_param_attr(
+	tpAniSirGlobal,
+	tDot11fTLVedca_pifs_param_attr *,
+	uint8_t *,
+	uint32_t,
+	uint32_t*);
+
+uint32_t dot11f_get_packed_tlv_edca_pifs_param_attr(
+	tpAniSirGlobal,
+	tDot11fTLVedca_pifs_param_attr *,
+	uint32_t*);
+
+#ifdef __cplusplus
+}; /* End extern "C". */
+#endif /* C++ */
+
 /* ID 4 (0x0004) */
 typedef struct sDot11fTLVhe_2xltf_160mhz_supp {
 	uint8_t             present;
@@ -10128,6 +10168,7 @@ typedef struct sDot11fIEqcn_ie {
 	tDot11fTLVtrans_rejectp_attr trans_rejectp_attr;
 	tDot11fTLVhe_dl_mumimo_attr he_dl_mumimo_attr;
 	tDot11fTLVhe_mcs13_attr he_mcs13_attr;
+	tDot11fTLVedca_pifs_param_attr edca_pifs_param_attr;
 } tDot11fIEqcn_ie;
 
 #define DOT11F_EID_QCN_IE (221)
@@ -10135,7 +10176,7 @@ typedef struct sDot11fIEqcn_ie {
 /* N.B. These #defines do *not* include the EID & length */
 #define DOT11F_IE_QCN_IE_MIN_LEN (4)
 
-#define DOT11F_IE_QCN_IE_MAX_LEN (35)
+#define DOT11F_IE_QCN_IE_MAX_LEN (42)
 
 #ifdef __cplusplus
 extern "C" {

+ 113 - 26
core/mac/src/sys/legacy/src/utils/src/dot11f.c

@@ -25,7 +25,7 @@
  *
  *
  * This file was automatically generated by 'framesc'
- * Mon Oct 31 15:26:23 2022 from the following file(s):
+ * Mon Nov 14 15:58:33 2022 from the following file(s):
  *
  * dot11f.frms
  *
@@ -1551,7 +1551,38 @@ uint32_t dot11f_unpack_tlv_version(tpAniSirGlobal pCtx,
 #define SigTlvcellular_data_con_pref (0x0027)
 
 
-#define SigTlvhe_2xltf_160mhz_supp (0x0028)
+uint32_t dot11f_unpack_tlv_edca_pifs_param_attr(tpAniSirGlobal pCtx,
+						 uint8_t *pBuf,
+						 uint16_t tlvlen,
+						 tDot11fTLVedca_pifs_param_attr *pDst)
+{
+	uint32_t status = DOT11F_PARSE_SUCCESS;
+	pDst->present = 1;
+	if (unlikely(tlvlen < 1)) {
+		pDst->present = 0;
+		return DOT11F_INCOMPLETE_IE;
+	}
+
+	pDst->edca_param_type = *pBuf;
+	pBuf += 1;
+	tlvlen -= (uint8_t)1;
+	pDst->num_data = (uint8_t)(tlvlen);
+	if (tlvlen > 4) {
+		pDst->present = 0;
+		return DOT11F_SKIPPED_BAD_IE;
+	}
+
+	DOT11F_MEMCPY(pCtx, pDst->data, pBuf, (tlvlen));
+	pBuf += (tlvlen);
+	tlvlen -= (tlvlen);
+	(void)pCtx;
+	return status;
+} /* End dot11f_unpack_tlv_edca_pifs_param_attr. */
+
+#define SigTlvedca_pifs_param_attr (0x0028)
+
+
+#define SigTlvhe_2xltf_160mhz_supp (0x0029)
 
 
 uint32_t dot11f_unpack_tlv_he_400ns_sgi_attr(tpAniSirGlobal pCtx,
@@ -1589,13 +1620,13 @@ uint32_t dot11f_unpack_tlv_he_400ns_sgi_attr(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_tlv_he_400ns_sgi_attr. */
 
-#define SigTlvhe_400ns_sgi_attr (0x0029)
+#define SigTlvhe_400ns_sgi_attr (0x002a)
 
 
-#define SigTlvhe_dl_mumimo_attr (0x002a)
+#define SigTlvhe_dl_mumimo_attr (0x002b)
 
 
-#define SigTlvhe_dl_ofdma_attr (0x002b)
+#define SigTlvhe_dl_ofdma_attr (0x002c)
 
 
 uint32_t dot11f_unpack_tlv_he_mcs13_attr(tpAniSirGlobal pCtx,
@@ -1625,10 +1656,10 @@ uint32_t dot11f_unpack_tlv_he_mcs13_attr(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_tlv_he_mcs13_attr. */
 
-#define SigTlvhe_mcs13_attr (0x002c)
+#define SigTlvhe_mcs13_attr (0x002d)
 
 
-#define SigTlvmbo_ap_cap (0x002d)
+#define SigTlvmbo_ap_cap (0x002e)
 
 
 uint32_t dot11f_unpack_tlv_non_prefferd_chan_rep(tpAniSirGlobal pCtx,
@@ -1659,7 +1690,7 @@ uint32_t dot11f_unpack_tlv_non_prefferd_chan_rep(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_tlv_non_prefferd_chan_rep. */
 
-#define SigTlvnon_prefferd_chan_rep (0x002e)
+#define SigTlvnon_prefferd_chan_rep (0x002f)
 
 
 uint32_t dot11f_unpack_tlv_oce_cap(tpAniSirGlobal pCtx,
@@ -1686,7 +1717,7 @@ uint32_t dot11f_unpack_tlv_oce_cap(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_tlv_oce_cap. */
 
-#define SigTlvoce_cap (0x002f)
+#define SigTlvoce_cap (0x0030)
 
 
 uint32_t dot11f_unpack_tlv_qcn_version(tpAniSirGlobal pCtx,
@@ -1716,7 +1747,7 @@ uint32_t dot11f_unpack_tlv_qcn_version(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_tlv_qcn_version. */
 
-#define SigTlvqcn_version (0x0030)
+#define SigTlvqcn_version (0x0031)
 
 
 uint32_t dot11f_unpack_tlv_reduced_wan_metrics(tpAniSirGlobal pCtx,
@@ -1741,7 +1772,7 @@ uint32_t dot11f_unpack_tlv_reduced_wan_metrics(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_tlv_reduced_wan_metrics. */
 
-#define SigTlvreduced_wan_metrics (0x0031)
+#define SigTlvreduced_wan_metrics (0x0032)
 
 
 uint32_t dot11f_unpack_tlv_rssi_assoc_rej(tpAniSirGlobal pCtx,
@@ -1771,22 +1802,22 @@ uint32_t dot11f_unpack_tlv_rssi_assoc_rej(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_tlv_rssi_assoc_rej. */
 
-#define SigTlvrssi_assoc_rej (0x0032)
+#define SigTlvrssi_assoc_rej (0x0033)
 
 
-#define SigTlvtrans_reasonp_attr (0x0033)
+#define SigTlvtrans_reasonp_attr (0x0034)
 
 
-#define SigTlvtrans_rejectp_attr (0x0034)
+#define SigTlvtrans_rejectp_attr (0x0035)
 
 
-#define SigTlvtransition_reason (0x0035)
+#define SigTlvtransition_reason (0x0036)
 
 
-#define SigTlvtransition_reject_reason (0x0036)
+#define SigTlvtransition_reject_reason (0x0037)
 
 
-#define SigTlvvht_mcs11_attr (0x0037)
+#define SigTlvvht_mcs11_attr (0x0038)
 
 
 uint32_t dot11f_unpack_tlv_p2_p_interface(tpAniSirGlobal pCtx,
@@ -1808,10 +1839,10 @@ uint32_t dot11f_unpack_tlv_p2_p_interface(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_tlv_p2_p_interface. */
 
-#define SigTlvP2PInterface (0x0038)
+#define SigTlvP2PInterface (0x0039)
 
 
-#define SigTlvP2PManageability (0x0039)
+#define SigTlvP2PManageability (0x003a)
 
 
 uint32_t dot11f_unpack_ie_gtk(tpAniSirGlobal pCtx,
@@ -10080,6 +10111,10 @@ static const tTLVDefn TLVS_qcn_ie[] = {
 	{ offsetof(tDot11fIEqcn_ie, he_mcs13_attr),
 	offsetof(tDot11fTLVhe_mcs13_attr, present), "he_mcs13_attr",
 	SigTlvhe_mcs13_attr, DOT11F_TLV_HE_MCS13_ATTR, 0, 4, 4, 0, 1, 1, 0, },
+	{ offsetof(tDot11fIEqcn_ie, edca_pifs_param_attr),
+	offsetof(tDot11fTLVedca_pifs_param_attr, present),
+	"edca_pifs_param_attr", SigTlvedca_pifs_param_attr,
+	DOT11F_TLV_EDCA_PIFS_PARAM_ATTR, 0, 6, 7, 0, 1, 1, 0, },
 	{0, 0, NULL, 0, 0xffff, 0, 0, 0, 0, 0, 0},
 };
 
@@ -10935,7 +10970,7 @@ static const tIEDefn IES_AssocRequest[] = {
 	0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0},
 	4, DOT11F_EID_HS20VENDOR_IE, 0, 0, },
 	{ offsetof(tDot11fAssocRequest, qcn_ie), offsetof(tDot11fIEqcn_ie,
-	present), 0, "qcn_ie", 0, 6, 37, SigIeqcn_ie, {140, 253, 240, 1, 0},
+	present), 0, "qcn_ie", 0, 6, 44, SigIeqcn_ie, {140, 253, 240, 1, 0},
 	4, DOT11F_EID_QCN_IE, 0, 0, },
 	{ offsetof(tDot11fAssocRequest, osen_ie), offsetof(tDot11fIEosen_ie,
 	present), 0, "osen_ie", 0, 6, 261, SigIeosen_ie, {80, 111, 154, 18, 0},
@@ -11134,7 +11169,7 @@ static const tIEDefn IES_AssocResponse[] = {
 	0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0},
 	4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, },
 	{ offsetof(tDot11fAssocResponse, qcn_ie), offsetof(tDot11fIEqcn_ie,
-	present), 0, "qcn_ie", 0, 6, 37, SigIeqcn_ie, {140, 253, 240, 1, 0},
+	present), 0, "qcn_ie", 0, 6, 44, SigIeqcn_ie, {140, 253, 240, 1, 0},
 	4, DOT11F_EID_QCN_IE, 0, 0, },
 	{ offsetof(tDot11fAssocResponse, MBO_IE), offsetof(tDot11fIEMBO_IE,
 	present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
@@ -11464,7 +11499,7 @@ static const tIEDefn IES_Beacon[] = {
 	"MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
 	4, DOT11F_EID_MBO_IE, 0, 0, },
 	{ offsetof(tDot11fBeacon, qcn_ie), offsetof(tDot11fIEqcn_ie, present), 0,
-	"qcn_ie", 0, 6, 37, SigIeqcn_ie, {140, 253, 240, 1, 0},
+	"qcn_ie", 0, 6, 44, SigIeqcn_ie, {140, 253, 240, 1, 0},
 	4, DOT11F_EID_QCN_IE, 0, 0, },
 	{ offsetof(tDot11fBeacon, reduced_neighbor_report),
 	offsetof(tDot11fIEreduced_neighbor_report, present), 0,
@@ -11721,7 +11756,7 @@ static const tIEDefn IES_Beacon2[] = {
 	present), 0, "ESEVersion", 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0},
 	4, DOT11F_EID_ESEVERSION, 0, 0, },
 	{ offsetof(tDot11fBeacon2, qcn_ie), offsetof(tDot11fIEqcn_ie, present), 0,
-	"qcn_ie", 0, 6, 37, SigIeqcn_ie, {140, 253, 240, 1, 0},
+	"qcn_ie", 0, 6, 44, SigIeqcn_ie, {140, 253, 240, 1, 0},
 	4, DOT11F_EID_QCN_IE, 0, 0, },
 	{ offsetof(tDot11fBeacon2, reduced_neighbor_report),
 	offsetof(tDot11fIEreduced_neighbor_report, present), 0,
@@ -11978,7 +12013,7 @@ static const tIEDefn IES_BeaconIEs[] = {
 	0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
 	4, DOT11F_EID_MBO_IE, 0, 0, },
 	{ offsetof(tDot11fBeaconIEs, qcn_ie), offsetof(tDot11fIEqcn_ie, present),
-	0, "qcn_ie", 0, 6, 37, SigIeqcn_ie, {140, 253, 240, 1, 0},
+	0, "qcn_ie", 0, 6, 44, SigIeqcn_ie, {140, 253, 240, 1, 0},
 	4, DOT11F_EID_QCN_IE, 0, 0, },
 	{ offsetof(tDot11fBeaconIEs, reduced_neighbor_report),
 	offsetof(tDot11fIEreduced_neighbor_report, present), 0,
@@ -12412,7 +12447,7 @@ static const tIEDefn IES_ProbeRequest[] = {
 	0, 6, 43, SigIeP2PProbeReq, {80, 111, 154, 9, 0},
 	4, DOT11F_EID_P2PPROBEREQ, 0, 0, },
 	{ offsetof(tDot11fProbeRequest, qcn_ie), offsetof(tDot11fIEqcn_ie,
-	present), 0, "qcn_ie", 0, 6, 37, SigIeqcn_ie, {140, 253, 240, 1, 0},
+	present), 0, "qcn_ie", 0, 6, 44, SigIeqcn_ie, {140, 253, 240, 1, 0},
 	4, DOT11F_EID_QCN_IE, 0, 0, },
 	{0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },};
 
@@ -12663,7 +12698,7 @@ static const tIEDefn IES_ProbeResponse[] = {
 	present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0},
 	4, DOT11F_EID_MBO_IE, 0, 0, },
 	{ offsetof(tDot11fProbeResponse, qcn_ie), offsetof(tDot11fIEqcn_ie,
-	present), 0, "qcn_ie", 0, 6, 37, SigIeqcn_ie, {140, 253, 240, 1, 0},
+	present), 0, "qcn_ie", 0, 6, 44, SigIeqcn_ie, {140, 253, 240, 1, 0},
 	4, DOT11F_EID_QCN_IE, 0, 0, },
 	{ offsetof(tDot11fProbeResponse, reduced_neighbor_report),
 	offsetof(tDot11fIEreduced_neighbor_report, present), 0,
@@ -16718,6 +16753,13 @@ static uint32_t unpack_tlv_core(tpAniSirGlobal   pCtx,
 						  (uint8_t *)&(((tDot11fTLVcellular_data_con_pref *)
 						  (pFrm + pTlv->offset))->cellular_preference));
 					break;
+				case SigTlvedca_pifs_param_attr:
+					status |=
+						dot11f_unpack_tlv_edca_pifs_param_attr(pCtx,
+						  pBufRemaining, len,
+						  (tDot11fTLVedca_pifs_param_attr *)
+						  (pFrm + pTlv->offset));
+					break;
 				case SigTlvhe_2xltf_160mhz_supp:
 					status |=
 						dot11f_unpack_tlv_common_func(pCtx,
@@ -19910,6 +19952,11 @@ static uint32_t get_packed_size_tlv_core(tpAniSirGlobal pCtx,
 				pTlvPresent = ((tDot11fTLVcellular_data_con_pref *)
 					      (pFrm + pTlv->offset))->present;
 				break;
+			case SigTlvedca_pifs_param_attr:
+				byteCount = ((tDot11fTLVedca_pifs_param_attr *)(pFrm + pTlv->offset))->num_data+1;
+				pTlvPresent = ((tDot11fTLVedca_pifs_param_attr *)
+					      (pFrm + pTlv->offset))->present;
+				break;
 			case SigTlvhe_2xltf_160mhz_supp:
 				byteCount = 1;
 				pTlvPresent = ((tDot11fTLVhe_2xltf_160mhz_supp *)
@@ -21600,6 +21647,39 @@ uint32_t dot11f_pack_tlv_cellular_data_con_pref(tpAniSirGlobal pCtx,
 	return DOT11F_PARSE_SUCCESS;
 } /* End dot11f_pack_tlv_cellular_data_con_pref. */
 
+uint32_t dot11f_pack_tlv_edca_pifs_param_attr(tpAniSirGlobal pCtx,
+					      tDot11fTLVedca_pifs_param_attr *pSrc,
+					      uint8_t *pBuf,
+					      uint32_t nBuf,
+					      uint32_t *pnConsumed)
+{
+	uint8_t *pTlvLen = 0;
+	uint32_t nConsumedOnEntry = *pnConsumed;
+	uint32_t nNeeded = 0U;
+	nNeeded += (pSrc->num_data + 3) ;
+
+	if (nNeeded > nBuf)
+		return DOT11F_BUFFER_OVERFLOW;
+	while (pSrc->present) {
+		*pBuf = 13;
+		pBuf += 1; *pnConsumed += 1;
+		pTlvLen = pBuf;
+		pBuf += 1; *pnConsumed += 1;
+		*pBuf = pSrc->edca_param_type;
+		*pnConsumed += 1;
+		pBuf += 1;
+		DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->data), pSrc->num_data);
+		*pnConsumed += pSrc->num_data;
+		pBuf += pSrc->num_data;
+		break;
+	}
+	(void)pCtx;
+	if (pTlvLen) {
+		*pTlvLen = *pnConsumed - nConsumedOnEntry - 2;
+	}
+	return DOT11F_PARSE_SUCCESS;
+} /* End dot11f_pack_tlv_edca_pifs_param_attr. */
+
 uint32_t dot11f_pack_tlv_he_2xltf_160mhz_supp(tpAniSirGlobal pCtx,
 					      tDot11fTLVhe_2xltf_160mhz_supp *pSrc,
 					      uint8_t *pBuf,
@@ -32907,6 +32987,13 @@ static uint32_t pack_tlv_core(tpAniSirGlobal pCtx,
 					(pSrc + pTlv->offset), pBufRemaining,
 					nBufRemaining, &len);
 				break;
+			case SigTlvedca_pifs_param_attr:
+				status |=
+					dot11f_pack_tlv_edca_pifs_param_attr(
+					pCtx, (tDot11fTLVedca_pifs_param_attr *)
+					(pSrc + pTlv->offset), pBufRemaining,
+					nBufRemaining, &len);
+				break;
 			case SigTlvhe_2xltf_160mhz_supp:
 				status |=
 					dot11f_pack_tlv_he_2xltf_160mhz_supp(