xref: /OK3568_Linux_fs/external/rkwifibt/drivers/bcmdhd/include/802.11ah.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Basic types and constants relating to 802.11ah standard.
3*4882a593Smuzhiyun  * This is a portion of 802.11ah 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/Open:>>
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #ifndef _802_11ah_h_
26*4882a593Smuzhiyun #define _802_11ah_h_
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #include <typedefs.h>
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /* This marks the start of a packed structure section. */
31*4882a593Smuzhiyun #include <packed_section_start.h>
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun /**
34*4882a593Smuzhiyun  * TWT IE (sec 9.4.2.200)
35*4882a593Smuzhiyun  */
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun /* TWT element - top (Figure 9-589av) */
38*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct twt_ie_top {
39*4882a593Smuzhiyun 	uint8 id;
40*4882a593Smuzhiyun 	uint8 len;
41*4882a593Smuzhiyun 	uint8 ctrl;		/* Control */
42*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT;
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun typedef struct twt_ie_top twt_ie_top_t;
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /* S1G Action IDs */
47*4882a593Smuzhiyun #define S1G_ACTION_TWT_SETUP	6u
48*4882a593Smuzhiyun #define S1G_ACTION_TWT_TEARDOWN	7u
49*4882a593Smuzhiyun #define S1G_ACTION_TWT_INFO	11u
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun /* S1G Action frame offsets */
52*4882a593Smuzhiyun #define S1G_AF_CAT_OFF	0u
53*4882a593Smuzhiyun #define S1G_AF_ACT_OFF	1u
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun /* TWT Setup */
56*4882a593Smuzhiyun #define S1G_AF_TWT_SETUP_TOKEN_OFF	2u
57*4882a593Smuzhiyun #define S1G_AF_TWT_SETUP_TWT_IE_OFF	3u
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun /* TWT Teardown */
60*4882a593Smuzhiyun #define S1G_AF_TWT_TEARDOWN_FLOW_OFF	2u
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun /* TWT Information */
63*4882a593Smuzhiyun #define S1G_AF_TWT_INFO_OFF	2u
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun #define TWT_BCAST_WAKE_TIME_OFFSET	10u
66*4882a593Smuzhiyun #define TWT_BCAST_WAKE_TIME_SHIFT	10u
67*4882a593Smuzhiyun #define TWT_BCAST_WAKE_TIME_MASK	0x03FFFC00u
68*4882a593Smuzhiyun #define TWT_BCAST_WAKE_TIME_ZERO_BIT_SZ	10u
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun /* Control field (Figure 9-589aw) */
71*4882a593Smuzhiyun #define TWT_CTRL_NDP_PAGING_IND		0x01u	/* NDP Paging Indication */
72*4882a593Smuzhiyun #define TWT_CTRL_RESP_PM_MODE		0x02u	/* Respondor PM Mode */
73*4882a593Smuzhiyun #define TWT_CTRL_NEGO_TYPE_IDX		2u
74*4882a593Smuzhiyun #define TWT_CTRL_NEGO_TYPE_MASK		0x0Cu	/* TWT Negotiation Type */
75*4882a593Smuzhiyun #define TWT_CTRL_NEGO_TYPE_SHIFT	2u
76*4882a593Smuzhiyun #define TWT_CTRL_INFO_FRM_DISABLED	0x10u	/* TWT info frame disabled */
77*4882a593Smuzhiyun #define TWT_CTRL_WAKEDUR_UNIT		0x20u	/* Wake duration unit */
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /* TWT Negotiation Type (Table 9-262j1) */
80*4882a593Smuzhiyun typedef enum twt_ctrl_nego_type {
81*4882a593Smuzhiyun 	TWT_CTRL_NEGO_TYPE_0	= 0,	/* Individual TWT Setup */
82*4882a593Smuzhiyun 	TWT_CTRL_NEGO_TYPE_1	= 1,	/* Wake TBTT Negotiation */
83*4882a593Smuzhiyun 	TWT_CTRL_NEGO_TYPE_2	= 2,	/* Broadcast TWT IE in Beacon */
84*4882a593Smuzhiyun 	TWT_CTRL_NEGO_TYPE_3	= 3,	/* Broadcast TWT memberships */
85*4882a593Smuzhiyun } twt_ctrl_nego_type_t;
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /* Request Type field (Figure 9-589ay) */
88*4882a593Smuzhiyun #define TWT_REQ_TYPE_REQUEST		0x0001u	/* Request */
89*4882a593Smuzhiyun #define TWT_REQ_TYPE_SETUP_CMD_MASK	0x000eu	/* Setup Command */
90*4882a593Smuzhiyun #define TWT_REQ_TYPE_SETUP_CMD_SHIFT	1u
91*4882a593Smuzhiyun #define TWT_REQ_TYPE_TRIGGER		0x0010u	/* Trigger */
92*4882a593Smuzhiyun #define TWT_REQ_TYPE_IMPLICIT		0x0020u	/* Implicit */
93*4882a593Smuzhiyun #define TWT_REQ_TYPE_LAST_BCAST_PARAM	0x0020u	/* Last Broadcast Parameter Set */
94*4882a593Smuzhiyun #define TWT_REQ_TYPE_FLOW_TYPE		0x0040u	/* Flow Type */
95*4882a593Smuzhiyun #define TWT_REQ_TYPE_FLOW_ID_MASK	0x0380u	/* Flow Identifier */
96*4882a593Smuzhiyun #define TWT_REQ_TYPE_FLOW_ID_SHIFT	7u
97*4882a593Smuzhiyun #define TWT_REQ_TYPE_BTWT_RECOMM_MASK	0x0380u	/* Broadcast TWT Recommendation */
98*4882a593Smuzhiyun #define TWT_REQ_TYPE_BTWT_RECOMM_SHIFT	7u
99*4882a593Smuzhiyun #define TWT_REQ_TYPE_WAKE_EXP_MASK	0x7c00u	/* Wake Interval Exponent */
100*4882a593Smuzhiyun #define TWT_REQ_TYPE_WAKE_EXP_SHIFT	10u
101*4882a593Smuzhiyun #define TWT_REQ_TYPE_PROTECTION		0x8000u	/* Protection */
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun /* Setup Command field (Table 9-262k) */
104*4882a593Smuzhiyun #define TWT_SETUP_CMD_REQUEST_TWT	0u	/* Request TWT */
105*4882a593Smuzhiyun #define TWT_SETUP_CMD_SUGGEST_TWT	1u	/* Suggest TWT */
106*4882a593Smuzhiyun #define TWT_SETUP_CMD_DEMAND_TWT	2u	/* Demand TWT */
107*4882a593Smuzhiyun #define TWT_SETUP_CMD_GROUPING_TWT	3u	/* Grouping TWT */
108*4882a593Smuzhiyun #define TWT_SETUP_CMD_ACCEPT_TWT	4u	/* Accept TWT */
109*4882a593Smuzhiyun #define TWT_SETUP_CMD_ALTERNATE_TWT		5u	/* Alternate TWT */
110*4882a593Smuzhiyun #define TWT_SETUP_CMD_DICTATE_TWT	6u	/* Dictate TWT */
111*4882a593Smuzhiyun #define TWT_SETUP_CMD_REJECT_TWT	7u	/* Reject TWT */
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun /* Broadcast TWT Recommendation field (Table 9-262k1) */
114*4882a593Smuzhiyun #define TWT_BCAST_FRAME_RECOMM_0	0u	/* No constrains on frames in Broadcast TWT SP */
115*4882a593Smuzhiyun #define TWT_BCAST_FRAME_RECOMM_1	1u	/* Do not contain RUs for random access */
116*4882a593Smuzhiyun #define TWT_BCAST_FRAME_RECOMM_2	2u	/* Can contain RUs for random access */
117*4882a593Smuzhiyun #define TWT_BCAST_FRAME_RECOMM_3	3u
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun /* Request Type subfield - 2 octets */
120*4882a593Smuzhiyun typedef uint16 twt_request_type_t;	/* 16 bit request type */
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun /* Target Wake Time - 8 octets or 0 octet */
123*4882a593Smuzhiyun typedef uint64 twt_target_wake_time_t;	/* 64 bit TSF time of TWT Responding STA */
124*4882a593Smuzhiyun typedef uint16 twt_bcast_wake_time_t;	/* 16 bit Wake Time of Bcast scheduling STA */
125*4882a593Smuzhiyun typedef uint16 twt_bcast_twt_info_t;	/* 16 bit Broadcast TWT Info subfield */
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun /* TWT Group Assignment Info - 9 octets (long format) or 3 octets (short format) or 0 octet */
128*4882a593Smuzhiyun /* Group Assignment Info field - short format - Zero Offset Preset field is 0 */
129*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct twt_grp_short {
130*4882a593Smuzhiyun 	uint8 grpid_n_0off;	/* Group ID and Zero Offset Present */
131*4882a593Smuzhiyun 	uint16 unit_n_off;	/* TWT Unit and TWT Offset */
132*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT;
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun typedef struct twt_grp_short twt_grp_short_t;
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun /* Group Assignment Info field - long format - Zero Offset Preset field is 1 */
137*4882a593Smuzhiyun #define TWT_ZERO_OFF_GRP_LEN 6u
138*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct twt_grp_long {
139*4882a593Smuzhiyun 	uint8 grpid_n_0off;	/* Group ID and Zero Offset Present */
140*4882a593Smuzhiyun 	uint8 grp_0off[TWT_ZERO_OFF_GRP_LEN];	/* Zero Offset of Group */
141*4882a593Smuzhiyun 	uint16 unit_n_off;	/* Unit and Offset */
142*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT;
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun typedef struct twt_grp_long twt_grp_long_t;
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun /* TWT Unit and TWT Offset field */
147*4882a593Smuzhiyun #define TWT_UNIT_MASK		0x000fu		/* TWT Unit */
148*4882a593Smuzhiyun #define TWT_OFFSET_MASK		0xfff0u		/* TWT Offset */
149*4882a593Smuzhiyun #define TWT_OFFSET_SHIFT	4u
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun /* TWT Unit field (table 8-248m) */
152*4882a593Smuzhiyun #define TWT_UNIT_32us		0u
153*4882a593Smuzhiyun #define TWT_UNIT_256us		1u
154*4882a593Smuzhiyun #define TWT_UNIT_1024us		2u
155*4882a593Smuzhiyun #define TWT_UNIT_8ms192us	3u
156*4882a593Smuzhiyun #define TWT_UNIT_32ms768us	4u
157*4882a593Smuzhiyun #define TWT_UNIT_262ms144us	5u
158*4882a593Smuzhiyun #define TWT_UNIT_1s048576us	6u
159*4882a593Smuzhiyun #define TWT_UNIT_8s388608us	7u
160*4882a593Smuzhiyun #define TWT_UNIT_33s554432us	8u
161*4882a593Smuzhiyun #define TWT_UNIT_268s435456us	9u
162*4882a593Smuzhiyun #define TWT_UNIT_1073s741824us	10u
163*4882a593Smuzhiyun #define TWT_UNIT_8589s934592us	11u
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun /* TWT element - bottom */
166*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct twt_ie_itwt_bottom {
167*4882a593Smuzhiyun 	uint8 nom_wake_dur;		/* Nominal Minimum Wake Duration */
168*4882a593Smuzhiyun 	uint16 wake_int_mant;		/* TWT Wake Interval Mantissa */
169*4882a593Smuzhiyun 	uint8 channel;			/* TWT Channel */
170*4882a593Smuzhiyun 	/* NDP Paging field */
171*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT;
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun typedef struct twt_ie_itwt_bottom twt_ie_itwt_bottom_t;
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun /* TWT element - bottom */
176*4882a593Smuzhiyun BWL_PRE_PACKED_STRUCT struct twt_ie_btwt_bottom {
177*4882a593Smuzhiyun 	uint8 nom_wake_dur;		/* Nominal Minimum Wake Duration */
178*4882a593Smuzhiyun 	uint16 wake_int_mant;		/* TWT Wake Interval Mantissa */
179*4882a593Smuzhiyun 	twt_bcast_twt_info_t btwt_info;	/* Broadcast TWT Info */
180*4882a593Smuzhiyun 	/* NDP Paging field */
181*4882a593Smuzhiyun } BWL_POST_PACKED_STRUCT;
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun typedef struct twt_ie_btwt_bottom twt_ie_btwt_bottom_t;
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun /* TWT IE structure for broadcast TWT */
186*4882a593Smuzhiyun typedef struct twt_last_bcast_ie {
187*4882a593Smuzhiyun 	twt_ie_top_t top;			/* Element id, len, control fields */
188*4882a593Smuzhiyun 	twt_request_type_t req_type;	/* request type field */
189*4882a593Smuzhiyun 	twt_bcast_wake_time_t twt;	/* twt field */
190*4882a593Smuzhiyun 	twt_ie_btwt_bottom_t btwt_bottom;	/* wake dur, int, BID Info */
191*4882a593Smuzhiyun } twt_last_bcast_ie_t;
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun /* Nominal Minimum Wake Duration */
194*4882a593Smuzhiyun #define TWT_WAKE_DUR_UNIT_256us		256u	/* Nom.Min. Wake Duration is in 256us units */
195*4882a593Smuzhiyun #define TWT_WAKE_DUR_UNIT_1ms		1024u	/* Nom. Min. Wake Duration is in 1ms units */
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun /* to be deprecated */
198*4882a593Smuzhiyun #define TWT_NOM_WAKE_DUR_UNIT	 256u	/* Nominal Minimum Wake Duration is in 256us units */
199*4882a593Smuzhiyun 
200*4882a593Smuzhiyun /* TWT IE field lengths */
201*4882a593Smuzhiyun #define TWT_IE_NOM_MIN_TWT_WK_DUR_SZ		1u	/* 1 byte */
202*4882a593Smuzhiyun #define TWT_IE_TWT_WAKE_INT_MANT_SZ		2u	/* 2 bytes */
203*4882a593Smuzhiyun #define TWT_IE_BCAST_TWT_INFO_SZ		2u	/* 2 byte */
204*4882a593Smuzhiyun #define TWT_IE_TWT_CHANNEL_SZ			1u	/* 1 byte */
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun /* Broadcast TWT info subfield format (figure 9-589ay1) */
207*4882a593Smuzhiyun #define TWT_BTWT_PERSIST_EXPO_MASK		0x0007u	/* Broadcast TWT Persistence Exponent */
208*4882a593Smuzhiyun #define TWT_BCAST_TWT_ID_MASK			0x00F8u	/* Broadcast TWT ID */
209*4882a593Smuzhiyun #define TWT_BCAST_TWT_ID_SHIFT			3u
210*4882a593Smuzhiyun #define TWT_BTWT_PERSIST_MANT_MASK		0xFF00u	/* Broadcast TWT Persistence Mantissa */
211*4882a593Smuzhiyun #define TWT_BTWT_PERSIST_MANT_SHIFT		8u
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun #define TWT_BTWT_PERSIST_INDEFINITE		0xFFu
214*4882a593Smuzhiyun 
215*4882a593Smuzhiyun /* NDP Paging field - 4 octets or 0 octet */
216*4882a593Smuzhiyun typedef uint32 twt_ndp_paging_t;
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun #define TWT_NDP_PAGING_PID		0x000001ffu	/* P-ID */
219*4882a593Smuzhiyun #define TWT_NDP_PAGING_MAX_PERIOD	0x0001fe00u	/* Max NDP Paging Period */
220*4882a593Smuzhiyun #define TWT_NDP_PAGING_PART_TSF_OFF	0x001e0000u	/* Partial TSF Offset */
221*4882a593Smuzhiyun #define TWT_NDP_PAGING_ACTION		0x00e00000u	/* Action */
222*4882a593Smuzhiyun #define TWT_NDP_PAGING_MIN_SLEEP	0x3f000000u	/* Min Sleep Duration */
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun /* Action field (table 8-248n) */
225*4882a593Smuzhiyun #define TWT_ACTION_SEND_PSP_TRIG	0u	/* Send a PS-Poll or uplink trigger frame */
226*4882a593Smuzhiyun #define TWT_ACTION_WAKE_MIN_SLEEP	1u	/* Wake up at the time indicated by
227*4882a593Smuzhiyun 						 * Min Sleep Duration
228*4882a593Smuzhiyun 						 */
229*4882a593Smuzhiyun #define TWT_ACTION_WAKE_RCV_BCN		2u	/* Wake up to receive the Beacon */
230*4882a593Smuzhiyun #define TWT_ACTION_WAKE_RCV_DTIM	3u	/* Wake up to receive the DTIM Beacon */
231*4882a593Smuzhiyun #define TWT_ACTION_WAKE_IND_TIME	4u	/* Wakeup at the time indicated by the sum of
232*4882a593Smuzhiyun 						 * the Min Sleep Duration field and the ASD subfield
233*4882a593Smuzhiyun 						 * in the APDI field of the NDP Paging frame
234*4882a593Smuzhiyun 						 */
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun /* TWT Teardown for Negotiation type 0 or 1 */
237*4882a593Smuzhiyun #define TWT_TEARDOWN_FLOW_ID_MASK		0x07u
238*4882a593Smuzhiyun /* TWT Teardown for Negotiation type 3 */
239*4882a593Smuzhiyun #define TWT_TEARDOWN_BTWT_ID_MASK		0x1Fu
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun #define TWT_TEARDOWN_NEGO_TYPE_MASK		0x60u
242*4882a593Smuzhiyun #define TWT_TEARDOWN_NEGO_TYPE_SHIFT		5u
243*4882a593Smuzhiyun /* Teardown All TWT indication */
244*4882a593Smuzhiyun #define TWT_TEARDOWN_ALL_TWT			0x80u
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun /* TWT Information field byte 0 */
247*4882a593Smuzhiyun #define TWT_INFO_FLOW_ID_MASK		0x07u
248*4882a593Smuzhiyun #define TWT_INFO_RESP_REQ		0x08u
249*4882a593Smuzhiyun #define TWT_INFO_NEXT_TWT_REQ		0x10u
250*4882a593Smuzhiyun #define TWT_INFO_NEXT_TWT_SIZE_MASK	0x60u
251*4882a593Smuzhiyun #define TWT_INFO_NEXT_TWT_SIZE_SHIFT	0x5u
252*4882a593Smuzhiyun #define TWT_INFO_ALL_TWT		0x80u
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun /* Next TWT Subfield Size field encoding */
255*4882a593Smuzhiyun #define TWT_INFO_NEXT_TWT_SIZE_0_IDX	0u	/* 0 byte */
256*4882a593Smuzhiyun #define TWT_INFO_NEXT_TWT_SIZE_32_IDX	1u	/* 4 bytes */
257*4882a593Smuzhiyun #define TWT_INFO_NEXT_TWT_SIZE_48_IDX	2u	/* 6 bytes */
258*4882a593Smuzhiyun #define TWT_INFO_NEXT_TWT_SIZE_64_IDX	3u	/* 8 bytes */
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun /* Next TWT Subfield Size field */
261*4882a593Smuzhiyun #define TWT_INFO_NEXT_TWT_SIZE_0	0u	/* 0 byte */
262*4882a593Smuzhiyun #define TWT_INFO_NEXT_TWT_SIZE_32	4u	/* 4 bytes */
263*4882a593Smuzhiyun #define TWT_INFO_NEXT_TWT_SIZE_48	6u	/* 6 bytes */
264*4882a593Smuzhiyun #define TWT_INFO_NEXT_TWT_SIZE_64	8u	/* 8 bytes */
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun /* Old macro definitions - To be removed - Start here */
267*4882a593Smuzhiyun #define TWT_BCAST_MAX_VALID_FLOW_ID	3u
268*4882a593Smuzhiyun #define TWT_CTRL_BCAST			0x04u	/* Broadcast */
269*4882a593Smuzhiyun #define TWT_CTRL_WAKE_TBTT_NEGO		0x08u	/* Wake TBTT Negotiation */
270*4882a593Smuzhiyun #define TWT_SETUP_CMD_GRPING_TWT	3u	/* Grouping TWT */
271*4882a593Smuzhiyun #define TWT_SETUP_CMD_ALTER_TWT		5u	/* Alternate TWT */
272*4882a593Smuzhiyun #define TWT_IE_BCAST_TWT_ID_SZ		1u	/* 1 byte */
273*4882a593Smuzhiyun #define TWT_INFO_BROADCAST_RESCHED	0x80u
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun typedef struct twt_ie_itwt_bottom twt_ie_bottom_t;
276*4882a593Smuzhiyun /* Old macro definitions - To be removed - End here */
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun /* This marks the end of a packed structure section. */
279*4882a593Smuzhiyun #include <packed_section_end.h>
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun #endif /* _802_11ah_h_ */
282