1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Basic types and constants relating to 802.11ax/HE STA 3*4882a593Smuzhiyun * This is a portion of 802.11ax definition. The rest are in 802.11.h. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Portions of this code are copyright (c) 2021 Cypress Semiconductor Corporation 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright (C) 1999-2017, Broadcom Corporation 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * Unless you and Broadcom execute a separate written software license 10*4882a593Smuzhiyun * agreement governing use of this software, this software is licensed to you 11*4882a593Smuzhiyun * under the terms of the GNU General Public License version 2 (the "GPL"), 12*4882a593Smuzhiyun * available at http://www.broadcom.com/licenses/GPLv2.php, with the 13*4882a593Smuzhiyun * following added to such license: 14*4882a593Smuzhiyun * 15*4882a593Smuzhiyun * As a special exception, the copyright holders of this software give you 16*4882a593Smuzhiyun * permission to link this software with independent modules, and to copy and 17*4882a593Smuzhiyun * distribute the resulting executable under terms of your choice, provided that 18*4882a593Smuzhiyun * you also meet, for each linked independent module, the terms and conditions of 19*4882a593Smuzhiyun * the license of that module. An independent module is a module which is not 20*4882a593Smuzhiyun * derived from this software. The special exception does not apply to any 21*4882a593Smuzhiyun * modifications of the software. 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * Notwithstanding the above, under no circumstances may you combine this 24*4882a593Smuzhiyun * software in any way with any other Broadcom software provided under a license 25*4882a593Smuzhiyun * other than the GPL, without Broadcom's express prior written consent. 26*4882a593Smuzhiyun * 27*4882a593Smuzhiyun * 28*4882a593Smuzhiyun * <<Broadcom-WL-IPTag/Open:>> 29*4882a593Smuzhiyun * 30*4882a593Smuzhiyun * $Id$ 31*4882a593Smuzhiyun */ 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #ifndef _802_11ax_h_ 34*4882a593Smuzhiyun #define _802_11ax_h_ 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #include <typedefs.h> 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun /* This marks the start of a packed structure section. */ 39*4882a593Smuzhiyun #include <packed_section_start.h> 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* special STA-IDs (Section 27.11.1) */ 42*4882a593Smuzhiyun #define HE_STAID_BSS_BCAST 0 43*4882a593Smuzhiyun #define HE_STAID_UNASSOCIATED_STA 2045 44*4882a593Smuzhiyun #define HE_STAID_NO_USER 2046 45*4882a593Smuzhiyun #define HE_STAID_MBSS_BCAST 2047 46*4882a593Smuzhiyun #define HE_STAID_MASK 0x07FF 47*4882a593Smuzhiyun #define HE_AID12_MASK 0x0FFF 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /* Deprecated */ 50*4882a593Smuzhiyun #define HE_STAID_RU_NODATA 2046 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /** 53*4882a593Smuzhiyun * HE Capabilites element (sec 9.4.2.218) 54*4882a593Smuzhiyun */ 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun /* HE MAC Capabilities Information field (figure 9-589ck) */ 57*4882a593Smuzhiyun #define HE_MAC_CAP_INFO_SIZE 6 58*4882a593Smuzhiyun typedef uint8 he_mac_cap_t[HE_MAC_CAP_INFO_SIZE]; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun /* bit position and field width */ 61*4882a593Smuzhiyun #define HE_MAC_HTC_HE_SUPPORT_IDX 0 /* HTC HE Support */ 62*4882a593Smuzhiyun #define HE_MAC_HTC_HE_SUPPORT_FSZ 1 63*4882a593Smuzhiyun #define HE_MAC_TWT_REQ_SUPPORT_IDX 1 /* TWT Requestor Support */ 64*4882a593Smuzhiyun #define HE_MAC_TWT_REQ_SUPPORT_FSZ 1 65*4882a593Smuzhiyun #define HE_MAC_TWT_RESP_SUPPORT_IDX 2 /* TWT Responder Support */ 66*4882a593Smuzhiyun #define HE_MAC_TWT_RESP_SUPPORT_FSZ 1 67*4882a593Smuzhiyun #define HE_MAC_FRAG_SUPPORT_IDX 3 /* Fragmentation Support */ 68*4882a593Smuzhiyun #define HE_MAC_FRAG_SUPPORT_FSZ 2 69*4882a593Smuzhiyun #define HE_MAC_MAX_MSDU_AMSDU_FRAGS_IDX 5 /* Max. Fragmented MSDUs/AMSDUs Exponent */ 70*4882a593Smuzhiyun #define HE_MAC_MAX_MSDU_AMSDU_FRAGS_FSZ 3 71*4882a593Smuzhiyun #define HE_MAC_MIN_FRAG_SIZE_IDX 8 /* Min. Fragment Size */ 72*4882a593Smuzhiyun #define HE_MAC_MIN_FRAG_SIZE_FSZ 2 73*4882a593Smuzhiyun #define HE_MAC_TRG_PAD_DUR_IDX 10 /* Trigger Frame MAC Pad Dur */ 74*4882a593Smuzhiyun #define HE_MAC_TRG_PAD_DUR_FSZ 2 75*4882a593Smuzhiyun #define HE_MAC_MULTI_TID_RX_AGG_IDX 12 /* Multi TID RX Aggregation */ 76*4882a593Smuzhiyun #define HE_MAC_MULTI_TID_RX_AGG_FSZ 3 77*4882a593Smuzhiyun #define HE_MAC_LINK_ADAPT_IDX 15 /* HE Link Adaptation */ 78*4882a593Smuzhiyun #define HE_MAC_LINK_ADAPT_FSZ 2 79*4882a593Smuzhiyun #define HE_MAC_ALL_ACK_SUPPORT_IDX 17 /* All Ack Support */ 80*4882a593Smuzhiyun #define HE_MAC_ALL_ACK_SUPPORT_FSZ 1 81*4882a593Smuzhiyun #define HE_MAC_TRS_SUPPORT_IDX 18 /* TRS Support */ 82*4882a593Smuzhiyun #define HE_MAC_TRS_SUPPORT_FSZ 1 83*4882a593Smuzhiyun #define HE_MAC_A_BSR_IDX 19 /* A-BSR Support */ 84*4882a593Smuzhiyun #define HE_MAC_A_BSR_FSZ 1 85*4882a593Smuzhiyun #define HE_MAC_BCAST_TWT_SUPPORT_IDX 20 /* Broadcast TWT Support */ 86*4882a593Smuzhiyun #define HE_MAC_BCAST_TWT_SUPPORT_FSZ 1 87*4882a593Smuzhiyun #define HE_MAC_BA_32BITMAP_SUPPORT_IDX 21 /* 32-bit BA Bitmap Support */ 88*4882a593Smuzhiyun #define HE_MAC_BA_32BITMAP_SUPPORT_FSZ 1 89*4882a593Smuzhiyun #define HE_MAC_MU_CASCADE_SUPPORT_IDX 22 /* MU Cascade Support */ 90*4882a593Smuzhiyun #define HE_MAC_MU_CASCADE_SUPPORT_FSZ 1 91*4882a593Smuzhiyun #define HE_MAC_MULTI_TID_AGG_ACK_IDX 23 /* Ack Enabled Multi TID Agg. */ 92*4882a593Smuzhiyun #define HE_MAC_MULTI_TID_AGG_ACK_FSZ 1 93*4882a593Smuzhiyun #define HE_MAC_RESVD1_IDX 24 /* Reserved Bit */ 94*4882a593Smuzhiyun #define HE_MAC_RESVD1_FSZ 1 95*4882a593Smuzhiyun #define HE_MAC_OMI_ACONTROL_SUPPORT_IDX 25 /* OMI A-Control Support */ 96*4882a593Smuzhiyun #define HE_MAC_OMI_ACONTROL_SUPPORT_FSZ 1 97*4882a593Smuzhiyun #define HE_MAC_OFDMA_RA_SUPPORT_IDX 26 /* OFDMA RA Support */ 98*4882a593Smuzhiyun #define HE_MAC_OFDMA_RA_SUPPORT_FSZ 1 99*4882a593Smuzhiyun #define HE_MAC_MAX_AMPDU_LEN_EXP_EXT_IDX 27 /* Max AMPDU Length Exponent Extention */ 100*4882a593Smuzhiyun #define HE_MAC_MAX_AMPDU_LEN_EXP_EXT_FSZ 2 101*4882a593Smuzhiyun #define HE_MAC_AMSDU_FRAG_SUPPORT_IDX 29 /* AMSDU Fragementation Support */ 102*4882a593Smuzhiyun #define HE_MAC_AMSDU_FRAG_SUPPORT_FSZ 1 103*4882a593Smuzhiyun #define HE_MAC_FLEX_TWT_SCHEDULE_IDX 30 /* Flexible TWT Schedule Support */ 104*4882a593Smuzhiyun #define HE_MAC_FLEX_TWT_SCHEDULE_FSZ 1 105*4882a593Smuzhiyun #define HE_MAC_RX_MBSS_CTL_FRAME_IDX 31 /* Rx of Control frames of MBSS */ 106*4882a593Smuzhiyun #define HE_MAC_RX_MBSS_CTL_FRAME_FSZ 1 107*4882a593Smuzhiyun #define HE_MAC_RX_AGG_BSRP_IDX 32 /* Support Rx of aggregated BSRP BQRP */ 108*4882a593Smuzhiyun #define HE_MAC_RX_AGG_BSRP_FSZ 1 109*4882a593Smuzhiyun #define HE_MAC_QTP_SUPPORT_IDX 33 /* Support Quiet time period */ 110*4882a593Smuzhiyun #define HE_MAC_QTP_SUPPORT_FSZ 1 111*4882a593Smuzhiyun #define HE_MAC_ABQR_SUPPORT_IDX 34 /* Support aggregated BQR */ 112*4882a593Smuzhiyun #define HE_MAC_ABQR_SUPPORT_FSZ 1 113*4882a593Smuzhiyun #define HE_MAC_SRP_RSPNDR_IDX 35 /* SRP responder */ 114*4882a593Smuzhiyun #define HE_MAC_SRP_RSPNDR_FSZ 1 115*4882a593Smuzhiyun #define HE_MAC_NDP_FDBCK_SUPPORT_IDX 36 /* NDP feedback report */ 116*4882a593Smuzhiyun #define HE_MAC_NDP_FDBCK_SUPPORT_FSZ 1 117*4882a593Smuzhiyun #define HE_MAC_OPS_SUPPORT_IDX 37 /* OPS support */ 118*4882a593Smuzhiyun #define HE_MAC_OPS_SUPPORT_FSZ 1 119*4882a593Smuzhiyun #define HE_MAC_AMSDU_IN_AMPDU_IDX 38 /* AMSDU in AMPDU support */ 120*4882a593Smuzhiyun #define HE_MAC_AMSDU_IN_AMPDU_FSZ 1 121*4882a593Smuzhiyun #define HE_MAC_MULTI_TID_TX_AGG_IDX 39 /* Multi TID TX Aggregation */ 122*4882a593Smuzhiyun #define HE_MAC_MULTI_TID_TX_AGG_FSZ 3 123*4882a593Smuzhiyun #define HE_MAC_SUBCH_SEL_TR_SUPPORT_IDX 42 /* HE Subchl Selective Trns Sup */ 124*4882a593Smuzhiyun #define HE_MAC_SUBCH_SEL_TR_SUPPORT_FSZ 1 125*4882a593Smuzhiyun #define HE_MAC_UL_TONE_RU_SUPPORT_IDX 43 /* UL tone RUSupport */ 126*4882a593Smuzhiyun #define HE_MAC_UL_TONE_RU_SUPPORT_FSZ 1 127*4882a593Smuzhiyun #define HE_MAC_OMC_UL_MU_DIS_RX_IDX 44 /* OM Control ULMUData Dis RX Sup */ 128*4882a593Smuzhiyun #define HE_MAC_OMC_UL_MU_DIS_RX_FSZ 1 129*4882a593Smuzhiyun #define HE_MAC_HE_DSMPS_SUPPORT_IDX 45 /* HE Dynamic SM Power Save Sup */ 130*4882a593Smuzhiyun #define HE_MAC_HE_DSMPS_SUPPORT_FSZ 1 131*4882a593Smuzhiyun #define HE_MAC_PUNC_SOUND_SUPPORT_IDX 46 /* Punctured Sounding Sup */ 132*4882a593Smuzhiyun #define HE_MAC_PUNC_SOUND_SUPPORT_FSZ 1 133*4882a593Smuzhiyun #define HE_MAC_NONAX_TFRX_SUPPORT_IDX 47 /* HT and VHT TriggerFrame Rx Sup */ 134*4882a593Smuzhiyun #define HE_MAC_NONAX_TFRX_SUPPORT_FSZ 1 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun /* bit position and field width */ 137*4882a593Smuzhiyun #define HE_SU_PPDU_FORMAT_IDX 0 138*4882a593Smuzhiyun #define HE_SU_PPDU_FORMAT_FSZ 1 139*4882a593Smuzhiyun #define HE_SU_PPDU_BEAM_CHANGE_IDX 1 140*4882a593Smuzhiyun #define HE_SU_PPDU_BEAM_CHANGE_FSZ 1 141*4882a593Smuzhiyun #define HE_SU_PPDU_DL_UL_IDX 2 142*4882a593Smuzhiyun #define HE_SU_PPDU_DL_UL_FSZ 1 143*4882a593Smuzhiyun #define HE_SU_PPDU_MCS_IDX 3 144*4882a593Smuzhiyun #define HE_SU_PPDU_MCS_FSZ 4 145*4882a593Smuzhiyun #define HE_SU_PPDU_DCM_IDX 7 146*4882a593Smuzhiyun #define HE_SU_PPDU_DCM_FSZ 1 147*4882a593Smuzhiyun #define HE_SU_PPDU_BSS_COLOR_IDX 8 148*4882a593Smuzhiyun #define HE_SU_PPDU_BSS_COLOR_FSZ 6 149*4882a593Smuzhiyun #define HE_SU_PPDU_SR_IDX 15 150*4882a593Smuzhiyun #define HE_SU_PPDU_SR_FSZ 4 151*4882a593Smuzhiyun #define HE_SU_PPDU_BW_IDX 19 152*4882a593Smuzhiyun #define HE_SU_PPDU_BW_FSZ 2 153*4882a593Smuzhiyun #define HE_SU_PPDU_LTF_IDX 21 154*4882a593Smuzhiyun #define HE_SU_PPDU_LTF_FSZ 2 155*4882a593Smuzhiyun #define HE_SU_PPDU_NSTS_IDX 23 156*4882a593Smuzhiyun #define HE_SU_PPDU_NSTS_FSZ 3 157*4882a593Smuzhiyun #define HE_SU_PPDU_TXOP_IDX 26 158*4882a593Smuzhiyun #define HE_SU_PPDU_TXOP_FSZ 7 159*4882a593Smuzhiyun #define HE_SU_PPDU_CODING_IDX 33 160*4882a593Smuzhiyun #define HE_SU_PPDU_CODING_FSZ 1 161*4882a593Smuzhiyun #define HE_SU_PPDU_LDPC_IDX 34 162*4882a593Smuzhiyun #define HE_SU_PPDU_LDPC_FSZ 1 163*4882a593Smuzhiyun #define HE_SU_PPDU_STBC_IDX 35 164*4882a593Smuzhiyun #define HE_SU_PPDU_STBC_FSZ 1 165*4882a593Smuzhiyun #define HE_SU_PPDU_TXBF_IDX 36 166*4882a593Smuzhiyun #define HE_SU_PPDU_TXBF_FSZ 1 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun /* HT Control Field: (Table 9-9a) */ 169*4882a593Smuzhiyun #define HTC_HE_VARIANT 0x3F 170*4882a593Smuzhiyun /* HT Control IDs: (Table 9-18a) */ 171*4882a593Smuzhiyun #define HTC_HE_CTLID_SHIFT 0x2 172*4882a593Smuzhiyun #define HTC_HE_CTLID_TRS 0x0 173*4882a593Smuzhiyun #define HTC_HE_CTLID_OMI 0x1 174*4882a593Smuzhiyun #define HTC_HE_CTLID_HLA 0x2 175*4882a593Smuzhiyun #define HTC_HE_CTLID_BSR 0x3 176*4882a593Smuzhiyun #define HTC_HE_CTLID_UPH 0x4 177*4882a593Smuzhiyun #define HTC_HE_CTLID_BQR 0x5 178*4882a593Smuzhiyun #define HTC_HE_CTLID_CAS 0x6 179*4882a593Smuzhiyun #define HTC_HE_CTLID_NONE 0xF 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun #define HE_LTF_1_GI_1_6us (0) 182*4882a593Smuzhiyun #define HE_LTF_2_GI_0_8us (1) 183*4882a593Smuzhiyun #define HE_LTF_2_GI_1_6us (2) 184*4882a593Smuzhiyun #define HE_LTF_4_GI_3_2us (3) 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun /* max. # of spacial streams */ 187*4882a593Smuzhiyun #define HE_CAP_MCS_MAP_NSS_MAX 8 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun /* HE PHY Capabilities Information field (figure 9-589cl) */ 190*4882a593Smuzhiyun #define HE_PHY_CAP_INFO_SIZE 11 191*4882a593Smuzhiyun typedef uint8 he_phy_cap_t[HE_PHY_CAP_INFO_SIZE]; 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun /* PHY Ccapabilites for D3.0 */ 194*4882a593Smuzhiyun #define HE_PHY_RESVD1_IDX 0 /* Reserved */ 195*4882a593Smuzhiyun #define HE_PHY_RESVD1_FSZ 1 196*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_SET_IDX 1 /* Channel Width Set */ 197*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_SET_FSZ 7 198*4882a593Smuzhiyun #define HE_PHY_PREAMBLE_PUNCT_RX_IDX 8 /* Preamble Puncturing Rx */ 199*4882a593Smuzhiyun #define HE_PHY_PREAMBLE_PUNCT_RX_FSZ 4 200*4882a593Smuzhiyun #define HE_PHY_DEVICE_CLASS_IDX 12 /* Device Class */ 201*4882a593Smuzhiyun #define HE_PHY_DEVICE_CLASS_FSZ 1 202*4882a593Smuzhiyun #define HE_PHY_LDPC_PYLD_IDX 13 /* LDPC Coding In Payload */ 203*4882a593Smuzhiyun #define HE_PHY_LDPC_PYLD_FSZ 1 204*4882a593Smuzhiyun #define HE_PHY_SU_PPDU_1x_LTF_0_8_GI_IDX 14 /* SU PPDU 1x LTF GI 0.8 us */ 205*4882a593Smuzhiyun #define HE_PHY_SU_PPDU_1x_LTF_0_8_GI_FSZ 1 206*4882a593Smuzhiyun #define HE_PHY_MIDAMBLE_RX_MAX_NSTS_IDX 15 /* Midamble Tx/Rx Max NSTS */ 207*4882a593Smuzhiyun #define HE_PHY_MIDAMBLE_RX_MAX_NSTS_FSZ 2 208*4882a593Smuzhiyun #define HE_PHY_NDP_4x_LTF_3_2_GI_RX_IDX 17 /* NDP with 4xLTF 3.2us GI Rx */ 209*4882a593Smuzhiyun #define HE_PHY_NDP_4x_LTF_3_2_GI_RX_FSZ 1 210*4882a593Smuzhiyun #define HE_PHY_STBC_TX_LESS_EQ_80_IDX 18 /* STBC Tx <= 80 MHz */ 211*4882a593Smuzhiyun #define HE_PHY_STBC_TX_LESS_EQ_80_FSZ 1 212*4882a593Smuzhiyun #define HE_PHY_STBC_RX_LESS_EQ_80_IDX 19 /* STBC Rx <= 80 MHz */ 213*4882a593Smuzhiyun #define HE_PHY_STBC_RX_LESS_EQ_80_FSZ 1 214*4882a593Smuzhiyun #define HE_PHY_DOPPLER_TX_IDX 20 /* Doppler Tx */ 215*4882a593Smuzhiyun #define HE_PHY_DOPPLER_TX_FSZ 1 216*4882a593Smuzhiyun #define HE_PHY_DOPPLER_RX_IDX 21 /* Doppler Rx */ 217*4882a593Smuzhiyun #define HE_PHY_DOPPLER_RX_FSZ 1 218*4882a593Smuzhiyun #define HE_PHY_FULL_BW_UL_MU_IDX 22 /* Full bandwidth UL MU */ 219*4882a593Smuzhiyun #define HE_PHY_FULL_BW_UL_MU_FSZ 1 220*4882a593Smuzhiyun #define HE_PHY_PART_BW_UL_MU_IDX 23 /* Partial bandwidth UL MU */ 221*4882a593Smuzhiyun #define HE_PHY_PART_BW_UL_MU_FSZ 1 222*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_CONST_TX_IDX 24 /* DCM Max constellation */ 223*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_CONST_TX_FSZ 2 224*4882a593Smuzhiyun #define HE_PHY_DCM_NSS_TX_IDX 26 /* DCM Encoding Tx */ 225*4882a593Smuzhiyun #define HE_PHY_DCM_NSS_TX_FSZ 1 226*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_CONST_RX_IDX 27 /* DCM Max constellation */ 227*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_CONST_RX_FSZ 2 228*4882a593Smuzhiyun #define HE_PHY_DCM_NSS_RX_IDX 29 /* DCM Encoding Rx */ 229*4882a593Smuzhiyun #define HE_PHY_DCM_NSS_RX_FSZ 1 230*4882a593Smuzhiyun #define HE_PHY_RX_MUPPDU_NON_AP_STA_IDX 30 /* Rx HE MMPDUE from Non-AP */ 231*4882a593Smuzhiyun #define HE_PHY_RX_MUPPDU_NON_AP_STA_FSZ 1 232*4882a593Smuzhiyun #define HE_PHY_SU_BEAMFORMER_IDX 31 /* SU Beamformer */ 233*4882a593Smuzhiyun #define HE_PHY_SU_BEAMFORMER_FSZ 1 234*4882a593Smuzhiyun #define HE_PHY_SU_BEAMFORMEE_IDX 32 /* SU Beamformee */ 235*4882a593Smuzhiyun #define HE_PHY_SU_BEAMFORMEE_FSZ 1 236*4882a593Smuzhiyun #define HE_PHY_MU_BEAMFORMER_IDX 33 /* MU Beamformer */ 237*4882a593Smuzhiyun #define HE_PHY_MU_BEAMFORMER_FSZ 1 238*4882a593Smuzhiyun #define HE_PHY_BEAMFORMEE_STS_BELOW80MHZ_IDX 34 /* Beamformee STS For <= 80MHz */ 239*4882a593Smuzhiyun #define HE_PHY_BEAMFORMEE_STS_BELOW80MHZ_FSZ 3 240*4882a593Smuzhiyun #define HE_PHY_BEAMFORMEE_STS_ABOVE80MHZ_IDX 37 /* Beamformee STS For >80 MHz */ 241*4882a593Smuzhiyun #define HE_PHY_BEAMFORMEE_STS_ABOVE80MHZ_FSZ 3 242*4882a593Smuzhiyun #define HE_PHY_SOUND_DIM_BELOW80MHZ_IDX 40 /* Num. Sounding Dim.<= 80 MHz */ 243*4882a593Smuzhiyun #define HE_PHY_SOUND_DIM_BELOW80MHZ_FSZ 3 244*4882a593Smuzhiyun #define HE_PHY_SOUND_DIM_ABOVE80MHZ_IDX 43 /* Num. Sounding Dim.> 80 MHz */ 245*4882a593Smuzhiyun #define HE_PHY_SOUND_DIM_ABOVE80MHZ_FSZ 3 246*4882a593Smuzhiyun #define HE_PHY_SU_FEEDBACK_NG16_SUPPORT_IDX 46 /* Ng=16 For SU Feedback */ 247*4882a593Smuzhiyun #define HE_PHY_SU_FEEDBACK_NG16_SUPPORT_FSZ 1 248*4882a593Smuzhiyun #define HE_PHY_MU_FEEDBACK_NG16_SUPPORT_IDX 47 /* Ng=16 For MU Feedback */ 249*4882a593Smuzhiyun #define HE_PHY_MU_FEEDBACK_NG16_SUPPORT_FSZ 1 250*4882a593Smuzhiyun #define HE_PHY_SU_CODEBOOK_SUPPORT_IDX 48 /* Codebook Sz {4, 2} For SU */ 251*4882a593Smuzhiyun #define HE_PHY_SU_CODEBOOK_SUPPORT_FSZ 1 252*4882a593Smuzhiyun #define HE_PHY_MU_CODEBOOK_SUPPORT_IDX 49 /* Codebook Size {7, 5} For MU */ 253*4882a593Smuzhiyun #define HE_PHY_MU_CODEBOOK_SUPPORT_FSZ 1 254*4882a593Smuzhiyun #define HE_PHY_TRG_SU_BFM_FEEDBACK_IDX 50 /* Triggered SU TXBF Feedback */ 255*4882a593Smuzhiyun #define HE_PHY_TRG_SU_BFM_FEEDBACK_FSZ 1 256*4882a593Smuzhiyun #define HE_PHY_TRG_MU_BFM_FEEDBACK_IDX 51 /* Triggered MU TXBF Feedback */ 257*4882a593Smuzhiyun #define HE_PHY_TRG_MU_BFM_FEEDBACK_FSZ 1 258*4882a593Smuzhiyun #define HE_PHY_TRG_CQI_FEEDBACK_IDX 52 /* Triggered CQI Feedback */ 259*4882a593Smuzhiyun #define HE_PHY_TRG_CQI_FEEDBACK_FSZ 1 260*4882a593Smuzhiyun #define HE_PHY_EXT_RANGE_SU_PYLD_IDX 53 /* HE ER SU PPDU Payload */ 261*4882a593Smuzhiyun #define HE_PHY_EXT_RANGE_SU_PYLD_FSZ 1 262*4882a593Smuzhiyun #define HE_PHY_DL_MU_MIMO_PART_BW_IDX 54 /* DL MUMIMO On Partial BW */ 263*4882a593Smuzhiyun #define HE_PHY_DL_MU_MIMO_PART_BW_FSZ 1 264*4882a593Smuzhiyun #define HE_PHY_PPE_THRESH_PRESENT_IDX 55 /* PPE Threshold Present */ 265*4882a593Smuzhiyun #define HE_PHY_PPE_THRESH_PRESENT_FSZ 1 266*4882a593Smuzhiyun #define HE_PHY_SRP_SR_SUPPORT_IDX 56 /* SRP based SR Support */ 267*4882a593Smuzhiyun #define HE_PHY_SRP_SR_SUPPORT_FSZ 1 268*4882a593Smuzhiyun #define HE_PHY_POWER_BOOST_FACTOR_IDX 57 /* Power Boost Factor Support */ 269*4882a593Smuzhiyun #define HE_PHY_POWER_BOOST_FACTOR_FSZ 1 270*4882a593Smuzhiyun #define HE_PHY_LONG_LTF_SHORT_GI_SU_PPDU_IDX 58 /* HE SU - Long LTF Short GI */ 271*4882a593Smuzhiyun #define HE_PHY_LONG_LTF_SHORT_GI_SU_PPDU_FSZ 1 272*4882a593Smuzhiyun #define HE_PHY_MAX_NC_IDX 59 /* Max Nc */ 273*4882a593Smuzhiyun #define HE_PHY_MAX_NC_FSZ 3 274*4882a593Smuzhiyun #define HE_PHY_STBC_GT80_TX_IDX 62 /* STBC Tx > 80 MHz */ 275*4882a593Smuzhiyun #define HE_PHY_STBC_GT80_TX_FSZ 1 276*4882a593Smuzhiyun #define HE_PHY_STBC_GT80_RX_IDX 63 /* STBC Rx > 80 MHz */ 277*4882a593Smuzhiyun #define HE_PHY_STBC_GT80_RX_FSZ 1 278*4882a593Smuzhiyun #define HE_PHY_HE_ER_SU_PPDU_4X_RX_IDX 64 /* HEERSUPPDU With 4x HE-LTF & 0.8 GI */ 279*4882a593Smuzhiyun #define HE_PHY_HE_ER_SU_PPDU_4X_RX_FSZ 1 280*4882a593Smuzhiyun #define HE_PHY_20_40_HE_PPDU_IDX 65 /* 20MHz In 40MHz HEPPDU In 2.4GHz Band */ 281*4882a593Smuzhiyun #define HE_PHY_20_40_HE_PPDU_FSZ 1 282*4882a593Smuzhiyun #define HE_PHY_20_160_HE_PPDU_IDX 66 /* 20MHz In 160/80+80MHz HEPPDU */ 283*4882a593Smuzhiyun #define HE_PHY_20_160_HE_PPDU_FSZ 1 284*4882a593Smuzhiyun #define HE_PHY_80_160_HE_PPDU_IDX 67 /* 80MHz In 160/80+80MHz HEPPDU */ 285*4882a593Smuzhiyun #define HE_PHY_80_160_HE_PPDU_FSZ 1 286*4882a593Smuzhiyun #define HE_PHY_HE_ER_SU_PPDU_IDX 68 /* HEERSUPPDU With 1x HE-LTF & 0.8 GI */ 287*4882a593Smuzhiyun #define HE_PHY_HE_ER_SU_PPDU_FSZ 1 288*4882a593Smuzhiyun #define HE_PHY_MIDAMBLE_TX_RX_2X_1X_HE_LTF_IDX 69 /* Midamble RX 2x & 1x HE LTF */ 289*4882a593Smuzhiyun #define HE_PHY_MIDAMBLE_TX_RX_2X_1X_HE_LTF_FSZ 1 290*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_BW_IDX 70 /* DCM Max BW */ 291*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_BW_FSZ 2 292*4882a593Smuzhiyun #define HE_PHY_SIGB_SYM_GT16_RX_SUPPORT_IDX 72 /* Greater than 16 HESIG-B OFDM Symb Sup */ 293*4882a593Smuzhiyun #define HE_PHY_SIGB_SYM_GT16_RX_SUPPORT_FSZ 1 294*4882a593Smuzhiyun #define HE_PHY_NON_TRIG_CQI_FEEDBACK_IDX 73 /* Non- Triggered CQI Feedback */ 295*4882a593Smuzhiyun #define HE_PHY_NON_TRIG_CQI_FEEDBACK_FSZ 1 296*4882a593Smuzhiyun #define HE_PHY_1024QAM_TX_IN_RU_LT242_IDX 74 /* Tx 1024-QAM < 242-tone RU Support */ 297*4882a593Smuzhiyun #define HE_PHY_1024QAM_TX_IN_RU_LT242_FSZ 1 298*4882a593Smuzhiyun #define HE_PHY_1024QAM_RX_IN_RU_LT242_IDX 75 /* Rx 1024-QAM < 242-tone RU Support */ 299*4882a593Smuzhiyun #define HE_PHY_1024QAM_RX_IN_RU_LT242_FSZ 1 300*4882a593Smuzhiyun #define HE_PHY_RX_HE_MU_COMPR_SIGB_IDX 76 /* RxFull BWSU HEMUPPDU Wt CompSIGB */ 301*4882a593Smuzhiyun #define HE_PHY_RX_HE_MU_COMPR_SIGB_FSZ 1 302*4882a593Smuzhiyun #define HE_PHY_RX_HE_MU_NCOMP_SIGB_IDX 77 /* RxFull BWSU HEMUPPDU wt NCompSIGB */ 303*4882a593Smuzhiyun #define HE_PHY_RX_HE_MU_NCOMP_SIGB_FSZ 1 304*4882a593Smuzhiyun #define HE_PHY_RESVD2_IDX 78 /* Reserved */ 305*4882a593Smuzhiyun #define HE_PHY_RESVD2_FSZ 10 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun /* DCM */ 308*4882a593Smuzhiyun #define HE_PHY_CAP_DCM_NOT_SUPP 0x0 309*4882a593Smuzhiyun #define HE_PHY_CAP_DCM_BPSK 0x1 310*4882a593Smuzhiyun #define HE_PHY_CAP_DCM_QPSK 0x2 311*4882a593Smuzhiyun #define HE_PHY_CAP_DCM_16_QAM 0x3 312*4882a593Smuzhiyun #define HE_PHY_CAP_DCM_1SS 0x0 313*4882a593Smuzhiyun #define HE_PHY_CAP_DCM_2SS 0x1 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun /* HE Mac Capabilities values */ 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun /* b3-b4: Fragmentation Support field (table 9-262z) */ 318*4882a593Smuzhiyun #define HE_MAC_FRAG_NOSUPPORT 0 /* dynamic frag not supported */ 319*4882a593Smuzhiyun #define HE_MAC_FRAG_VHT_MPDU 1 /* Frag support for VHT single MPDU only */ 320*4882a593Smuzhiyun #define HE_MAC_FRAG_ONE_PER_AMPDU 2 /* 1 frag per MPDU in A-MPDU */ 321*4882a593Smuzhiyun #define HE_MAC_FRAG_MULTI_PER_AMPDU 3 /* 2+ frag per MPDU in A-MPDU */ 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun /* b8-b9: Minimum payload size of first fragment */ 324*4882a593Smuzhiyun /* no restriction on min. payload size */ 325*4882a593Smuzhiyun #define HE_MAC_MINFRAG_NO_RESTRICT 0 326*4882a593Smuzhiyun /* minimum payload size of 128 Bytes */ 327*4882a593Smuzhiyun #define HE_MAC_MINFRAG_SIZE_128 1 328*4882a593Smuzhiyun /* minimum payload size of 256 Bytes */ 329*4882a593Smuzhiyun #define HE_MAC_MINFRAG_SIZE_256 2 330*4882a593Smuzhiyun /* minimum payload size of 512 Bytes */ 331*4882a593Smuzhiyun #define HE_MAC_MINFRAG_SIZE_512 3 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun /* b15-b16: HE Link Adaptation */ 334*4882a593Smuzhiyun #define HE_MAC_SEND_NO_MFB 0 /* if STA does not provide HE MFB */ 335*4882a593Smuzhiyun #define HE_MAC_SEND_UNSOLICATED_MFB 2 /* if STA provides unsolicited HE MFB */ 336*4882a593Smuzhiyun #define HE_MAC_SEND_MFB_IN_RESPONSE 3 /* if STA can provide HE MFB in response to 337*4882a593Smuzhiyun * HE MRQ and if the STA provides unsolicited HE MFB. 338*4882a593Smuzhiyun */ 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun /* b27-b28: Max. AMPDU Length HE Exponent */ 341*4882a593Smuzhiyun /* Use Max AMPDU length exponent from VHT or HT */ 342*4882a593Smuzhiyun #define HE_MAC_MAX_AMPDU_EXP_ADOPT_VHT (0) 343*4882a593Smuzhiyun /* Max. AMPDU length = 344*4882a593Smuzhiyun * 2^(20 + MAX_AMPDU_LEN_HE_EXPO_1) -1 (if this value in VHT CAP is 7) or 345*4882a593Smuzhiyun * 2^(16 + MAX_AMPDU_LEN_HE_EXPO_1) -1 (if this value in HT CAP is 7). 346*4882a593Smuzhiyun */ 347*4882a593Smuzhiyun #define HE_MAC_MAX_AMPDU_EXP_HE_1 (1) 348*4882a593Smuzhiyun /* Max. AMPDU length = 349*4882a593Smuzhiyun * 2^(20 + MAX_AMPDU_LEN_HE_EXPO_2) -1 (if this value in VHT CAP is 7) or 350*4882a593Smuzhiyun * 2^(16 + MAX_AMPDU_LEN_HE_EXPO_2) -1 (if this value in HT CAP is 7). 351*4882a593Smuzhiyun */ 352*4882a593Smuzhiyun #define HE_MAC_MAX_AMPDU_EXP_HE_2 (2) 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun /* HE PHY Capabilities values */ 355*4882a593Smuzhiyun /* b1-b7: Channel Width Support field */ 356*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_2G_40 0x01 357*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_5G_80 0x02 358*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_5G_160 0x04 359*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_5G_80P80 0x08 360*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_2G_40_RU 0x10 361*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_5G_242_RU 0x20 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun /* b8-b11: Preamble puncturing Rx */ 364*4882a593Smuzhiyun #define HE_PHY_PREAMBLE_PUNC_RX_0 0x1 365*4882a593Smuzhiyun #define HE_PHY_PREAMBLE_PUNC_RX_1 0x2 366*4882a593Smuzhiyun #define HE_PHY_PREAMBLE_PUNC_RX_2 0x4 367*4882a593Smuzhiyun #define HE_PHY_PREAMBLE_PUNC_RX_3 0x8 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun /* b24-b29: DCM Encoding at Tx and Rx */ 370*4882a593Smuzhiyun #define HE_PHY_TX_DCM_ENC_NOSUPPORT 0x00 371*4882a593Smuzhiyun #define HE_PHY_TX_DCM_ENC_BPSK 0x01 372*4882a593Smuzhiyun #define HE_PHY_TX_DCM_ENC_QPSK 0x02 373*4882a593Smuzhiyun #define HE_PHY_TX_DCM_ENC_QAM 0x03 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun #define HE_PHY_TX_DCM_1_SS 0x00 376*4882a593Smuzhiyun #define HE_PHY_TX_DCM_2_SS 0x04 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun #define HE_PHY_RX_DCM_ENC_NOSUPPORT 0x00 379*4882a593Smuzhiyun #define HE_PHY_RX_DCM_ENC_BPSK 0x08 380*4882a593Smuzhiyun #define HE_PHY_RX_DCM_ENC_QPSK 0x10 381*4882a593Smuzhiyun #define HE_PHY_RX_DCM_ENC_QAM 0x18 382*4882a593Smuzhiyun 383*4882a593Smuzhiyun #define HE_PHY_RX_DCM_1_SS 0x00 384*4882a593Smuzhiyun #define HE_PHY_RX_DCM_2_SS 0x20 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun /* HE Duration based RTS Threshold IEEE Draft P802.11ax D1.0 Figure 9-589cr */ 387*4882a593Smuzhiyun #define HE_RTS_THRES_DISABLED 1023 388*4882a593Smuzhiyun #define HE_RTS_THRES_ALL_FRAMES 0 389*4882a593Smuzhiyun #define HE_RTS_THRES_MASK 0x03ff 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun /* Tx Rx HE MCS Support field format : IEEE Draft P802.11ax D0.5 Table 9-589cm */ 392*4882a593Smuzhiyun #define HE_TX_RX_MCS_NSS_SUP_FIELD_MIN_SIZE 2 /* 2 bytes (16 bits) */ 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun /* Fixed portion of the support field */ 395*4882a593Smuzhiyun #define HE_MCS_NSS_MAX_NSS_M1_IDX 0 396*4882a593Smuzhiyun #define HE_MCS_NSS_MAX_NSS_M1_SZ 3 397*4882a593Smuzhiyun #define HE_MCS_NSS_MAX_MCS_IDX 3 398*4882a593Smuzhiyun #define HE_MCS_NSS_MAX_MCS_SZ 3 399*4882a593Smuzhiyun #define HE_MCS_NSS_TX_BW_BMP_IDX 6 400*4882a593Smuzhiyun #define HE_MCS_NSS_TX_BW_BMP_SZ 5 401*4882a593Smuzhiyun #define HE_MCS_NSS_RX_BW_BMP_IDX 11 402*4882a593Smuzhiyun #define HE_MCS_NSS_RX_BW_BMP_SZ 5 403*4882a593Smuzhiyun 404*4882a593Smuzhiyun #define HE_CAP_MASK(idx, sz) (((1 << sz) - 1) << idx) 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun /* Descriptor format IEEE Draft P802.11ax_D1.1 Figure 9-589cn */ 407*4882a593Smuzhiyun #define HE_MCS_DESC_IDX 0 408*4882a593Smuzhiyun #define HE_MCS_DESC_SZ 4 409*4882a593Smuzhiyun #define HE_NSS_DESC_IDX 4 410*4882a593Smuzhiyun #define HE_NSS_DESC_SZ 3 411*4882a593Smuzhiyun #define HE_LAST_DESC_IDX 7 412*4882a593Smuzhiyun #define HE_LAST_DESC_SZ 1 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun #define HE_GET_DESC_MCS(desc) ((*((const uint8 *)desc) &\ 415*4882a593Smuzhiyun HE_CAP_MASK(HE_MCS_DESC_IDX, HE_MCS_DESC_SZ))\ 416*4882a593Smuzhiyun >> HE_MCS_DESC_IDX) 417*4882a593Smuzhiyun #define HE_GET_DESC_NSS(desc) ((*((const uint8 *)desc) &\ 418*4882a593Smuzhiyun HE_CAP_MASK(HE_NSS_DESC_IDX, HE_NSS_DESC_SZ))\ 419*4882a593Smuzhiyun >> HE_NSS_DESC_IDX) 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun /** 422*4882a593Smuzhiyun * Bandwidth configuration indices used in the HE TX-RX MCS support field 423*4882a593Smuzhiyun * IEEE Draft P802.11ax_D1.1 Section 9.4.2.218.4 424*4882a593Smuzhiyun */ 425*4882a593Smuzhiyun #define HE_BW20_CFG_IDX 0 426*4882a593Smuzhiyun #define HE_BW40_CFG_IDX 1 427*4882a593Smuzhiyun #define HE_BW80_CFG_IDX 2 428*4882a593Smuzhiyun #define HE_BW80P80_CFG_IDX 3 429*4882a593Smuzhiyun #define HE_BW160_CFG_IDX 4 430*4882a593Smuzhiyun #define HE_MAX_BW_CFG 5 431*4882a593Smuzhiyun 432*4882a593Smuzhiyun #define HE_MCS_CODE_0_7 0u 433*4882a593Smuzhiyun #define HE_MCS_CODE_0_9 1u 434*4882a593Smuzhiyun #define HE_MCS_CODE_0_11 2u 435*4882a593Smuzhiyun #define HE_MCS_CODE_NONE 3u 436*4882a593Smuzhiyun #define HE_MCS_CODE_SIZE 2u /* num bits */ 437*4882a593Smuzhiyun #define HE_MCS_CODE_MASK 0x3u /* mask for 1-stream */ 438*4882a593Smuzhiyun 439*4882a593Smuzhiyun /* Defines for The Max HE MCS For n SS subfield (where n = 1, ..., 8) */ 440*4882a593Smuzhiyun #define HE_MCS_MAP_NSS_MAX 8u /* Max number of streams possible */ 441*4882a593Smuzhiyun #define HE_MCS_NSS_SET_MASK 0xffffu /* Field is to be 16 bits long */ 442*4882a593Smuzhiyun #define HE_MCS_NSS_GET_SS_IDX(nss) (((nss)-1u) * HE_MCS_CODE_SIZE) 443*4882a593Smuzhiyun #define HE_MCS_NSS_GET_MCS(nss, mcs_nss_map) \ 444*4882a593Smuzhiyun (((mcs_nss_map) >> HE_MCS_NSS_GET_SS_IDX(nss)) & HE_MCS_CODE_MASK) 445*4882a593Smuzhiyun #define HE_MCS_NSS_SET_MCS(nss, mcs_code, mcs_nss_map) \ 446*4882a593Smuzhiyun do { \ 447*4882a593Smuzhiyun (mcs_nss_map) &= (~(HE_MCS_CODE_MASK << HE_MCS_NSS_GET_SS_IDX(nss))); \ 448*4882a593Smuzhiyun (mcs_nss_map) |= (((mcs_code) & HE_MCS_CODE_MASK) \ 449*4882a593Smuzhiyun << HE_MCS_NSS_GET_SS_IDX(nss)); \ 450*4882a593Smuzhiyun (mcs_nss_map) &= (HE_MCS_NSS_SET_MASK); \ 451*4882a593Smuzhiyun } while (0) 452*4882a593Smuzhiyun 453*4882a593Smuzhiyun #define HE_BW80_ORDR_IDX 0u 454*4882a593Smuzhiyun #define HE_BW160_ORDR_IDX 1u 455*4882a593Smuzhiyun #define HE_BW80P80_ORDR_IDX 2u 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_UNIT_MAP_LEN 2u /* 2 bytes */ 458*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_UNIT_MAP_SZ (HE_MCS_NSS_SUP_FLD_UNIT_MAP_LEN * 8u) /* 16 bits */ 459*4882a593Smuzhiyun 460*4882a593Smuzhiyun /* Two unit-maps (TX+RX) */ 461*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_TXRX_MAP_LEN (HE_MCS_NSS_SUP_FLD_UNIT_MAP_LEN * 2u) 462*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_TXRX_MAP_SZ (HE_MCS_NSS_SUP_FLD_TXRX_MAP_LEN * 8u) /* 32 bits */ 463*4882a593Smuzhiyun 464*4882a593Smuzhiyun /* One TX-RX unit-map (80 MHz) */ 465*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_MIN_LEN (HE_MCS_NSS_SUP_FLD_TXRX_MAP_LEN) 466*4882a593Smuzhiyun /* Three TX-RX unit-maps (80 MHz, 160MHz, 80+80MHz) */ 467*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_MAX_LEN (HE_MCS_NSS_SUP_FLD_TXRX_MAP_LEN * 3u) 468*4882a593Smuzhiyun 469*4882a593Smuzhiyun /* HE Capabilities element */ 470*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_cap_ie { 471*4882a593Smuzhiyun uint8 id; 472*4882a593Smuzhiyun uint8 len; 473*4882a593Smuzhiyun uint8 id_ext; 474*4882a593Smuzhiyun he_mac_cap_t mac_cap; /* MAC Capabilities Information */ 475*4882a593Smuzhiyun he_phy_cap_t phy_cap; /* PHY Capabilities Information */ 476*4882a593Smuzhiyun /* he_tx_rx_mcs_nss_sup_t txx_rx_mcs_nss_sup; */ /* Tx Rx HE MCS NSS Support (variable) */ 477*4882a593Smuzhiyun /* he_ppe_ths_t ppe_ths; */ /* PPE Thresholds (optional) */ 478*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 479*4882a593Smuzhiyun 480*4882a593Smuzhiyun typedef struct he_cap_ie he_cap_ie_t; 481*4882a593Smuzhiyun 482*4882a593Smuzhiyun /* Multiple BSSID element */ 483*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct nontrans_BSSID_cap { 484*4882a593Smuzhiyun uint8 id; /* 83 */ 485*4882a593Smuzhiyun uint8 len; 486*4882a593Smuzhiyun uint16 capability; 487*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun typedef struct nontrans_BSSID_cap nontrans_BSSID_cap_t; 490*4882a593Smuzhiyun 491*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct multi_BSSID_index { 492*4882a593Smuzhiyun uint8 id; /* 85 */ 493*4882a593Smuzhiyun uint8 len; /* 3 in beacon, 1 in probe response */ 494*4882a593Smuzhiyun uint8 bssid_index; /* between 1 and 2^n - 1 */ 495*4882a593Smuzhiyun uint8 dtim_period; /* only valid in beacon */ 496*4882a593Smuzhiyun uint8 dtim_count; /* only valid in beacon */ 497*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun typedef struct multi_BSSID_index multi_BSSID_index_t; 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct fms_descriptor { 502*4882a593Smuzhiyun uint8 id; /* 86 */ 503*4882a593Smuzhiyun uint8 len; 504*4882a593Smuzhiyun uint8 num_FMS_counters; 505*4882a593Smuzhiyun uint8 *FMS_counters; 506*4882a593Smuzhiyun uint8 *FMSID; 507*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun typedef struct fms_descriptor fms_descriptor_t; 510*4882a593Smuzhiyun 511*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct nontrans_BSSID_profile_subie { 512*4882a593Smuzhiyun uint8 subie_id; /* 0 */ 513*4882a593Smuzhiyun uint8 subie_len; 514*4882a593Smuzhiyun uint8 moreie[1]; 515*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun typedef struct nontrans_BSSID_profile_subie nontrans_BSSID_profile_subie_t; 518*4882a593Smuzhiyun 519*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct multi_BSSID_ie { 520*4882a593Smuzhiyun uint8 id; 521*4882a593Smuzhiyun uint8 len; 522*4882a593Smuzhiyun uint8 maxBSSID_indicator; 523*4882a593Smuzhiyun nontrans_BSSID_profile_subie_t profile[1]; 524*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 525*4882a593Smuzhiyun 526*4882a593Smuzhiyun typedef struct multi_BSSID_ie multi_BSSID_ie_t; 527*4882a593Smuzhiyun #define DOT11_MULTIPLE_BSSID_PROFILE_SUBID 0 528*4882a593Smuzhiyun 529*4882a593Smuzhiyun /* IEEE Draft P802.11ax D0.5 Table 9-262ab, Highest MCS Supported subfield encoding */ 530*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_0_7 0 531*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_0_8 1 532*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_0_9 2 533*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_0_10 3 534*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_0_11 4 535*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_SIZE 3 /* num bits for 1-stream */ 536*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_MASK 0x7 /* mask for 1-stream */ 537*4882a593Smuzhiyun 538*4882a593Smuzhiyun /** 539*4882a593Smuzhiyun * IEEE Draft P802.11ax D0.5 Figure 9-589cm 540*4882a593Smuzhiyun * - Defines for TX & RX BW BITMAP 541*4882a593Smuzhiyun * 542*4882a593Smuzhiyun * (Size of TX BW bitmap = RX BW bitmap = 5 bits) 543*4882a593Smuzhiyun */ 544*4882a593Smuzhiyun #define HE_MCS_NSS_TX_BW_MASK 0x07c0 545*4882a593Smuzhiyun #define HE_MCS_NSS_TX_BW_SHIFT 6 546*4882a593Smuzhiyun 547*4882a593Smuzhiyun #define HE_MCS_NSS_RX_BW_MASK 0xf800 548*4882a593Smuzhiyun #define HE_MCS_NSS_RX_BW_SHIFT 11 549*4882a593Smuzhiyun 550*4882a593Smuzhiyun #define HE_CAP_MCS_MAP_NSS_MAX 8 /* Max number of streams possible */ 551*4882a593Smuzhiyun 552*4882a593Smuzhiyun #define HE_MAX_RU_COUNT 4 /* Max number of RU allocation possible */ 553*4882a593Smuzhiyun 554*4882a593Smuzhiyun #define HE_NSSM1_IDX 0 /* Offset of NSSM1 field */ 555*4882a593Smuzhiyun #define HE_NSSM1_LEN 3 /* length of NSSM1 field in bits */ 556*4882a593Smuzhiyun 557*4882a593Smuzhiyun #define HE_RU_INDEX_MASK_IDX 3 /* Offset of RU index mask field */ 558*4882a593Smuzhiyun #define HE_RU_INDEX_MASK_LEN 4 /* length of RU Index mask field in bits */ 559*4882a593Smuzhiyun 560*4882a593Smuzhiyun /* MU EDCA parameter set element */ 561*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_mu_ac_param_record { 562*4882a593Smuzhiyun uint8 aci_aifsn; 563*4882a593Smuzhiyun uint8 ecw_min_max; 564*4882a593Smuzhiyun uint8 muedca_timer; 565*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun typedef struct he_mu_ac_param_record he_mu_ac_param_record_t; 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_muedca_ie { 570*4882a593Smuzhiyun uint8 id; 571*4882a593Smuzhiyun uint8 len; 572*4882a593Smuzhiyun uint8 id_ext; 573*4882a593Smuzhiyun uint8 mu_qos_info; 574*4882a593Smuzhiyun he_mu_ac_param_record_t param_ac[AC_COUNT]; 575*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 576*4882a593Smuzhiyun 577*4882a593Smuzhiyun typedef struct he_muedca_ie he_muedca_ie_t; 578*4882a593Smuzhiyun 579*4882a593Smuzhiyun #define HE_MU_EDCA_PARAM_UPD_CNT_IDX 0u /* EDCA Parameter Set Update Count */ 580*4882a593Smuzhiyun #define HE_MU_EDCA_PARAM_UPD_CNT_LEN 4u 581*4882a593Smuzhiyun 582*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_MCS_DPCU 0 583*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_SYMS_DPCU 3u 584*4882a593Smuzhiyun #define HE_MU_SIGA_GI_LTF_DPCU 3u 585*4882a593Smuzhiyun 586*4882a593Smuzhiyun /* For HE SU/RE SIG A : PLCP0 bit fields [32bit] */ 587*4882a593Smuzhiyun #define HE_SU_RE_SIGA_FORMAT_MASK 0x00000001 588*4882a593Smuzhiyun #define HE_SU_RE_SIGA_RE_VAL 0x00000000 589*4882a593Smuzhiyun #define HE_SU_RE_SIGA_SU_VAL 0x00000001 590*4882a593Smuzhiyun #define HE_SU_RE_SIGA_FORMAT_SHIFT 0 591*4882a593Smuzhiyun #define HE_SU_RE_SIGA_UL_DL_SHIFT 2 592*4882a593Smuzhiyun #define HE_SU_RE_SIGA_MCS_MASK 0x00000078 593*4882a593Smuzhiyun #define HE_SU_RE_SIGA_MCS_SHIFT 3 594*4882a593Smuzhiyun #define HE_SU_RE_SIGA_DCM_MASK 0x00000080 595*4882a593Smuzhiyun #define HE_SU_RE_SIGA_DCM_SHIFT 7 596*4882a593Smuzhiyun #define HE_SU_RE_SIGA_BSS_COLOR_SHIFT 8 /* Bits 13:8 */ 597*4882a593Smuzhiyun #define HE_SU_RE_SIGA_BSS_COLOR_MASK 0x00003F00 598*4882a593Smuzhiyun #define HE_SU_RE_SIGA_RSVD_PLCP0_VAL 0x00004000 599*4882a593Smuzhiyun #define HE_SU_SIGA_BW_MASK 0x00180000 600*4882a593Smuzhiyun #define HE_SU_SIGA_BW_SHIFT 19 601*4882a593Smuzhiyun #define HE_RE_SIGA_TONE_MASK 0x00180000 602*4882a593Smuzhiyun #define HE_RE_SIGA_TONE_SHIFT 19 603*4882a593Smuzhiyun #define HE_SU_RE_SIGA_20MHZ_VAL 0x00000000 604*4882a593Smuzhiyun #define HE_SU_RE_SIGA_40MHZ_VAL 0x00080000 605*4882a593Smuzhiyun #define HE_SU_RE_SIGA_80MHZ_VAL 0x00100000 606*4882a593Smuzhiyun #define HE_SU_RE_SIGA_160MHZ_VAL 0x00180000 607*4882a593Smuzhiyun #define HE_SU_RE_SIGA_GI_LTF_MASK 0x00600000 608*4882a593Smuzhiyun #define HE_SU_RE_SIGA_1xLTF_GI8us_VAL 0x00000000 609*4882a593Smuzhiyun #define HE_SU_RE_SIGA_2xLTF_GI8us_VAL 0x00200000 610*4882a593Smuzhiyun #define HE_SU_RE_SIGA_2xLTF_GI16us_VAL 0x00400000 611*4882a593Smuzhiyun #define HE_SU_RE_SIGA_4xLTF_GI32us_VAL 0x00600000 612*4882a593Smuzhiyun #define HE_SU_RE_SIGA_GI_LTF_SHIFT 21 613*4882a593Smuzhiyun #define HE_SU_RE_SIGA_NSTS_MASK 0x03800000 614*4882a593Smuzhiyun #define HE_SU_RE_SIGA_NSTS_SHIFT 23 615*4882a593Smuzhiyun #define HE_SU_RE_SIGA_TXOP_PLCP0_MASK 0xFC000000 616*4882a593Smuzhiyun #define HE_SU_RE_SIGA_TXOP_PLCP0_SHIFT 26 617*4882a593Smuzhiyun 618*4882a593Smuzhiyun /* For HE MU SIG A : PLCP0 bit fields [32bit] */ 619*4882a593Smuzhiyun #define HE_MU_SIGA_UL_DL_SHIFT 0 620*4882a593Smuzhiyun #define HE_MU_SIGA_UL_TB_PPDU 0 621*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_MCS_SHIFT 1 622*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_DCM_SHIFT 4 623*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_DCM_DISABLED 0 624*4882a593Smuzhiyun #define HE_MU_SIGA_BW_SHIFT 15 625*4882a593Smuzhiyun #define HE_MU_SIGA_BW_80_UNPUNCTURED 2 626*4882a593Smuzhiyun #define HE_MU_SIGA_BW_SEC_20_PUNCTURED 4 627*4882a593Smuzhiyun #define HE_MU_SIGA_BW_SEC_40_PUNCTURED 5 628*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_SYMS_SHIFT 18 629*4882a593Smuzhiyun #define HE_MU_SIGA_GI_LTF_SHIFT 23 630*4882a593Smuzhiyun 631*4882a593Smuzhiyun /* PLCP1 starts with B6 of HE SIG A 2 */ 632*4882a593Smuzhiyun 633*4882a593Smuzhiyun /* For HE SU/RE SIG A : PLCP1 bit fields [16bit] */ 634*4882a593Smuzhiyun #define HE_SU_RE_SIGA_TXOP_PLCP1_MASK 0x0001 635*4882a593Smuzhiyun #define HE_SU_RE_SIGA_TXOP_PLCP1_SHIFT 0 636*4882a593Smuzhiyun #define HE_SU_RE_SIGA_CODING_MASK 0x0002 637*4882a593Smuzhiyun #define HE_SU_RE_SIGA_CODING_SHIFT 1 638*4882a593Smuzhiyun #define HE_SU_RE_SIGA_STBC_MASK 0x0008 639*4882a593Smuzhiyun #define HE_SU_RE_SIGA_STBC_SHIFT 3 640*4882a593Smuzhiyun #define HE_SU_RE_SIGA_BEAMFORM_MASK 0x0010 641*4882a593Smuzhiyun #define HE_SU_RE_SIGA_BEAMFORM_SHIFT 4 642*4882a593Smuzhiyun #define HE_SU_RE_SIGA_RSVD_PLCP1_VAL 0x0100 643*4882a593Smuzhiyun 644*4882a593Smuzhiyun /* For HE MU SIG A : PLCP1 bit fields [16bit] */ 645*4882a593Smuzhiyun #define HE_MU_SIGA_RSVD_SHIFT 1 646*4882a593Smuzhiyun #define HE_MU_SIGA_LTF_SYMS_SHIFT 2 647*4882a593Smuzhiyun 648*4882a593Smuzhiyun /* PPE Threshold field (figure 9-589co) */ 649*4882a593Smuzhiyun #define HE_PPE_THRESH_NSS_RU_FSZ 3 650*4882a593Smuzhiyun 651*4882a593Smuzhiyun /* PPE Threshold Info field (figure 9-589cp) */ 652*4882a593Smuzhiyun /* ruc: RU Count; NSSnM1: NSSn - 1; RUmM1: RUm - 1 */ 653*4882a593Smuzhiyun /* bit offset in PPE Threshold field */ 654*4882a593Smuzhiyun #define HE_PPET16_BIT_OFFSET(ruc, NSSnM1, RUmM1) \ 655*4882a593Smuzhiyun (HE_NSSM1_LEN + HE_RU_INDEX_MASK_LEN + ((NSSnM1) * (ruc) + (RUmM1)) * 6) 656*4882a593Smuzhiyun 657*4882a593Smuzhiyun #define HE_PPET8_BIT_OFFSET(ruc, NSSnM1, RUmM1) \ 658*4882a593Smuzhiyun (HE_NSSM1_LEN + HE_RU_INDEX_MASK_LEN + ((NSSnM1) * (ruc) + (RUmM1)) * 6 + 3) 659*4882a593Smuzhiyun 660*4882a593Smuzhiyun /* Total PPE Threshold field byte length (Figure 9-589cq) */ 661*4882a593Smuzhiyun #define HE_PPE_THRESH_LEN(nss, ruc) \ 662*4882a593Smuzhiyun (CEIL((HE_NSSM1_LEN + HE_RU_INDEX_MASK_LEN + ((nss) * (ruc) * 6)), 8)) 663*4882a593Smuzhiyun 664*4882a593Smuzhiyun /* RU Allocation Index encoding (table 9-262ae) */ 665*4882a593Smuzhiyun #define HE_RU_ALLOC_IDX_242 0 /* RU alloc: 282 tones */ 666*4882a593Smuzhiyun #define HE_RU_ALLOC_IDX_484 1 /* RU alloc: 484 tones - 40Mhz */ 667*4882a593Smuzhiyun #define HE_RU_ALLOC_IDX_996 2 /* RU alloc: 996 tones - 80Mhz */ 668*4882a593Smuzhiyun #define HE_RU_ALLOC_IDX_2x996 3 /* RU alloc: 2x996 tones - 80p80/160Mhz */ 669*4882a593Smuzhiyun 670*4882a593Smuzhiyun /* Constellation Index encoding (table 9-262ac) */ 671*4882a593Smuzhiyun #define HE_CONST_IDX_BPSK 0 672*4882a593Smuzhiyun #define HE_CONST_IDX_QPSK 1 673*4882a593Smuzhiyun #define HE_CONST_IDX_16QAM 2 674*4882a593Smuzhiyun #define HE_CONST_IDX_64QAM 3 675*4882a593Smuzhiyun #define HE_CONST_IDX_256QAM 4 676*4882a593Smuzhiyun #define HE_CONST_IDX_1024QAM 5 677*4882a593Smuzhiyun #define HE_CONST_IDX_RSVD 6 678*4882a593Smuzhiyun #define HE_CONST_IDX_NONE 7 679*4882a593Smuzhiyun 680*4882a593Smuzhiyun /* Min HE cap ie length when only 80Mhz is supported */ 681*4882a593Smuzhiyun #define HE_CAP_IE_MIN_LEN (sizeof(he_cap_ie_t) - TLV_HDR_LEN + HE_MCS_NSS_SUP_FLD_MIN_LEN) 682*4882a593Smuzhiyun 683*4882a593Smuzhiyun /* Max HE cap ie length considering MAX NSS and RU */ 684*4882a593Smuzhiyun #define HE_CAP_IE_MAX_LEN (sizeof(he_cap_ie_t) - TLV_HDR_LEN + HE_MCS_NSS_SUP_FLD_MAX_LEN + \ 685*4882a593Smuzhiyun HE_PPE_THRESH_LEN(HE_CAP_MCS_MAP_NSS_MAX, HE_MAX_RU_COUNT)) 686*4882a593Smuzhiyun /** 687*4882a593Smuzhiyun * HE Operation IE (sec 9.4.2.219) 688*4882a593Smuzhiyun */ 689*4882a593Smuzhiyun /* HE Operation Parameters field (figure 9-589cr) */ 690*4882a593Smuzhiyun #define HE_OP_PARAMS_SIZE 3 691*4882a593Smuzhiyun typedef uint8 he_op_parms_t[HE_OP_PARAMS_SIZE]; 692*4882a593Smuzhiyun 693*4882a593Smuzhiyun #define HE_OP_BSS_COLOR_INFO 1 694*4882a593Smuzhiyun typedef uint8 he_op_bsscolorinfo_t[HE_OP_BSS_COLOR_INFO]; 695*4882a593Smuzhiyun 696*4882a593Smuzhiyun #define HE_BASIC_MCS_NSS_SIZE 2 697*4882a593Smuzhiyun typedef uint8 he_basic_mcs_nss_set_t[HE_BASIC_MCS_NSS_SIZE]; 698*4882a593Smuzhiyun 699*4882a593Smuzhiyun /* VHT_OP_INFO_LEN = 3 defined in 802.11.h file */ 700*4882a593Smuzhiyun typedef uint8 he_vht_opinfo_t[VHT_OP_INFO_LEN]; 701*4882a593Smuzhiyun 702*4882a593Smuzhiyun #define HE_OP_MAX_BSSID_IND_LEN 1 703*4882a593Smuzhiyun typedef uint8 he_max_bssid_ind_t[HE_OP_MAX_BSSID_IND_LEN]; 704*4882a593Smuzhiyun 705*4882a593Smuzhiyun /* 6G Operation Information Element field (Figure 9-788k) */ 706*4882a593Smuzhiyun #define HE_6G_OP_INFO 5 707*4882a593Smuzhiyun typedef uint8 he_6g_opinfo_t[HE_6G_OP_INFO]; 708*4882a593Smuzhiyun 709*4882a593Smuzhiyun /* HE Operation Parameters for D3.0 */ 710*4882a593Smuzhiyun #define HE_OP_DEFAULT_PE_DUR_IDX 0 /* Default PE Duration */ 711*4882a593Smuzhiyun #define HE_OP_DEFAULT_PE_DUR_FSZ 3 712*4882a593Smuzhiyun #define HE_OP_TWT_REQUIRED_IDX 3 /* TWT Required */ 713*4882a593Smuzhiyun #define HE_OP_TWT_REQUIRED_FSZ 1 714*4882a593Smuzhiyun #define HE_OP_TXOP_DUR_RTS_THOLD_IDX 4 /* TXOP Duration RTS Threshold */ 715*4882a593Smuzhiyun #define HE_OP_TXOP_DUR_RTS_THOLD_FSZ 10 716*4882a593Smuzhiyun #define HE_OP_VHT_OP_INFO_PRESENT_IDX 14 /* VHT Operation Information Present */ 717*4882a593Smuzhiyun #define HE_OP_VHT_OP_INFO_PRESENT_FSZ 1 718*4882a593Smuzhiyun #define HE_OP_CO_LOCATED_BSS_IDX 15 /* Co-Located BSS */ 719*4882a593Smuzhiyun #define HE_OP_CO_LOCATED_BSS_FSZ 1 720*4882a593Smuzhiyun #define HE_OP_ER_SU_DISABLE_IDX 16 /* ER SU Disable */ 721*4882a593Smuzhiyun #define HE_OP_ER_SU_DISABLE_FSZ 1 722*4882a593Smuzhiyun #define HE_OP_6G_OP_INFO_PRESENT_IDX 17 /* 6G Operation Information Present */ 723*4882a593Smuzhiyun #define HE_OP_6G_OP_INFO_PRESENT_FSZ 1 724*4882a593Smuzhiyun #define HE_OP_RESERVED_IDX 18 /* Reserved */ 725*4882a593Smuzhiyun #define HE_OP_RESERVED_FSZ 6 726*4882a593Smuzhiyun 727*4882a593Smuzhiyun /* BSS Color for D3.0 */ 728*4882a593Smuzhiyun #define HE_OP_BSS_COLOR_IDX 0 /* BSS Color */ 729*4882a593Smuzhiyun #define HE_OP_BSS_COLOR_FSZ 6 730*4882a593Smuzhiyun #define HE_OP_PARTIAL_BSS_COLOR_IDX 6 /* Partial BSS color */ 731*4882a593Smuzhiyun #define HE_OP_PARTIAL_BSS_COLOR_FSZ 1 732*4882a593Smuzhiyun #define HE_OP_BSS_COLOR_DIS_IDX 7 /* BSS Color Disabled */ 733*4882a593Smuzhiyun #define HE_OP_BSS_COLOR_DIS_FSZ 1 734*4882a593Smuzhiyun 735*4882a593Smuzhiyun /* 6 Ghz Operation Information Element for D8.0 */ 736*4882a593Smuzhiyun #define HE_6G_OP_INFO_PRI_CHANNEL_IDX 0 /* Primary channel */ 737*4882a593Smuzhiyun #define HE_6G_OP_INFO_PRI_CHANNEL_FSZ 8 738*4882a593Smuzhiyun #define HE_6G_OP_INFO_CONTROL_IDX 8 /* Control Field */ 739*4882a593Smuzhiyun #define HE_6G_OP_INFO_CONTROL_FSZ 8 740*4882a593Smuzhiyun #define HE_6G_OP_INFO_FREQ_SEG0_IDX 16 /* Center Frequency segment0 */ 741*4882a593Smuzhiyun #define HE_6G_OP_INFO_FREQ_SEG0_FSZ 8 742*4882a593Smuzhiyun #define HE_6G_OP_INFO_FREQ_SEG1_IDX 24 /* Center Frequency segment1 */ 743*4882a593Smuzhiyun #define HE_6G_OP_INFO_FREQ_SEG1_FSZ 8 744*4882a593Smuzhiyun #define HE_6G_OP_INFO_MIN_RATE_IDX 32 /* Min Rate */ 745*4882a593Smuzhiyun #define HE_6G_OP_INFO_MIN_RATE_FSZ 8 746*4882a593Smuzhiyun #define HE_6G_OP_INFO_CONTROL_IDX_CW_FSZ 2 747*4882a593Smuzhiyun 748*4882a593Smuzhiyun /* Control Field Format (Figure 9-788I) */ 749*4882a593Smuzhiyun #define HE_6G_CONTROL_CHANNEL_WIDTH_IDX 0 /* Channel Width */ 750*4882a593Smuzhiyun #define HE_6G_CONTROL_CHANNEL_WIDTH_FSZ 2 751*4882a593Smuzhiyun #define HE_6G_CONTROL_DUP_BCN_IDX 2 /* Duplicate beacon */ 752*4882a593Smuzhiyun #define HE_6G_CONTROL_DUP_BCN_FSZ 1 753*4882a593Smuzhiyun #define HE_6G_CONTROL_REG_INFO_IDX 3 /* Regulatory info */ 754*4882a593Smuzhiyun #define HE_6G_CONTROL_REG_INFO_FSZ 3 755*4882a593Smuzhiyun 756*4882a593Smuzhiyun /* HE Operation element */ 757*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_op_ie { 758*4882a593Smuzhiyun uint8 id; 759*4882a593Smuzhiyun uint8 len; 760*4882a593Smuzhiyun uint8 id_ext; 761*4882a593Smuzhiyun he_op_parms_t parms; 762*4882a593Smuzhiyun he_op_bsscolorinfo_t bsscolorinfo; 763*4882a593Smuzhiyun he_basic_mcs_nss_set_t mcs_nss_op; /* Basic HE MCS & NSS Set */ 764*4882a593Smuzhiyun /* he_vht_opinfo_t vht_opinfo; */ /* VHT Operation Information element */ 765*4882a593Smuzhiyun /* he_max_bssid_ind_t max_bssid_ind; */ /* Max Co-Hosted BSSID Indicator element */ 766*4882a593Smuzhiyun /* he_6g_opinfo_t he_6g_opinfo; */ /* 6 GHz Operation Information element */ 767*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 768*4882a593Smuzhiyun 769*4882a593Smuzhiyun typedef struct he_op_ie he_op_ie_t; 770*4882a593Smuzhiyun 771*4882a593Smuzhiyun /* The Max HE MCS For n SS subfield (where n = 1, ..., 8) is encoded as follows: 772*4882a593Smuzhiyun * P802.11ax D1.1 P94L53 - P94L61: 773*4882a593Smuzhiyun */ 774*4882a593Smuzhiyun #define HE_OP_MCS_CODE_0_7 0 775*4882a593Smuzhiyun #define HE_OP_MCS_CODE_0_8 1 776*4882a593Smuzhiyun #define HE_OP_MCS_CODE_0_9 2 777*4882a593Smuzhiyun #define HE_OP_MCS_CODE_0_10 3 778*4882a593Smuzhiyun #define HE_OP_MCS_CODE_0_11 4 779*4882a593Smuzhiyun #define HE_OP_MCS_CODE_NONE 7 780*4882a593Smuzhiyun #define HE_OP_MCS_CODE_SIZE 3 /* num bits */ 781*4882a593Smuzhiyun #define HE_OP_MCS_CODE_MASK 0x7 /* mask for 1-stream */ 782*4882a593Smuzhiyun 783*4882a593Smuzhiyun /* Defines for The Max HE MCS For n SS subfield (where n = 1, ..., 8) */ 784*4882a593Smuzhiyun #define HE_OP_MCS_NSS_SET_MASK 0x00ffffff /* Field is to be 24 bits long */ 785*4882a593Smuzhiyun #define HE_OP_MCS_NSS_GET_SS_IDX(nss) (((nss)-1) * HE_OP_MCS_CODE_SIZE) 786*4882a593Smuzhiyun #define HE_OP_MCS_NSS_GET_MCS(nss, mcs_nss_map) \ 787*4882a593Smuzhiyun (((mcs_nss_map) >> HE_OP_MCS_NSS_GET_SS_IDX(nss)) & HE_OP_MCS_CODE_MASK) 788*4882a593Smuzhiyun #define HE_OP_MCS_NSS_SET_MCS(nss, mcs_code, mcs_nss_map) \ 789*4882a593Smuzhiyun do { \ 790*4882a593Smuzhiyun (mcs_nss_map) &= (~(HE_OP_MCS_CODE_MASK << HE_OP_MCS_NSS_GET_SS_IDX(nss))); \ 791*4882a593Smuzhiyun (mcs_nss_map) |= (((mcs_code) & HE_OP_MCS_CODE_MASK) \ 792*4882a593Smuzhiyun << HE_OP_MCS_NSS_GET_SS_IDX(nss)); \ 793*4882a593Smuzhiyun (mcs_nss_map) &= (HE_OP_MCS_NSS_SET_MASK); \ 794*4882a593Smuzhiyun } while (0) 795*4882a593Smuzhiyun 796*4882a593Smuzhiyun #define HE_OP_IE_MIN_LEN (sizeof(he_op_ie_t) - TLV_HDR_LEN) 797*4882a593Smuzhiyun #define HE_OP_IE_MAX_LEN (sizeof(he_op_ie_t) - TLV_HDR_LEN + VHT_OP_INFO_LEN +\ 798*4882a593Smuzhiyun HE_OP_MAX_BSSID_IND_LEN + HE_6G_OP_INFO) 799*4882a593Smuzhiyun 800*4882a593Smuzhiyun /* bit position and field width */ 801*4882a593Smuzhiyun #define HE_BSSCOLOR_CHANGE_NEWCOLOR_IDX 0 /* New BSSColor info */ 802*4882a593Smuzhiyun #define HE_BSSCOLOR_CHANGE_NEWCOLOR_FSZ 6 803*4882a593Smuzhiyun 804*4882a593Smuzhiyun /* HE Bsscolor change element */ 805*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_bsscolor_change_ie { 806*4882a593Smuzhiyun uint8 id; 807*4882a593Smuzhiyun uint8 len; 808*4882a593Smuzhiyun uint8 id_ext; 809*4882a593Smuzhiyun uint8 color_switch_cntdwn; 810*4882a593Smuzhiyun uint8 new_bsscolor_info; 811*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 812*4882a593Smuzhiyun 813*4882a593Smuzhiyun typedef struct he_bsscolor_change_ie he_bsscolor_change_ie_t; 814*4882a593Smuzhiyun 815*4882a593Smuzhiyun /* 816*4882a593Smuzhiyun * HE 6 GHz Band Capabilities element (sec 9.4.2.263) 817*4882a593Smuzhiyun * Capabilities Information field format (figure 9-788aj) 818*4882a593Smuzhiyun */ 819*4882a593Smuzhiyun 820*4882a593Smuzhiyun #define HE_6GBAND_CAP_IE_SIZE 2 821*4882a593Smuzhiyun typedef uint8 he_6gband_cap_t[HE_6GBAND_CAP_IE_SIZE]; 822*4882a593Smuzhiyun 823*4882a593Smuzhiyun /* HE 6 GHz Band Capabilities */ 824*4882a593Smuzhiyun #define HE_6GBAND_MPDU_STRT_SPACE_IDX 0 /* Minimum MPDU Start Spacing */ 825*4882a593Smuzhiyun #define HE_6GBAND_MPDU_STRT_SPACE_FSZ 3 826*4882a593Smuzhiyun #define HE_6GBAND_MAX_AMPDU_LENEXP_IDX 3 /* Maximum A-MPDU Length Exponent */ 827*4882a593Smuzhiyun #define HE_6GBAND_MAX_AMPDU_LENEXP_FSZ 3 828*4882a593Smuzhiyun #define HE_6GBAND_MAX_MPDU_LEN_IDX 6 /* Maximum MPDU Length */ 829*4882a593Smuzhiyun #define HE_6GBAND_MAX_MPDU_LEN_FSZ 2 830*4882a593Smuzhiyun /* B8 is reserved */ 831*4882a593Smuzhiyun #define HE_6GBAND_SM_PWRSAVE_IDX 9 /* SM Power Save */ 832*4882a593Smuzhiyun #define HE_6GBAND_SM_PWRSAVE_FSZ 2 833*4882a593Smuzhiyun #define HE_6GBAND_RD_RESP_IDX 11 /* RD Responder */ 834*4882a593Smuzhiyun #define HE_6GBAND_RD_RESP_FSZ 1 835*4882a593Smuzhiyun #define HE_6GBAND_RXANT_PAT_IDX 12 /* Rx Antenna Pattern Consistency */ 836*4882a593Smuzhiyun #define HE_6GBAND_RXANT_PAT_FSZ 1 837*4882a593Smuzhiyun #define HE_6GBAND_TXANT_PAT_IDX 13 /* Tx Antenna Pattern Consistency */ 838*4882a593Smuzhiyun #define HE_6GBAND_TXANT_PAT_FSZ 1 839*4882a593Smuzhiyun /* B14-15 are reserved */ 840*4882a593Smuzhiyun 841*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_6gband_cap_ie { 842*4882a593Smuzhiyun uint8 id; 843*4882a593Smuzhiyun uint8 len; 844*4882a593Smuzhiyun uint8 id_ext; 845*4882a593Smuzhiyun he_6gband_cap_t he_6gband_cap; 846*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 847*4882a593Smuzhiyun 848*4882a593Smuzhiyun typedef struct he_6gband_cap_ie he_6gband_cap_ie_t; 849*4882a593Smuzhiyun 850*4882a593Smuzhiyun /* This marks the end of a packed structure section. */ 851*4882a593Smuzhiyun #include <packed_section_end.h> 852*4882a593Smuzhiyun 853*4882a593Smuzhiyun /* HE Action Frame */ 854*4882a593Smuzhiyun #define HE_AF_CAT_OFF 0 855*4882a593Smuzhiyun #define HE_AF_ACT_OFF 1 856*4882a593Smuzhiyun 857*4882a593Smuzhiyun /* TWT Setup */ 858*4882a593Smuzhiyun #define HE_AF_TWT_SETUP_TOKEN_OFF 2 859*4882a593Smuzhiyun #define HE_AF_TWT_SETUP_TWT_IE_OFF 3 860*4882a593Smuzhiyun 861*4882a593Smuzhiyun /* TWT Teardown */ 862*4882a593Smuzhiyun #define HE_AF_TWT_TEARDOWN_FLOW_OFF 2 863*4882a593Smuzhiyun 864*4882a593Smuzhiyun /* TWT Information */ 865*4882a593Smuzhiyun #define HE_AF_TWT_INFO_OFF 2 866*4882a593Smuzhiyun 867*4882a593Smuzhiyun /* HE Action ID */ 868*4882a593Smuzhiyun #define HE_ACTION_TWT_SETUP 1 869*4882a593Smuzhiyun #define HE_ACTION_TWT_TEARDOWN 2 870*4882a593Smuzhiyun #define HE_ACTION_TWT_INFO 3 871*4882a593Smuzhiyun 872*4882a593Smuzhiyun /* HE Basic trigger frame common info fields */ 873*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_SZ 8 874*4882a593Smuzhiyun typedef uint8 he_trig_cmninfo_set_t[HE_TRIG_CMNINFO_SZ]; 875*4882a593Smuzhiyun 876*4882a593Smuzhiyun /* bit position and field width */ 877*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_FRMTYPE_INDX 0 /* Trigger frame type */ 878*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_FRMTYPE_FSZ 4 879*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_LSIGLEN_INDX 4 /* L-sig length */ 880*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_LSIGLEN_FSZ 12 881*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_CASCADEIND_INDX 16 /* Cascade indication */ 882*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_CASCADEIND_FSZ 1 883*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_CSREQ_INDX 17 /* Carrier sense indication */ 884*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_CSREQ_FSZ 1 885*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_BWINFO_INDX 18 /* Bw info */ 886*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_BWINFO_FSZ 2 887*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_GI_LTF_INDX 20 /* Cp-LTF size */ 888*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_GI_LTF_FSZ 2 889*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_MUMIMO_LTF_INDX 22 /* HE-LTF mask enable */ 890*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_MUMIMO_LTF_FSZ 1 891*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_HELTF_SYM_INDX 23 /* He-LTF sumbols */ 892*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_HELTF_SYM_FSZ 3 893*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_STBC_INDX 26 /* STBC support */ 894*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_STBC_FSZ 1 895*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_LDPC_EXTSYM_INDX 27 /* LDPC extra symbol */ 896*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_LDPC_EXTSYM_FSZ 1 897*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_AP_TXPWR_INDX 28 /* AP TX power */ 898*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_AP_TXPWR_FSZ 6 899*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_AFACT_INDX 34 /* a-factor */ 900*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_AFACT_FSZ 2 901*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_PEDISAMBIG_INDX 36 /* PE disambiguity */ 902*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_PEDISAMBIG_FSZ 1 903*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_SPTIAL_REUSE_INDX 37 /* spatial re-use */ 904*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_SPTIAL_REUSE_FSZ 16 905*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_DOPPLER_INDX 53 /* doppler supoort */ 906*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_DOPPLER_FSZ 1 907*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_HESIGA_RSVD_INDX 54 /* rsvd bits from HE-SIGA */ 908*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_HESIGA_RSVD_FSZ 9 909*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_RSVD_INDX 63 /* reseved bit from HE-SIGA */ 910*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_RSVD_FSZ 1 911*4882a593Smuzhiyun 912*4882a593Smuzhiyun /* HE Basic trigger frame user info fields */ 913*4882a593Smuzhiyun #define HE_TRIG_USRINFO_SZ 5 914*4882a593Smuzhiyun typedef uint8 he_trig_usrinfo_set_t[HE_TRIG_USRINFO_SZ]; 915*4882a593Smuzhiyun 916*4882a593Smuzhiyun /* bit position and field width */ 917*4882a593Smuzhiyun #define HE_TRIG_USRINFO_AID_INDX 0 /* AID */ 918*4882a593Smuzhiyun #define HE_TRIG_USRINFO_AID_FSZ 12 919*4882a593Smuzhiyun #define HE_TRIG_USRINFO_RU_ALLOC_INDX 12 /* RU allocation index */ 920*4882a593Smuzhiyun #define HE_TRIG_USRINFO_RU_ALLOC_FSZ 8 921*4882a593Smuzhiyun #define HE_TRIG_USRINFO_CODING_INDX 20 /* coding type (BCC/LDPC) */ 922*4882a593Smuzhiyun #define HE_TRIG_USRINFO_CODING_FSZ 1 923*4882a593Smuzhiyun #define HE_TRIG_USRINFO_MCS_INDX 21 /* MCS index value */ 924*4882a593Smuzhiyun #define HE_TRIG_USRINFO_MCS_FSZ 4 925*4882a593Smuzhiyun #define HE_TRIG_USRINFO_DCM_INDX 25 /* Dual carrier modulation */ 926*4882a593Smuzhiyun #define HE_TRIG_USRINFO_DCM_FSZ 1 927*4882a593Smuzhiyun #define HE_TRIG_USRINFO_SSALLOC_STRMOFFSET_INDX 26 /* stream offset */ 928*4882a593Smuzhiyun #define HE_TRIG_USRINFO_SSALLOC_STRMOFFSET_FSZ 3 929*4882a593Smuzhiyun #define HE_TRIG_USRINFO_SSALLOC_NSS_INDX 29 /* number of spatial streams */ 930*4882a593Smuzhiyun #define HE_TRIG_USRINFO_SSALLOC_NSS_FSZ 3 931*4882a593Smuzhiyun #define HE_TRIG_USRINFO_TARGET_RSSI_INDX 32 /* Target RSSI */ 932*4882a593Smuzhiyun #define HE_TRIG_USRINFO_TARGET_RSSI_FSZ 7 933*4882a593Smuzhiyun #define HE_TRIG_USRINFO_RSVD_INDX 39 /* Reserved bit */ 934*4882a593Smuzhiyun #define HE_TRIG_USRINFO_RSVD_FSZ 1 935*4882a593Smuzhiyun 936*4882a593Smuzhiyun /* Different types of trigger frame */ 937*4882a593Smuzhiyun #define HE_TRIG_TYPE_BASIC_FRM 0 /* basic trigger frame */ 938*4882a593Smuzhiyun #define HE_TRIG_TYPE_BEAM_RPT_POLL_FRM 1 /* beamforming report poll frame */ 939*4882a593Smuzhiyun #define HE_TRIG_TYPE_MU_BAR_FRM 2 /* MU-BAR frame */ 940*4882a593Smuzhiyun #define HE_TRIG_TYPE_MU_RTS_FRM 3 /* MU-RTS frame */ 941*4882a593Smuzhiyun #define HE_TRIG_TYPE_BSR_FRM 4 /* Buffer status report poll */ 942*4882a593Smuzhiyun 943*4882a593Smuzhiyun /* HE Timing related parameters (802.11ax D1.2 Table 28-9) */ 944*4882a593Smuzhiyun #define HE_T_LEG_STF 8 945*4882a593Smuzhiyun #define HE_T_LEG_LTF 8 946*4882a593Smuzhiyun #define HE_T_LEG_LSIG 4 947*4882a593Smuzhiyun #define HE_T_RL_SIG 4 948*4882a593Smuzhiyun #define HE_T_SIGA 8 949*4882a593Smuzhiyun #define HE_T_STF 4 /* STF for SU / MU HE PPDUs */ 950*4882a593Smuzhiyun #define HE_T_TB_PPDU_STF 8 /* STF for HE trigger based PPDUs */ 951*4882a593Smuzhiyun #define HE_T_LEG_PREAMBLE (HE_T_LEG_STF + HE_T_LEG_LTF + HE_T_LEG_LSIG) 952*4882a593Smuzhiyun #define HE_T_LEG_SYMB 4 953*4882a593Smuzhiyun #define HE_RU_26_TONE 26 954*4882a593Smuzhiyun #define HE_RU_52_TONE 52 955*4882a593Smuzhiyun #define HE_RU_106_TONE 106 956*4882a593Smuzhiyun #define HE_RU_242_TONE 242 957*4882a593Smuzhiyun #define HE_RU_484_TONE 484 958*4882a593Smuzhiyun #define HE_RU_996_TONE 996 959*4882a593Smuzhiyun #define HE_MAX_26_TONE_RU_INDX 36 960*4882a593Smuzhiyun #define HE_MAX_52_TONE_RU_INDX 52 961*4882a593Smuzhiyun #define HE_MAX_106_TONE_RU_INDX 60 962*4882a593Smuzhiyun #define HE_MAX_242_TONE_RU_INDX 64 963*4882a593Smuzhiyun #define HE_MAX_484_TONE_RU_INDX 66 964*4882a593Smuzhiyun 965*4882a593Smuzhiyun /** 966*4882a593Smuzhiyun * Ref : (802.11ax D3.0 Figure 9-27 Page 85) 967*4882a593Smuzhiyun */ 968*4882a593Smuzhiyun #define HE_BAR_CONTROL_SZ 2 969*4882a593Smuzhiyun typedef uint8 he_bar_control_set_t[HE_BAR_CONTROL_SZ]; 970*4882a593Smuzhiyun 971*4882a593Smuzhiyun /* bit position and field width */ 972*4882a593Smuzhiyun #define HE_BAR_CONTROL_ACK_POLICY_INDX 0 /* BAR ack policy */ 973*4882a593Smuzhiyun #define HE_BAR_CONTROL_ACK_POLICY_FSZ 1 974*4882a593Smuzhiyun #define HE_BAR_CONTROL_ACK_TYPE_INDX 1 /* BAR ack type */ 975*4882a593Smuzhiyun #define HE_BAR_CONTROL_ACK_TYPE_FSZ 4 976*4882a593Smuzhiyun #define HE_BAR_CONTROL_RSVD_INDX 5 /* Reserved */ 977*4882a593Smuzhiyun #define HE_BAR_CONTROL_RSVD_FSZ 7 978*4882a593Smuzhiyun #define HE_BAR_CONTROL_TID_INFO_INDX 12 /* BAR TID INFO */ 979*4882a593Smuzhiyun #define HE_BAR_CONTROL_TID_INFO_FSZ 4 980*4882a593Smuzhiyun 981*4882a593Smuzhiyun #define BAR_TYPE_BASIC 0 982*4882a593Smuzhiyun #define BAR_TYPE_EXT_COMPRESSED 1 983*4882a593Smuzhiyun #define BAR_TYPE_COMPRESSED 2 984*4882a593Smuzhiyun #define BAR_TYPE_MULTI_TID 3 985*4882a593Smuzhiyun 986*4882a593Smuzhiyun /** 987*4882a593Smuzhiyun * Ref : 802.11-2016.pdf Page 674 988*4882a593Smuzhiyun * Figure 9-28 Block Ack Starting Sequence Control subfield 989*4882a593Smuzhiyun */ 990*4882a593Smuzhiyun #define HE_BAR_INFO_SZ 2 991*4882a593Smuzhiyun typedef uint8 he_cba_bar_info_set_t[HE_BAR_INFO_SZ]; 992*4882a593Smuzhiyun 993*4882a593Smuzhiyun /* bit position and field width */ 994*4882a593Smuzhiyun #define HE_CBA_BAR_INFO_FRAGNUM_INDX 0 /* Fragment Number */ 995*4882a593Smuzhiyun #define HE_CBA_BAR_INFO_FRAGNUM_FSZ 4 996*4882a593Smuzhiyun #define HE_CBA_BAR_INFO_SEQNUM_INDX 4 /* Starting Sequence Number */ 997*4882a593Smuzhiyun #define HE_CBA_BAR_INFO_SEQNUM_FSZ 12 998*4882a593Smuzhiyun 999*4882a593Smuzhiyun /** 1000*4882a593Smuzhiyun * ref: (802.11ax D1.2 Table 28-9 Page 285) 1001*4882a593Smuzhiyun * 1002*4882a593Smuzhiyun * - for calculation purpose - in multiples of 10 (*10) 1003*4882a593Smuzhiyun */ 1004*4882a593Smuzhiyun #define HE_T_LTF_1X 32 1005*4882a593Smuzhiyun #define HE_T_LTF_2X 64 1006*4882a593Smuzhiyun #define HE_T_LTF_4X 128 1007*4882a593Smuzhiyun #define HE_T_SYM1 136 /* OFDM symbol duration with base GI */ 1008*4882a593Smuzhiyun #define HE_T_SYM2 144 /* OFDM symbol duration with double GI */ 1009*4882a593Smuzhiyun #define HE_T_SYM4 160 /* OFDM symbol duration with quad GI */ 1010*4882a593Smuzhiyun 1011*4882a593Smuzhiyun #define HE_N_LEG_SYM 3 /* bytes per legacy symbol */ 1012*4882a593Smuzhiyun #define HE_N_TAIL 6 /* tail field bits for BCC */ 1013*4882a593Smuzhiyun #define HE_N_SERVICE 16 /* bits in service field */ 1014*4882a593Smuzhiyun #define HE_T_MAX_PE 16 /* max Packet extension duration */ 1015*4882a593Smuzhiyun #endif /* _802_11ax_h_ */ 1016