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