1
2
3
4
5
6
7#ifndef __IEEE80211_H
8#define __IEEE80211_H
9
10#include <osdep_service.h>
11#include <drv_types.h>
12#include "wifi.h"
13#include <linux/wireless.h>
14
15#ifdef CONFIG_88EU_AP_MODE
16
17#define RTL_IOCTL_HOSTAPD (SIOCIWFIRSTPRIV + 28)
18
19
20enum {
21 RTL871X_HOSTAPD_FLUSH = 1,
22 RTL871X_HOSTAPD_ADD_STA = 2,
23 RTL871X_HOSTAPD_REMOVE_STA = 3,
24 RTL871X_HOSTAPD_GET_INFO_STA = 4,
25
26 RTL871X_HOSTAPD_GET_WPAIE_STA = 5,
27 RTL871X_SET_ENCRYPTION = 6,
28 RTL871X_GET_ENCRYPTION = 7,
29 RTL871X_HOSTAPD_SET_FLAGS_STA = 8,
30 RTL871X_HOSTAPD_GET_RID = 9,
31 RTL871X_HOSTAPD_SET_RID = 10,
32 RTL871X_HOSTAPD_SET_ASSOC_AP_ADDR = 11,
33 RTL871X_HOSTAPD_SET_GENERIC_ELEMENT = 12,
34 RTL871X_HOSTAPD_MLME = 13,
35 RTL871X_HOSTAPD_SCAN_REQ = 14,
36 RTL871X_HOSTAPD_STA_CLEAR_STATS = 15,
37 RTL871X_HOSTAPD_SET_BEACON = 16,
38 RTL871X_HOSTAPD_SET_WPS_BEACON = 17,
39 RTL871X_HOSTAPD_SET_WPS_PROBE_RESP = 18,
40 RTL871X_HOSTAPD_SET_WPS_ASSOC_RESP = 19,
41 RTL871X_HOSTAPD_SET_HIDDEN_SSID = 20,
42 RTL871X_HOSTAPD_SET_MACADDR_ACL = 21,
43 RTL871X_HOSTAPD_ACL_ADD_STA = 22,
44 RTL871X_HOSTAPD_ACL_REMOVE_STA = 23,
45};
46
47
48#define WLAN_STA_AUTH BIT(0)
49#define WLAN_STA_ASSOC BIT(1)
50#define WLAN_STA_PS BIT(2)
51#define WLAN_STA_TIM BIT(3)
52#define WLAN_STA_PERM BIT(4)
53#define WLAN_STA_AUTHORIZED BIT(5)
54#define WLAN_STA_PENDING_POLL BIT(6)
55#define WLAN_STA_SHORT_PREAMBLE BIT(7)
56#define WLAN_STA_PREAUTH BIT(8)
57#define WLAN_STA_WME BIT(9)
58#define WLAN_STA_MFP BIT(10)
59#define WLAN_STA_HT BIT(11)
60#define WLAN_STA_WPS BIT(12)
61#define WLAN_STA_MAYBE_WPS BIT(13)
62#define WLAN_STA_NONERP BIT(31)
63
64#endif
65
66#define IEEE_CMD_SET_WPA_PARAM 1
67#define IEEE_CMD_SET_WPA_IE 2
68#define IEEE_CMD_SET_ENCRYPTION 3
69#define IEEE_CMD_MLME 4
70
71#define IEEE_PARAM_WPA_ENABLED 1
72#define IEEE_PARAM_TKIP_COUNTERMEASURES 2
73#define IEEE_PARAM_DROP_UNENCRYPTED 3
74#define IEEE_PARAM_PRIVACY_INVOKED 4
75#define IEEE_PARAM_AUTH_ALGS 5
76#define IEEE_PARAM_IEEE_802_1X 6
77#define IEEE_PARAM_WPAX_SELECT 7
78
79#define AUTH_ALG_OPEN_SYSTEM 0x1
80#define AUTH_ALG_SHARED_KEY 0x2
81#define AUTH_ALG_LEAP 0x00000004
82
83#define IEEE_MLME_STA_DEAUTH 1
84#define IEEE_MLME_STA_DISASSOC 2
85
86#define IEEE_CRYPT_ERR_UNKNOWN_ALG 2
87#define IEEE_CRYPT_ERR_UNKNOWN_ADDR 3
88#define IEEE_CRYPT_ERR_CRYPT_INIT_FAILED 4
89#define IEEE_CRYPT_ERR_KEY_SET_FAILED 5
90#define IEEE_CRYPT_ERR_TX_KEY_SET_FAILED 6
91#define IEEE_CRYPT_ERR_CARD_CONF_FAILED 7
92
93#define IEEE_CRYPT_ALG_NAME_LEN 16
94
95#define WPA_CIPHER_NONE BIT(0)
96#define WPA_CIPHER_WEP40 BIT(1)
97#define WPA_CIPHER_WEP104 BIT(2)
98#define WPA_CIPHER_TKIP BIT(3)
99#define WPA_CIPHER_CCMP BIT(4)
100
101#define WPA_SELECTOR_LEN 4
102extern u8 RTW_WPA_OUI_TYPE[];
103extern u8 WPA_AUTH_KEY_MGMT_NONE[];
104extern u8 WPA_AUTH_KEY_MGMT_UNSPEC_802_1X[];
105extern u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X[];
106extern u8 WPA_CIPHER_SUITE_NONE[];
107extern u8 WPA_CIPHER_SUITE_WEP40[];
108extern u8 WPA_CIPHER_SUITE_TKIP[];
109extern u8 WPA_CIPHER_SUITE_WRAP[];
110extern u8 WPA_CIPHER_SUITE_CCMP[];
111extern u8 WPA_CIPHER_SUITE_WEP104[];
112
113#define RSN_HEADER_LEN 4
114#define RSN_SELECTOR_LEN 4
115
116extern u16 RSN_VERSION_BSD;
117extern u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X[];
118extern u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X[];
119extern u8 RSN_CIPHER_SUITE_NONE[];
120extern u8 RSN_CIPHER_SUITE_WEP40[];
121extern u8 RSN_CIPHER_SUITE_TKIP[];
122extern u8 RSN_CIPHER_SUITE_WRAP[];
123extern u8 RSN_CIPHER_SUITE_CCMP[];
124extern u8 RSN_CIPHER_SUITE_WEP104[];
125
126enum ratr_table_mode {
127 RATR_INX_WIRELESS_NGB = 0,
128 RATR_INX_WIRELESS_NG = 1,
129 RATR_INX_WIRELESS_NB = 2,
130 RATR_INX_WIRELESS_N = 3,
131 RATR_INX_WIRELESS_GB = 4,
132 RATR_INX_WIRELESS_G = 5,
133 RATR_INX_WIRELESS_B = 6,
134 RATR_INX_WIRELESS_MC = 7,
135 RATR_INX_WIRELESS_AC_N = 8,
136};
137
138enum NETWORK_TYPE {
139 WIRELESS_INVALID = 0,
140
141 WIRELESS_11B = BIT(0),
142 WIRELESS_11G = BIT(1),
143 WIRELESS_11A = BIT(2),
144 WIRELESS_11_24N = BIT(3),
145 WIRELESS_11_5N = BIT(4),
146 WIRELESS_AC = BIT(6),
147
148
149
150 WIRELESS_11BG = (WIRELESS_11B | WIRELESS_11G),
151
152 WIRELESS_11G_24N = (WIRELESS_11G | WIRELESS_11_24N),
153
154 WIRELESS_11A_5N = (WIRELESS_11A | WIRELESS_11_5N),
155
156 WIRELESS_11BG_24N = (WIRELESS_11B | WIRELESS_11G | WIRELESS_11_24N),
157
158 WIRELESS_11AGN = (WIRELESS_11A | WIRELESS_11G | WIRELESS_11_24N |
159 WIRELESS_11_5N),
160 WIRELESS_11ABGN = (WIRELESS_11A | WIRELESS_11B | WIRELESS_11G |
161 WIRELESS_11_24N | WIRELESS_11_5N),
162};
163
164#define SUPPORTED_24G_NETTYPE_MSK \
165 (WIRELESS_11B | WIRELESS_11G | WIRELESS_11_24N)
166#define SUPPORTED_5G_NETTYPE_MSK \
167 (WIRELESS_11A | WIRELESS_11_5N)
168
169#define IsSupported24G(NetType) \
170 ((NetType) & SUPPORTED_24G_NETTYPE_MSK ? true : false)
171#define IsSupported5G(NetType) \
172 ((NetType) & SUPPORTED_5G_NETTYPE_MSK ? true : false)
173
174#define IsEnableHWCCK(NetType) \
175 IsSupported24G(NetType)
176#define IsEnableHWOFDM(NetType) \
177 ((NetType) & (WIRELESS_11G | WIRELESS_11_24N | \
178 SUPPORTED_5G_NETTYPE_MSK) ? true : false)
179
180#define IsSupportedRxCCK(NetType) IsEnableHWCCK(NetType)
181#define IsSupportedRxOFDM(NetType) IsEnableHWOFDM(NetType)
182#define IsSupportedRxMCS(NetType) IsEnableHWOFDM(NetType)
183
184#define IsSupportedTxCCK(NetType) \
185 ((NetType) & (WIRELESS_11B) ? true : false)
186#define IsSupportedTxOFDM(NetType) \
187 ((NetType) & (WIRELESS_11G | WIRELESS_11A) ? true : false)
188#define IsSupportedTxMCS(NetType) \
189 ((NetType) & (WIRELESS_11_24N | WIRELESS_11_5N) ? true : false)
190
191struct ieee_param {
192 u32 cmd;
193 u8 sta_addr[ETH_ALEN];
194 union {
195 struct {
196 u8 name;
197 u32 value;
198 } wpa_param;
199 struct {
200 u32 len;
201 u8 reserved[32];
202 u8 data[0];
203 } wpa_ie;
204 struct {
205 int command;
206 int reason_code;
207 } mlme;
208 struct {
209 u8 alg[IEEE_CRYPT_ALG_NAME_LEN];
210 u8 set_tx;
211 u32 err;
212 u8 idx;
213 u8 seq[8];
214 u16 key_len;
215 u8 key[0];
216 } crypt;
217#ifdef CONFIG_88EU_AP_MODE
218 struct {
219 u16 aid;
220 u16 capability;
221 int flags;
222 u8 tx_supp_rates[16];
223 struct ieee80211_ht_cap ht_cap;
224 } add_sta;
225 struct {
226 u8 reserved[2];
227 u8 buf[0];
228 } bcn_ie;
229#endif
230
231 } u;
232};
233
234#ifdef CONFIG_88EU_AP_MODE
235struct ieee_param_ex {
236 u32 cmd;
237 u8 sta_addr[ETH_ALEN];
238 u8 data[0];
239};
240
241struct sta_data {
242 u16 aid;
243 u16 capability;
244 int flags;
245 u32 sta_set;
246 u8 tx_supp_rates[16];
247 u32 tx_supp_rates_len;
248 struct ieee80211_ht_cap ht_cap;
249 u64 rx_pkts;
250 u64 rx_bytes;
251 u64 rx_drops;
252 u64 tx_pkts;
253 u64 tx_bytes;
254 u64 tx_drops;
255};
256#endif
257
258#define IEEE80211_DATA_LEN 2304
259
260
261
262
263
264
265
266
267
268#define IEEE80211_HLEN 30
269#define IEEE80211_FRAME_LEN (IEEE80211_DATA_LEN + IEEE80211_HLEN)
270
271
272#define IEEE_IBSS_MAC_HASH_SIZE 31
273
274enum eap_type {
275 EAP_PACKET = 0,
276 EAPOL_START,
277 EAPOL_LOGOFF,
278 EAPOL_KEY,
279 EAPOL_ENCAP_ASF_ALERT
280};
281
282#define IEEE80211_3ADDR_LEN 24
283#define IEEE80211_4ADDR_LEN 30
284#define IEEE80211_FCS_LEN 4
285
286#define MIN_FRAG_THRESHOLD 256U
287#define MAX_FRAG_THRESHOLD 2346U
288
289
290#define RTW_IEEE80211_SCTL_FRAG 0x000F
291#define RTW_IEEE80211_SCTL_SEQ 0xFFF0
292
293#define RTW_ERP_INFO_NON_ERP_PRESENT BIT(0)
294#define RTW_ERP_INFO_USE_PROTECTION BIT(1)
295#define RTW_ERP_INFO_BARKER_PREAMBLE_MODE BIT(2)
296
297
298#define NORMAL_ACK 0
299#define NO_ACK 1
300#define NON_EXPLICIT_ACK 2
301#define BLOCK_ACK 3
302
303#ifndef ETH_P_PAE
304#define ETH_P_PAE 0x888E
305#endif
306
307#define ETH_P_PREAUTH 0x88C7
308
309#define ETH_P_ECONET 0x0018
310
311#ifndef ETH_P_80211_RAW
312#define ETH_P_80211_RAW (ETH_P_ECONET + 1)
313#endif
314
315
316
317#define P80211_OUI_LEN 3
318
319struct ieee80211_snap_hdr {
320 u8 dsap;
321 u8 ssap;
322 u8 ctrl;
323 u8 oui[P80211_OUI_LEN];
324} __packed;
325
326#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr)
327
328#define WLAN_QC_GET_TID(qc) ((qc) & 0x0f)
329
330#define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTW_IEEE80211_SCTL_FRAG)
331#define WLAN_GET_SEQ_SEQ(seq) ((seq) & RTW_IEEE80211_SCTL_SEQ)
332
333
334#define WLAN_REASON_EXPIRATION_CHK 65535
335
336#define IEEE80211_MGMT_HDR_LEN 24
337#define IEEE80211_DATA_HDR3_LEN 24
338#define IEEE80211_DATA_HDR4_LEN 30
339
340#define IEEE80211_CCK_MODULATION BIT(0)
341#define IEEE80211_OFDM_MODULATION BIT(1)
342
343#define IEEE80211_24GHZ_BAND BIT(0)
344#define IEEE80211_52GHZ_BAND BIT(1)
345
346#define IEEE80211_CCK_RATE_LEN 4
347#define IEEE80211_NUM_OFDM_RATESLEN 8
348
349#define IEEE80211_CCK_RATE_1MB 0x02
350#define IEEE80211_CCK_RATE_2MB 0x04
351#define IEEE80211_CCK_RATE_5MB 0x0B
352#define IEEE80211_CCK_RATE_11MB 0x16
353#define IEEE80211_OFDM_RATE_LEN 8
354#define IEEE80211_OFDM_RATE_6MB 0x0C
355#define IEEE80211_OFDM_RATE_9MB 0x12
356#define IEEE80211_OFDM_RATE_12MB 0x18
357#define IEEE80211_OFDM_RATE_18MB 0x24
358#define IEEE80211_OFDM_RATE_24MB 0x30
359#define IEEE80211_OFDM_RATE_36MB 0x48
360#define IEEE80211_OFDM_RATE_48MB 0x60
361#define IEEE80211_OFDM_RATE_54MB 0x6C
362#define IEEE80211_BASIC_RATE_MASK 0x80
363
364#define IEEE80211_CCK_RATE_1MB_MASK BIT(0)
365#define IEEE80211_CCK_RATE_2MB_MASK BIT(1)
366#define IEEE80211_CCK_RATE_5MB_MASK BIT(2)
367#define IEEE80211_CCK_RATE_11MB_MASK BIT(3)
368#define IEEE80211_OFDM_RATE_6MB_MASK BIT(4)
369#define IEEE80211_OFDM_RATE_9MB_MASK BIT(5)
370#define IEEE80211_OFDM_RATE_12MB_MASK BIT(6)
371#define IEEE80211_OFDM_RATE_18MB_MASK BIT(7)
372#define IEEE80211_OFDM_RATE_24MB_MASK BIT(8)
373#define IEEE80211_OFDM_RATE_36MB_MASK BIT(9)
374#define IEEE80211_OFDM_RATE_48MB_MASK BIT(10)
375#define IEEE80211_OFDM_RATE_54MB_MASK BIT(11)
376
377#define IEEE80211_CCK_RATES_MASK 0x0000000F
378#define IEEE80211_CCK_BASIC_RATES_MASK (IEEE80211_CCK_RATE_1MB_MASK | \
379 IEEE80211_CCK_RATE_2MB_MASK)
380#define IEEE80211_CCK_DEFAULT_RATES_MASK \
381 (IEEE80211_CCK_BASIC_RATES_MASK | \
382 IEEE80211_CCK_RATE_5MB_MASK | \
383 IEEE80211_CCK_RATE_11MB_MASK)
384
385#define IEEE80211_OFDM_RATES_MASK 0x00000FF0
386#define IEEE80211_OFDM_BASIC_RATES_MASK (IEEE80211_OFDM_RATE_6MB_MASK | \
387 IEEE80211_OFDM_RATE_12MB_MASK | \
388 IEEE80211_OFDM_RATE_24MB_MASK)
389#define IEEE80211_OFDM_DEFAULT_RATES_MASK \
390 (IEEE80211_OFDM_BASIC_RATES_MASK | \
391 IEEE80211_OFDM_RATE_9MB_MASK | \
392 IEEE80211_OFDM_RATE_18MB_MASK | \
393 IEEE80211_OFDM_RATE_36MB_MASK | \
394 IEEE80211_OFDM_RATE_48MB_MASK | \
395 IEEE80211_OFDM_RATE_54MB_MASK)
396
397#define IEEE80211_NUM_OFDM_RATES 8
398#define IEEE80211_NUM_CCK_RATES 4
399#define IEEE80211_OFDM_SHIFT_MASK_A 4
400
401
402
403
404
405
406#define IEEE80211_FRAG_CACHE_LEN 4
407
408#define SEC_KEY_1 BIT(0)
409#define SEC_KEY_2 BIT(1)
410#define SEC_KEY_3 BIT(2)
411#define SEC_KEY_4 BIT(3)
412#define SEC_ACTIVE_KEY BIT(4)
413#define SEC_AUTH_MODE BIT(5)
414#define SEC_UNICAST_GROUP BIT(6)
415#define SEC_LEVEL BIT(7)
416#define SEC_ENABLED BIT(8)
417
418#define SEC_LEVEL_0 0
419#define SEC_LEVEL_1 1
420#define SEC_LEVEL_2 2
421#define SEC_LEVEL_2_CKIP 3
422#define SEC_LEVEL_3 4
423
424#define WEP_KEYS 4
425#define WEP_KEY_LEN 13
426
427
428#define MAX_SWEEP_TAB_ENTRIES 42
429#define MAX_SWEEP_TAB_ENTRIES_PER_PACKET 7
430
431
432
433
434
435#define MAX_RATES_LENGTH ((u8)12)
436#define MAX_RATES_EX_LENGTH ((u8)16)
437#define MAX_NETWORK_COUNT 128
438#define MAX_CHANNEL_NUMBER 161
439#define IEEE80211_SOFTMAC_SCAN_TIME 400
440
441#define IEEE80211_SOFTMAC_ASSOC_RETRY_TIME (HZ * 2)
442
443#define CRC_LENGTH 4U
444
445#define MAX_WPA_IE_LEN (256)
446#define MAX_WPS_IE_LEN (512)
447#define MAX_P2P_IE_LEN (256)
448#define MAX_WFD_IE_LEN (128)
449
450#define NETWORK_EMPTY_ESSID BIT(0)
451#define NETWORK_HAS_OFDM BIT(1)
452#define NETWORK_HAS_CCK BIT(2)
453
454#define IW_ESSID_MAX_SIZE 32
455
456
457
458
459
460
461
462enum ieee80211_state {
463
464 IEEE80211_NOLINK = 0,
465
466
467
468
469
470
471
472
473
474
475 IEEE80211_ASSOCIATING,
476 IEEE80211_ASSOCIATING_RETRY,
477
478
479 IEEE80211_ASSOCIATING_AUTHENTICATING,
480
481
482
483
484 IEEE80211_ASSOCIATING_AUTHENTICATED,
485
486
487
488
489 IEEE80211_LINKED,
490
491
492
493
494
495
496 IEEE80211_LINKED_SCANNING,
497
498};
499
500#define DEFAULT_MAX_SCAN_AGE (15 * HZ)
501#define DEFAULT_FTS 2346
502
503#define CFG_IEEE80211_RESERVE_FCS BIT(0)
504#define CFG_IEEE80211_COMPUTE_FCS BIT(1)
505
506#define MAXTID 16
507
508#define IEEE_A BIT(0)
509#define IEEE_B BIT(1)
510#define IEEE_G BIT(2)
511#define IEEE_MODE_MASK (IEEE_A | IEEE_B | IEEE_G)
512
513
514enum rtw_ieee80211_category {
515 RTW_WLAN_CATEGORY_SPECTRUM_MGMT = 0,
516 RTW_WLAN_CATEGORY_QOS = 1,
517 RTW_WLAN_CATEGORY_DLS = 2,
518 RTW_WLAN_CATEGORY_BACK = 3,
519 RTW_WLAN_CATEGORY_PUBLIC = 4,
520 RTW_WLAN_CATEGORY_RADIO_MEASUREMENT = 5,
521 RTW_WLAN_CATEGORY_FT = 6,
522 RTW_WLAN_CATEGORY_HT = 7,
523 RTW_WLAN_CATEGORY_SA_QUERY = 8,
524 RTW_WLAN_CATEGORY_TDLS = 12,
525 RTW_WLAN_CATEGORY_WMM = 17,
526 RTW_WLAN_CATEGORY_P2P = 0x7f,
527};
528
529enum _PUBLIC_ACTION {
530 ACT_PUBLIC_BSSCOEXIST = 0,
531 ACT_PUBLIC_DSE_ENABLE = 1,
532 ACT_PUBLIC_DSE_DEENABLE = 2,
533 ACT_PUBLIC_DSE_REG_LOCATION = 3,
534 ACT_PUBLIC_EXT_CHL_SWITCH = 4,
535 ACT_PUBLIC_DSE_MSR_REQ = 5,
536 ACT_PUBLIC_DSE_MSR_RPRT = 6,
537 ACT_PUBLIC_MP = 7,
538 ACT_PUBLIC_DSE_PWR_CONSTRAINT = 8,
539 ACT_PUBLIC_VENDOR = 9,
540 ACT_PUBLIC_GAS_INITIAL_REQ = 10,
541 ACT_PUBLIC_GAS_INITIAL_RSP = 11,
542 ACT_PUBLIC_GAS_COMEBACK_REQ = 12,
543 ACT_PUBLIC_GAS_COMEBACK_RSP = 13,
544 ACT_PUBLIC_TDLS_DISCOVERY_RSP = 14,
545 ACT_PUBLIC_LOCATION_TRACK = 15,
546 ACT_PUBLIC_MAX
547};
548
549
550enum rtw_ieee80211_back_actioncode {
551 RTW_WLAN_ACTION_ADDBA_REQ = 0,
552 RTW_WLAN_ACTION_ADDBA_RESP = 1,
553 RTW_WLAN_ACTION_DELBA = 2,
554};
555
556
557enum rtw_ieee80211_ht_actioncode {
558 RTW_WLAN_ACTION_NOTIFY_CH_WIDTH = 0,
559 RTW_WLAN_ACTION_SM_PS = 1,
560 RTW_WLAN_ACTION_PSPM = 2,
561 RTW_WLAN_ACTION_PCO_PHASE = 3,
562 RTW_WLAN_ACTION_MIMO_CSI_MX = 4,
563 RTW_WLAN_ACTION_MIMO_NONCP_BF = 5,
564 RTW_WLAN_ACTION_MIMP_CP_BF = 6,
565 RTW_WLAN_ACTION_ASEL_INDICATES_FB = 7,
566 RTW_WLAN_ACTION_HI_INFO_EXCHG = 8,
567};
568
569
570enum rtw_ieee80211_back_parties {
571 RTW_WLAN_BACK_RECIPIENT = 0,
572 RTW_WLAN_BACK_INITIATOR = 1,
573 RTW_WLAN_BACK_TIMER = 2,
574};
575
576#define OUI_MICROSOFT 0x0050f2
577
578
579#define WME_OUI_TYPE 2
580#define WME_OUI_SUBTYPE_INFORMATION_ELEMENT 0
581#define WME_OUI_SUBTYPE_PARAMETER_ELEMENT 1
582#define WME_OUI_SUBTYPE_TSPEC_ELEMENT 2
583#define WME_VERSION 1
584
585#define WME_ACTION_CODE_SETUP_REQUEST 0
586#define WME_ACTION_CODE_SETUP_RESPONSE 1
587#define WME_ACTION_CODE_TEARDOWN 2
588
589#define WME_SETUP_RESPONSE_STATUS_ADMISSION_ACCEPTED 0
590#define WME_SETUP_RESPONSE_STATUS_INVALID_PARAMETERS 1
591#define WME_SETUP_RESPONSE_STATUS_REFUSED 3
592
593#define WME_TSPEC_DIRECTION_UPLINK 0
594#define WME_TSPEC_DIRECTION_DOWNLINK 1
595#define WME_TSPEC_DIRECTION_BI_DIRECTIONAL 3
596
597#define OUI_BROADCOM 0x00904c
598
599#define VENDOR_HT_CAPAB_OUI_TYPE 0x33
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616enum rtw_ieee80211_channel_flags {
617 RTW_IEEE80211_CHAN_DISABLED = BIT(0),
618 RTW_IEEE80211_CHAN_PASSIVE_SCAN = BIT(1),
619 RTW_IEEE80211_CHAN_NO_IBSS = BIT(2),
620 RTW_IEEE80211_CHAN_RADAR = BIT(3),
621 RTW_IEEE80211_CHAN_NO_HT40PLUS = BIT(4),
622 RTW_IEEE80211_CHAN_NO_HT40MINUS = BIT(5),
623};
624
625#define RTW_IEEE80211_CHAN_NO_HT40 \
626 (RTW_IEEE80211_CHAN_NO_HT40PLUS | RTW_IEEE80211_CHAN_NO_HT40MINUS)
627
628
629struct rtw_ieee80211_channel {
630 u16 hw_value;
631 u32 flags;
632};
633
634#define CHAN_FMT \
635 "hw_value:%u, " \
636 "flags:0x%08x" \
637
638#define CHAN_ARG(channel) \
639 (channel)->hw_value \
640 , (channel)->flags \
641
642
643struct rtw_ieee802_11_elems {
644 u8 *ssid;
645 u8 ssid_len;
646 u8 *supp_rates;
647 u8 supp_rates_len;
648 u8 *fh_params;
649 u8 fh_params_len;
650 u8 *ds_params;
651 u8 ds_params_len;
652 u8 *cf_params;
653 u8 cf_params_len;
654 u8 *tim;
655 u8 tim_len;
656 u8 *ibss_params;
657 u8 ibss_params_len;
658 u8 *challenge;
659 u8 challenge_len;
660 u8 *erp_info;
661 u8 erp_info_len;
662 u8 *ext_supp_rates;
663 u8 ext_supp_rates_len;
664 u8 *wpa_ie;
665 u8 wpa_ie_len;
666 u8 *rsn_ie;
667 u8 rsn_ie_len;
668 u8 *wme;
669 u8 wme_len;
670 u8 *wme_tspec;
671 u8 wme_tspec_len;
672 u8 *wps_ie;
673 u8 wps_ie_len;
674 u8 *power_cap;
675 u8 power_cap_len;
676 u8 *supp_channels;
677 u8 supp_channels_len;
678 u8 *mdie;
679 u8 mdie_len;
680 u8 *ftie;
681 u8 ftie_len;
682 u8 *timeout_int;
683 u8 timeout_int_len;
684 u8 *ht_capabilities;
685 u8 ht_capabilities_len;
686 u8 *ht_operation;
687 u8 ht_operation_len;
688 u8 *vendor_ht_cap;
689 u8 vendor_ht_cap_len;
690};
691
692enum parse_res {
693 ParseOK = 0,
694 ParseUnknown = 1,
695 ParseFailed = -1
696};
697
698enum parse_res rtw_ieee802_11_parse_elems(u8 *start, uint len,
699 struct rtw_ieee802_11_elems *elems,
700 int show_errors);
701
702u8 *rtw_set_fixed_ie(void *pbuf, unsigned int len,
703 void *source, unsigned int *frlen);
704u8 *rtw_set_ie(u8 *pbuf, int index, uint len, u8 *source, uint *frlen);
705
706enum secondary_ch_offset {
707 SCN = 0,
708 SCA = 1,
709 SCB = 3,
710};
711
712u8 *rtw_get_ie(u8 *pbuf, int index, uint *len, int limit);
713
714void rtw_set_supported_rate(u8 *SupportedRates, uint mode);
715
716unsigned char *rtw_get_wpa_ie(unsigned char *pie, uint *wpa_ie_len, int limit);
717unsigned char *rtw_get_wpa2_ie(unsigned char *pie, uint *rsn_ie_len, int limit);
718int rtw_get_wpa_cipher_suite(u8 *s);
719int rtw_get_wpa2_cipher_suite(u8 *s);
720int rtw_get_wapi_ie(u8 *in_ie, uint in_len, u8 *wapi_ie, u16 *wapi_len);
721int rtw_parse_wpa_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher,
722 int *pairwise_cipher, int *is_8021x);
723int rtw_parse_wpa2_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher,
724 int *pairwise_cipher, int *is_8021x);
725
726void rtw_get_sec_ie(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len,
727 u8 *wpa_ie, u16 *wpa_len);
728
729u8 rtw_is_wps_ie(u8 *ie_ptr, uint *wps_ielen);
730u8 *rtw_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen);
731u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id,
732 u8 *buf_attr, u32 *len_attr);
733u8 *rtw_get_wps_attr_content(u8 *wps_ie, uint wps_ielen, u16 target_attr_id,
734 u8 *buf_content, uint *len_content);
735
736uint rtw_get_rateset_len(u8 *rateset);
737
738struct registry_priv;
739int rtw_generate_ie(struct registry_priv *pregistrypriv);
740
741int rtw_get_bit_value_from_ieee_value(u8 val);
742
743bool rtw_is_cckrates_included(u8 *rate);
744
745bool rtw_is_cckratesonly_included(u8 *rate);
746
747int rtw_check_network_type(unsigned char *rate);
748
749void rtw_get_bcn_info(struct wlan_network *pnetwork);
750
751void rtw_macaddr_cfg(u8 *mac_addr);
752
753u16 rtw_mcs_rate(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40,
754 unsigned char *MCS_rate);
755
756#endif
757