xref: /OK3568_Linux_fs/external/rkwifibt/drivers/infineon/include/802.11ax.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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