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