From 0ff4e53681e78abac2f93aa39fb2d8c1fd15aaaa Mon Sep 17 00:00:00 2001 From: Jyoti Kumari Date: Fri, 11 Nov 2022 17:07:43 +0530 Subject: [PATCH] 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 --- core/mac/src/cfg/cfgUtil/dot11f.frms | 13 ++ core/mac/src/include/dot11f.h | 45 +++++- .../mac/src/sys/legacy/src/utils/src/dot11f.c | 139 ++++++++++++++---- 3 files changed, 169 insertions(+), 28 deletions(-) diff --git a/core/mac/src/cfg/cfgUtil/dot11f.frms b/core/mac/src/cfg/cfgUtil/dot11f.frms index 21b2905036..be88a3fe57 100644 --- a/core/mac/src/cfg/cfgUtil/dot11f.frms +++ b/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 ) diff --git a/core/mac/src/include/dot11f.h b/core/mac/src/include/dot11f.h index 862cb7d597..9d2a50c24c 100644 --- a/core/mac/src/include/dot11f.h +++ b/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" { diff --git a/core/mac/src/sys/legacy/src/utils/src/dot11f.c b/core/mac/src/sys/legacy/src/utils/src/dot11f.c index d94bddf0b2..9eb99ed6b8 100644 --- a/core/mac/src/sys/legacy/src/utils/src/dot11f.c +++ b/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(