1 /*
2  * Copyright (c) 2010 Broadcom Corporation
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 #ifndef _802_11_H_
18 #define _802_11_H_
19 
20 #include <linux/if_ether.h>
21 
22 #define DOT11_A3_HDR_LEN		24
23 #define DOT11_A4_HDR_LEN		30
24 #define DOT11_MAC_HDR_LEN		DOT11_A3_HDR_LEN
25 #define DOT11_ICV_AES_LEN		8
26 #define DOT11_QOS_LEN			2
27 
28 #define DOT11_IV_MAX_LEN		8
29 
30 #define DOT11_DEFAULT_RTS_LEN		2347
31 
32 #define DOT11_MIN_FRAG_LEN		256
33 #define DOT11_MAX_FRAG_LEN		2346
34 #define DOT11_DEFAULT_FRAG_LEN		2346
35 
36 #define DOT11_MIN_BEACON_PERIOD		1
37 #define DOT11_MAX_BEACON_PERIOD		0xFFFF
38 
39 #define DOT11_MIN_DTIM_PERIOD		1
40 #define DOT11_MAX_DTIM_PERIOD		0xFF
41 
42 #define DOT11_OUI_LEN			3
43 
44 #define	DOT11_RTS_LEN		16
45 #define	DOT11_CTS_LEN		10
46 #define	DOT11_ACK_LEN		10
47 
48 #define DOT11_BA_BITMAP_LEN		128
49 #define DOT11_BA_LEN		4
50 
51 #define WME_OUI			"\x00\x50\xf2"
52 #define WME_VER			1
53 #define WME_TYPE		2
54 #define WME_SUBTYPE_PARAM_IE	1
55 
56 #define AC_BE			0
57 #define AC_BK			1
58 #define AC_VI			2
59 #define AC_VO			3
60 #define AC_COUNT		4
61 
62 typedef u8 ac_bitmap_t;
63 
64 #define AC_BITMAP_ALL		0xf
65 #define AC_BITMAP_TST(ab, ac)	(((ab) & (1 << (ac))) != 0)
66 
67 struct edcf_acparam {
68 	u8 ACI;
69 	u8 ECW;
70 	u16 TXOP;
71 } __attribute__((packed));
72 typedef struct edcf_acparam edcf_acparam_t;
73 
74 struct wme_param_ie {
75 	u8 oui[3];
76 	u8 type;
77 	u8 subtype;
78 	u8 version;
79 	u8 qosinfo;
80 	u8 rsvd;
81 	edcf_acparam_t acparam[AC_COUNT];
82 } __attribute__((packed));
83 typedef struct wme_param_ie wme_param_ie_t;
84 #define WME_PARAM_IE_LEN            24
85 
86 #define EDCF_AIFSN_MIN               1
87 #define EDCF_AIFSN_MAX               15
88 #define EDCF_AIFSN_MASK              0x0f
89 #define EDCF_ACM_MASK                0x10
90 #define EDCF_ACI_MASK                0x60
91 #define EDCF_ACI_SHIFT               5
92 
93 #define EDCF_ECW2CW(exp)             ((1 << (exp)) - 1)
94 #define EDCF_ECWMIN_MASK             0x0f
95 #define EDCF_ECWMAX_MASK             0xf0
96 #define EDCF_ECWMAX_SHIFT            4
97 
98 #define EDCF_TXOP2USEC(txop)         ((txop) << 5)
99 
100 #define EDCF_AC_BE_ACI_STA           0x03
101 #define EDCF_AC_BE_ECW_STA           0xA4
102 #define EDCF_AC_BE_TXOP_STA          0x0000
103 #define EDCF_AC_BK_ACI_STA           0x27
104 #define EDCF_AC_BK_ECW_STA           0xA4
105 #define EDCF_AC_BK_TXOP_STA          0x0000
106 #define EDCF_AC_VI_ACI_STA           0x42
107 #define EDCF_AC_VI_ECW_STA           0x43
108 #define EDCF_AC_VI_TXOP_STA          0x005e
109 #define EDCF_AC_VO_ACI_STA           0x62
110 #define EDCF_AC_VO_ECW_STA           0x32
111 #define EDCF_AC_VO_TXOP_STA          0x002f
112 
113 #define EDCF_AC_VO_TXOP_AP           0x002f
114 
115 #define SEQNUM_SHIFT		4
116 #define SEQNUM_MAX		0x1000
117 #define FRAGNUM_MASK		0xF
118 
119 #define DOT11_MNG_RSN_ID			48
120 #define DOT11_MNG_WPA_ID			221
121 #define DOT11_MNG_VS_ID				221
122 
123 #define DOT11_BSSTYPE_INFRASTRUCTURE		0
124 #define DOT11_BSSTYPE_ANY			2
125 #define DOT11_SCANTYPE_ACTIVE			0
126 
127 #define PREN_PREAMBLE		24
128 #define PREN_MM_EXT		12
129 #define PREN_PREAMBLE_EXT	4
130 
131 #define RIFS_11N_TIME		2
132 
133 #define APHY_SLOT_TIME		9
134 #define APHY_SIFS_TIME		16
135 #define APHY_PREAMBLE_TIME	16
136 #define APHY_SIGNAL_TIME	4
137 #define APHY_SYMBOL_TIME	4
138 #define APHY_SERVICE_NBITS	16
139 #define APHY_TAIL_NBITS		6
140 #define	APHY_CWMIN		15
141 
142 #define BPHY_SLOT_TIME		20
143 #define BPHY_SIFS_TIME		10
144 #define BPHY_PLCP_TIME		192
145 #define BPHY_PLCP_SHORT_TIME	96
146 
147 #define DOT11_OFDM_SIGNAL_EXTENSION	6
148 
149 #define PHY_CWMAX		1023
150 
151 #define	DOT11_MAXNUMFRAGS	16
152 
153 typedef struct d11cnt {
154 	u32 txfrag;
155 	u32 txmulti;
156 	u32 txfail;
157 	u32 txretry;
158 	u32 txretrie;
159 	u32 rxdup;
160 	u32 txrts;
161 	u32 txnocts;
162 	u32 txnoack;
163 	u32 rxfrag;
164 	u32 rxmulti;
165 	u32 rxcrc;
166 	u32 txfrmsnt;
167 	u32 rxundec;
168 } d11cnt_t;
169 
170 #define MCSSET_LEN	16
171 
172 #define HT_CAP_IE_LEN		26
173 
174 #define HT_CAP_RX_STBC_NO		0x0
175 #define HT_CAP_RX_STBC_ONE_STREAM	0x1
176 
177 #define AMPDU_MAX_MPDU_DENSITY	IEEE80211_HT_MPDU_DENSITY_16
178 
179 #define AMPDU_DELIMITER_LEN	4
180 
181 #define DOT11N_TXBURST		0x0008
182 
183 #define WPA_VERSION		1
184 #define WPA_OUI			"\x00\x50\xF2"
185 
186 #define WFA_OUI			"\x00\x50\xF2"
187 #define WFA_OUI_LEN	3
188 
189 #define WFA_OUI_TYPE_WPA	1
190 
191 #define RSN_AKM_NONE		0
192 #define RSN_AKM_UNSPECIFIED	1
193 #define RSN_AKM_PSK		2
194 
195 #define DOT11_MAX_DEFAULT_KEYS	4
196 #define DOT11_WPA_KEY_RSC_LEN   8
197 
198 #define BRCM_OUI		"\x00\x10\x18"
199 
200 #endif				/* _802_11_H_ */
201