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 * Copyright (C) 2020, Broadcom. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Unless you and Broadcom execute a separate written software license 8*4882a593Smuzhiyun * agreement governing use of this software, this software is licensed to you 9*4882a593Smuzhiyun * under the terms of the GNU General Public License version 2 (the "GPL"), 10*4882a593Smuzhiyun * available at http://www.broadcom.com/licenses/GPLv2.php, with the 11*4882a593Smuzhiyun * following added to such license: 12*4882a593Smuzhiyun * 13*4882a593Smuzhiyun * As a special exception, the copyright holders of this software give you 14*4882a593Smuzhiyun * permission to link this software with independent modules, and to copy and 15*4882a593Smuzhiyun * distribute the resulting executable under terms of your choice, provided that 16*4882a593Smuzhiyun * you also meet, for each linked independent module, the terms and conditions of 17*4882a593Smuzhiyun * the license of that module. An independent module is a module which is not 18*4882a593Smuzhiyun * derived from this software. The special exception does not apply to any 19*4882a593Smuzhiyun * modifications of the software. 20*4882a593Smuzhiyun * 21*4882a593Smuzhiyun * 22*4882a593Smuzhiyun * <<Broadcom-WL-IPTag/Dual:>> 23*4882a593Smuzhiyun */ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #ifndef _802_11ax_h_ 26*4882a593Smuzhiyun #define _802_11ax_h_ 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #include <typedefs.h> 29*4882a593Smuzhiyun #include <802.11.h> 30*4882a593Smuzhiyun #include <bcmtlv.h> 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* This marks the start of a packed structure section. */ 33*4882a593Smuzhiyun #include <packed_section_start.h> 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* HT Control Field: (Table 9-9a) */ 36*4882a593Smuzhiyun #define HTC_HE_VARIANT 0x03u 37*4882a593Smuzhiyun #define HTC_HEVAR_SHIFT 0 /* HE VARIANT shift */ 38*4882a593Smuzhiyun #define HTC_HEVAR(htc) (((htc) & HTC_HE_VARIANT) >> HTC_HEVAR_SHIFT) 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* HT Control IDs: (Table 9-18a & Table 9-9a) */ 41*4882a593Smuzhiyun #define HTC_HE_CTLID_SHIFT 0x02u /* HTC HE CTLID shift */ 42*4882a593Smuzhiyun #define HTC_HE_CTLID_MASK 0x0Fu /* HTC HE CTLID mask */ 43*4882a593Smuzhiyun #define HTC_HE_CTLID(htc) (((htc) >> HTC_HE_CTLID_SHIFT) & HTC_HE_CTLID_MASK) 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #define HTC_HE_CTLID_TRS 0x0u /* Triggered response scheduling */ 46*4882a593Smuzhiyun #define HTC_HE_CTLID_OMI 0x1u /* Operating mode */ 47*4882a593Smuzhiyun #define HTC_HE_CTLID_HLA 0x2u /* HE link adaptation */ 48*4882a593Smuzhiyun #define HTC_HE_CTLID_BSR 0x3u /* Buffer status report */ 49*4882a593Smuzhiyun #define HTC_HE_CTLID_UPH 0x4u /* UL power headroom */ 50*4882a593Smuzhiyun #define HTC_HE_CTLID_BQR 0x5u /* Bandwidth query report */ 51*4882a593Smuzhiyun #define HTC_HE_CTLID_CAS 0x6u /* Command and status */ 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /* HTC-Control field definitions: (Table 9.9a HTC Control field) */ 54*4882a593Smuzhiyun #define HTC_HE_CTL_SIZE 30u /* HTC Control field size */ 55*4882a593Smuzhiyun #define HTC_HE_CTL_DEFAULT 0xFFFFFFFC 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* A-Control offset definitions: (Figure 9.18a Control ID subfield values) */ 58*4882a593Smuzhiyun #define HE_ACTRL_TRS_FSZ 26u 59*4882a593Smuzhiyun #define HE_ACTRL_OMI_FSZ 12u 60*4882a593Smuzhiyun #define HE_ACTRL_HLA_FSZ 26u 61*4882a593Smuzhiyun #define HE_ACTRL_BSR_FSZ 26u 62*4882a593Smuzhiyun #define HE_ACTRL_UPH_FSZ 8u 63*4882a593Smuzhiyun #define HE_ACTRL_BQR_FSZ 10u 64*4882a593Smuzhiyun #define HE_ACTRL_CAS_FSZ 8u 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /* OM-Control Field definitions: (Figure 9.15d Control Information subfield for OM Control) */ 67*4882a593Smuzhiyun #define HE_OMI_RXNSS_FSZ 3 68*4882a593Smuzhiyun #define HE_OMI_RXNSS_IDX 0 69*4882a593Smuzhiyun #define HE_OMI_RXNSS_MASK 0x07u 70*4882a593Smuzhiyun #define HE_OMI_CHW_FSZ 2 71*4882a593Smuzhiyun #define HE_OMI_CHW_IDX 3 72*4882a593Smuzhiyun #define HE_OMI_CHW_MASK 0x18u 73*4882a593Smuzhiyun #define HE_OMI_ULMU_DIS_FSZ 1 74*4882a593Smuzhiyun #define HE_OMI_ULMU_DIS_IDX 5 75*4882a593Smuzhiyun #define HE_OMI_ULMU_DIS_MASK 0x20u 76*4882a593Smuzhiyun #define HE_OMI_TXNSTS_FSZ 3 77*4882a593Smuzhiyun #define HE_OMI_TXNSTS_IDX 6 78*4882a593Smuzhiyun #define HE_OMI_TXNSTS_MASK 0x1c0u 79*4882a593Smuzhiyun #define HE_OMI_ERSU_DIS_FSZ 1 80*4882a593Smuzhiyun #define HE_OMI_ERSU_DIS_IDX 9 81*4882a593Smuzhiyun #define HE_OMI_ERSU_DIS_MASK 0x200u 82*4882a593Smuzhiyun #define HE_OMI_DLMU_RSD_RCM_FSZ 1 83*4882a593Smuzhiyun #define HE_OMI_DLMU_RSD_RCM_IDX 10 84*4882a593Smuzhiyun #define HE_OMI_DLMU_RSD_RCM_MASK 0x400u 85*4882a593Smuzhiyun #define HE_OMI_ULMU_DATA_DIS_FSZ 1 86*4882a593Smuzhiyun #define HE_OMI_ULMU_DATA_DIS_IDX 11 87*4882a593Smuzhiyun #define HE_OMI_ULMU_DATA_DIS_MASK 0x800u 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun /* OM-Control Channel Width Subfield definition, as per 9.2.4.6a.2 OM Control */ 90*4882a593Smuzhiyun #define OMI_CHW_20MHZ 0 91*4882a593Smuzhiyun #define OMI_CHW_40MHZ 1 92*4882a593Smuzhiyun #define OMI_CHW_80MHZ 2 93*4882a593Smuzhiyun #define OMI_CHW_160MHZ_80P80MHZ 3 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun /* Table 9-18d ACI Bitmap subfield encoding */ 96*4882a593Smuzhiyun #define HE_BSR_ACI_MAP_BE 0u 97*4882a593Smuzhiyun #define HE_BSR_ACI_MAP_BK 1u 98*4882a593Smuzhiyun #define HE_BSR_ACI_MAP_VI 2u 99*4882a593Smuzhiyun #define HE_BSR_ACI_MAP_VO 3u 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun /* GI And LTF Type subfield encoding (Table 9-31d) */ 102*4882a593Smuzhiyun #define HE_LTF_1_GI_1_6us (0u) 103*4882a593Smuzhiyun #define HE_LTF_2_GI_1_6us (1u) 104*4882a593Smuzhiyun #define HE_LTF_4_GI_3_2us (2u) 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* special STA-IDs (Section 27.11.1) */ 107*4882a593Smuzhiyun #define HE_STAID_BSS_BCAST 0 108*4882a593Smuzhiyun #define HE_STAID_UNASSOCIATED_STA 2045u 109*4882a593Smuzhiyun #define HE_STAID_NO_USER 2046u 110*4882a593Smuzhiyun #define HE_STAID_MBSS_BCAST 2047u 111*4882a593Smuzhiyun #define HE_STAID_MASK 0x07FFu 112*4882a593Smuzhiyun #define HE_AID12_MASK 0x0FFFu 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun /** 115*4882a593Smuzhiyun * HE Capabilites element (sec 9.4.2.218) 116*4882a593Smuzhiyun */ 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun /* HE MAC Capabilities Information field (figure 9-589ck) */ 119*4882a593Smuzhiyun #define HE_MAC_CAP_INFO_SIZE 6u 120*4882a593Smuzhiyun typedef uint8 he_mac_cap_t[HE_MAC_CAP_INFO_SIZE]; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun /* bit position and field width */ 123*4882a593Smuzhiyun #define HE_MAC_HTC_HE_SUPPORT_IDX 0 /* HTC HE Support */ 124*4882a593Smuzhiyun #define HE_MAC_HTC_HE_SUPPORT_FSZ 1 125*4882a593Smuzhiyun #define HE_MAC_TWT_REQ_SUPPORT_IDX 1 /* TWT Requestor Support */ 126*4882a593Smuzhiyun #define HE_MAC_TWT_REQ_SUPPORT_FSZ 1 127*4882a593Smuzhiyun #define HE_MAC_TWT_RESP_SUPPORT_IDX 2 /* TWT Responder Support */ 128*4882a593Smuzhiyun #define HE_MAC_TWT_RESP_SUPPORT_FSZ 1 129*4882a593Smuzhiyun #define HE_MAC_FRAG_SUPPORT_IDX 3 /* Fragmentation Support */ 130*4882a593Smuzhiyun #define HE_MAC_FRAG_SUPPORT_FSZ 2 131*4882a593Smuzhiyun #define HE_MAC_MAX_MSDU_FRAGS_IDX 5 /* Max. Fragmented MSDUs */ 132*4882a593Smuzhiyun #define HE_MAC_MAX_MSDU_FRAGS_FSZ 3 133*4882a593Smuzhiyun #define HE_MAC_MIN_FRAG_SIZE_IDX 8 /* Min. Fragment Size */ 134*4882a593Smuzhiyun #define HE_MAC_MIN_FRAG_SIZE_FSZ 2 135*4882a593Smuzhiyun #define HE_MAC_TRIG_MAC_PAD_DUR_IDX 10 /* Trigger Frame MAC Pad Dur */ 136*4882a593Smuzhiyun #define HE_MAC_TRIG_MAC_PAD_DUR_FSZ 2 137*4882a593Smuzhiyun #define HE_MAC_MULTI_TID_AGG_RX_IDX 12 /* Multi TID Agg. Rx support */ 138*4882a593Smuzhiyun #define HE_MAC_MULTI_TID_AGG_RX_FSZ 3 139*4882a593Smuzhiyun #define HE_MAC_LINK_ADAPT_IDX 15 /* HE Link Adaptation Support */ 140*4882a593Smuzhiyun #define HE_MAC_LINK_ADAPT_FSZ 2 141*4882a593Smuzhiyun #define HE_MAC_ALL_ACK_SUPPORT_IDX 17 /* All Ack Support */ 142*4882a593Smuzhiyun #define HE_MAC_ALL_ACK_SUPPORT_FSZ 1 143*4882a593Smuzhiyun #define HE_MAC_TRS_SUPPORT_IDX 18 /* TRS Support */ 144*4882a593Smuzhiyun #define HE_MAC_TRS_SUPPORT_FSZ 1 145*4882a593Smuzhiyun #define HE_MAC_BSR_SUPPORT_IDX 19 /* BSR Support */ 146*4882a593Smuzhiyun #define HE_MAC_BSR_SUPPORT_FSZ 1 147*4882a593Smuzhiyun #define HE_MAC_BCAST_TWT_SUPPORT_IDX 20 /* Broadcast TWT Support */ 148*4882a593Smuzhiyun #define HE_MAC_BCAST_TWT_SUPPORT_FSZ 1 149*4882a593Smuzhiyun #define HE_MAC_32BA_BITMAP_SUPPORT_IDX 21 /* 32-bit BA Bitmap Support */ 150*4882a593Smuzhiyun #define HE_MAC_32BA_BITMAP_SUPPORT_FSZ 1 151*4882a593Smuzhiyun #define HE_MAC_MU_CASCADE_SUPPORT_IDX 22 /* MU Cascade Support */ 152*4882a593Smuzhiyun #define HE_MAC_MU_CASCADE_SUPPORT_FSZ 1 153*4882a593Smuzhiyun #define HE_MAC_ACK_ENAB_AGG_SUPPORT_IDX 23 /* Ack Enabled Agg. Support */ 154*4882a593Smuzhiyun #define HE_MAC_ACK_ENAB_AGG_SUPPORT_FSZ 1 155*4882a593Smuzhiyun /* bit 24 - Reserved */ 156*4882a593Smuzhiyun #define HE_MAC_OMI_CONTROL_SUPPORT_IDX 25 /* OMI Control Support */ 157*4882a593Smuzhiyun #define HE_MAC_OMI_CONTROL_SUPPORT_FSZ 1 158*4882a593Smuzhiyun #define HE_MAC_OFDMA_RA_SUPPORT_IDX 26 /* OFDMA RA Support */ 159*4882a593Smuzhiyun #define HE_MAC_OFDMA_RA_SUPPORT_FSZ 1 160*4882a593Smuzhiyun #define HE_MAC_MAX_AMPDU_LEN_EXP_IDX 27 /* Max AMPDU Length Exponent */ 161*4882a593Smuzhiyun #define HE_MAC_MAX_AMPDU_LEN_EXP_FSZ 2 162*4882a593Smuzhiyun #define HE_MAC_AMSDU_FRAG_SUPPORT_IDX 29 /* AMSDU Fragementation Support */ 163*4882a593Smuzhiyun #define HE_MAC_AMSDU_FRAG_SUPPORT_FSZ 1 164*4882a593Smuzhiyun #define HE_MAC_FLEX_TWT_SCHEDULE_IDX 30 /* Flexible TWT Schedule Support */ 165*4882a593Smuzhiyun #define HE_MAC_FLEX_TWT_SCHEDULE_FSZ 1 166*4882a593Smuzhiyun #define HE_MAC_RX_MBSS_CTL_FRAME_IDX 31 /* Rx control frames to Multi BSS */ 167*4882a593Smuzhiyun #define HE_MAC_RX_MBSS_CTL_FRAME_FSZ 1 168*4882a593Smuzhiyun #define HE_MAC_RX_AGG_BSRP_BQRP_IDX 32 /* Aggregated BSRP BQRP Rx */ 169*4882a593Smuzhiyun #define HE_MAC_RX_AGG_BSRP_BQRP_FSZ 1 170*4882a593Smuzhiyun #define HE_MAC_QTP_SUPPORT_IDX 33 /* Support Quiet time period */ 171*4882a593Smuzhiyun #define HE_MAC_QTP_SUPPORT_FSZ 1 172*4882a593Smuzhiyun #define HE_MAC_BQR_SUPPORT_IDX 34 /* Support BQR */ 173*4882a593Smuzhiyun #define HE_MAC_BQR_SUPPORT_FSZ 1 174*4882a593Smuzhiyun #define HE_MAC_SRP_RESPONDER_IDX 35 /* SRP responder Support */ 175*4882a593Smuzhiyun #define HE_MAC_SRP_RESPONDER_FSZ 1 176*4882a593Smuzhiyun #define HE_MAC_NDP_FDBK_SUPPORT_IDX 36 /* NDP feedback report Support */ 177*4882a593Smuzhiyun #define HE_MAC_NDP_FDBK_SUPPORT_FSZ 1 178*4882a593Smuzhiyun #define HE_MAC_OPS_SUPPORT_IDX 37 /* OPS support */ 179*4882a593Smuzhiyun #define HE_MAC_OPS_SUPPORT_FSZ 1 180*4882a593Smuzhiyun #define HE_MAC_AMSDU_IN_AMPDU_IDX 38 /* AMSDU in AMPDU support */ 181*4882a593Smuzhiyun #define HE_MAC_AMSDU_IN_AMPDU_FSZ 1 182*4882a593Smuzhiyun #define HE_MAC_MULTI_TID_AGG_TX_IDX 39 /* Multi TID Agg. Tx support */ 183*4882a593Smuzhiyun #define HE_MAC_MULTI_TID_AGG_TX_FSZ 3 184*4882a593Smuzhiyun #define HE_MAC_SST_SUPPORT_IDX 42 /* Sub-channel Selective channel */ 185*4882a593Smuzhiyun #define HE_MAC_SST_SUPPORT_FSZ 1 186*4882a593Smuzhiyun #define HE_MAC_UL_2X_996_TONE_RU_SUPP_IDX 43 /* UL 2X 996 tone RU Support */ 187*4882a593Smuzhiyun #define HE_MAC_UL_2X_996_TONE_RU_SUPP_FSZ 1 188*4882a593Smuzhiyun #define HE_MAC_UL_MU_DATA_DISABLE_RX_IDX 44 /* OM - UL MU Data Disable RX */ 189*4882a593Smuzhiyun #define HE_MAC_UL_MU_DATA_DISABLE_RX_FSZ 1 190*4882a593Smuzhiyun #define HE_MAC_DYNAMIC_SM_PWR_SAVE_IDX 45 /* HE Dynamic SM Power Save */ 191*4882a593Smuzhiyun #define HE_MAC_DYNAMIC_SM_PWR_SAVE_FSZ 1 192*4882a593Smuzhiyun #define HE_MAC_PUNCT_SOUNDING_SUPP_IDX 46 /* Punctured Sounding Support */ 193*4882a593Smuzhiyun #define HE_MAC_PUNCT_SOUNDING_SUPP_FSZ 1 194*4882a593Smuzhiyun #define HE_MAC_HT_VHT_TRIG_FRAME_RX_IDX 47 /* HT And VHT Trigger Frame RX Support */ 195*4882a593Smuzhiyun #define HE_MAC_HT_VHT_TRIG_FRAME_RX_FSZ 1 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun /* HE PHY Capabilities Information field (figure 9-589cl) */ 198*4882a593Smuzhiyun #define HE_PHY_CAP_INFO_SIZE 11u 199*4882a593Smuzhiyun typedef uint8 he_phy_cap_t[HE_PHY_CAP_INFO_SIZE]; 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun /* bit position and field width */ 202*4882a593Smuzhiyun /* bit 0 - Reserved */ 203*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_SET_IDX 1 /* Channel Width Set */ 204*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_SET_FSZ 7 205*4882a593Smuzhiyun #define HE_PHY_PUNCT_PREAMBLE_RX_IDX 8 /* Punctured Preamble Rx */ 206*4882a593Smuzhiyun #define HE_PHY_PUNCT_PREAMBLE_RX_FSZ 4 207*4882a593Smuzhiyun #define HE_PHY_DEVICE_CLASS_IDX 12 /* Device Class */ 208*4882a593Smuzhiyun #define HE_PHY_DEVICE_CLASS_FSZ 1 209*4882a593Smuzhiyun #define HE_PHY_LDPC_PYLD_IDX 13 /* LDPC Coding In Payload */ 210*4882a593Smuzhiyun #define HE_PHY_LDPC_PYLD_FSZ 1 211*4882a593Smuzhiyun #define HE_PHY_SU_PPDU_1x_LTF_0_8_GI_IDX 14 /* SU PPDU 1x LTF GI 0.8 us */ 212*4882a593Smuzhiyun #define HE_PHY_SU_PPDU_1x_LTF_0_8_GI_FSZ 1 213*4882a593Smuzhiyun #define HE_PHY_MIDAMBLE_MAX_NSTS_IDX 15 /* Midamble Tx/Rx Max NSTS */ 214*4882a593Smuzhiyun #define HE_PHY_MIDAMBLE_MAX_NSTS_FSZ 2 215*4882a593Smuzhiyun #define HE_PHY_NDP_4x_LTF_3_2_GI_IDX 17 /* NDP with 4xLTF 3.2us GI */ 216*4882a593Smuzhiyun #define HE_PHY_NDP_4x_LTF_3_2_GI_FSZ 1 217*4882a593Smuzhiyun #define HE_PHY_STBC_TX_IDX 18 /* STBC Tx for <= 80 MHz */ 218*4882a593Smuzhiyun #define HE_PHY_STBC_TX_FSZ 1 219*4882a593Smuzhiyun #define HE_PHY_STBC_RX_IDX 19 /* STBC Rx for <= 80 MHz */ 220*4882a593Smuzhiyun #define HE_PHY_STBC_RX_FSZ 1 221*4882a593Smuzhiyun #define HE_PHY_DOPPLER_TX_IDX 20 /* Doppler Tx */ 222*4882a593Smuzhiyun #define HE_PHY_DOPPLER_TX_FSZ 1 223*4882a593Smuzhiyun #define HE_PHY_DOPPLER_RX_IDX 21 /* Doppler Rx */ 224*4882a593Smuzhiyun #define HE_PHY_DOPPLER_RX_FSZ 1 225*4882a593Smuzhiyun #define HE_PHY_FULL_BW_UL_MU_MIMO_IDX 22 /* Full bandwidth UL MU MIMO */ 226*4882a593Smuzhiyun #define HE_PHY_FULL_BW_UL_MU_MIMO_FSZ 1 227*4882a593Smuzhiyun #define HE_PHY_PART_BW_UL_MU_MIMO_IDX 23 /* Partial bandwidth UL MU MIMO */ 228*4882a593Smuzhiyun #define HE_PHY_PART_BW_UL_MU_MIMO_FSZ 1 229*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_CONST_TX_IDX 24 /* DCM Max Constellation Tx */ 230*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_CONST_TX_FSZ 2 231*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_NSS_TX_IDX 26 /* DCM Max NSS Tx */ 232*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_NSS_TX_FSZ 1 233*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_CONST_RX_IDX 27 /* DCM Max Constellation Rx */ 234*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_CONST_RX_FSZ 2 235*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_NSS_RX_IDX 29 /* DCM Max NSS Rx */ 236*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_NSS_RX_FSZ 1 237*4882a593Smuzhiyun #define HE_PHY_RX_MU_PPDU_IDX 30 /* Rx HE MU PPDU From nonAP STA */ 238*4882a593Smuzhiyun #define HE_PHY_RX_MU_PPDU_FSZ 1 239*4882a593Smuzhiyun #define HE_PHY_SU_BEAMFORMER_IDX 31 /* SU Beamformer */ 240*4882a593Smuzhiyun #define HE_PHY_SU_BEAMFORMER_FSZ 1 241*4882a593Smuzhiyun #define HE_PHY_SU_BEAMFORMEE_IDX 32 /* SU Beamformee */ 242*4882a593Smuzhiyun #define HE_PHY_SU_BEAMFORMEE_FSZ 1 243*4882a593Smuzhiyun #define HE_PHY_MU_BEAMFORMER_IDX 33 /* MU Beamformer */ 244*4882a593Smuzhiyun #define HE_PHY_MU_BEAMFORMER_FSZ 1 245*4882a593Smuzhiyun #define HE_PHY_BEAMFORMEE_STS_BELOW80MHZ_IDX 34 /* Beamformee STS For <= 80MHz */ 246*4882a593Smuzhiyun #define HE_PHY_BEAMFORMEE_STS_BELOW80MHZ_FSZ 3 247*4882a593Smuzhiyun #define HE_PHY_BEAMFORMEE_STS_ABOVE80MHZ_IDX 37 /* Beamformee STS For >80 MHz */ 248*4882a593Smuzhiyun #define HE_PHY_BEAMFORMEE_STS_ABOVE80MHZ_FSZ 3 249*4882a593Smuzhiyun #define HE_PHY_SOUND_DIM_BELOW80MHZ_IDX 40 /* Num. Sounding Dim.<= 80 MHz */ 250*4882a593Smuzhiyun #define HE_PHY_SOUND_DIM_BELOW80MHZ_FSZ 3 251*4882a593Smuzhiyun #define HE_PHY_SOUND_DIM_ABOVE80MHZ_IDX 43 /* Num. Sounding Dim.> 80 MHz */ 252*4882a593Smuzhiyun #define HE_PHY_SOUND_DIM_ABOVE80MHZ_FSZ 3 253*4882a593Smuzhiyun #define HE_PHY_SU_FEEDBACK_NG16_SUPPORT_IDX 46 /* Ng=16 For SU Feedback */ 254*4882a593Smuzhiyun #define HE_PHY_SU_FEEDBACK_NG16_SUPPORT_FSZ 1 255*4882a593Smuzhiyun #define HE_PHY_MU_FEEDBACK_NG16_SUPPORT_IDX 47 /* Ng=16 For MU Feedback */ 256*4882a593Smuzhiyun #define HE_PHY_MU_FEEDBACK_NG16_SUPPORT_FSZ 1 257*4882a593Smuzhiyun #define HE_PHY_SU_CODEBOOK_SUPPORT_IDX 48 /* Codebook Sz {4, 2} For SU */ 258*4882a593Smuzhiyun #define HE_PHY_SU_CODEBOOK_SUPPORT_FSZ 1 259*4882a593Smuzhiyun #define HE_PHY_MU_CODEBOOK_SUPPORT_IDX 49 /* Codebook Size {7, 5} For MU */ 260*4882a593Smuzhiyun #define HE_PHY_MU_CODEBOOK_SUPPORT_FSZ 1 261*4882a593Smuzhiyun #define HE_PHY_TRG_SU_BFM_FEEDBACK_IDX 50 /* Triggered SU TXBF Feedback */ 262*4882a593Smuzhiyun #define HE_PHY_TRG_SU_BFM_FEEDBACK_FSZ 1 263*4882a593Smuzhiyun #define HE_PHY_TRG_MU_BFM_FEEDBACK_IDX 51 /* Triggered MU TXBF partial BW Feedback */ 264*4882a593Smuzhiyun #define HE_PHY_TRG_MU_BFM_FEEDBACK_FSZ 1 265*4882a593Smuzhiyun #define HE_PHY_TRG_CQI_FEEDBACK_IDX 52 /* Triggered CQI Feedback */ 266*4882a593Smuzhiyun #define HE_PHY_TRG_CQI_FEEDBACK_FSZ 1 267*4882a593Smuzhiyun #define HE_PHY_PART_BW_EXT_RANGE_IDX 53 /* Partial BW Extended Range */ 268*4882a593Smuzhiyun #define HE_PHY_PART_BW_EXT_RANGE_FSZ 1 269*4882a593Smuzhiyun #define HE_PHY_DL_MU_MIMO_PART_BW_IDX 54 /* Partial Bandwidth DL MU MIMO */ 270*4882a593Smuzhiyun #define HE_PHY_DL_MU_MIMO_PART_BW_FSZ 1 271*4882a593Smuzhiyun #define HE_PHY_PPE_THRESH_PRESENT_IDX 55 /* PPE Threshold Present */ 272*4882a593Smuzhiyun #define HE_PHY_PPE_THRESH_PRESENT_FSZ 1 273*4882a593Smuzhiyun #define HE_PHY_SRP_SR_SUPPORT_IDX 56 /* SRP based SR Support */ 274*4882a593Smuzhiyun #define HE_PHY_SRP_SR_SUPPORT_FSZ 1 275*4882a593Smuzhiyun #define HE_PHY_POWER_BOOST_FACTOR_IDX 57 /* Power Boost Factor Support */ 276*4882a593Smuzhiyun #define HE_PHY_POWER_BOOST_FACTOR_FSZ 1 277*4882a593Smuzhiyun #define HE_PHY_4X_LTF_0_8_GI_SUPPORT_IDX 58 /* HE SU PPDU And HE MU PPDU with 278*4882a593Smuzhiyun * 4x HE-LTF And 0.8 us GI 279*4882a593Smuzhiyun */ 280*4882a593Smuzhiyun #define HE_PHY_4X_LTF_0_8_GI_SUPPORT_FSZ 1 281*4882a593Smuzhiyun #define HE_PHY_MAX_NC_IDX 59 /* Maximum NC */ 282*4882a593Smuzhiyun #define HE_PHY_MAX_NC_FSZ 3 283*4882a593Smuzhiyun #define HE_PHY_STBC_TX_ABOVE_80_IDX 62 /* STBC Tx above 80 MHz */ 284*4882a593Smuzhiyun #define HE_PHY_STBC_TX_ABOVE_80_FSZ 1 285*4882a593Smuzhiyun #define HE_PHY_STBC_RX_ABOVE_80_IDX 63 /* STBC Rx above 80 MHz */ 286*4882a593Smuzhiyun #define HE_PHY_STBC_RX_ABOVE_80_FSZ 1 287*4882a593Smuzhiyun #define HE_PHY_ER_SU_4X_LTF_0_8_GI_IDX 64 /* ER SU PPDU 4x HE-LTF 0.8 GI */ 288*4882a593Smuzhiyun #define HE_PHY_ER_SU_4X_LTF_0_8_GI_FSZ 1 289*4882a593Smuzhiyun #define HE_PHY_20_IN_40_2G_IDX 65 /* 20 in 40 MHz HE PPDU in 2G */ 290*4882a593Smuzhiyun #define HE_PHY_20_IN_40_2G_FSZ 1 291*4882a593Smuzhiyun #define HE_PHY_20_IN_160_80P80_IDX 66 /* 20 in 160/80+80 MHz HE PPDU */ 292*4882a593Smuzhiyun #define HE_PHY_20_IN_160_80P80_FSZ 1 293*4882a593Smuzhiyun #define HE_PHY_80_IN_160_80P80_IDX 67 /* 80 in 160/80+80 MHz HE PPDU */ 294*4882a593Smuzhiyun #define HE_PHY_80_IN_160_80P80_FSZ 1 295*4882a593Smuzhiyun #define HE_PHY_ER_SU_1X_LTF_0_8_GI_IDX 68 /* HE ER SU 1x HE-LTF 0.8 GI */ 296*4882a593Smuzhiyun #define HE_PHY_ER_SU_1X_LTF_0_8_GI_FSZ 1 297*4882a593Smuzhiyun #define HE_PHY_MIDAMBLE_2X_1X_LTF_IDX 69 /* Midamble TX/RX 2x & 1x HE LTF */ 298*4882a593Smuzhiyun #define HE_PHY_MIDAMBLE_2X_1X_LTF_FSZ 1 299*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_BW_IDX 70 /* DCM Max BW */ 300*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_BW_FSZ 2 301*4882a593Smuzhiyun #define HE_PHY_ABOVE16_OFDM_SYM_IDX 72 /* Longer than 16 HE-SIGB OFDM 302*4882a593Smuzhiyun * Symbol support 303*4882a593Smuzhiyun */ 304*4882a593Smuzhiyun #define HE_PHY_ABOVE16_OFDM_SYM_FSZ 1 305*4882a593Smuzhiyun #define HE_PHY_NON_TRIG_CQI_FDBK_IDX 73 /* Non-triggered CQI feedback Support */ 306*4882a593Smuzhiyun #define HE_PHY_NON_TRIG_CQI_FDBK_FSZ 1 307*4882a593Smuzhiyun #define HE_PHY_1024_QAM_TX_BELOW_242_RU_IDX 74 /* Tx 1024 QAM in < 242 RU Tone Support */ 308*4882a593Smuzhiyun #define HE_PHY_1024_QAM_TX_BELOW_242_RU_FSZ 1 309*4882a593Smuzhiyun #define HE_PHY_1024_QAM_RX_BELOW_242_RU_IDX 75 /* Rx 1024 QAM in < 242 RU Tone Support */ 310*4882a593Smuzhiyun #define HE_PHY_1024_QAM_RX_BELOW_242_RU_FSZ 1 311*4882a593Smuzhiyun #define HE_PHY_RX_FULL_BW_MU_COMP_SIGB_IDX 76 /* Rx Full BW MU PPDU with Comp. SIGB */ 312*4882a593Smuzhiyun #define HE_PHY_RX_FULL_BW_MU_COMP_SIGB_FSZ 1 313*4882a593Smuzhiyun #define HE_PHY_RX_FULL_BW_MU_NON_COMP_SIGB_IDX 77 /* Rx Full BW MU PPDU Non-Comp SIGB */ 314*4882a593Smuzhiyun #define HE_PHY_RX_FULL_BW_MU_NON_COMP_SIGB_FSZ 1 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun /* HE Mac Capabilities values */ 317*4882a593Smuzhiyun /* b3-b4: Fragmentation Support field (table 9-262z) */ 318*4882a593Smuzhiyun #define HE_MAC_FRAG_NOSUPPORT 0 /* dynamic fragmentation not supported */ 319*4882a593Smuzhiyun #define HE_MAC_FRAG_PER_MPDU 1 /* dynamic fragmentation of MPDU/SMPDU */ 320*4882a593Smuzhiyun #define HE_MAC_FRAG_ONE_PER_AMPDU 2 /* upto 1 fragment per AMPDU/MMPDU */ 321*4882a593Smuzhiyun #define HE_MAC_FRAG_MULTI_PER_AMPDU 3 /* multiple fragment per AMPDU */ 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun /* b5-b7 : Maximum Number Of Fragmented MSDUs/AMSDUs Exponent */ 324*4882a593Smuzhiyun #define HE_MAC_MAXFRAG_NUM_NO_RESTRICT 7 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun /* b8-b9: Minimum payload size of first fragment */ 327*4882a593Smuzhiyun #define HE_MAC_MINFRAG_NO_RESTRICT 0 /* no restriction on min. payload size */ 328*4882a593Smuzhiyun #define HE_MAC_MINFRAG_SIZE_128 1 /* minimum payload size of 128 Bytes */ 329*4882a593Smuzhiyun #define HE_MAC_MINFRAG_SIZE_256 2 /* minimum payload size of 256 Bytes */ 330*4882a593Smuzhiyun #define HE_MAC_MINFRAG_SIZE_512 3 /* minimum payload size of 512 Bytes */ 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun /* b10-b11: Trigger Frame MAC Padding Duration */ 333*4882a593Smuzhiyun #define HE_MAC_TRIG_MAC_PAD_0 0 334*4882a593Smuzhiyun #define HE_MAC_TRIG_MAC_PAD_8us 1 335*4882a593Smuzhiyun #define HE_MAC_TRIG_MAC_PAD_16us 2 336*4882a593Smuzhiyun 337*4882a593Smuzhiyun /* b15-b16: HE Link Adaptation */ 338*4882a593Smuzhiyun #define HE_MAC_SEND_NO_MFB 0 /* if STA does not provide HE MFB */ 339*4882a593Smuzhiyun #define HE_MAC_SEND_UNSOLICATED_MFB 2 /* if STA provides unsolicited HE MFB */ 340*4882a593Smuzhiyun #define HE_MAC_SEND_MFB_IN_RESPONSE 3 /* if STA can provide HE MFB in response to 341*4882a593Smuzhiyun * HE MRQ and if the STA provides unsolicited HE MFB. 342*4882a593Smuzhiyun */ 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun /* b27-b28: Max. AMPDU Length HE Exponent */ 345*4882a593Smuzhiyun /* Use Max AMPDU length exponent from VHT or HT */ 346*4882a593Smuzhiyun #define HE_MAC_MAX_AMPDU_EXP_ADOPT_VHT (0) 347*4882a593Smuzhiyun /* Max. AMPDU length = 348*4882a593Smuzhiyun * 2^(20 + MAX_AMPDU_LEN_HE_EXPO_1) -1 (if this value in VHT CAP is 7) or 349*4882a593Smuzhiyun * 2^(16 + MAX_AMPDU_LEN_HE_EXPO_1) -1 (if this value in HT CAP is 3). 350*4882a593Smuzhiyun */ 351*4882a593Smuzhiyun #define HE_MAC_MAX_AMPDU_EXP_HE_1 (1) 352*4882a593Smuzhiyun /* Max. AMPDU length = 353*4882a593Smuzhiyun * 2^(20 + MAX_AMPDU_LEN_HE_EXPO_2) -1 (if this value in VHT CAP is 7) or 354*4882a593Smuzhiyun * 2^(16 + MAX_AMPDU_LEN_HE_EXPO_2) -1 (if this value in HT CAP is 3). 355*4882a593Smuzhiyun */ 356*4882a593Smuzhiyun #define HE_MAC_MAX_AMPDU_EXP_HE_2 (2) 357*4882a593Smuzhiyun /* Max. AMPDU length = 358*4882a593Smuzhiyun * 2^(20 + MAX_AMPDU_LEN_HE_EXPO_3) -1 (if this value in VHT CAP is 7) or 359*4882a593Smuzhiyun * 2^(16 + MAX_AMPDU_LEN_HE_EXPO_3) -1 (if this value in HT CAP is 3). 360*4882a593Smuzhiyun */ 361*4882a593Smuzhiyun #define HE_MAC_MAX_AMPDU_EXP_HE_3 (3) 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun /* HE PHY Capabilities values */ 364*4882a593Smuzhiyun /* b1-b7: Channel Width Support field */ 365*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_2G_40 0x01 366*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_5G_80 0x02 367*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_5G_160 0x04 368*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_5G_80P80 0x08 369*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_2G_242RU 0x10 370*4882a593Smuzhiyun #define HE_PHY_CH_WIDTH_5G_242RU 0x20 371*4882a593Smuzhiyun 372*4882a593Smuzhiyun /* b8-b11: Preamble puncturing Rx */ 373*4882a593Smuzhiyun /* Rx of 80 MHz preamble where secondary 20 MHz subchannel is punctured */ 374*4882a593Smuzhiyun #define HE_PHY_PREAMBLE_PUNC_RX_0 0x1 375*4882a593Smuzhiyun /* Rx of 80 MHz preamble where one of two 20 MHz subchannels in secondary 40 MHz is punctured */ 376*4882a593Smuzhiyun #define HE_PHY_PREAMBLE_PUNC_RX_1 0x2 377*4882a593Smuzhiyun /* Rx of 160 MHz or 80+80 MHz preamble where primary 80 MHz of 378*4882a593Smuzhiyun * preamble only the secondary 20 MHz is punctured 379*4882a593Smuzhiyun */ 380*4882a593Smuzhiyun #define HE_PHY_PREAMBLE_PUNC_RX_2 0x4 381*4882a593Smuzhiyun /* Rx of 160 MHz or 80+80 MHz preamble where primary 80 MHz of 382*4882a593Smuzhiyun * the preamble, the primary 40 MHz is present 383*4882a593Smuzhiyun */ 384*4882a593Smuzhiyun #define HE_PHY_PREAMBLE_PUNC_RX_3 0x8 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun /* b24-b26: DCM Encoding Tx */ 387*4882a593Smuzhiyun #define HE_PHY_TX_DCM_ENC_NOSUPPORT 0x00 388*4882a593Smuzhiyun #define HE_PHY_TX_DCM_ENC_BPSK 0x01 389*4882a593Smuzhiyun #define HE_PHY_TX_DCM_ENC_QPSK 0x02 390*4882a593Smuzhiyun #define HE_PHY_TX_DCM_ENC_QAM 0x03 391*4882a593Smuzhiyun 392*4882a593Smuzhiyun #define HE_PHY_TX_DCM_1_SS 0x00 393*4882a593Smuzhiyun #define HE_PHY_TX_DCM_2_SS 0x01 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun /* b27-b29: DCM Encoding Rx */ 396*4882a593Smuzhiyun #define HE_PHY_RX_DCM_ENC_NOSUPPORT 0x00 397*4882a593Smuzhiyun #define HE_PHY_RX_DCM_ENC_BPSK 0x01 398*4882a593Smuzhiyun #define HE_PHY_RX_DCM_ENC_QPSK 0x02 399*4882a593Smuzhiyun #define HE_PHY_RX_DCM_ENC_QAM 0x03 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun #define HE_PHY_RX_DCM_1_SS 0x00 402*4882a593Smuzhiyun #define HE_PHY_RX_DCM_2_SS 0x01 403*4882a593Smuzhiyun 404*4882a593Smuzhiyun /* b70-b71: DCM Max BW */ 405*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_BW_20 0 406*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_BW_40 1 407*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_BW_80 2 408*4882a593Smuzhiyun #define HE_PHY_DCM_MAX_BW_160 3 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun /* HE Duration based RTS Threshold Figure 9-589cr */ 411*4882a593Smuzhiyun #define HE_RTS_THRES_DISABLED 1023 412*4882a593Smuzhiyun #define HE_RTS_THRES_ALL_FRAMES 0 413*4882a593Smuzhiyun #define HE_RTS_THRES_MASK 0x03ff 414*4882a593Smuzhiyun 415*4882a593Smuzhiyun /* Tx Rx HE MCS Support field format : Table 9-589cm */ 416*4882a593Smuzhiyun #define HE_TX_RX_MCS_NSS_SUP_FIELD_MIN_SIZE 4u 417*4882a593Smuzhiyun 418*4882a593Smuzhiyun /** 419*4882a593Smuzhiyun * Bandwidth configuration indices used in the HE TX-RX MCS support field 420*4882a593Smuzhiyun * Section 9.4.2.218.4 421*4882a593Smuzhiyun */ 422*4882a593Smuzhiyun #define HE_BW20_CFG_IDX 0 423*4882a593Smuzhiyun #define HE_BW40_CFG_IDX 1 424*4882a593Smuzhiyun #define HE_BW80_CFG_IDX 2 425*4882a593Smuzhiyun #define HE_BW80P80_CFG_IDX 3 426*4882a593Smuzhiyun #define HE_BW160_CFG_IDX 4 427*4882a593Smuzhiyun #define HE_MAX_BW_CFG 5 428*4882a593Smuzhiyun 429*4882a593Smuzhiyun #define HE_MCS_CODE_0_7 0u 430*4882a593Smuzhiyun #define HE_MCS_CODE_0_9 1u 431*4882a593Smuzhiyun #define HE_MCS_CODE_0_11 2u 432*4882a593Smuzhiyun #define HE_MCS_CODE_NONE 3u 433*4882a593Smuzhiyun #define HE_MCS_CODE_SIZE 2u /* num bits */ 434*4882a593Smuzhiyun #define HE_MCS_CODE_MASK 0x3u /* mask for 1-stream */ 435*4882a593Smuzhiyun 436*4882a593Smuzhiyun /* Defines for The Max HE MCS For n SS subfield (where n = 1, ..., 8) */ 437*4882a593Smuzhiyun #define HE_MCS_MAP_NSS_MAX 8u /* Max number of streams possible */ 438*4882a593Smuzhiyun #define HE_MCS_NSS_SET_MASK 0xffffu /* Field is to be 16 bits long */ 439*4882a593Smuzhiyun #define HE_MCS_NSS_GET_SS_IDX(nss) (((nss)-1u) * HE_MCS_CODE_SIZE) 440*4882a593Smuzhiyun #define HE_MCS_NSS_GET_MCS(nss, mcs_nss_map) \ 441*4882a593Smuzhiyun (((mcs_nss_map) >> HE_MCS_NSS_GET_SS_IDX(nss)) & HE_MCS_CODE_MASK) 442*4882a593Smuzhiyun #define HE_MCS_NSS_SET_MCS(nss, mcs_code, mcs_nss_map) \ 443*4882a593Smuzhiyun do { \ 444*4882a593Smuzhiyun (mcs_nss_map) &= (~(HE_MCS_CODE_MASK << HE_MCS_NSS_GET_SS_IDX(nss))); \ 445*4882a593Smuzhiyun (mcs_nss_map) |= (((mcs_code) & HE_MCS_CODE_MASK) << HE_MCS_NSS_GET_SS_IDX(nss)); \ 446*4882a593Smuzhiyun (mcs_nss_map) &= (HE_MCS_NSS_SET_MASK); \ 447*4882a593Smuzhiyun } while (0) 448*4882a593Smuzhiyun 449*4882a593Smuzhiyun #define HE_BW80_ORDR_IDX 0u 450*4882a593Smuzhiyun #define HE_BW160_ORDR_IDX 1u 451*4882a593Smuzhiyun #define HE_BW80P80_ORDR_IDX 2u 452*4882a593Smuzhiyun 453*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_UNIT_MAP_LEN 2u /* 2 bytes */ 454*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_UNIT_MAP_SZ (HE_MCS_NSS_SUP_FLD_UNIT_MAP_LEN * 8u) /* 16 bits */ 455*4882a593Smuzhiyun 456*4882a593Smuzhiyun /* Two unit-maps (TX+RX) */ 457*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_TXRX_MAP_LEN (HE_MCS_NSS_SUP_FLD_UNIT_MAP_LEN * 2u) 458*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_TXRX_MAP_SZ (HE_MCS_NSS_SUP_FLD_TXRX_MAP_LEN * 8u) /* 32 bits */ 459*4882a593Smuzhiyun 460*4882a593Smuzhiyun /* One TX-RX unit-map (80 MHz) */ 461*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_MIN_LEN (HE_MCS_NSS_SUP_FLD_TXRX_MAP_LEN) 462*4882a593Smuzhiyun /* Three TX-RX unit-maps (80 MHz, 160MHz, 80+80MHz) */ 463*4882a593Smuzhiyun #define HE_MCS_NSS_SUP_FLD_MAX_LEN (HE_MCS_NSS_SUP_FLD_TXRX_MAP_LEN * 3u) 464*4882a593Smuzhiyun 465*4882a593Smuzhiyun /* HE Capabilities element */ 466*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_cap_ie { 467*4882a593Smuzhiyun uint8 id; 468*4882a593Smuzhiyun uint8 len; 469*4882a593Smuzhiyun uint8 id_ext; 470*4882a593Smuzhiyun he_mac_cap_t mac_cap; /* MAC Capabilities Information */ 471*4882a593Smuzhiyun he_phy_cap_t phy_cap; /* PHY Capabilities Information */ 472*4882a593Smuzhiyun /* he_tx_rx_mcs_nss_sup_t txx_rx_mcs_nss_sup; */ /* Tx Rx HE MCS NSS Support (variable) */ 473*4882a593Smuzhiyun /* he_ppe_ths_t ppe_ths; */ /* PPE Thresholds (optional) */ 474*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 475*4882a593Smuzhiyun 476*4882a593Smuzhiyun typedef struct he_cap_ie he_cap_ie_t; 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun /* Multiple BSSID element */ 479*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct nontrans_BSSID_cap { 480*4882a593Smuzhiyun uint8 id; /* 83 */ 481*4882a593Smuzhiyun uint8 len; 482*4882a593Smuzhiyun uint16 capability; 483*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 484*4882a593Smuzhiyun 485*4882a593Smuzhiyun typedef struct nontrans_BSSID_cap nontrans_BSSID_cap_t; 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct multi_BSSID_index { 488*4882a593Smuzhiyun uint8 id; /* 85 */ 489*4882a593Smuzhiyun uint8 len; /* 3 in beacon, 1 in probe response */ 490*4882a593Smuzhiyun uint8 bssid_index; /* between 1 and 2^n - 1 */ 491*4882a593Smuzhiyun uint8 dtim_period; /* only valid in beacon */ 492*4882a593Smuzhiyun uint8 dtim_count; /* only valid in beacon */ 493*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 494*4882a593Smuzhiyun 495*4882a593Smuzhiyun typedef struct multi_BSSID_index multi_BSSID_index_t; 496*4882a593Smuzhiyun 497*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct fms_descriptor { 498*4882a593Smuzhiyun uint8 id; /* 86 */ 499*4882a593Smuzhiyun uint8 len; 500*4882a593Smuzhiyun uint8 num_FMS_counters; 501*4882a593Smuzhiyun uint8 *FMS_counters; 502*4882a593Smuzhiyun uint8 *FMSID; 503*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 504*4882a593Smuzhiyun 505*4882a593Smuzhiyun typedef struct fms_descriptor fms_descriptor_t; 506*4882a593Smuzhiyun 507*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct nontrans_BSSID_profile_subie { 508*4882a593Smuzhiyun uint8 subie_id; /* 0 */ 509*4882a593Smuzhiyun uint8 subie_len; 510*4882a593Smuzhiyun uint8 moreie[1]; 511*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 512*4882a593Smuzhiyun 513*4882a593Smuzhiyun typedef struct nontrans_BSSID_profile_subie nontrans_BSSID_profile_subie_t; 514*4882a593Smuzhiyun 515*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct multi_BSSID_ie { 516*4882a593Smuzhiyun uint8 id; 517*4882a593Smuzhiyun uint8 len; 518*4882a593Smuzhiyun uint8 maxBSSID_indicator; 519*4882a593Smuzhiyun nontrans_BSSID_profile_subie_t profile[1]; 520*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 521*4882a593Smuzhiyun 522*4882a593Smuzhiyun typedef struct multi_BSSID_ie multi_BSSID_ie_t; 523*4882a593Smuzhiyun #define DOT11_MULTIPLE_BSSID_PROFILE_SUBID 0 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun /* Table 9-262ab, Highest MCS Supported subfield encoding */ 526*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_0_7 0 527*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_0_8 1 528*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_0_9 2 529*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_0_10 3 530*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_0_11 4 531*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_SIZE 3 /* num bits for 1-stream */ 532*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_MASK 0x7 /* mask for 1-stream */ 533*4882a593Smuzhiyun 534*4882a593Smuzhiyun #define HE_CAP_MCS_MAP_NSS_MAX 8u /* Max number of streams possible */ 535*4882a593Smuzhiyun 536*4882a593Smuzhiyun #define HE_MAX_RU_COUNT 4u /* Max number of RU allocation possible */ 537*4882a593Smuzhiyun 538*4882a593Smuzhiyun #define HE_NSSM1_IDX 0 /* Offset of NSSM1 field */ 539*4882a593Smuzhiyun #define HE_NSSM1_LEN 3 /* length of NSSM1 field in bits */ 540*4882a593Smuzhiyun 541*4882a593Smuzhiyun #define HE_RU_INDEX_MASK_IDX 3 /* Offset of RU index mask field */ 542*4882a593Smuzhiyun #define HE_RU_INDEX_MASK_LEN 4u /* length of RU Index mask field in bits */ 543*4882a593Smuzhiyun 544*4882a593Smuzhiyun /* PPE Threshold field (figure 9-589co) */ 545*4882a593Smuzhiyun #define HE_PPE_THRESH_NSS_RU_FSZ 3u 546*4882a593Smuzhiyun 547*4882a593Smuzhiyun /* PPE Threshold Info field (figure 9-589cp) */ 548*4882a593Smuzhiyun /* ruc: RU Count; NSSnM1: NSSn - 1; RUmM1: RUm - 1 */ 549*4882a593Smuzhiyun /* bit offset in PPE Threshold field */ 550*4882a593Smuzhiyun #define HE_PPET16_BIT_OFFSET(ruc, NSSnM1, RUmM1) \ 551*4882a593Smuzhiyun (HE_NSSM1_LEN + HE_RU_INDEX_MASK_LEN + ((NSSnM1) * (ruc) + (RUmM1)) * 6) 552*4882a593Smuzhiyun 553*4882a593Smuzhiyun #define HE_PPET8_BIT_OFFSET(ruc, NSSnM1, RUmM1) \ 554*4882a593Smuzhiyun (HE_NSSM1_LEN + HE_RU_INDEX_MASK_LEN + ((NSSnM1) * (ruc) + (RUmM1)) * 6 + 3) 555*4882a593Smuzhiyun 556*4882a593Smuzhiyun /* Total PPE Threshold field byte length (Figure 9-589cq) */ 557*4882a593Smuzhiyun #define HE_PPE_THRESH_LEN(nss, ruc) \ 558*4882a593Smuzhiyun (CEIL((HE_NSSM1_LEN + HE_RU_INDEX_MASK_LEN + ((nss) * (ruc) * 6)), 8)) 559*4882a593Smuzhiyun 560*4882a593Smuzhiyun /* RU Allocation Index encoding (table 9-262ae) */ 561*4882a593Smuzhiyun #define HE_RU_ALLOC_IDX_242 0 /* RU alloc: 282 tones */ 562*4882a593Smuzhiyun #define HE_RU_ALLOC_IDX_484 1 /* RU alloc: 484 tones - 40Mhz */ 563*4882a593Smuzhiyun #define HE_RU_ALLOC_IDX_996 2 /* RU alloc: 996 tones - 80Mhz */ 564*4882a593Smuzhiyun #define HE_RU_ALLOC_IDX_2x996 3 /* RU alloc: 2x996 tones - 80p80/160Mhz */ 565*4882a593Smuzhiyun 566*4882a593Smuzhiyun /* Constellation Index encoding (table 9-262ac) */ 567*4882a593Smuzhiyun #define HE_CONST_IDX_BPSK 0 568*4882a593Smuzhiyun #define HE_CONST_IDX_QPSK 1 569*4882a593Smuzhiyun #define HE_CONST_IDX_16QAM 2 570*4882a593Smuzhiyun #define HE_CONST_IDX_64QAM 3 571*4882a593Smuzhiyun #define HE_CONST_IDX_256QAM 4 572*4882a593Smuzhiyun #define HE_CONST_IDX_1024QAM 5 573*4882a593Smuzhiyun #define HE_CONST_IDX_RSVD 6 574*4882a593Smuzhiyun #define HE_CONST_IDX_NONE 7 575*4882a593Smuzhiyun 576*4882a593Smuzhiyun /* Min HE cap ie length when only 80Mhz is supported */ 577*4882a593Smuzhiyun #define HE_CAP_IE_MIN_LEN (sizeof(he_cap_ie_t) - TLV_HDR_LEN + HE_MCS_NSS_SUP_FLD_MIN_LEN) 578*4882a593Smuzhiyun 579*4882a593Smuzhiyun /* Max HE cap ie length considering MAX NSS and RU */ 580*4882a593Smuzhiyun #define HE_CAP_IE_MAX_LEN (sizeof(he_cap_ie_t) - TLV_HDR_LEN + HE_MCS_NSS_SUP_FLD_MAX_LEN + \ 581*4882a593Smuzhiyun HE_PPE_THRESH_LEN(HE_CAP_MCS_MAP_NSS_MAX, HE_MAX_RU_COUNT)) 582*4882a593Smuzhiyun /** 583*4882a593Smuzhiyun * HE Operation IE (Section 9.4.2.238) 584*4882a593Smuzhiyun */ 585*4882a593Smuzhiyun /* HE Operation Parameters field (figure 9-589cr) */ 586*4882a593Smuzhiyun #define HE_OP_PARAMS_SIZE 3u 587*4882a593Smuzhiyun typedef uint8 he_op_parms_t[HE_OP_PARAMS_SIZE]; 588*4882a593Smuzhiyun 589*4882a593Smuzhiyun /* bit position and field width */ 590*4882a593Smuzhiyun #define HE_OP_DEF_PE_DUR_IDX 0u /* Default PE Duration */ 591*4882a593Smuzhiyun #define HE_OP_DEF_PE_DUR_FSZ 3u 592*4882a593Smuzhiyun #define HE_OP_TWT_REQD_IDX 3u /* TWT Required */ 593*4882a593Smuzhiyun #define HE_OP_TWT_REQD_FSZ 1u 594*4882a593Smuzhiyun #define HE_OP_TXOP_DUR_RTS_THRESH_IDX 4u /* TXOP Duration Based RTS Threshold */ 595*4882a593Smuzhiyun #define HE_OP_TXOP_DUR_RTS_THRESH_FSZ 10u 596*4882a593Smuzhiyun #define HE_OP_VHT_OP_PRESENT_IDX 14u /* VHT Oper Info Present */ 597*4882a593Smuzhiyun #define HE_OP_VHT_OP_PRESENT_FSZ 1u 598*4882a593Smuzhiyun #define HE_OP_COL_LOC_BSS_IDX 15u 599*4882a593Smuzhiyun #define HE_OP_COL_LOC_BSS_FSZ 1u 600*4882a593Smuzhiyun #define HE_OP_ER_SU_DISABLE_IDX 16u 601*4882a593Smuzhiyun #define HE_OP_ER_SU_DISABLE_FSZ 1u 602*4882a593Smuzhiyun #define HE_OP_6G_OP_INFO_PRESENT_IDX 17u 603*4882a593Smuzhiyun #define HE_OP_6G_OP_INFO_PRESENT_FSZ 1u 604*4882a593Smuzhiyun 605*4882a593Smuzhiyun /* BSS Color Information field (figure 9-589cs) */ 606*4882a593Smuzhiyun #define HE_OP_BSS_COLOR_IDX 0 /* BSS Color */ 607*4882a593Smuzhiyun #define HE_OP_BSS_COLOR_FSZ 6 608*4882a593Smuzhiyun #define HE_OP_PART_BSS_COLOR_IDX 6 /* Partial BSS Color */ 609*4882a593Smuzhiyun #define HE_OP_PART_BSS_COLOR_FSZ 1 610*4882a593Smuzhiyun #define HE_OP_DISABLE_BSSCOLOR_IDX 7 /* BSS Color Disable */ 611*4882a593Smuzhiyun #define HE_OP_DISABLE_BSSCOLOR_FSZ 1 612*4882a593Smuzhiyun 613*4882a593Smuzhiyun /* b4-b13: TXOP Duration RTS threshold */ 614*4882a593Smuzhiyun #define HE_OP_TXOP_RTS_THRESH_DISABLED 1023u 615*4882a593Smuzhiyun 616*4882a593Smuzhiyun #define HE_BASIC_MCS_NSS_SIZE 2u 617*4882a593Smuzhiyun typedef uint8 he_basic_mcs_nss_set_t[HE_BASIC_MCS_NSS_SIZE]; 618*4882a593Smuzhiyun 619*4882a593Smuzhiyun #define HE_OP_MAX_BSSID_IND_LEN 1u 620*4882a593Smuzhiyun #define HE_OP_6G_OPER_INFO_LEN 5u 621*4882a593Smuzhiyun /* HE Operation element */ 622*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_op_ie { 623*4882a593Smuzhiyun uint8 id; 624*4882a593Smuzhiyun uint8 len; 625*4882a593Smuzhiyun uint8 id_ext; 626*4882a593Smuzhiyun he_op_parms_t parms; 627*4882a593Smuzhiyun uint8 bsscolor_info; 628*4882a593Smuzhiyun he_basic_mcs_nss_set_t mcs_nss_op; /* Basic HE MCS & NSS Set */ 629*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 630*4882a593Smuzhiyun 631*4882a593Smuzhiyun typedef struct he_op_ie he_op_ie_t; 632*4882a593Smuzhiyun 633*4882a593Smuzhiyun #define HE_OP_IE_MIN_LEN (sizeof(he_op_ie_t) - TLV_HDR_LEN) 634*4882a593Smuzhiyun #define HE_OP_IE_MAX_LEN (sizeof(he_op_ie_t) - TLV_HDR_LEN + VHT_OP_INFO_LEN +\ 635*4882a593Smuzhiyun HE_OP_MAX_BSSID_IND_LEN + HE_OP_6G_OPER_INFO_LEN) 636*4882a593Smuzhiyun 637*4882a593Smuzhiyun #define HE_6G_OP_BW_20 0u 638*4882a593Smuzhiyun #define HE_6G_OP_BW_40 1u 639*4882a593Smuzhiyun #define HE_6G_OP_BW_80 2u 640*4882a593Smuzhiyun #define HE_6G_OP_BW_160_80P80 3u 641*4882a593Smuzhiyun 642*4882a593Smuzhiyun /* Regulatory Info subfield in the United States */ 643*4882a593Smuzhiyun #define HE_6G_OP_REG_INFO_INDOOR_AP_US 0u 644*4882a593Smuzhiyun #define HE_6G_OP_REG_INFO_SP_AP_US 1u 645*4882a593Smuzhiyun 646*4882a593Smuzhiyun /* Figure 9-788l Control field format in Draft P802.11ax_D6.0 */ 647*4882a593Smuzhiyun #define HE_6G_CTL_CHBW_MASK 0x03u 648*4882a593Smuzhiyun #define HE_6G_OP_CTL_CHBW(ctl) (ctl & HE_6G_CTL_CHBW_MASK) 649*4882a593Smuzhiyun #define HE_6G_CTL_DUP_BCN_MASK 0x04u 650*4882a593Smuzhiyun #define HE_6G_CTL_REG_INFO_MASK 0x38u 651*4882a593Smuzhiyun #define HE_6G_CTL_REG_INFO_SHIFT 3u 652*4882a593Smuzhiyun #define HE_6G_OP_CTL_REG_INFO(ctl) \ 653*4882a593Smuzhiyun ((ctl & HE_6G_CTL_REG_INFO_MASK) >> HE_6G_CTL_REG_INFO_SHIFT) 654*4882a593Smuzhiyun 655*4882a593Smuzhiyun /* HE 6G Operation info */ 656*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_6g_op_info { 657*4882a593Smuzhiyun uint8 pri_chan; 658*4882a593Smuzhiyun uint8 control; 659*4882a593Smuzhiyun uint8 seg0; 660*4882a593Smuzhiyun uint8 seg1; 661*4882a593Smuzhiyun uint8 min_rate; 662*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 663*4882a593Smuzhiyun 664*4882a593Smuzhiyun typedef struct he_6g_op_info he_6g_op_info_t; 665*4882a593Smuzhiyun 666*4882a593Smuzhiyun /* HE Extended Capabilities element */ 667*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_6g_cap_ie { 668*4882a593Smuzhiyun uint8 id; 669*4882a593Smuzhiyun uint8 len; 670*4882a593Smuzhiyun uint8 id_ext; 671*4882a593Smuzhiyun uint16 cap_info; /* Capabilities Information */ 672*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 673*4882a593Smuzhiyun 674*4882a593Smuzhiyun typedef struct he_6g_cap_ie he_6g_cap_ie_t; 675*4882a593Smuzhiyun #define HE_6G_CAP_IE_LEN sizeof(he_6g_cap_ie_t) 676*4882a593Smuzhiyun 677*4882a593Smuzhiyun /* HE Capabilities Information bit position and fieldwidth. 678*4882a593Smuzhiyun * Figure 9-787ai Capabilities Information field format in 679*4882a593Smuzhiyun * Draft P802.11ax_D5.0. 680*4882a593Smuzhiyun */ 681*4882a593Smuzhiyun #define HE_6G_CAP_MIN_MPDU_START_MASK 0x0007u 682*4882a593Smuzhiyun #define HE_6G_CAP_MAX_AMPDU_LEN_EXP_MASK 0x0038u 683*4882a593Smuzhiyun #define HE_6G_CAP_MAX_AMPDU_LEN_EXP_SHIFT 3u 684*4882a593Smuzhiyun #define HE_6G_CAP_MAX_MPDU_LEN_MASK 0x00C0u 685*4882a593Smuzhiyun #define HE_6G_CAP_MAX_MPDU_LEN_SHIFT 6u 686*4882a593Smuzhiyun #define HE_6G_CAP_SM_PW_SAVE_MASK 0x0600u 687*4882a593Smuzhiyun #define HE_6G_CAP_SM_PW_SAVE_SHIFT 9u 688*4882a593Smuzhiyun #define HE_6G_CAP_RD_RESPONDER_MASK 0x0800u 689*4882a593Smuzhiyun #define HE_6G_CAP_RD_RESPONDER_SHIFT 11u 690*4882a593Smuzhiyun #define HE_6G_CAP_RX_ANT_PATN_CONST_MASK 0x1000u 691*4882a593Smuzhiyun #define HE_6G_CAP_RX_ANT_PATN_CONST_SHIFT 12u 692*4882a593Smuzhiyun #define HE_6G_CAP_TX_ANT_PATN_CONST_MASK 0x2000u 693*4882a593Smuzhiyun #define HE_6G_CAP_TX_ANT_PATN_CONST_SHIFT 13u 694*4882a593Smuzhiyun 695*4882a593Smuzhiyun #define HE_6G_CAP_MIN_MPDU_START(cap) ((cap) & HE_6G_CAP_MIN_MPDU_START_MASK) 696*4882a593Smuzhiyun #define HE_6G_CAP_MAX_AMPDU_LEN_EXP(cap) (((cap) & HE_6G_CAP_MAX_AMPDU_LEN_EXP_MASK) >> \ 697*4882a593Smuzhiyun HE_6G_CAP_MAX_AMPDU_LEN_EXP_SHIFT) 698*4882a593Smuzhiyun #define HE_6G_CAP_MAX_MPDU_LEN(cap) (((cap) & HE_6G_CAP_MAX_MPDU_LEN_MASK) >> \ 699*4882a593Smuzhiyun HE_6G_CAP_MAX_MPDU_LEN_SHIFT) 700*4882a593Smuzhiyun #define HE_6G_CAP_SM_PW_SAVE(cap) (((cap) & HE_6G_CAP_SM_PW_SAVE_MASK) >> \ 701*4882a593Smuzhiyun HE_6G_CAP_SM_PW_SAVE_SHIFT) 702*4882a593Smuzhiyun #define HE_6G_CAP_RD_RESPONDER(cap) (((cap) & HE_6G_CAP_RD_RESPONDER_MASK) != 0) 703*4882a593Smuzhiyun #define HE_6G_CAP_RX_ANT_PATN_CONST(cap) (((cap) & HE_6G_CAP_RX_ANT_PATN_CONST_MASK) != 0) 704*4882a593Smuzhiyun #define HE_6G_CAP_TX_ANT_PATN_CONST(cap) (((cap) & HE_6G_CAP_TX_ANT_PATN_CONST_MASK) != 0) 705*4882a593Smuzhiyun 706*4882a593Smuzhiyun /** 707*4882a593Smuzhiyun * UORA parameter set element (sec 9.4.2.244) 708*4882a593Smuzhiyun */ 709*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_uora_ie { 710*4882a593Smuzhiyun uint8 id; 711*4882a593Smuzhiyun uint8 len; 712*4882a593Smuzhiyun uint8 id_ext; 713*4882a593Smuzhiyun uint8 ocw_range; 714*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 715*4882a593Smuzhiyun 716*4882a593Smuzhiyun typedef struct he_uora_ie he_uora_ie_t; 717*4882a593Smuzhiyun 718*4882a593Smuzhiyun /* Bit field Masks */ 719*4882a593Smuzhiyun #define HE_UORA_EOCW_MIN_IDX 0u 720*4882a593Smuzhiyun #define HE_UORA_EOCW_MIN_FSZ 3u 721*4882a593Smuzhiyun #define HE_UORA_EOCW_MAX_IDX 3u 722*4882a593Smuzhiyun #define HE_UORA_EOCW_MAX_FSZ 3u 723*4882a593Smuzhiyun /* Reserved -bit6 -7 */ 724*4882a593Smuzhiyun 725*4882a593Smuzhiyun /** 726*4882a593Smuzhiyun * MU EDCA parameter set element (sec 9.4.2.245) 727*4882a593Smuzhiyun */ 728*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_mu_ac_param_record { 729*4882a593Smuzhiyun uint8 aci_aifsn; 730*4882a593Smuzhiyun uint8 ecw_min_max; 731*4882a593Smuzhiyun uint8 muedca_timer; 732*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 733*4882a593Smuzhiyun 734*4882a593Smuzhiyun typedef struct he_mu_ac_param_record he_mu_ac_param_record_t; 735*4882a593Smuzhiyun 736*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_muedca_ie { 737*4882a593Smuzhiyun uint8 id; 738*4882a593Smuzhiyun uint8 len; 739*4882a593Smuzhiyun uint8 id_ext; 740*4882a593Smuzhiyun uint8 mu_qos_info; 741*4882a593Smuzhiyun he_mu_ac_param_record_t param_ac[AC_COUNT]; 742*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 743*4882a593Smuzhiyun 744*4882a593Smuzhiyun typedef struct he_muedca_ie he_muedca_ie_t; 745*4882a593Smuzhiyun 746*4882a593Smuzhiyun #define HE_MU_EDCA_PARAM_UPD_CNT_IDX 0u /* EDCA Parameter Set Update Count */ 747*4882a593Smuzhiyun #define HE_MU_EDCA_PARAM_UPD_CNT_LEN 4u 748*4882a593Smuzhiyun 749*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_MCS_DPCU 0 750*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_SYMS_DPCU 3u 751*4882a593Smuzhiyun #define HE_MU_SIGA_GI_LTF_DPCU 3u 752*4882a593Smuzhiyun 753*4882a593Smuzhiyun /** 754*4882a593Smuzhiyun * Spatial Reuse Parameter Set element (sec 9.4.2.241) 755*4882a593Smuzhiyun */ 756*4882a593Smuzhiyun /* bit position and field width */ 757*4882a593Smuzhiyun #define HE_SRP_CTRL_SRP_DISALLOW_IDX 0 /* SRP Disallowed */ 758*4882a593Smuzhiyun #define HE_SRP_CTRL_SRP_DISALLOW_FSZ 1 759*4882a593Smuzhiyun #define HE_SRP_CTRL_NON_SRG_OBSS_PD_SR_DISALLOW_IDX 1 /* NonSRG OBSS PD SR Disallowed */ 760*4882a593Smuzhiyun #define HE_SRP_CTRL_NON_SRG_OBSS_PD_SR_DISALLOW_FSZ 1 761*4882a593Smuzhiyun #define HE_SRP_CTRL_NON_SRG_OFFSET_PRESENT_IDX 2 /* NonSRG Offset Present */ 762*4882a593Smuzhiyun #define HE_SRP_CTRL_NON_SRG_OFFSET_PRESENT_FSZ 1 763*4882a593Smuzhiyun #define HE_SRP_CTRL_SRG_INFO_PRESENT_IDX 3 /* SRG Information Present */ 764*4882a593Smuzhiyun #define HE_SRP_CTRL_SRG_INFO_PRESENT_FSZ 1 765*4882a593Smuzhiyun #define HE_SRP_CTRL_HESIGA_SR_VALUE15_ALLOWED_IDX 4 /* HESIGA_SRP_value15_allowed */ 766*4882a593Smuzhiyun #define HE_SRP_CTRL_HESIGA_SR_VALUE15_ALLOWED_FSZ 1 767*4882a593Smuzhiyun /* Reserved b5-b7 */ 768*4882a593Smuzhiyun 769*4882a593Smuzhiyun /* Spatial reuse element element */ 770*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_srp_ie { 771*4882a593Smuzhiyun uint8 id; 772*4882a593Smuzhiyun uint8 len; 773*4882a593Smuzhiyun uint8 id_ext; 774*4882a593Smuzhiyun uint8 sr_control; 775*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 776*4882a593Smuzhiyun 777*4882a593Smuzhiyun typedef struct he_srp_ie he_srp_ie_t; 778*4882a593Smuzhiyun 779*4882a593Smuzhiyun #define HE_SRP_NON_SRG_OBSS_PD_MAX_OFFSET_LEN 1u 780*4882a593Smuzhiyun #define HE_SRP_SRG_OBSS_PD_MIN_OFFSET_LEN 1u 781*4882a593Smuzhiyun #define HE_SRP_SRG_OBSS_PD_MAX_OFFSET_LEN 1u 782*4882a593Smuzhiyun #define HE_SRP_SRG_BSSCOLOR_BITMAP_LEN 8u 783*4882a593Smuzhiyun #define HE_SRP_SRG_PARTIAL_BSSID_BITMAP_LEN 8u 784*4882a593Smuzhiyun 785*4882a593Smuzhiyun #define HE_SRP_IE_MIN_LEN (sizeof(he_srp_ie_t) - TLV_HDR_LEN) 786*4882a593Smuzhiyun #define HE_SRP_IE_MAX_LEN (sizeof(he_srp_ie_t) - TLV_HDR_LEN +\ 787*4882a593Smuzhiyun HE_SRP_NON_SRG_OBSS_PD_MAX_OFFSET_LEN + HE_SRP_SRG_OBSS_PD_MIN_OFFSET_LEN\ 788*4882a593Smuzhiyun HE_SRP_SRG_OBSS_PD_MAX_OFFSET_LEN + HE_SRP_SRG_BSSCOLOR_BITMAP_LEN\ 789*4882a593Smuzhiyun HE_SRP_SRG_PARTIAL_BSSID_BITMAP_LEN) 790*4882a593Smuzhiyun 791*4882a593Smuzhiyun /* Bit field Masks */ 792*4882a593Smuzhiyun #define HE_SRP_CTRL_SRP_DISALLOW (1 << HE_SRP_CTRL_SRP_DISALLOW_IDX) 793*4882a593Smuzhiyun #define HE_SRP_CTRL_NON_SRG_OBSS_PD_SR_DISALLOW (1 << HE_SRP_CTRL_NON_SRG_OBSS_PD_SR_DISALLOW_IDX) 794*4882a593Smuzhiyun #define HE_SRP_CTRL_NON_SRG_OFFSET_PRESENT (1 << HE_SRP_CTRL_NON_SRG_OFFSET_PRESENT_IDX) 795*4882a593Smuzhiyun #define HE_SRP_CTRL_SRG_INFO_PRESENT (1 << HE_SRP_CTRL_SRG_INFO_PRESENT_IDX) 796*4882a593Smuzhiyun #define HE_SRP_CTRL_HESIGA_SR_VALUE15_ALLOWED (1 << HE_SRP_CTRL_HESIGA_SR_VALUE15_ALLOWED_IDX) 797*4882a593Smuzhiyun 798*4882a593Smuzhiyun /** 799*4882a593Smuzhiyun * ref: (Table 28-21 Page 473 D3.0) 800*4882a593Smuzhiyun * 801*4882a593Smuzhiyun * -Spatial Reuse field encoding for an HE SU PPDU, HE ER SU PPDU, and HE MU PPDU 802*4882a593Smuzhiyun */ 803*4882a593Smuzhiyun #define HE_SRP_DISALLOW 0u /* SRP_DISALLOW */ 804*4882a593Smuzhiyun /* Values 1 to 12 are reserved */ 805*4882a593Smuzhiyun #define HE_SR_RESTRICTED 13u /* SR Restricted */ 806*4882a593Smuzhiyun #define HE_SR_DELAY 14u /* SR Delay */ 807*4882a593Smuzhiyun #define HE_SRP_AND_NON_SRG_OBSS_PD_PROHIBITED 15u /* SRP_AND_NON_SRG_OBSS_PD_PROHIBITED */ 808*4882a593Smuzhiyun #define HE_SRP_MASK 0x0Fu 809*4882a593Smuzhiyun 810*4882a593Smuzhiyun /** 811*4882a593Smuzhiyun * BSS Color Change Announcement element (sec 9.4.2.243) 812*4882a593Smuzhiyun */ 813*4882a593Smuzhiyun /* bit position and field width */ 814*4882a593Smuzhiyun #define HE_BSSCOLOR_CHANGE_NEWCOLOR_IDX 0 /* New BSSColor info */ 815*4882a593Smuzhiyun #define HE_BSSCOLOR_CHANGE_NEWCOLOR_FSZ 6u 816*4882a593Smuzhiyun 817*4882a593Smuzhiyun /* HE Bsscolor change element */ 818*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct he_bsscolor_change_ie { 819*4882a593Smuzhiyun uint8 id; 820*4882a593Smuzhiyun uint8 len; 821*4882a593Smuzhiyun uint8 id_ext; 822*4882a593Smuzhiyun uint8 color_switch_cntdwn; 823*4882a593Smuzhiyun uint8 new_bsscolor_info; 824*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT; 825*4882a593Smuzhiyun 826*4882a593Smuzhiyun typedef struct he_bsscolor_change_ie he_bsscolor_change_ie_t; 827*4882a593Smuzhiyun 828*4882a593Smuzhiyun /* HE SU bit position and field width */ 829*4882a593Smuzhiyun #define HE_SU_PPDU_FORMAT_IDX 0u 830*4882a593Smuzhiyun #define HE_SU_PPDU_FORMAT_FSZ 1u 831*4882a593Smuzhiyun #define HE_SU_PPDU_BEAM_CHANGE_IDX 1u 832*4882a593Smuzhiyun #define HE_SU_PPDU_BEAM_CHANGE_FSZ 1u 833*4882a593Smuzhiyun #define HE_SU_PPDU_DL_UL_IDX 2u 834*4882a593Smuzhiyun #define HE_SU_PPDU_DL_UL_FSZ 1u 835*4882a593Smuzhiyun #define HE_SU_PPDU_MCS_IDX 3u 836*4882a593Smuzhiyun #define HE_SU_PPDU_MCS_FSZ 4u 837*4882a593Smuzhiyun #define HE_SU_PPDU_DCM_IDX 7u 838*4882a593Smuzhiyun #define HE_SU_PPDU_DCM_FSZ 1u 839*4882a593Smuzhiyun #define HE_SU_PPDU_BSS_COLOR_IDX 8u 840*4882a593Smuzhiyun #define HE_SU_PPDU_BSS_COLOR_FSZ 6u 841*4882a593Smuzhiyun #define HE_SU_PPDU_SR_IDX 15 842*4882a593Smuzhiyun #define HE_SU_PPDU_SR_FSZ 4u 843*4882a593Smuzhiyun #define HE_SU_PPDU_BW_IDX 19u 844*4882a593Smuzhiyun #define HE_SU_PPDU_BW_FSZ 2u 845*4882a593Smuzhiyun #define HE_SU_PPDU_GI_IDX 21u 846*4882a593Smuzhiyun #define HE_SU_PPDU_GI_FSZ 2u 847*4882a593Smuzhiyun #define HE_SU_PPDU_LTF_SIZE_IDX 21u 848*4882a593Smuzhiyun #define HE_SU_PPDU_LTF_SIZE_FSZ 2u 849*4882a593Smuzhiyun #define HE_SU_PPDU_NUM_LTF_IDX 21u 850*4882a593Smuzhiyun #define HE_SU_PPDU_NUM_LTF_FSZ 2u 851*4882a593Smuzhiyun #define HE_SU_PPDU_NSTS_IDX 23u 852*4882a593Smuzhiyun #define HE_SU_PPDU_NSTS_FSZ 3u 853*4882a593Smuzhiyun #define HE_SU_PPDU_DOPPLER_NOTSET_NSTS_IDX 23u 854*4882a593Smuzhiyun #define HE_SU_PPDU_DOPPLER_NOTSET_NSTS_FSZ 3u 855*4882a593Smuzhiyun #define HE_SU_PPDU_DOPPLER_SET_NSTS_IDX 23u 856*4882a593Smuzhiyun #define HE_SU_PPDU_DOPPLER_SET_NSTS_FSZ 2u 857*4882a593Smuzhiyun #define HE_SU_PPDU_MIDAMBLE_IDX 25u 858*4882a593Smuzhiyun #define HE_SU_PPDU_MIDAMBLE_FSZ 1u 859*4882a593Smuzhiyun #define HE_SU_PPDU_TXOP_IDX 26u 860*4882a593Smuzhiyun #define HE_SU_PPDU_TXOP_FSZ 7u 861*4882a593Smuzhiyun #define HE_SU_PPDU_CODING_IDX 33u 862*4882a593Smuzhiyun #define HE_SU_PPDU_CODING_FSZ 1u 863*4882a593Smuzhiyun #define HE_SU_PPDU_LDPC_IDX 34u 864*4882a593Smuzhiyun #define HE_SU_PPDU_LDPC_FSZ 1u 865*4882a593Smuzhiyun #define HE_SU_PPDU_STBC_IDX 35u 866*4882a593Smuzhiyun #define HE_SU_PPDU_STBC_FSZ 1u 867*4882a593Smuzhiyun #define HE_SU_PPDU_TXBF_IDX 36u 868*4882a593Smuzhiyun #define HE_SU_PPDU_TXBF_FSZ 1u 869*4882a593Smuzhiyun #define HE_SU_PPDU_PADDING_IDX 37u 870*4882a593Smuzhiyun #define HE_SU_PPDU_PADDING_FSZ 2u 871*4882a593Smuzhiyun #define HE_SU_PPDU_PE_IDX 39u 872*4882a593Smuzhiyun #define HE_SU_PPDU_PE_FSZ 1u 873*4882a593Smuzhiyun #define HE_SU_PPDU_DOPPLER_IDX 41u 874*4882a593Smuzhiyun #define HE_SU_PPDU_DOPPLER_FSZ 1u 875*4882a593Smuzhiyun 876*4882a593Smuzhiyun /* For HE SU/RE SIG A : PLCP0 bit fields [32bit] */ 877*4882a593Smuzhiyun #define HE_SU_RE_SIGA_FORMAT_MASK 0x00000001u 878*4882a593Smuzhiyun #define HE_SU_RE_SIGA_RE_VAL 0x00000000u 879*4882a593Smuzhiyun #define HE_SU_RE_SIGA_SU_VAL 0x00000001u 880*4882a593Smuzhiyun #define HE_SU_RE_SIGA_FORMAT_SHIFT 0u 881*4882a593Smuzhiyun #define HE_SU_RE_SIGA_BEAM_CHANGE_SHIFT 1u 882*4882a593Smuzhiyun #define HE_SU_RE_SIGA_UL_DL_SHIFT 2u 883*4882a593Smuzhiyun #define HE_SU_RE_SIGA_MCS_MASK 0x00000078u 884*4882a593Smuzhiyun #define HE_SU_RE_SIGA_MCS_SHIFT 3u 885*4882a593Smuzhiyun #define HE_SU_RE_SIGA_DCM_MASK 0x00000080u 886*4882a593Smuzhiyun #define HE_SU_RE_SIGA_DCM_SHIFT 7u 887*4882a593Smuzhiyun #define HE_SU_RE_SIGA_BSS_COLOR_SHIFT 8u /* Bits 13:8 */ 888*4882a593Smuzhiyun #define HE_SU_RE_SIGA_BSS_COLOR_MASK 0x00003F00u 889*4882a593Smuzhiyun #define HE_SU_RE_SIGA_RSVD_PLCP0_VAL 0x00004000u 890*4882a593Smuzhiyun #define HE_SU_RE_SIGA_SRP_VAL_SHIFT 15u /* Bits 18:15 */ 891*4882a593Smuzhiyun #define HE_SU_RE_SIGA_SRP_VAL_MASK 0x00078000u 892*4882a593Smuzhiyun #define HE_SU_SIGA_BW_MASK 0x00180000u 893*4882a593Smuzhiyun #define HE_SU_SIGA_BW_SHIFT 19u 894*4882a593Smuzhiyun #define HE_RE_SIGA_TONE_MASK 0x00180000u 895*4882a593Smuzhiyun #define HE_RE_SIGA_TONE_SHIFT 19u 896*4882a593Smuzhiyun #define HE_SU_RE_SIGA_20MHZ_VAL 0x00000000u 897*4882a593Smuzhiyun #define HE_SU_RE_SIGA_40MHZ_VAL 0x00080000u 898*4882a593Smuzhiyun #define HE_SU_RE_SIGA_80MHZ_VAL 0x00100000u 899*4882a593Smuzhiyun #define HE_SU_RE_SIGA_160MHZ_VAL 0x00180000u 900*4882a593Smuzhiyun #define HE_SU_RE_SIGA_GI_LTF_MASK 0x00600000u 901*4882a593Smuzhiyun #define HE_SU_RE_SIGA_1xLTF_GI8us_VAL 0x00000000u 902*4882a593Smuzhiyun #define HE_SU_RE_SIGA_2xLTF_GI8us_VAL 0x00200000u 903*4882a593Smuzhiyun #define HE_SU_RE_SIGA_2xLTF_GI16us_VAL 0x00400000u 904*4882a593Smuzhiyun #define HE_SU_RE_SIGA_4xLTF_GI32us_VAL 0x00600000u 905*4882a593Smuzhiyun #define HE_SU_RE_SIGA_GI_LTF_SHIFT 21u 906*4882a593Smuzhiyun #define HE_SU_RE_SIGA_NSTS_MASK 0x03800000u 907*4882a593Smuzhiyun #define HE_SU_RE_SIGA_NSTS_SHIFT 23u 908*4882a593Smuzhiyun #define HE_SU_RE_SIGA_TXOP_PLCP0_MASK 0xFC000000u 909*4882a593Smuzhiyun #define HE_SU_RE_SIGA_TXOP_PLCP0_SHIFT 26u 910*4882a593Smuzhiyun 911*4882a593Smuzhiyun /* For HE SU SIG EXT : PLCP0 bit fields [32bit] */ 912*4882a593Smuzhiyun #define HE_SU_SIG_EXT_GI_LTF_MASK 0x00000003u 913*4882a593Smuzhiyun #define HE_SU_SIG_EXT_1xLTF_GI8us_VAL 0x00000000u 914*4882a593Smuzhiyun #define HE_SU_SIG_EXT_2xLTF_GI8us_VAL 0x00000001u 915*4882a593Smuzhiyun #define HE_SU_SIG_EXT_2xLTF_GI16us_VAL 0x00000002u 916*4882a593Smuzhiyun #define HE_SU_SIG_EXT_4xLTF_GI32us_VAL 0x00000003u 917*4882a593Smuzhiyun #define HE_SU_SIG_EXT_STBC_MASK 0x00000040u 918*4882a593Smuzhiyun #define HE_SU_SIG_EXT_STBC_SHIFT 6u 919*4882a593Smuzhiyun #define HE_SU_SIG_EXT_LDPC_MASK 0x00000080u 920*4882a593Smuzhiyun #define HE_SU_SIG_EXT_LDPC_SHIFT 7u 921*4882a593Smuzhiyun #define HE_SU_SIG_EXT_MCS_MASK 0x0000f000u 922*4882a593Smuzhiyun #define HE_SU_SIG_EXT_MCS_SHIFT 12u 923*4882a593Smuzhiyun #define HE_SU_SIG_EXT_DCM_MASK 0x00010000u 924*4882a593Smuzhiyun #define HE_SU_SIG_EXT_DCM_SHIFT 16u 925*4882a593Smuzhiyun #define HE_SU_SIG_EXT_NSTS_MASK 0x000e0000u 926*4882a593Smuzhiyun #define HE_SU_SIG_EXT_NSTS_SHIFT 17u 927*4882a593Smuzhiyun #define HE_SU_SIG_EXT_CODING_MASK 0x00800000u 928*4882a593Smuzhiyun #define HE_SU_SIG_EXT_CODING_SHIFT 23u 929*4882a593Smuzhiyun 930*4882a593Smuzhiyun /* HE mu ppdu - bit position and field width */ 931*4882a593Smuzhiyun #define HE_MU_PPDU_DL_UL_IDX 0u 932*4882a593Smuzhiyun #define HE_MU_PPDU_DL_UL_FSZ 1u 933*4882a593Smuzhiyun #define HE_MU_PPDU_SIGB_MCS_IDX 1u 934*4882a593Smuzhiyun #define HE_MU_PPDU_SIGB_MCS_FSZ 3u 935*4882a593Smuzhiyun #define HE_MU_PPDU_SIGB_DCM_IDX 4u 936*4882a593Smuzhiyun #define HE_MU_PPDU_SIGB_DCM_FSZ 1u 937*4882a593Smuzhiyun #define HE_MU_PPDU_BSS_COLOR_IDX 5u 938*4882a593Smuzhiyun #define HE_MU_PPDU_BSS_COLOR_FSZ 6u 939*4882a593Smuzhiyun #define HE_MU_PPDU_SR_IDX 11u 940*4882a593Smuzhiyun #define HE_MU_PPDU_SR_FSZ 4u 941*4882a593Smuzhiyun 942*4882a593Smuzhiyun #define HE_MU_PPDU_SIGB_SYM_MU_MIMO_USER_IDX 18u 943*4882a593Smuzhiyun #define HE_MU_PPDU_SIGB_SYM_MU_MIMO_USER_FSZ 3u 944*4882a593Smuzhiyun 945*4882a593Smuzhiyun #define HE_MU_PPDU_PRE_PUNCR_SIGA_IDX 15u 946*4882a593Smuzhiyun #define HE_MU_PPDU_PRE_PUNCR_SIGA_FSZ 2u 947*4882a593Smuzhiyun 948*4882a593Smuzhiyun #define HE_MU_PPDU_BW_SIGA_IDX 15u 949*4882a593Smuzhiyun #define HE_MU_PPDU_BW_SIGA_FSZ 2u 950*4882a593Smuzhiyun #define HE_MU_PPDU_BW_SIGA_KNOWN_IDX 17u 951*4882a593Smuzhiyun #define HE_MU_PPDU_BW_SIGA_KNOWN_FSZ 1u 952*4882a593Smuzhiyun 953*4882a593Smuzhiyun #define HE_MU_PPDU_SIGB_SYMB_IDX 18u 954*4882a593Smuzhiyun #define HE_MU_PPDU_SIGB_SYMB_FSZ 4u 955*4882a593Smuzhiyun 956*4882a593Smuzhiyun #define HE_MU_PPDU_SIGB_COMP_IDX 22u 957*4882a593Smuzhiyun #define HE_MU_PPDU_SIGB_COMP_FSZ 1u 958*4882a593Smuzhiyun #define HE_MU_PPDU_GI_IDX 23u 959*4882a593Smuzhiyun #define HE_MU_PPDU_GI_FSZ 2u 960*4882a593Smuzhiyun #define HE_MU_PPDU_LTF_SIZE_IDX 23u 961*4882a593Smuzhiyun #define HE_MU_PPDU_LTF_SIZE_FSZ 2u 962*4882a593Smuzhiyun #define HE_MU_PPDU_NUM_LTF_IDX 23u 963*4882a593Smuzhiyun #define HE_MU_PPDU_NUM_LTF_FSZ 2u 964*4882a593Smuzhiyun #define HE_MU_PPDU_DOPPLER_IDX 25u 965*4882a593Smuzhiyun #define HE_MU_PPDU_DOPPLER_FSZ 1u 966*4882a593Smuzhiyun #define HE_MU_PPDU_TXOP_IDX 26u 967*4882a593Smuzhiyun #define HE_MU_PPDU_TXOP_FSZ 7u 968*4882a593Smuzhiyun #define HE_MU_PPDU_MIDAMBLE_IDX 34u 969*4882a593Smuzhiyun #define HE_MU_PPDU_MIDAMBLE_FSZ 3u 970*4882a593Smuzhiyun #define HE_MU_PPDU_LDPC_IDX 37u 971*4882a593Smuzhiyun #define HE_MU_PPDU_LDPC_FSZ 1u 972*4882a593Smuzhiyun #define HE_MU_PPDU_STBC_IDX 38u 973*4882a593Smuzhiyun #define HE_MU_PPDU_STBC_FSZ 1u 974*4882a593Smuzhiyun #define HE_MU_PPDU_PADDING_IDX 39u 975*4882a593Smuzhiyun #define HE_MU_PPDU_PADDING_FSZ 2u 976*4882a593Smuzhiyun #define HE_MU_PPDU_PE_IDX 41u 977*4882a593Smuzhiyun #define HE_MU_PPDU_PE_FSZ 1u 978*4882a593Smuzhiyun 979*4882a593Smuzhiyun /* he trigger ppdu - bit position and field width */ 980*4882a593Smuzhiyun #define HE_TRIG_PPDU_BSS_COLOR_IDX 1u 981*4882a593Smuzhiyun #define HE_TRIG_PPDU_BSS_COLOR_FSZ 6u 982*4882a593Smuzhiyun 983*4882a593Smuzhiyun /* full spatial reuse field */ 984*4882a593Smuzhiyun #define HE_TRIG_PPDU_SR_IDX 7u 985*4882a593Smuzhiyun #define HE_TRIG_PPDU_SR_FSZ 16u 986*4882a593Smuzhiyun 987*4882a593Smuzhiyun #define HE_TRIG_PPDU_SR1_IDX 7u 988*4882a593Smuzhiyun #define HE_TRIG_PPDU_SR1_FSZ 4u 989*4882a593Smuzhiyun #define HE_TRIG_PPDU_SR2_IDX 11u 990*4882a593Smuzhiyun #define HE_TRIG_PPDU_SR2_FSZ 4u 991*4882a593Smuzhiyun #define HE_TRIG_PPDU_SR3_IDX 15u 992*4882a593Smuzhiyun #define HE_TRIG_PPDU_SR3_FSZ 4u 993*4882a593Smuzhiyun #define HE_TRIG_PPDU_SR4_IDX 19u 994*4882a593Smuzhiyun #define HE_TRIG_PPDU_SR4_FSZ 4u 995*4882a593Smuzhiyun #define HE_TRIG_PPDU_TXOP_IDX 26u 996*4882a593Smuzhiyun #define HE_TRIG_PPDU_TXOP_FSZ 7u 997*4882a593Smuzhiyun 998*4882a593Smuzhiyun /* For HE MU SIG A : PLCP0 bit fields [32bit] */ 999*4882a593Smuzhiyun #define HE_MU_SIGA_UL_DL_SHIFT 0 1000*4882a593Smuzhiyun #define HE_MU_SIGA_UL_TB_PPDU 0 1001*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_MCS_MASK 0x000000E 1002*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_MCS_SHIFT 1 1003*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_DCM_SHIFT 4 1004*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_DCM_DISABLED 0 1005*4882a593Smuzhiyun #define HE_MU_SIGA_BW_SHIFT 15 1006*4882a593Smuzhiyun #define HE_MU_SIGA_BW_80_UNPUNCTURED 2 1007*4882a593Smuzhiyun #define HE_MU_SIGA_BW_SEC_20_PUNCTURED 4 1008*4882a593Smuzhiyun #define HE_MU_SIGA_BW_SEC_40_PUNCTURED 5 1009*4882a593Smuzhiyun #define HE_MU_SIGA_SIGB_SYMS_SHIFT 18 1010*4882a593Smuzhiyun #define HE_MU_SIGA_GI_LTF_MASK 0x01800000 1011*4882a593Smuzhiyun #define HE_MU_SIGA_GI_LTF_SHIFT 23 1012*4882a593Smuzhiyun 1013*4882a593Smuzhiyun /* For HE MU SIG A : PLCP1 bit fields [32bit] */ 1014*4882a593Smuzhiyun #define HE_MU_SIGA_STBC_MASK 0x00000040 1015*4882a593Smuzhiyun #define HE_MU_SIGA_STBC_SHIFT 6 1016*4882a593Smuzhiyun 1017*4882a593Smuzhiyun /* For HE SU/RE SIG A : PLCP1 bit fields [16bit] */ 1018*4882a593Smuzhiyun #define HE_SU_RE_SIGA_TXOP_PLCP1_MASK 0x0001 1019*4882a593Smuzhiyun #define HE_SU_RE_SIGA_TXOP_PLCP1_SHIFT 0 1020*4882a593Smuzhiyun #define HE_SU_RE_SIGA_CODING_MASK 0x0002 1021*4882a593Smuzhiyun #define HE_SU_RE_SIGA_CODING_SHIFT 1 1022*4882a593Smuzhiyun #define HE_SU_RE_SIGA_LDPC_EXTRA_MASK 0x0004 1023*4882a593Smuzhiyun #define HE_SU_RE_SIGA_LDPC_EXTRA_SHIFT 2 1024*4882a593Smuzhiyun #define HE_SU_RE_SIGA_STBC_MASK 0x0008 1025*4882a593Smuzhiyun #define HE_SU_RE_SIGA_STBC_SHIFT 3 1026*4882a593Smuzhiyun #define HE_SU_RE_SIGA_BEAMFORM_MASK 0x0010 1027*4882a593Smuzhiyun #define HE_SU_RE_SIGA_BEAMFORM_SHIFT 4 1028*4882a593Smuzhiyun #define HE_SU_RE_SIGA_RSVD_PLCP1_VAL 0x0100 1029*4882a593Smuzhiyun 1030*4882a593Smuzhiyun /* For HE MU SIG A : PLCP1 bit fields [16bit] */ 1031*4882a593Smuzhiyun #define HE_MU_SIGA_RSVD_SHIFT 1 1032*4882a593Smuzhiyun #define HE_MU_SIGA_LTF_SYMS_SHIFT 2 1033*4882a593Smuzhiyun 1034*4882a593Smuzhiyun /* For HE SU SIG A : RX PLCP4 bit fields [8bit] */ 1035*4882a593Smuzhiyun #define HE_SU_SIGA2_STBC_RX_MASK 0x08u 1036*4882a593Smuzhiyun 1037*4882a593Smuzhiyun /* For HE ER SIG A : RX PLCP4 bit fields [8bit] */ 1038*4882a593Smuzhiyun #define HE_ER_SIGA2_STBC_RX_MASK 0x08u 1039*4882a593Smuzhiyun 1040*4882a593Smuzhiyun /* For HE MU SIG A : RX PLCP4 bit fields [8bit] */ 1041*4882a593Smuzhiyun #define HE_MU_SIGA2_STBC_RX_MASK 0x40u 1042*4882a593Smuzhiyun 1043*4882a593Smuzhiyun /* This marks the end of a packed structure section. */ 1044*4882a593Smuzhiyun #include <packed_section_end.h> 1045*4882a593Smuzhiyun 1046*4882a593Smuzhiyun /* HE Action Frame */ 1047*4882a593Smuzhiyun /* FIXME: use temporary Offsets until the spec assigns them */ 1048*4882a593Smuzhiyun #define HE_AF_CAT_OFF 0 1049*4882a593Smuzhiyun #define HE_AF_ACT_OFF 1 1050*4882a593Smuzhiyun 1051*4882a593Smuzhiyun /* TWT Setup */ 1052*4882a593Smuzhiyun #define HE_AF_TWT_SETUP_TOKEN_OFF 2 1053*4882a593Smuzhiyun #define HE_AF_TWT_SETUP_TWT_IE_OFF 3 1054*4882a593Smuzhiyun 1055*4882a593Smuzhiyun /* TWT Teardown */ 1056*4882a593Smuzhiyun #define HE_AF_TWT_TEARDOWN_FLOW_OFF 2 1057*4882a593Smuzhiyun 1058*4882a593Smuzhiyun /* TWT Information */ 1059*4882a593Smuzhiyun #define HE_AF_TWT_INFO_OFF 2 1060*4882a593Smuzhiyun 1061*4882a593Smuzhiyun /* HE Action ID */ 1062*4882a593Smuzhiyun /* FIXME: use temporary IDs until ANA assigns them */ 1063*4882a593Smuzhiyun #define HE_ACTION_TWT_SETUP 1 1064*4882a593Smuzhiyun #define HE_ACTION_TWT_TEARDOWN 2 1065*4882a593Smuzhiyun #define HE_ACTION_TWT_INFO 3 1066*4882a593Smuzhiyun 1067*4882a593Smuzhiyun /* HE Basic trigger frame common info fields */ 1068*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_SZ 8 1069*4882a593Smuzhiyun typedef uint8 he_trig_cmninfo_set_t[HE_TRIG_CMNINFO_SZ]; 1070*4882a593Smuzhiyun 1071*4882a593Smuzhiyun /* bit position and field width */ 1072*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_FRMTYPE_INDX 0 /* Trigger frame type */ 1073*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_FRMTYPE_FSZ 4 1074*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_LSIGLEN_INDX 4 /* L-sig length */ 1075*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_LSIGLEN_FSZ 12 1076*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_CASCADEIND_INDX 16 /* Cascade indication */ 1077*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_CASCADEIND_FSZ 1 1078*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_CSREQ_INDX 17 /* Carrier sense indication */ 1079*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_CSREQ_FSZ 1 1080*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_BWINFO_INDX 18 /* Bw info */ 1081*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_BWINFO_FSZ 2 1082*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_GI_LTF_INDX 20 /* Cp-LTF size */ 1083*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_GI_LTF_FSZ 2 1084*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_MUMIMO_LTF_INDX 22 /* HE-LTF mask enable */ 1085*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_MUMIMO_LTF_FSZ 1 1086*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_HELTF_SYM_INDX 23 /* He-LTF sumbols */ 1087*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_HELTF_SYM_FSZ 3 1088*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_STBC_INDX 26 /* STBC support */ 1089*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_STBC_FSZ 1 1090*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_LDPC_EXTSYM_INDX 27 /* LDPC extra symbol */ 1091*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_LDPC_EXTSYM_FSZ 1 1092*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_AP_TXPWR_INDX 28 /* AP TX power */ 1093*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_AP_TXPWR_FSZ 6 1094*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_AFACT_INDX 34 /* a-factor */ 1095*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_AFACT_FSZ 2 1096*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_PEDISAMBIG_INDX 36 /* PE disambiguity */ 1097*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_PEDISAMBIG_FSZ 1 1098*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_SPTIAL_REUSE_INDX 37 /* spatial re-use */ 1099*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_SPTIAL_REUSE_FSZ 16 1100*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_DOPPLER_INDX 53 /* doppler supoort */ 1101*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_DOPPLER_FSZ 1 1102*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_HESIGA_RSVD_INDX 54 /* rsvd bits from HE-SIGA */ 1103*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_HESIGA_RSVD_FSZ 9 1104*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_RSVD_INDX 63 /* reseved bit from HE-SIGA */ 1105*4882a593Smuzhiyun #define HE_TRIG_CMNINFO_RSVD_FSZ 1 1106*4882a593Smuzhiyun 1107*4882a593Smuzhiyun /* HE Basic trigger frame user info fields */ 1108*4882a593Smuzhiyun #define HE_TRIG_USRINFO_SZ 5 1109*4882a593Smuzhiyun typedef uint8 he_trig_usrinfo_set_t[HE_TRIG_USRINFO_SZ]; 1110*4882a593Smuzhiyun 1111*4882a593Smuzhiyun /* bit position and field width */ 1112*4882a593Smuzhiyun #define HE_TRIG_USRINFO_AID_INDX 0 /* AID */ 1113*4882a593Smuzhiyun #define HE_TRIG_USRINFO_AID_FSZ 12 1114*4882a593Smuzhiyun #define HE_TRIG_USRINFO_RU_ALLOC_INDX 12 /* RU allocation index */ 1115*4882a593Smuzhiyun #define HE_TRIG_USRINFO_RU_ALLOC_FSZ 8 1116*4882a593Smuzhiyun #define HE_TRIG_USRINFO_CODING_INDX 20 /* coding type (BCC/LDPC) */ 1117*4882a593Smuzhiyun #define HE_TRIG_USRINFO_CODING_FSZ 1 1118*4882a593Smuzhiyun #define HE_TRIG_USRINFO_MCS_INDX 21 /* MCS index value */ 1119*4882a593Smuzhiyun #define HE_TRIG_USRINFO_MCS_FSZ 4 1120*4882a593Smuzhiyun #define HE_TRIG_USRINFO_DCM_INDX 25 /* Dual carrier modulation */ 1121*4882a593Smuzhiyun #define HE_TRIG_USRINFO_DCM_FSZ 1 1122*4882a593Smuzhiyun #define HE_TRIG_USRINFO_SSALLOC_STRMOFFSET_INDX 26 /* stream offset */ 1123*4882a593Smuzhiyun #define HE_TRIG_USRINFO_SSALLOC_STRMOFFSET_FSZ 3 1124*4882a593Smuzhiyun #define HE_TRIG_USRINFO_SSALLOC_NSS_INDX 29 /* number of spatial streams */ 1125*4882a593Smuzhiyun #define HE_TRIG_USRINFO_SSALLOC_NSS_FSZ 3 1126*4882a593Smuzhiyun #define HE_TRIG_USRINFO_TARGET_RSSI_INDX 32 /* Target RSSI */ 1127*4882a593Smuzhiyun #define HE_TRIG_USRINFO_TARGET_RSSI_FSZ 7 1128*4882a593Smuzhiyun #define HE_TRIG_USRINFO_RSVD_INDX 39 /* Reserved bit */ 1129*4882a593Smuzhiyun #define HE_TRIG_USRINFO_RSVD_FSZ 1 1130*4882a593Smuzhiyun 1131*4882a593Smuzhiyun /* Different types of trigger frame */ 1132*4882a593Smuzhiyun #define HE_TRIG_TYPE_BASIC_FRM 0 /* basic trigger frame */ 1133*4882a593Smuzhiyun #define HE_TRIG_TYPE_BEAM_RPT_POLL_FRM 1 /* beamforming report poll frame */ 1134*4882a593Smuzhiyun #define HE_TRIG_TYPE_MU_BAR_FRM 2 /* MU-BAR frame */ 1135*4882a593Smuzhiyun #define HE_TRIG_TYPE_MU_RTS__FRM 3 /* MU-RTS frame */ 1136*4882a593Smuzhiyun #define HE_TRIG_TYPE_BSR_FRM 4 /* Buffer status report poll */ 1137*4882a593Smuzhiyun 1138*4882a593Smuzhiyun /* HE Timing related parameters (Table 28-9) */ 1139*4882a593Smuzhiyun #define HE_T_LEG_STF 8 1140*4882a593Smuzhiyun #define HE_T_LEG_LTF 8 1141*4882a593Smuzhiyun #define HE_T_LEG_LSIG 4 1142*4882a593Smuzhiyun #define HE_T_RL_SIG 4 1143*4882a593Smuzhiyun #define HE_T_SIGA 8 1144*4882a593Smuzhiyun #define HE_T_STF 4 /* STF for SU / MU HE PPDUs */ 1145*4882a593Smuzhiyun #define HE_T_TB_PPDU_STF 8 /* STF for HE trigger based PPDUs */ 1146*4882a593Smuzhiyun #define HE_T_LEG_PREAMBLE (HE_T_LEG_STF + HE_T_LEG_LTF + HE_T_LEG_LSIG) 1147*4882a593Smuzhiyun #define HE_T_LEG_SYMB 4 1148*4882a593Smuzhiyun #define HE_RU_26_TONE 26 1149*4882a593Smuzhiyun #define HE_RU_52_TONE 52 1150*4882a593Smuzhiyun #define HE_RU_106_TONE 106 1151*4882a593Smuzhiyun #define HE_RU_242_TONE 242 1152*4882a593Smuzhiyun #define HE_RU_484_TONE 484 1153*4882a593Smuzhiyun #define HE_RU_996_TONE 996 1154*4882a593Smuzhiyun #define HE_RU_2x996_TONE 1992 1155*4882a593Smuzhiyun #define HE_MAX_26_TONE_RU_INDX 36 1156*4882a593Smuzhiyun #define HE_MAX_52_TONE_RU_INDX 52 1157*4882a593Smuzhiyun #define HE_MAX_106_TONE_RU_INDX 60 1158*4882a593Smuzhiyun #define HE_MAX_242_TONE_RU_INDX 64 1159*4882a593Smuzhiyun #define HE_MAX_484_TONE_RU_INDX 66 1160*4882a593Smuzhiyun #define HE_MAX_996_TONE_RU_INDX 67 1161*4882a593Smuzhiyun #define HE_MAX_2x996_TONE_RU_INDX 68 1162*4882a593Smuzhiyun 1163*4882a593Smuzhiyun /** 1164*4882a593Smuzhiyun * ref: (Table 28-9 Page 285) 1165*4882a593Smuzhiyun * 1166*4882a593Smuzhiyun * - for calculation purpose - in multiples of 10 (*10) 1167*4882a593Smuzhiyun */ 1168*4882a593Smuzhiyun #define HE_T_LTF_1X 32 1169*4882a593Smuzhiyun #define HE_T_LTF_2X 64 1170*4882a593Smuzhiyun #define HE_T_LTF_4X 128 1171*4882a593Smuzhiyun #define HE_T_SYM1 136 /* OFDM symbol duration with base GI */ 1172*4882a593Smuzhiyun #define HE_T_SYM2 144 /* OFDM symbol duration with double GI */ 1173*4882a593Smuzhiyun #define HE_T_SYM4 160 /* OFDM symbol duration with quad GI */ 1174*4882a593Smuzhiyun 1175*4882a593Smuzhiyun #define HE_N_LEG_SYM 3 /* bytes per legacy symbol */ 1176*4882a593Smuzhiyun #define HE_N_TAIL 6 /* tail field bits for BCC */ 1177*4882a593Smuzhiyun #define HE_N_SERVICE 16 /* bits in service field */ 1178*4882a593Smuzhiyun #define HE_T_MAX_PE 16 /* max Packet extension duration */ 1179*4882a593Smuzhiyun 1180*4882a593Smuzhiyun #endif /* _802_11ax_h_ */ 1181