1
2
3
4#ifndef __IEEE80211_EXT_H
5#define __IEEE80211_EXT_H
6
7#include "osdep_service.h"
8#include "drv_types.h"
9
10#define WMM_OUI_TYPE 2
11#define WMM_OUI_SUBTYPE_INFORMATION_ELEMENT 0
12#define WMM_OUI_SUBTYPE_PARAMETER_ELEMENT 1
13#define WMM_OUI_SUBTYPE_TSPEC_ELEMENT 2
14#define WMM_VERSION 1
15
16#define WPA_PROTO_WPA BIT(0)
17#define WPA_PROTO_RSN BIT(1)
18
19#define WPA_KEY_MGMT_IEEE8021X BIT(0)
20#define WPA_KEY_MGMT_PSK BIT(1)
21#define WPA_KEY_MGMT_NONE BIT(2)
22#define WPA_KEY_MGMT_IEEE8021X_NO_WPA BIT(3)
23#define WPA_KEY_MGMT_WPA_NONE BIT(4)
24
25#define WPA_CAPABILITY_PREAUTH BIT(0)
26#define WPA_CAPABILITY_MGMT_FRAME_PROTECTION BIT(6)
27#define WPA_CAPABILITY_PEERKEY_ENABLED BIT(9)
28
29#define PMKID_LEN 16
30
31struct wpa_ie_hdr {
32 u8 elem_id;
33 u8 len;
34 u8 oui[4];
35 u8 version[2];
36} __packed;
37
38struct rsn_ie_hdr {
39 u8 elem_id;
40 u8 len;
41 u8 version[2];
42} __packed;
43
44struct wme_ac_parameter {
45#if defined(__LITTLE_ENDIAN)
46
47 u8 aifsn:4,
48 acm:1,
49 aci:2,
50 reserved:1;
51
52
53 u8 eCWmin:4,
54 eCWmax:4;
55#elif defined(__BIG_ENDIAN)
56
57 u8 reserved:1,
58 aci:2,
59 acm:1,
60 aifsn:4;
61
62
63 u8 eCWmax:4,
64 eCWmin:4;
65#else
66#error "Please fix <endian.h>"
67#endif
68
69
70 u16 txopLimit;
71} __packed;
72
73struct wme_parameter_element {
74
75 u8 oui[3];
76 u8 oui_type;
77 u8 oui_subtype;
78 u8 version;
79 u8 acInfo;
80 u8 reserved;
81 struct wme_ac_parameter ac[4];
82
83} __packed;
84
85#define WPA_PUT_LE16(a, val) \
86 do { \
87 (a)[1] = ((u16) (val)) >> 8; \
88 (a)[0] = ((u16) (val)) & 0xff; \
89 } while (0)
90
91#define WPA_PUT_BE32(a, val) \
92 do { \
93 (a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff); \
94 (a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff); \
95 (a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff); \
96 (a)[3] = (u8) (((u32) (val)) & 0xff); \
97 } while (0)
98
99#define WPA_PUT_LE32(a, val) \
100 do { \
101 (a)[3] = (u8) ((((u32) (val)) >> 24) & 0xff); \
102 (a)[2] = (u8) ((((u32) (val)) >> 16) & 0xff); \
103 (a)[1] = (u8) ((((u32) (val)) >> 8) & 0xff); \
104 (a)[0] = (u8) (((u32) (val)) & 0xff); \
105 } while (0)
106
107#define RSN_SELECTOR_PUT(a, val) WPA_PUT_BE32((u8 *)(a), (val))
108
109
110enum ieee80211_category {
111 WLAN_CATEGORY_SPECTRUM_MGMT = 0,
112 WLAN_CATEGORY_QOS = 1,
113 WLAN_CATEGORY_DLS = 2,
114 WLAN_CATEGORY_BACK = 3,
115 WLAN_CATEGORY_HT = 7,
116 WLAN_CATEGORY_WMM = 17,
117};
118
119
120enum ieee80211_spectrum_mgmt_actioncode {
121 WLAN_ACTION_SPCT_MSR_REQ = 0,
122 WLAN_ACTION_SPCT_MSR_RPRT = 1,
123 WLAN_ACTION_SPCT_TPC_REQ = 2,
124 WLAN_ACTION_SPCT_TPC_RPRT = 3,
125 WLAN_ACTION_SPCT_CHL_SWITCH = 4,
126 WLAN_ACTION_SPCT_EXT_CHL_SWITCH = 5,
127};
128
129
130enum ieee80211_back_actioncode {
131 WLAN_ACTION_ADDBA_REQ = 0,
132 WLAN_ACTION_ADDBA_RESP = 1,
133 WLAN_ACTION_DELBA = 2,
134};
135
136
137enum ieee80211_ht_actioncode {
138 WLAN_ACTION_NOTIFY_CH_WIDTH = 0,
139 WLAN_ACTION_SM_PS = 1,
140 WLAN_ACTION_PSPM = 2,
141 WLAN_ACTION_PCO_PHASE = 3,
142 WLAN_ACTION_MIMO_CSI_MX = 4,
143 WLAN_ACTION_MIMO_NONCP_BF = 5,
144 WLAN_ACTION_MIMP_CP_BF = 6,
145 WLAN_ACTION_ASEL_INDICATES_FB = 7,
146 WLAN_ACTION_HI_INFO_EXCHG = 8,
147};
148
149
150enum ieee80211_back_parties {
151 WLAN_BACK_RECIPIENT = 0,
152 WLAN_BACK_INITIATOR = 1,
153 WLAN_BACK_TIMER = 2,
154};
155
156struct ieee80211_mgmt {
157 u16 frame_control;
158 u16 duration;
159 u8 da[6];
160 u8 sa[6];
161 u8 bssid[6];
162 u16 seq_ctrl;
163 union {
164 struct {
165 u16 auth_alg;
166 u16 auth_transaction;
167 u16 status_code;
168
169 u8 variable[0];
170 } __packed auth;
171 struct {
172 u16 reason_code;
173 } __packed deauth;
174 struct {
175 u16 capab_info;
176 u16 listen_interval;
177
178 u8 variable[0];
179 } __packed assoc_req;
180 struct {
181 u16 capab_info;
182 u16 status_code;
183 u16 aid;
184
185 u8 variable[0];
186 } __packed assoc_resp, reassoc_resp;
187 struct {
188 u16 capab_info;
189 u16 listen_interval;
190 u8 current_ap[6];
191
192 u8 variable[0];
193 } __packed reassoc_req;
194 struct {
195 u16 reason_code;
196 } __packed disassoc;
197 struct {
198 __le64 timestamp;
199 u16 beacon_int;
200 u16 capab_info;
201
202
203 u8 variable[0];
204 } __packed beacon;
205 struct {
206
207 u8 variable[0];
208 } __packed probe_req;
209 struct {
210 __le64 timestamp;
211 u16 beacon_int;
212 u16 capab_info;
213
214
215 u8 variable[0];
216 } __packed probe_resp;
217 struct {
218 u8 category;
219 union {
220 struct {
221 u8 action_code;
222 u8 dialog_token;
223 u8 status_code;
224 u8 variable[0];
225 } __packed wme_action;
226 struct {
227 u8 action_code;
228 u8 dialog_token;
229 u16 capab;
230 u16 timeout;
231 u16 start_seq_num;
232 } __packed addba_req;
233 struct {
234 u8 action_code;
235 u8 dialog_token;
236 u16 status;
237 u16 capab;
238 u16 timeout;
239 } __packed addba_resp;
240 struct {
241 u8 action_code;
242 u16 params;
243 u16 reason_code;
244 } __packed delba;
245 structi {
246 u8 action_code;
247
248
249
250 u16 aux;
251
252
253
254
255
256 u8 variable[0];
257 } __packed plink_action;
258 struct{
259 u8 action_code;
260 u8 variable[0];
261 } __packed mesh_action;
262 } __packed u;
263 } __packed action;
264 } __packed u;
265} __packed;
266
267
268#define IEEE80211_MIN_ACTION_SIZE \
269 FIELD_OFFSET(struct ieee80211_mgmt, u.action.u)
270
271#endif
272