• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17  */
18 
19 #ifndef __WLAN_TYPES_H__
20 #define __WLAN_TYPES_H__
21 
22 /* ****************************************************************************
23   1 其他头文件包含
24 **************************************************************************** */
25 #include "wlan_spec.h"
26 
27 #ifdef __cplusplus
28 #if __cplusplus
29 extern "C" {
30 #endif
31 #endif
32 
33 /* ****************************************************************************
34   2 宏定义
35 **************************************************************************** */
36 /* ****************************************************************************
37   2.1 基本宏定义
38 **************************************************************************** */
39 #define MAC_BYTE_ALIGN_VALUE                4           /* 4字节对齐 */
40 /* MAC帧头长度放入平台 */
41 /* 80211MAC帧头FC字段宏定义 */
42 #define WLAN_PROTOCOL_VERSION               0x00        /* 协议版本 */
43 #define WLAN_FC0_TYPE_MGT                   0x00        /* 管理帧 */
44 #define WLAN_FC0_TYPE_CTL                   0x04        /* 控制帧 */
45 #define WLAN_FC0_TYPE_DATA                  0x08        /* 数据帧 */
46 
47 /* 管理帧subtype */
48 #define WLAN_FC0_SUBTYPE_ASSOC_REQ          0x00
49 #define WLAN_FC0_SUBTYPE_ASSOC_RSP          0x10
50 #define WLAN_FC0_SUBTYPE_REASSOC_REQ        0x20
51 #define WLAN_FC0_SUBTYPE_REASSOC_RSP        0x30
52 #define WLAN_FC0_SUBTYPE_PROBE_REQ          0x40
53 #define WLAN_FC0_SUBTYPE_PROBE_RSP          0x50
54 #define WLAN_FC0_SUBTYPE_BEACON             0x80
55 #define WLAN_FC0_SUBTYPE_ATIM               0x90
56 #define WLAN_FC0_SUBTYPE_DISASSOC           0xa0
57 #define WLAN_FC0_SUBTYPE_AUTH               0xb0
58 #define WLAN_FC0_SUBTYPE_DEAUTH             0xc0
59 #define WLAN_FC0_SUBTYPE_ACTION             0xd0
60 #define WLAN_FC0_SUBTYPE_ACTION_NO_ACK      0xe0
61 
62 /* 控制帧subtype */
63 #define WLAN_FC0_SUBTYPE_NDPA               0x50
64 #define WLAN_FC0_SUBTYPE_CONTROL_WRAPPER    0x70        /* For TxBF RC */
65 #define WLAN_FC0_SUBTYPE_BAR                0x80
66 #define WLAN_FC0_SUBTYPE_BA                 0x90
67 
68 #define WLAN_FC0_SUBTYPE_PS_POLL            0xa0
69 #define WLAN_FC0_SUBTYPE_RTS                0xb0
70 #define WLAN_FC0_SUBTYPE_CTS                0xc0
71 #define WLAN_FC0_SUBTYPE_ACK                0xd0
72 #define WLAN_FC0_SUBTYPE_CF_END             0xe0
73 #define WLAN_FC0_SUBTYPE_CF_END_ACK         0xf0
74 
75 /* 数据帧subtype */
76 #define WLAN_FC0_SUBTYPE_DATA               0x00
77 #define WLAN_FC0_SUBTYPE_CF_ACK             0x10
78 #define WLAN_FC0_SUBTYPE_CF_POLL            0x20
79 #define WLAN_FC0_SUBTYPE_CF_ACPL            0x30
80 #define WLAN_FC0_SUBTYPE_NODATA             0x40
81 #define WLAN_FC0_SUBTYPE_CFACK              0x50
82 #define WLAN_FC0_SUBTYPE_CFPOLL             0x60
83 #define WLAN_FC0_SUBTYPE_CF_ACK_CF_ACK      0x70
84 #define WLAN_FC0_SUBTYPE_QOS                0x80
85 #define WLAN_FC0_SUBTYPE_QOS_NULL           0xc0
86 
87 #define WLAN_FC1_DIR_MASK                   0x03
88 #define WLAN_FC1_DIR_NODS                   0x00        /* STA->STA */
89 #define WLAN_FC1_DIR_TODS                   0x01        /* STA->AP  */
90 #define WLAN_FC1_DIR_FROMDS                 0x02        /* AP ->STA */
91 #define WLAN_FC1_DIR_DSTODS                 0x03        /* AP ->AP  */
92 
93 #define WLAN_FC1_MORE_FRAG                  0x04
94 #define WLAN_FC1_RETRY                      0x08
95 #define WLAN_FC1_PWR_MGT                    0x10
96 #define WLAN_FC1_MORE_DATA                  0x20
97 #define WLAN_FC1_WEP                        0x40
98 #define WLAN_FC1_ORDER                      0x80
99 
100 #define WLAN_HDR_DUR_OFFSET                 2           /* duartion相对于mac头的字节偏移 */
101 #define WLAN_HDR_ADDR1_OFFSET               4           /* addr1相对于mac头的字节偏移 */
102 #define WLAN_HDR_ADDR2_OFFSET               10          /* addr2相对于mac头的字节偏移 */
103 #define WLAN_HDR_ADDR3_OFFSET               16          /* addr3相对于mac头的字节偏移 */
104 #define WLAN_HDR_FRAG_OFFSET                22          /* 分片序号相对于mac的字节偏移 */
105 
106 #define WLAN_REASON_CODE_LEN                2
107 
108 /* 帧头DS位 */
109 #define WLAN_FRAME_TO_AP                   0x0100
110 #define WLAN_FRAME_FROME_AP                0x0200
111 /* FCS长度(4字节) */
112 #define WLAN_HDR_FCS_LENGTH                 4
113 
114 #define WLAN_MAX_BAR_DATA_LEN               20  /* BAR帧的最大长度 */
115 #define WLAN_CHTXT_SIZE                     128 /* challenge text的长度 */
116 
117 #define WLAN_SEQ_SHIFT                      4
118 /* AMPDU Delimeter长度(4字节) */
119 #define WLAN_DELIMETER_LENGTH               4
120 
121 /* 配置命令最大长度: 从算法名称开始算起,不包括"alg" */
122 #define DMAC_ALG_CONFIG_MAX_ARG     7
123 
124 /* 信道切换计数 */
125 #define WLAN_CHAN_SWITCH_DEFAULT_CNT        6
126 #define WLAN_CHAN_SWITCH_DETECT_RADAR_CNT   1
127 
128 /* 5G子频段数目 */
129 #define WLAN_5G_20M_SUB_BAND_NUM    7
130 #define WLAN_5G_80M_SUB_BAND_NUM    7
131 #define WLAN_5G_CALI_SUB_BAND_NUM   (WLAN_5G_20M_SUB_BAND_NUM + WLAN_5G_80M_SUB_BAND_NUM)
132 
133 /* 单个通道的UPC数据寄存器数目 */
134 #define WLAN_UPC_DATA_REG_NUM       4
135 
136 #define WLAN_FIELD_TYPE_AID            0xC000
137 #define wlan_aid(aid)                  ((aid) & ~0xc000)
138 
139 #define WLAN_MAX_VAP_NUM            2
140 #define WLAN_2G_SUB_BAND_NUM        13
141 #define WLAN_SIFS_OFDM_POWLVL_NUM   4
142 
143 #ifdef _PRE_WLAN_FEATURE_MESH_ROM
144 #define WLAN_MESH_ACTION_SELF_PROTECTED 15
145 #endif
146 
147 #define WLAN_ACTION_BODY_CATEGORY_OFFSET      0          /* Action帧的category字段相对于frame body的字节偏移 */
148 #define WLAN_ACTION_BODY_ELEMENT_OFFSET       6          /* Action帧的element字段相对于frame body的字节偏移 */
149 #define WLAN_ACTION_BODY_OFFSET               24         /* Action帧的frame body相对于帧起始地址的字节偏移 */
150 
151 #define WLAN_ACTION_CATEGORY_VENDOR_SPECIFIC  127         /* Action帧的类别为厂商自定义 */
152 #define WLAN_ACTION_TYPE_NOA                  1           /* Action帧的子类别为NOA */
153 
154 /* 管理帧包含的固定长度信息元素的总长度 */
155 #define WLAN_FC0_ASSOC_REQ_MIN_LEN          4
156 #define WLAN_FC0_REASSOC_REQ_MIN_LEN        8
157 #define WLAN_FC0_BEACON_MIN_LEN             12
158 #define WLAN_FC0_DISASSOC_MIN_LEN           2
159 #define WLAN_FC0_AUTH_MIN_LEN               6
160 #define WLAN_FC0_DEAUTH_MIN_LEN             2
161 #define WLAN_FC0_ACTION_MIN_LEN             1
162 
163 /* ****************************************************************************
164   2.2 WME宏定义
165 **************************************************************************** */
166 /* TID最大个数,TBD 和 WLAN_TID_MAX_NUM归一 */
167 #define WLAN_WME_MAX_TID_NUM 8
168 
169 #define wlan_wme_ac_to_tid(_ac) \
170     (((_ac) == WLAN_WME_AC_VO) ? 6 : ((_ac) == WLAN_WME_AC_VI) ? 5 : ((_ac) == WLAN_WME_AC_BK) ? 1 : 0)
171 
172 #define wlan_wme_tid_to_ac(_tid) \
173     ((((_tid) == 0) || ((_tid) == 3)) ? WLAN_WME_AC_BE : \
174     (((_tid) == 1) || ((_tid) == 2)) ? WLAN_WME_AC_BK : \
175     (((_tid) == 4) || ((_tid) == 5)) ? WLAN_WME_AC_VI : WLAN_WME_AC_VO)
176 
177 /* ****************************************************************************
178   2.3 HT宏定义
179 **************************************************************************** */
180 /* 11n:
181    Maximum A-MSDU Length Indicates maximum A-MSDU length.See 9.11. Set to 0 for 3839 octetsSet to 1 for 7935 octets */
182 /* 11AC(9.11): A VHT STA that sets the Maximum MPDU Length in the VHT Capabilities element to indicate 3895 octets
183    shall set the Maximum A-MSDU Length in the HT Capabilities element to indicate 3839 octets. A VHT STA
184    that sets the Maximum MPDU Length in the VHT Capabilities element to indicate 7991 octets or 11 454 oc-
185    tets shall set the Maximum A-MSDU Length in the HT Capabilities element to indicate 7935 octets. */
186 #define WLAN_AMSDU_FRAME_MAX_LEN_SHORT      3839
187 #define WLAN_AMSDU_FRAME_MAX_LEN_LONG       7935
188 
189 /* Maximum A-MSDU Length Indicates maximum A-MSDU length.See 9.11. Set to 0 for 3839 octetsSet to 1 for 7935 octets */
190 #define wlan_ht_get_amsdu_max_len(_bit_amsdu_max_length) \
191     ((0 == (_bit_amsdu_max_length)) ? WLAN_AMSDU_FRAME_MAX_LEN_SHORT : WLAN_AMSDU_FRAME_MAX_LEN_LONG)
192 
193 /* ****************************************************************************
194   2.14 安全相关宏定义
195 **************************************************************************** */
196 /* cipher suite selectors */
197 #define WLAN_CIPHER_SUITE_USE_GROUP 0x000FAC00
198 #define WLAN_CIPHER_SUITE_WEP40     0x000FAC01
199 #define WLAN_CIPHER_SUITE_TKIP      0x000FAC02
200     /* reserved:                0x000FAC03 */
201 #define WLAN_CIPHER_SUITE_CCMP      0x000FAC04
202 #define WLAN_CIPHER_SUITE_WEP104    0x000FAC05
203 #define WLAN_CIPHER_SUITE_AES_CMAC  0x000FAC06
204 #undef  WLAN_CIPHER_SUITE_SMS4
205 #define WLAN_CIPHER_SUITE_SMS4      0x00147201
206 
207 /* AKM suite selectors */
208 #define WITP_WLAN_AKM_SUITE_8021X         0x000FAC01
209 #define WITP_WLAN_AKM_SUITE_PSK             0x000FAC02
210 #define WITP_WLAN_AKM_SUITE_WAPI_PSK     0x000FAC04
211 #define WITP_WLAN_AKM_SUITE_WAPI_CERT    0x000FAC12
212 
213 #define WLAN_PMKID_LEN           16
214 #define WLAN_PMKID_CACHE_SIZE    4
215 #define WLAN_NONCE_LEN           32
216 #define WLAN_PTK_PREFIX_LEN      22
217 #define WLAN_GTK_PREFIX_LEN      19
218 #define WLAN_GTK_DATA_LEN        (NONCE_LEN + WLAN_MAC_ADDR_LEN)
219 #define WLAN_PTK_DATA_LEN        (2 * NONCE_LEN + 2 * WLAN_MAC_ADDR_LEN)
220 
221 #define WLAN_KCK_LENGTH          16
222 #define WLAN_KEK_LENGTH          16
223 #define WLAN_TEMPORAL_KEY_LENGTH 16
224 #define WLAN_MIC_KEY_LENGTH      8
225 
226 #define WLAN_PMK_SIZE        32 /* In Bytes */
227 #define WLAN_PTK_SIZE        64 /* In Bytes */
228 #define WLAN_GTK_SIZE        32 /* In Bytes */
229 #define WLAN_GMK_SIZE        32 /* In Bytes */
230 
231 #define WLAN_WEP40_KEY_LEN              5
232 #define WLAN_WEP104_KEY_LEN             13
233 #define WLAN_TKIP_KEY_LEN               32      /* TKIP KEY length 256 BIT */
234 #define WLAN_CCMP_KEY_LEN               16      /* CCMP KEY length 128 BIT */
235 #define WLAN_BIP_KEY_LEN                16      /* BIP KEY length 128 BIT */
236 
237 #define WLAN_NUM_DOT11WEPDEFAULTKEYVALUE       4
238 #define WLAN_MAX_WEP_STR_SIZE                  27 /* 5 for WEP 40; 13 for WEP 104 */
239 #define WLAN_WEP_SIZE_OFFSET                   0
240 #define WLAN_WEP_KEY_VALUE_OFFSET              1
241 
242 #define WLAN_COUNTRY_STR_LEN 3
243 
244 /* crypto status */
245 #define WLAN_ENCRYPT_BIT        (1 << 0)
246 #define WLAN_WEP_BIT            (1 << 1)
247 #define WLAN_WEP104_BIT         ((1 << 2) | (1 << 1))
248 #define WLAN_WPA_BIT            (1 << 3)
249 #define WLAN_WPA2_BIT           (1 << 4)
250 #define WLAN_CCMP_BIT           (1 << 5)
251 #define WLAN_TKIP_BIT           (1 << 6)
252 
253 #define WLAN_WAPI_BIT           (1 << 5)
254 
255 /* auth */
256 #define WLAN_OPEN_SYS_BIT       (1 << 0)
257 #define WLAN_SHARED_KEY_BIT     (1 << 1)
258 #define WLAN_8021X_BIT          (1 << 2)
259 
260 #define WLAN_WITP_CAPABILITY_PRIVACY BIT4
261 #define WLAN_MESH_CCMP_COUNTER_LEN 6
262 
263 /* ****************************************************************************
264   3 枚举定义
265 **************************************************************************** */
266 /* ****************************************************************************
267   3.1 基本枚举类型
268 **************************************************************************** */
269 /* TID编号类别放入平台 */
270 /* VAP的工作模式 */
271 typedef enum {
272     WLAN_VAP_MODE_CONFIG,        /* 配置模式 */
273     WLAN_VAP_MODE_BSS_STA,       /* BSS STA模式 */
274     WLAN_VAP_MODE_BSS_AP,        /* BSS AP模式 */
275     WLAN_VAP_MODE_WDS,           /* WDS模式 */
276     WLAN_VAP_MODE_MONITOER,      /* 侦听模式 */
277     WLAN_VAP_MODE_MESH,          /* MBSS MESH模式 */
278     WLAN_VAP_HW_TEST,
279 
280     WLAN_VAP_MODE_BUTT
281 } wlan_vap_mode_enum;
282 typedef hi_u8 wlan_vap_mode_enum_uint8;
283 
284 /* 认证的transaction number */
285 typedef enum {
286     WLAN_AUTH_TRASACTION_NUM_ONE    = 0x0001,
287     WLAN_AUTH_TRASACTION_NUM_TWO    = 0x0002,
288     WLAN_AUTH_TRASACTION_NUM_THREE  = 0x0003,
289     WLAN_AUTH_TRASACTION_NUM_FOUR   = 0x0004,
290 
291     WLAN_AUTH_TRASACTION_NUM_BUTT
292 } wlan_auth_transaction_number_enum;
293 typedef hi_u8 wlan_auth_transaction_number_enum_uint8;
294 typedef enum {
295     WLAN_BAND_2G,
296     WLAN_BAND_BUTT
297 } wlan_channel_band_enum;
298 typedef hi_u8 wlan_channel_band_enum_uint8;
299 
300 /* Protection mode for MAC */
301 typedef enum {
302     WLAN_PROT_NO,  /* Do not use any protection       */
303     WLAN_PROT_ERP, /* Protect all ERP frame exchanges */
304     WLAN_PROT_HT,  /* Protect all HT frame exchanges  */
305     WLAN_PROT_GF,  /* Protect all GF frame exchanges  */
306 
307     WLAN_PROT_BUTT
308 } wlan_prot_mode_enum;
309 typedef hi_u8 wlan_prot_mode_enum_uint8;
310 
311 typedef enum {
312     WLAN_RTS_RATE_SELECT_MODE_REG,  /* 0: RTS速率 = PROT_DATARATE的配置                           */
313     WLAN_RTS_RATE_SELECT_MODE_DESC, /* 1: RTS速率 = 硬件根据TX描述符计算出的值                    */
314     WLAN_RTS_RATE_SELECT_MODE_MIN,  /* 2: RTS速率 = min(PROT_DATARATE,硬件根据TX描述符计算出的值) */
315     WLAN_RTS_RATE_SELECT_MODE_MAX,  /* 3: RTS速率 = max(PROT_DATARATE,硬件根据TX描述符计算出的值) */
316 
317     WLAN_RTS_RATE_SELECT_MODE_BUTT
318 } wlan_rts_rate_select_mode_enum;
319 
320 typedef enum {
321     WLAN_WITP_AUTH_OPEN_SYSTEM = 0,
322     WLAN_WITP_AUTH_SHARED_KEY,
323     WLAN_WITP_AUTH_FT,
324     WLAN_WITP_AUTH_SAE = 3,
325     WLAN_WITP_AUTH_NETWORK_EAP, /* 802.11-2016协议查得认证帧中Auth Alg mode 字段3为SAE认证 */
326     WLAN_WITP_AUTH_NUM,
327     WLAN_WITP_AUTH_MAX = WLAN_WITP_AUTH_NUM - 1,
328     WLAN_WITP_AUTH_AUTOMATIC,
329 
330     WLAN_WITP_ALG_AUTH_BUTT
331 } wlan_auth_alg_mode_enum;
332 typedef hi_u8 wlan_auth_alg_enum_uint8;
333 
334 typedef enum {
335     /*
336     *  注意: wlan_cipher_key_type_enum和hal_key_type_enum 值一致,
337     *        如果硬件有改变,则应该在HAL 层封装
338     */
339     WLAN_KEY_TYPE_TX_GTK              = 0,  /* TX GTK */
340     WLAN_KEY_TYPE_PTK                 = 1,  /* PTK */
341     WLAN_KEY_TYPE_RX_GTK              = 2,  /* RX GTK */
342     WLAN_KEY_TYPE_RX_GTK2             = 3,  /* RX GTK2 51不用 */
343     WLAN_KEY_TYPE_BUTT
344 } wlan_cipher_key_type_enum;
345 typedef hi_u8 wlan_cipher_key_type_enum_uint8;
346 
347 typedef enum {
348     /*
349     *  注意: wlan_key_origin_enum_uint8和hal_key_origin_enum_uint8 值一致,
350     *        如果硬件有改变,则应该在HAL 层封装
351     */
352     WLAN_AUTH_KEY = 0,      /* Indicates that for this key, this STA is the authenticator */
353     WLAN_SUPP_KEY = 1,      /* Indicates that for this key, this STA is the supplicant */
354 
355     WLAN_KEY_ORIGIN_BUTT,
356 } wlan_key_origin_enum;
357 typedef hi_u8 wlan_key_origin_enum_uint8;
358 
359 typedef enum {
360     /* 按照80211-2012 协议 Table 8-99 Cipher suite selectors 定义 */
361     WLAN_80211_CIPHER_SUITE_GROUP_CIPHER = 0,
362     WLAN_80211_CIPHER_SUITE_WEP_40       = 1,
363     WLAN_80211_CIPHER_SUITE_TKIP         = 2,
364     WLAN_80211_CIPHER_SUITE_RSV          = 3,
365     WLAN_80211_CIPHER_SUITE_NO_ENCRYP    = WLAN_80211_CIPHER_SUITE_RSV, /* 采用协议定义的保留值做不加密类型 */
366     WLAN_80211_CIPHER_SUITE_CCMP         = 4,
367     WLAN_80211_CIPHER_SUITE_WEP_104      = 5,
368     WLAN_80211_CIPHER_SUITE_BIP          = 6,
369     WLAN_80211_CIPHER_SUITE_GROUP_DENYD  = 7,
370 
371     WLAN_80211_CIPHER_SUITE_WAPI         = 10,      /* 随意定,不影响11i即可 */
372 } wlan_ciper_protocol_type_enum;
373 typedef hi_u8 wlan_ciper_protocol_type_enum_uint8;
374 
375 /* 按照80211-2012 协议 Table 8-101 AKM suite selectors 定义 */
376 #define WLAN_AUTH_SUITE_RSV              0
377 #define WLAN_AUTH_SUITE_1X               1
378 #define WLAN_AUTH_SUITE_PSK              2
379 #define WLAN_AUTH_SUITE_FT_1X            3
380 #define WLAN_AUTH_SUITE_FT_PSK           4
381 #define WLAN_AUTH_SUITE_1X_SHA256        5
382 #define WLAN_AUTH_SUITE_PSK_SHA256       6
383 #define WLAN_AUTH_SUITE_TDLS             7
384 #define WLAN_AUTH_SUITE_SAE_SHA256       8
385 #define WLAN_AUTH_SUITE_FT_SHA256        9
386 
387 typedef enum {
388     WITP_WPA_VERSION_1 = 1,
389     WITP_WPA_VERSION_2 = 2,
390 #ifdef _PRE_WLAN_FEATURE_WAPI
391     WITP_WAPI_VERSION = 1 << 2,
392 #endif
393 } witp_wpa_versions_enum;
394 typedef hi_u8 witp_wpa_versions_enum_uint8;
395 
396 typedef struct {
397     wlan_cipher_key_type_enum_uint8          cipher_key_type;      /* 密钥ID/类型 */
398     wlan_ciper_protocol_type_enum_uint8      cipher_protocol_type;
399     hi_u8                                    cipher_key_id;
400     hi_u8                                    auc_resv;
401 } wlan_security_txop_params_stru;
402 
403 /* 协议能力枚举 */
404 typedef enum {
405     WLAN_PROTOCOL_CAP_LEGACY,
406     WLAN_PROTOCOL_CAP_HT,
407     WLAN_PROTOCOL_CAP_VHT,
408 
409     WLAN_PROTOCOL_CAP_BUTT,
410 } wlan_protocol_cap_enum;
411 typedef hi_u8 wlan_protocol_cap_enum_uint8;
412 
413 /* 频带能力枚举 */
414 typedef enum {
415     WLAN_BAND_CAP_2G, /* 只支持2G */
416     WLAN_BAND_CAP_BUTT
417 } wlan_band_cap_enum;
418 typedef hi_u8 wlan_band_cap_enum_uint8;
419 
420 /* 带宽能力枚举 */
421 typedef enum {
422     WLAN_BW_CAP_20M,
423     WLAN_BW_CAP_40M,
424     WLAN_BW_CAP_80M,
425     WLAN_BW_CAP_160M,
426 
427     WLAN_BW_CAP_BUTT
428 } wlan_bw_cap_enum;
429 typedef hi_u8 wlan_bw_cap_enum_uint8;
430 
431 /* monitor类型枚举 */
432 typedef enum {
433     WLAN_MONITOR_OFF,              /* 关闭报文上报 */
434     WLAN_MONITOR_MCAST_DATA,       /* 上报组播(广播)数据包 */
435     WLAN_MONITOR_UCAST_DATA,       /* 上报单播数据包 */
436     WLAN_MONITOR_MCAST_MANAGEMENT, /* 上报组播(广播)管理包 */
437     WLAN_MONITOR_UCAST_MANAGEMENT, /* 上报单播管理包 */
438     WLAN_MONITOR_BUTT
439 } wlan_monitor_enum;
440 typedef hi_u8 wlan_monitor_enum_uint8;
441 
442 /* ****************************************************************************
443   3.4 VHT枚举类型
444 **************************************************************************** */
445 typedef enum {
446     WLAN_VHT_MCS0,
447     WLAN_VHT_MCS1,
448     WLAN_VHT_MCS2,
449     WLAN_VHT_MCS3,
450     WLAN_VHT_MCS4,
451     WLAN_VHT_MCS5,
452     WLAN_VHT_MCS6,
453     WLAN_VHT_MCS7,
454     WLAN_VHT_MCS8,
455     WLAN_VHT_MCS9,
456 
457     WLAN_VHT_MCS_BUTT,
458 } wlan_vht_mcs_enum;
459 typedef hi_u8 wlan_vht_mcs_enum_uint8;
460 
461 /*
462     复用1101定义的顺序
463     TBD,和周赟讨论后,修正速率的先后顺序
464 */
465 typedef enum {
466     WLAN_LEGACY_11B_RESERVED1       = 0,
467     WLAN_SHORT_11B_2M_BPS           = 1,
468     WLAN_SHORT_11B_5_HALF_M_BPS     = 2,
469     WLAN_SHORT_11B_11_M_BPS         = 3,
470 
471     WLAN_LONG_11B_1_M_BPS           = 4,
472     WLAN_LONG_11B_2_M_BPS           = 5,
473     WLAN_LONG_11B_5_HALF_M_BPS      = 6,
474     WLAN_LONG_11B_11_M_BPS          = 7,
475 
476     WLAN_LEGACY_OFDM_48M_BPS        = 8,
477     WLAN_LEGACY_OFDM_24M_BPS        = 9,
478     WLAN_LEGACY_OFDM_12M_BPS        = 10,
479     WLAN_LEGACY_OFDM_6M_BPS         = 11,
480     WLAN_LEGACY_OFDM_54M_BPS        = 12,
481     WLAN_LEGACY_OFDM_36M_BPS        = 13,
482     WLAN_LEGACY_OFDM_18M_BPS        = 14,
483     WLAN_LEGACY_OFDM_9M_BPS         = 15,
484 
485     WLAN_LEGACY_RATE_VALUE_BUTT
486 } wlan_legacy_rate_value_enum;
487 typedef hi_u8 wlan_legacy_rate_value_enum_uint8;
488 
489 /* WIFI协议类型定义 */
490 typedef enum {
491     WLAN_LEGACY_11A_MODE            = 0,    /* 11a, 5G, OFDM */
492     WLAN_LEGACY_11B_MODE            = 1,    /* 11b, 2.4G */
493     WLAN_LEGACY_11G_MODE            = 2,    /* 旧的11g only已废弃, 2.4G, OFDM */
494     WLAN_MIXED_ONE_11G_MODE         = 3,    /* 11bg, 2.4G */
495     WLAN_MIXED_TWO_11G_MODE         = 4,    /* 11g only, 2.4G */
496     WLAN_HT_MODE                    = 5,    /* 11n(11bgn或者11an,根据频段判断) */
497     WLAN_VHT_MODE                   = 6,    /* 11ac */
498     WLAN_HT_ONLY_MODE               = 7,    /* 11n only mode,只有带HT的设备才可以接入 */
499     WLAN_VHT_ONLY_MODE              = 8,    /* 11ac only mode 只有带VHT的设备才可以接入 */
500     WLAN_HT_11G_MODE                = 9,    /* 11ng,不包括11b */
501 
502     WLAN_PROTOCOL_BUTT
503 } wlan_protocol_enum;
504 typedef hi_u8 wlan_protocol_enum_uint8;
505 
506 /* 重要:代表VAP的preamble协议能力的使用该枚举,0表示long preamble; 1表示short preamble */
507 typedef enum {
508     WLAN_LEGACY_11B_MIB_LONG_PREAMBLE    = 0,
509     WLAN_LEGACY_11B_MIB_SHORT_PREAMBLE   = 1,
510 } wlan_11b_mib_preamble_enum;
511 typedef hi_u8 wlan_11b_mib_preamble_enum_uint8;
512 
513 /* 重要:仅限描述符接口使用(表示发送该帧使用的pramble类型),0表示short preamble; 1表示long preamble */
514 typedef enum {
515     WLAN_LEGACY_11B_DSCR_SHORT_PREAMBLE  = 0,
516     WLAN_LEGACY_11B_DSCR_LONG_PREAMBLE   = 1,
517 
518     WLAN_LEGACY_11B_PREAMBLE_BUTT
519 } wlan_11b_dscr_preamble_enum;
520 typedef hi_u8 wlan_11b_dscr_preamble_enum_uint8;
521 
522 /* ****************************************************************************
523   3.3 HT枚举类型
524 **************************************************************************** */
525 typedef enum {
526     WLAN_BAND_WIDTH_20M                 = 0,
527     WLAN_BAND_WIDTH_40PLUS              = 1,    /* 从20信道+1 */
528     WLAN_BAND_WIDTH_40MINUS             = 2,    /* 从20信道-1 */
529     WLAN_BAND_WIDTH_80PLUSPLUS          = 3,    /* 从20信道+1, 从40信道+1 */
530     WLAN_BAND_WIDTH_80PLUSMINUS         = 4,    /* 从20信道+1, 从40信道-1 */
531     WLAN_BAND_WIDTH_80MINUSPLUS         = 5,    /* 从20信道-1, 从40信道+1 */
532     WLAN_BAND_WIDTH_80MINUSMINUS        = 6,    /* 从20信道-1, 从40信道-1 */
533     WLAN_BAND_WIDTH_5M                  = 7,
534     WLAN_BAND_WIDTH_10M                 = 8,
535     WLAN_BAND_WIDTH_BUTT
536 } wlan_channel_bandwidth_enum;
537 typedef hi_u8 wlan_channel_bandwidth_enum_uint8;
538 
539 typedef enum {
540     WLAN_CH_SWITCH_DONE = 0,     /* 信道切换已经完成,AP在新信道运行 */
541     WLAN_CH_SWITCH_STATUS_1 = 1, /* AP还在当前信道,准备进行信道切换(发送CSA帧/IE) */
542     WLAN_CH_SWITCH_STATUS_2 = 2,
543 
544     WLAN_CH_SWITCH_BUTT
545 } wlan_ch_switch_status_enum;
546 typedef hi_u8 wlan_ch_switch_status_enum_uint8;
547 
548 typedef enum {
549     WLAN_BW_SWITCH_DONE     = 0,    /* 频宽切换已完成 */
550     WLAN_BW_SWITCH_40_TO_20 = 1,    /* 从40MHz带宽切换至20MHz带宽 */
551     WLAN_BW_SWITCH_20_TO_40 = 2,    /* 从20MHz带宽切换至40MHz带宽 */
552 
553     /* 后续添加 */
554     WLAN_BW_SWITCH_BUTT
555 } wlan_bw_switch_status_enum;
556 typedef hi_u8 wlan_bw_switch_status_enum_uint8;
557 
558 typedef enum {
559     WLAN_BAND_ASSEMBLE_20M                   = 0,
560 
561     WLAN_BAND_ASSEMBLE_40M                   = 4,
562     WLAN_BAND_ASSEMBLE_40M_DUP               = 5,
563 
564     WLAN_BAND_ASSEMBLE_80M                   = 8,
565     WLAN_BAND_ASSEMBLE_80M_DUP               = 9,
566 
567     WLAN_BAND_ASSEMBLE_160M                  = 12,
568     WLAN_BAND_ASSEMBLE_160M_DUP              = 13,
569 
570     WLAN_BAND_ASSEMBLE_80M_80M               = 15,
571 
572     WLAN_BAND_ASSEMBLE_5M                    = 16,
573     WLAN_BAND_ASSEMBLE_10M                   = 17,
574 
575     WLAN_BAND_ASSEMBLE_AUTO,
576 
577     WLAN_BAND_ASSEMBLE_BUTT
578 } hal_channel_assemble_enum;
579 typedef hi_u8 hal_channel_assemble_enum_uint8;
580 
581 typedef enum {
582     WLAN_HT_MIXED_PREAMBLE          = 0,
583     WLAN_HT_GF_PREAMBLE             = 1,
584 
585     WLAN_HT_PREAMBLE_BUTT
586 } wlan_ht_preamble_enum;
587 typedef hi_u8 wlan_ht_preamble_enum_uint8;
588 
589 typedef enum {
590     WLAN_HT_MCS0,
591     WLAN_HT_MCS1,
592     WLAN_HT_MCS2,
593     WLAN_HT_MCS3,
594     WLAN_HT_MCS4,
595     WLAN_HT_MCS5,
596     WLAN_HT_MCS6,
597     WLAN_HT_MCS7,
598     WLAN_HT_MCS8,
599     WLAN_HT_MCS9,
600     WLAN_HT_MCS10,
601     WLAN_HT_MCS11,
602     WLAN_HT_MCS12,
603     WLAN_HT_MCS13,
604     WLAN_HT_MCS14,
605     WLAN_HT_MCS15,
606 
607     WLAN_HT_MCS_BUTT
608 } wlan_ht_mcs_enum;
609 typedef hi_u8 wlan_ht_mcs_enum_uint8;
610 #define WLAN_HT_MCS32 32
611 #define WLAN_MIN_MPDU_LEN_FOR_MCS32 12
612 #define WLAN_MIN_MPDU_LEN_FOR_MCS32_SHORTGI 13
613 
614 typedef enum {
615     WLAN_SINGLE_NSS                 = 0,
616     WLAN_DOUBLE_NSS                 = 1,
617     WLAN_TRIPLE_NSS                 = 2,
618     WLAN_FOUR_NSS                   = 3,
619 
620     WLAN_NSS_BUTT
621 } wlan_nss_enum;
622 typedef hi_u8 wlan_nss_enum_uint8;
623 
624 typedef enum {
625     WLAN_HT_NON_STBC                   = 0,
626     WLAN_HT_ADD_ONE_NTS                = 1,
627     WLAN_HT_ADD_TWO_NTS                = 2,
628 
629     WLAN_HT_STBC_BUTT
630 } wlan_ht_stbc_enum;
631 typedef hi_u8 wlan_ht_stbc_enum_uint8;
632 
633 typedef enum {
634     WLAN_NO_SOUNDING                = 0,
635     WLAN_NDP_SOUNDING               = 1,
636     WLAN_STAGGERED_SOUNDING         = 2,
637     WLAN_LEGACY_SOUNDING            = 3,
638 
639     WLAN_SOUNDING_BUTT
640 } wlan_sounding_enum;
641 typedef hi_u8 wlan_sounding_enum_uint8;
642 
643 typedef struct {
644     hi_u8                               group_id;      /* group_id   */
645     hi_u8                               txop_ps_not_allowed;
646     hi_u16                              us_partial_aid;   /* partial_aid */
647 } wlan_groupid_partial_aid_stru;
648 
649 /* ****************************************************************************
650   3.4 TXBF枚举类型
651 **************************************************************************** */
652 typedef enum {
653     WLAN_NON_TXBF                   = 0,
654     WLAN_EXPLICIT_TXBF              = 1,
655     WLAN_LEGACY_TXBF                = 2,
656 
657     WLAN_TXBF_BUTT
658 } wlan_txbf_enum;
659 typedef hi_u8 wlan_txbf_enum_uint8;
660 
661 /* ****************************************************************************
662   3.5 WME枚举类型
663 **************************************************************************** */
664 /* WMM枚举类型放入平台 */
665 /* 帧类型 (2-bit) */
666 typedef enum {
667     WLAN_MANAGEMENT            = 0,
668     WLAN_CONTROL               = 1,
669     WLAN_DATA_BASICTYPE        = 2,
670     WLAN_RESERVED              = 3,
671 
672     WLAN_FRAME_TYPE_BUTT
673 } wlan_frame_type_enum;
674 typedef hi_u8 wlan_frame_type_enum_uint8;
675 
676 /* 帧子类型 (4-bit) */
677 /* 管理帧子类型放入平台SPEC */
678 /* 控制帧帧子类型 */
679 typedef enum {
680     /* 0~6 reserved */
681     WLAN_VHT_NDPA               = 5,     /* 0101 */
682     WLAN_CONTROL_WRAPPER        = 7,
683     WLAN_BLOCKACK_REQ           = 8,
684     WLAN_BLOCKACK               = 9,
685     WLAN_PS_POLL                = 10,
686     WLAN_RTS                    = 11,
687     WLAN_CTS                    = 12,
688     WLAN_ACK                    = 13,
689     WLAN_CF_END                 = 14,
690     WLAN_CF_END_CF_ACK          = 15,
691 
692     WLAN_CONTROL_SUBTYPE_BUTT   = 16,
693 } wlan_frame_control_subtype_enum;
694 
695 /* 数据帧子类型 */
696 typedef enum {
697     WLAN_DATA                   = 0,
698     WLAN_DATA_CF_ACK            = 1,
699     WLAN_DATA_CF_POLL           = 2,
700     WLAN_DATA_CF_ACK_POLL       = 3,
701     WLAN_NULL_FRAME             = 4,
702     WLAN_CF_ACK                 = 5,
703     WLAN_CF_POLL                = 6,
704     WLAN_CF_ACK_POLL            = 7,
705     WLAN_QOS_DATA               = 8,
706     WLAN_QOS_DATA_CF_ACK        = 9,
707     WLAN_QOS_DATA_CF_POLL       = 10,
708     WLAN_QOS_DATA_CF_ACK_POLL   = 11,
709     WLAN_QOS_NULL_FRAME         = 12,
710     WLAN_DATA_SUBTYPE_RESV1     = 13,
711     WLAN_QOS_CF_POLL            = 14,
712     WLAN_QOS_CF_ACK_POLL        = 15,
713 
714     WLAN_DATA_SUBTYPE_MGMT      = 16,
715 } wlan_frame_data_subtype_enum;
716 
717 /* ACK类型定义 */
718 typedef enum {
719     WLAN_TX_NORMAL_ACK = 0,
720     WLAN_TX_NO_ACK,
721     WLAN_TX_NO_EXPLICIT_ACK,
722     WLAN_TX_BLOCK_ACK,
723 
724     WLAN_TX_NUM_ACK_BUTT
725 } wlan_tx_ack_policy_enum;
726 typedef hi_u8 wlan_tx_ack_policy_enum_uint8;
727 
728 /* ****************************************************************************
729   3.6 信道枚举
730 **************************************************************************** */
731 /* 信道编码方式 */
732 typedef enum {
733     WLAN_BCC_CODE = 0,
734     WLAN_LDPC_CODE = 1,
735     WLAN_CHANNEL_CODE_BUTT
736 } wlan_channel_code_enum;
737 typedef hi_u8 wlan_channel_code_enum_uint8;
738 
739 /* 扫描类型 */
740 typedef enum {
741     WLAN_SCAN_TYPE_PASSIVE = 0,
742     WLAN_SCAN_TYPE_ACTIVE = 1,
743 
744     WLAN_SCAN_TYPE_BUTT
745 } wlan_scan_type_enum;
746 typedef hi_u8 wlan_scan_type_enum_uint8;
747 
748 /* 扫描模式 */
749 typedef enum {
750     WLAN_SCAN_MODE_FOREGROUND,      /* 前景扫描不分AP/STA(即初始扫描,连续式) */
751     WLAN_SCAN_MODE_BACKGROUND_STA,  /* STA背景扫描 */
752     WLAN_SCAN_MODE_BACKGROUND_AP,   /* AP背景扫描(间隔式) */
753     WLAN_SCAN_MODE_BACKGROUND_OBSS, /* 20/40MHz共存的obss扫描 */
754     WLAN_SCAN_MODE_BACKGROUND_CCA,
755     WLAN_SCAN_MODE_BACKGROUND_PNO, /* PNO调度扫描 */
756 
757     WLAN_SCAN_MODE_BUTT
758 } wlan_scan_mode_enum;
759 typedef hi_u8 wlan_scan_mode_enum_uint8;
760 
761 /* 扫描结果枚举 */
762 typedef enum {
763     WLAN_SCAN_EVENT_COMPLETE = 0,
764     WLAN_SCAN_EVENT_FAILED,
765     WLAN_SCAN_EVENT_ABORT, /* 强制终止,比如卸载 */
766     WLAN_SCAN_EVENT_TIMEOUT,
767     WLAN_SCAN_EVENT_BUTT
768 } dmac_scan_event_enum;
769 typedef hi_u8 wlan_scan_event_enum_uint8;
770 
771 typedef enum {
772     WLAN_LEGACY_VAP_MODE     = 0,    /* 非P2P设备 */
773     WLAN_P2P_GO_MODE         = 1,    /* P2P_GO */
774     WLAN_P2P_DEV_MODE        = 2,    /* P2P_Device */
775     WLAN_P2P_CL_MODE         = 3,    /* P2P_CL */
776 
777     WLAN_P2P_BUTT
778 } wlan_p2p_mode_enum;
779 typedef hi_u8 wlan_p2p_mode_enum_uint8;
780 
781 /* ****************************************************************************
782   3.7 加密枚举
783 **************************************************************************** */
784 /* pmf的能力 */
785 typedef enum {
786     MAC_PMF_DISABLED = 0, /* 不支持pmf能力 */
787     MAC_PMF_ENABLED,      /* 支持pmf能力,且不强制 */
788     MAC_PME_REQUIRED,     /* 严格执行pmf能力 */
789 
790     MAC_PMF_BUTT
791 } wlan_pmf_cap_status;
792 typedef hi_u8 wlan_pmf_cap_status_uint8;
793 
794 /* ****************************************************************************
795   3.8 报文类型枚举
796 **************************************************************************** */
797 typedef enum {
798     WLAN_PKT_TYPE_BEACON,
799     WLAN_PKT_TYPE_PROBE_REQ,
800     WLAN_PKT_TYPE_PROBE_RESP,
801     WLAN_PKT_TYPE_ASSOC_REQ,
802     WLAN_PKT_TYPE_ASSOC_RESP,
803     WLAN_PKT_TYPE_BUTT
804 } wlan_pkt_type;
805 typedef hi_u8 wlan_pkt_type_uint8;
806 
807 typedef enum {
808     IEEE80211_ROC_TYPE_NORMAL = 0,
809     IEEE80211_ROC_TYPE_MGMT_TX,
810     IEEE80211_ROC_TYPE_BUTT,
811 }wlan_ieee80211_roc_type;
812 typedef hi_u8 wlan_ieee80211_roc_type_uint8;
813 
814 /* ****************************************************************************
815   4 全局变量声明
816 **************************************************************************** */
817 /* ****************************************************************************
818   5 消息头定义
819 **************************************************************************** */
820 /* ****************************************************************************
821   6 消息定义
822 **************************************************************************** */
823 /* ****************************************************************************
824   7 STRUCT定义
825 **************************************************************************** */
826 typedef struct {
827     hi_u32                      cipher;                      /* 加密类型 */
828     hi_u32                      key_len;                     /* 密钥长 */
829     hi_u32                      seq_len;                     /* sequnece长 */
830     hi_u8                       auc_key[WLAN_WPA_KEY_LEN];   /* 密钥 */
831     hi_u8                       auc_seq[WLAN_WPA_SEQ_LEN];   /* sequence */
832 } wlan_priv_key_param_stru;
833 
834 typedef struct {
835     hi_s8 rssi;       /* 信号强度 */
836     hi_u8 auc_rsv[3]; /* 3: bytes保留字段 */
837 } wlan_rssi_stru;
838 
839 typedef struct {
840     hi_u8 enable;
841     wlan_pkt_type_uint8 type;
842     hi_u8 idx;
843     hi_u8 rsv;
844     const hi_u8 *puc_vnd_ie;
845 } wlan_vendor_ie_stru;
846 
847 typedef struct {
848     hi_u8 *puc_data;
849     hi_u32 us_len;
850 } wlan_custom_pkt_stru;
851 
852 #ifdef _PRE_WLAN_FEATURE_MESH_ROM
853 /* 数据帧发送状态Mesh定义 */
854 typedef enum {
855     WLAN_MESH_TX_STATUS_TX_ACK_OK            = 0,         /* Mesh TX成功   */
856     WLAN_MESH_TX_STATUS_MAX_RETRIES          = 1,         /* 达到最高重传次数         */
857     WLAN_MESH_TX_STATUS_ERR_FATAL            = 2,         /* 发送失败 */
858     WLAN_MESH_TX_STATUS_PEER_UNREACHABLE     = 3,         /* 远端不可达 */
859     WLAN_MESH_TX_STATUS_DROP_POLICY          = 4,         /* 策略丢帧(描述符不够) */
860 
861     WLAN_MESH_TX_STATUS_BUTT
862 } wlan_mesh_tx_status_enum;
863 typedef hi_u8 wlan_mesh_tx_status_enum_uint8;
864 #endif
865 
866 #ifdef _PRE_WLAN_FEATURE_BW_HIEX
867 typedef struct {
868     hi_u8                             selfcts;        /* 是否使能窄带切宽带发送selfcts */
869     hi_u8                             duration;       /* selfcts的占用信道时间,单位ms */
870     hi_u16                            us_per;            /* 发送selfcts的PER阈值 */
871 } wlan_selfcts_param_stru;
872 #endif
873 
874 /* ****************************************************************************
875   8 UNION定义
876 **************************************************************************** */
877 /* ****************************************************************************
878   9 OTHERS定义
879 **************************************************************************** */
880 /* ****************************************************************************
881  函 数 名  : wlan_hdr_get_frame_type
882  功能描述  : 获取帧类型
883  输入参数  : 无
884  输出参数  : 无
885  返 回 值  :
886  调用函数  :
887  被调函数  :
888 
889  修改历史      :
890   1.日    期   : 2013年4月10日
891     作    者   : HiSilicon
892     修改内容   : 新生成函数
893 
894 **************************************************************************** */
wlan_hdr_get_frame_type(const hi_u8 * puc_header)895 static inline hi_u8 wlan_hdr_get_frame_type(const hi_u8 *puc_header)
896 {
897     return ((puc_header[0] & (0x0c)) >> 2); /* 2: 右移2位 */
898 }
899 
900 /* ****************************************************************************
901   10 函数声明
902 **************************************************************************** */
903 #ifdef __cplusplus
904 #if __cplusplus
905 }
906 #endif
907 #endif
908 
909 #endif /* end of wlan_types.h */
910