Blame view

net/mac80211/ieee80211_i.h 43 KB
f0706e828   Jiri Benc   [MAC80211]: Add m...
1
2
3
4
  /*
   * Copyright 2002-2005, Instant802 Networks, Inc.
   * Copyright 2005, Devicescape Software, Inc.
   * Copyright 2006-2007	Jiri Benc <jbenc@suse.cz>
026331c4d   Jouni Malinen   cfg80211/mac80211...
5
   * Copyright 2007-2010	Johannes Berg <johannes@sipsolutions.net>
f0706e828   Jiri Benc   [MAC80211]: Add m...
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
  
  #ifndef IEEE80211_I_H
  #define IEEE80211_I_H
  
  #include <linux/kernel.h>
  #include <linux/device.h>
  #include <linux/if_ether.h>
  #include <linux/interrupt.h>
  #include <linux/list.h>
  #include <linux/netdevice.h>
  #include <linux/skbuff.h>
  #include <linux/workqueue.h>
  #include <linux/types.h>
  #include <linux/spinlock.h>
571ecf676   Johannes Berg   [MAC80211]: split...
25
  #include <linux/etherdevice.h>
e1e540685   Johannes Berg   mac80211: add thr...
26
  #include <linux/leds.h>
a729cff8a   Johannes Berg   mac80211: impleme...
27
  #include <linux/idr.h>
fe7a5d5c1   Johannes Berg   mac80211: move TX...
28
  #include <net/ieee80211_radiotap.h>
93da9cc17   colin@cozybit.com   Add nl80211 comma...
29
  #include <net/cfg80211.h>
51cb6db0f   David S. Miller   mac80211: Reimple...
30
  #include <net/mac80211.h>
2c8dccc77   Johannes Berg   mac80211: rename ...
31
  #include "key.h"
f0706e828   Jiri Benc   [MAC80211]: Add m...
32
  #include "sta_info.h"
9cfb0009d   Johannes Berg   mac80211: clean u...
33
  struct ieee80211_local;
f0706e828   Jiri Benc   [MAC80211]: Add m...
34
35
36
37
38
39
40
41
42
43
44
45
  
  /* Maximum number of broadcast/multicast frames to buffer when some of the
   * associated stations are using power saving. */
  #define AP_MAX_BC_BUFFER 128
  
  /* Maximum number of frames buffered to all STAs, including multicast frames.
   * Note: increasing this limit increases the potential memory requirement. Each
   * frame can be up to about 2 kB long. */
  #define TOTAL_MAX_TX_BUFFER 512
  
  /* Required encryption head and tailroom */
  #define IEEE80211_ENCRYPT_HEADROOM 8
765cb46a3   Jouni Malinen   mac80211: 802.11w...
46
  #define IEEE80211_ENCRYPT_TAILROOM 18
f0706e828   Jiri Benc   [MAC80211]: Add m...
47
48
49
50
51
52
  
  /* IEEE 802.11 (Ch. 9.5 Defragmentation) requires support for concurrent
   * reception of at least three fragmented frames. This limit can be increased
   * by changing this define, at the cost of slower frame reassembly and
   * increased memory use (about 2 kB of RAM per entry). */
  #define IEEE80211_FRAGMENT_MAX 4
20ad19d0a   Johannes Berg   mac80211: fix RX ...
53
  #define TU_TO_EXP_TIME(x)	(jiffies + usecs_to_jiffies((x) * 1024))
ab13315af   Kalle Valo   mac80211: add U-A...
54
55
56
57
58
59
60
61
  #define IEEE80211_DEFAULT_UAPSD_QUEUES \
  	(IEEE80211_WMM_IE_STA_QOSINFO_AC_BK |	\
  	 IEEE80211_WMM_IE_STA_QOSINFO_AC_BE |	\
  	 IEEE80211_WMM_IE_STA_QOSINFO_AC_VI |	\
  	 IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
  
  #define IEEE80211_DEFAULT_MAX_SP_LEN		\
  	IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL
f0706e828   Jiri Benc   [MAC80211]: Add m...
62
63
64
65
66
67
68
69
70
71
  struct ieee80211_fragment_entry {
  	unsigned long first_frag_time;
  	unsigned int seq;
  	unsigned int rx_queue;
  	unsigned int last_frag;
  	unsigned int extra_len;
  	struct sk_buff_head skb_list;
  	int ccmp; /* Whether fragments were encrypted with CCMP */
  	u8 last_pn[6]; /* PN of the last fragment if CCMP was used */
  };
c2b13452b   Johannes Berg   mac80211: clean u...
72
  struct ieee80211_bss {
00d3f14cf   Johannes Berg   mac80211: use cfg...
73
74
  	/* don't want to look up all the time */
  	size_t ssid_len;
f0706e828   Jiri Benc   [MAC80211]: Add m...
75
  	u8 ssid[IEEE80211_MAX_SSID_LEN];
00d3f14cf   Johannes Berg   mac80211: use cfg...
76

98f7dfd86   Emmanuel Grumbach   mac80211: pass dt...
77
  	u8 dtim_period;
00d3f14cf   Johannes Berg   mac80211: use cfg...
78

43ac2ca38   Jouni Malinen   mac80211: Handle ...
79
  	bool wmm_used;
ab13315af   Kalle Valo   mac80211: add U-A...
80
  	bool uapsd_supported;
00d3f14cf   Johannes Berg   mac80211: use cfg...
81
82
  
  	unsigned long last_probe_resp;
ee3858551   Luis Carlos Cobo   mac80211: mesh da...
83
84
85
  #ifdef CONFIG_MAC80211_MESH
  	u8 *mesh_id;
  	size_t mesh_id_len;
247367016   John W. Linville   Revert "mac80211:...
86
  	u8 *mesh_cfg;
902acc789   Johannes Berg   mac80211: clean u...
87
  #endif
00d3f14cf   Johannes Berg   mac80211: use cfg...
88

f0706e828   Jiri Benc   [MAC80211]: Add m...
89
90
91
  #define IEEE80211_MAX_SUPP_RATES 32
  	u8 supp_rates[IEEE80211_MAX_SUPP_RATES];
  	size_t supp_rates_len;
f0706e828   Jiri Benc   [MAC80211]: Add m...
92

00d3f14cf   Johannes Berg   mac80211: use cfg...
93
  	/*
25985edce   Lucas De Marchi   Fix common misspe...
94
  	 * During association, we save an ERP value from a probe response so
5628221ca   Daniel Drake   [PATCH] mac80211:...
95
96
  	 * that we can feed ERP info to the driver when handling the
  	 * association completes. these fields probably won't be up-to-date
00d3f14cf   Johannes Berg   mac80211: use cfg...
97
98
99
  	 * otherwise, you probably don't want to use them.
  	 */
  	bool has_erp_value;
5628221ca   Daniel Drake   [PATCH] mac80211:...
100
  	u8 erp_value;
f0706e828   Jiri Benc   [MAC80211]: Add m...
101
  };
c2b13452b   Johannes Berg   mac80211: clean u...
102
  static inline u8 *bss_mesh_cfg(struct ieee80211_bss *bss)
902acc789   Johannes Berg   mac80211: clean u...
103
104
105
106
107
108
  {
  #ifdef CONFIG_MAC80211_MESH
  	return bss->mesh_cfg;
  #endif
  	return NULL;
  }
c2b13452b   Johannes Berg   mac80211: clean u...
109
  static inline u8 *bss_mesh_id(struct ieee80211_bss *bss)
902acc789   Johannes Berg   mac80211: clean u...
110
111
112
113
114
115
  {
  #ifdef CONFIG_MAC80211_MESH
  	return bss->mesh_id;
  #endif
  	return NULL;
  }
c2b13452b   Johannes Berg   mac80211: clean u...
116
  static inline u8 bss_mesh_id_len(struct ieee80211_bss *bss)
902acc789   Johannes Berg   mac80211: clean u...
117
118
119
120
121
122
  {
  #ifdef CONFIG_MAC80211_MESH
  	return bss->mesh_id_len;
  #endif
  	return 0;
  }
f0706e828   Jiri Benc   [MAC80211]: Add m...
123

9ae54c846   Johannes Berg   mac80211: split i...
124
125
126
127
  typedef unsigned __bitwise__ ieee80211_tx_result;
  #define TX_CONTINUE	((__force ieee80211_tx_result) 0u)
  #define TX_DROP		((__force ieee80211_tx_result) 1u)
  #define TX_QUEUED	((__force ieee80211_tx_result) 2u)
5cf121c3c   Johannes Berg   mac80211: split i...
128
129
  #define IEEE80211_TX_UNICAST		BIT(1)
  #define IEEE80211_TX_PS_BUFFERED	BIT(2)
5cf121c3c   Johannes Berg   mac80211: split i...
130
131
132
  
  struct ieee80211_tx_data {
  	struct sk_buff *skb;
252b86c43   Johannes Berg   mac80211: use skb...
133
  	struct sk_buff_head skbs;
5cf121c3c   Johannes Berg   mac80211: split i...
134
135
136
  	struct ieee80211_local *local;
  	struct ieee80211_sub_if_data *sdata;
  	struct sta_info *sta;
5cf121c3c   Johannes Berg   mac80211: split i...
137
  	struct ieee80211_key *key;
5cf121c3c   Johannes Berg   mac80211: split i...
138

5cf121c3c   Johannes Berg   mac80211: split i...
139
  	struct ieee80211_channel *channel;
5cf121c3c   Johannes Berg   mac80211: split i...
140

056cdd599   Johannes Berg   mac80211: reorder...
141
  	unsigned int flags;
5cf121c3c   Johannes Berg   mac80211: split i...
142
  };
9ae54c846   Johannes Berg   mac80211: split i...
143
  typedef unsigned __bitwise__ ieee80211_rx_result;
e4c26add8   Johannes Berg   mac80211: split R...
144
145
146
147
  #define RX_CONTINUE		((__force ieee80211_rx_result) 0u)
  #define RX_DROP_UNUSABLE	((__force ieee80211_rx_result) 1u)
  #define RX_DROP_MONITOR		((__force ieee80211_rx_result) 2u)
  #define RX_QUEUED		((__force ieee80211_rx_result) 3u)
9ae54c846   Johannes Berg   mac80211: split i...
148

554891e63   Johannes Berg   mac80211: move pa...
149
150
151
152
153
154
155
156
  /**
   * enum ieee80211_packet_rx_flags - packet RX flags
   * @IEEE80211_RX_RA_MATCH: frame is destined to interface currently processed
   *	(incl. multicast frames)
   * @IEEE80211_RX_IN_SCAN: received while scanning
   * @IEEE80211_RX_FRAGMENTED: fragmented frame
   * @IEEE80211_RX_AMSDU: a-MSDU packet
   * @IEEE80211_RX_MALFORMED_ACTION_FRM: action frame is malformed
4cfda47b6   Christian Lamparter   mac80211: ignore ...
157
   * @IEEE80211_RX_DEFERRED_RELEASE: frame was subjected to receive reordering
554891e63   Johannes Berg   mac80211: move pa...
158
159
160
161
162
163
164
165
166
167
   *
   * These are per-frame flags that are attached to a frame in the
   * @rx_flags field of &struct ieee80211_rx_status.
   */
  enum ieee80211_packet_rx_flags {
  	IEEE80211_RX_IN_SCAN			= BIT(0),
  	IEEE80211_RX_RA_MATCH			= BIT(1),
  	IEEE80211_RX_FRAGMENTED			= BIT(2),
  	IEEE80211_RX_AMSDU			= BIT(3),
  	IEEE80211_RX_MALFORMED_ACTION_FRM	= BIT(4),
4cfda47b6   Christian Lamparter   mac80211: ignore ...
168
  	IEEE80211_RX_DEFERRED_RELEASE		= BIT(5),
554891e63   Johannes Berg   mac80211: move pa...
169
170
171
172
173
174
  };
  
  /**
   * enum ieee80211_rx_flags - RX data flags
   *
   * @IEEE80211_RX_CMNTR: received on cooked monitor already
ee9719245   Johannes Berg   mac80211: report ...
175
176
   * @IEEE80211_RX_BEACON_REPORTED: This frame was already reported
   *	to cfg80211_report_obss_beacon().
554891e63   Johannes Berg   mac80211: move pa...
177
178
179
180
181
182
   *
   * These flags are used across handling multiple interfaces
   * for a single frame.
   */
  enum ieee80211_rx_flags {
  	IEEE80211_RX_CMNTR		= BIT(0),
ee9719245   Johannes Berg   mac80211: report ...
183
  	IEEE80211_RX_BEACON_REPORTED	= BIT(1),
554891e63   Johannes Berg   mac80211: move pa...
184
  };
5cf121c3c   Johannes Berg   mac80211: split i...
185
186
  
  struct ieee80211_rx_data {
f0706e828   Jiri Benc   [MAC80211]: Add m...
187
  	struct sk_buff *skb;
f0706e828   Jiri Benc   [MAC80211]: Add m...
188
189
190
  	struct ieee80211_local *local;
  	struct ieee80211_sub_if_data *sdata;
  	struct sta_info *sta;
f0706e828   Jiri Benc   [MAC80211]: Add m...
191
  	struct ieee80211_key *key;
056cdd599   Johannes Berg   mac80211: reorder...
192

056cdd599   Johannes Berg   mac80211: reorder...
193
  	unsigned int flags;
9e26297a5   Johannes Berg   mac80211: simplif...
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
  
  	/*
  	 * Index into sequence numbers array, 0..16
  	 * since the last (16) is used for non-QoS,
  	 * will be 16 on non-QoS frames.
  	 */
  	int seqno_idx;
  
  	/*
  	 * Index into the security IV/PN arrays, 0..16
  	 * since the last (16) is used for CCMP-encrypted
  	 * management frames, will be set to 16 on mgmt
  	 * frames and 0 on non-QoS frames.
  	 */
  	int security_idx;
5cf121c3c   Johannes Berg   mac80211: split i...
209
210
  	u32 tkip_iv32;
  	u16 tkip_iv16;
f0706e828   Jiri Benc   [MAC80211]: Add m...
211
  };
5dfdaf58d   Johannes Berg   mac80211: add bea...
212
213
214
215
216
  struct beacon_data {
  	u8 *head, *tail;
  	int head_len, tail_len;
  	int dtim_period;
  };
f0706e828   Jiri Benc   [MAC80211]: Add m...
217
  struct ieee80211_if_ap {
40b275b69   Johannes Berg   mac80211: sparse ...
218
  	struct beacon_data __rcu *beacon;
029458212   Arik Nemtsov   mac80211: Save pr...
219
  	struct sk_buff __rcu *probe_resp;
f0706e828   Jiri Benc   [MAC80211]: Add m...
220

0ec3ca445   Johannes Berg   [PATCH] mac80211:...
221
  	struct list_head vlans;
f0706e828   Jiri Benc   [MAC80211]: Add m...
222
223
  	/* yes, this looks ugly, but guarantees that we can later use
  	 * bitmap_empty :)
004c872e7   Johannes Berg   mac80211: consoli...
224
  	 * NB: don't touch this bitmap, use sta_info_{set,clear}_tim_bit */
f0706e828   Jiri Benc   [MAC80211]: Add m...
225
  	u8 tim[sizeof(unsigned long) * BITS_TO_LONGS(IEEE80211_MAX_AID + 1)];
f0706e828   Jiri Benc   [MAC80211]: Add m...
226
  	struct sk_buff_head ps_bc_buf;
056cdd599   Johannes Berg   mac80211: reorder...
227
  	atomic_t num_sta_ps; /* number of stations in PS mode */
29623892e   Johannes Berg   mac80211: count a...
228
  	atomic_t num_sta_authorized; /* number of authorized stations */
5dfdaf58d   Johannes Berg   mac80211: add bea...
229
  	int dtim_count;
512119b36   Christian Lamparter   mac80211: fix rac...
230
  	bool dtim_bc_mc;
f0706e828   Jiri Benc   [MAC80211]: Add m...
231
232
233
  };
  
  struct ieee80211_if_wds {
f0706e828   Jiri Benc   [MAC80211]: Add m...
234
  	struct sta_info *sta;
056cdd599   Johannes Berg   mac80211: reorder...
235
  	u8 remote_addr[ETH_ALEN];
f0706e828   Jiri Benc   [MAC80211]: Add m...
236
237
238
  };
  
  struct ieee80211_if_vlan {
0ec3ca445   Johannes Berg   [PATCH] mac80211:...
239
  	struct list_head list;
f14543ee4   Felix Fietkau   mac80211: impleme...
240
241
  
  	/* used for all tx if the VLAN is configured to 4-addr mode */
40b275b69   Johannes Berg   mac80211: sparse ...
242
  	struct sta_info __rcu *sta;
f0706e828   Jiri Benc   [MAC80211]: Add m...
243
  };
ee3858551   Luis Carlos Cobo   mac80211: mesh da...
244
  struct mesh_stats {
c8a61a7d3   Daniel Walker   mac80211: New sta...
245
246
247
  	__u32 fwded_mcast;		/* Mesh forwarded multicast frames */
  	__u32 fwded_unicast;		/* Mesh forwarded unicast frames */
  	__u32 fwded_frames;		/* Mesh total forwarded frames */
ee3858551   Luis Carlos Cobo   mac80211: mesh da...
248
249
  	__u32 dropped_frames_ttl;	/* Not transmitted since mesh_ttl == 0*/
  	__u32 dropped_frames_no_route;	/* Not transmitted, no route found */
cfee66b0f   Javier Cardona   mac80211: Stop fo...
250
  	__u32 dropped_frames_congestion;/* Not forwarded due to congestion */
ee3858551   Luis Carlos Cobo   mac80211: mesh da...
251
252
253
254
255
256
257
258
259
260
  	atomic_t estab_plinks;
  };
  
  #define PREQ_Q_F_START		0x1
  #define PREQ_Q_F_REFRESH	0x2
  struct mesh_preq_queue {
  	struct list_head list;
  	u8 dst[ETH_ALEN];
  	u8 flags;
  };
f679f65d4   Johannes Berg   mac80211: general...
261
  enum ieee80211_work_type {
b8bc4b0aa   Johannes Berg   mac80211: support...
262
  	IEEE80211_WORK_ABORT,
af6b63741   Johannes Berg   mac80211: general...
263
  	IEEE80211_WORK_DIRECT_PROBE,
f679f65d4   Johannes Berg   mac80211: general...
264
  	IEEE80211_WORK_AUTH,
e5b900d22   Johannes Berg   mac80211: allow d...
265
  	IEEE80211_WORK_ASSOC_BEACON_WAIT,
f679f65d4   Johannes Berg   mac80211: general...
266
  	IEEE80211_WORK_ASSOC,
b8bc4b0aa   Johannes Berg   mac80211: support...
267
  	IEEE80211_WORK_REMAIN_ON_CHANNEL,
f30221e4e   Johannes Berg   mac80211: impleme...
268
  	IEEE80211_WORK_OFFCHANNEL_TX,
77fdaa12c   Johannes Berg   mac80211: rework ...
269
  };
af6b63741   Johannes Berg   mac80211: general...
270
271
272
273
274
275
276
277
278
279
280
  /**
   * enum work_done_result - indicates what to do after work was done
   *
   * @WORK_DONE_DESTROY: This work item is no longer needed, destroy.
   * @WORK_DONE_REQUEUE: This work item was reset to be reused, and
   *	should be requeued.
   */
  enum work_done_result {
  	WORK_DONE_DESTROY,
  	WORK_DONE_REQUEUE,
  };
f679f65d4   Johannes Berg   mac80211: general...
281
  struct ieee80211_work {
77fdaa12c   Johannes Berg   mac80211: rework ...
282
  	struct list_head list;
77fdaa12c   Johannes Berg   mac80211: rework ...
283

af6b63741   Johannes Berg   mac80211: general...
284
285
286
287
288
289
  	struct rcu_head rcu_head;
  
  	struct ieee80211_sub_if_data *sdata;
  
  	enum work_done_result (*done)(struct ieee80211_work *wk,
  				      struct sk_buff *skb);
f679f65d4   Johannes Berg   mac80211: general...
290
  	struct ieee80211_channel *chan;
e4da8c37a   Johannes Berg   mac80211: make of...
291
  	enum nl80211_channel_type chan_type;
af6b63741   Johannes Berg   mac80211: general...
292

f679f65d4   Johannes Berg   mac80211: general...
293
294
  	unsigned long timeout;
  	enum ieee80211_work_type type;
af6b63741   Johannes Berg   mac80211: general...
295
  	u8 filter_ta[ETH_ALEN];
e4da8c37a   Johannes Berg   mac80211: make of...
296
  	bool started;
f679f65d4   Johannes Berg   mac80211: general...
297
298
299
300
301
302
  	union {
  		struct {
  			int tries;
  			u16 algorithm, transaction;
  			u8 ssid[IEEE80211_MAX_SSID_LEN];
  			u8 ssid_len;
f679f65d4   Johannes Berg   mac80211: general...
303
304
305
  			u8 key[WLAN_KEY_LEN_WEP104];
  			u8 key_len, key_idx;
  			bool privacy;
b2abb6e2b   Johannes Berg   mac80211: sync dr...
306
  			bool synced;
af6b63741   Johannes Berg   mac80211: general...
307
  		} probe_auth;
f679f65d4   Johannes Berg   mac80211: general...
308
  		struct {
0c1ad2cac   Johannes Berg   mac80211: proper ...
309
  			struct cfg80211_bss *bss;
f679f65d4   Johannes Berg   mac80211: general...
310
311
  			const u8 *supp_rates;
  			const u8 *ht_information_ie;
af6b63741   Johannes Berg   mac80211: general...
312
  			enum ieee80211_smps_mode smps;
f679f65d4   Johannes Berg   mac80211: general...
313
314
  			int tries;
  			u16 capability;
af6b63741   Johannes Berg   mac80211: general...
315
  			u8 prev_bssid[ETH_ALEN];
f679f65d4   Johannes Berg   mac80211: general...
316
317
318
  			u8 ssid[IEEE80211_MAX_SSID_LEN];
  			u8 ssid_len;
  			u8 supp_rates_len;
ab13315af   Kalle Valo   mac80211: add U-A...
319
  			bool wmm_used, use_11n, uapsd_used;
b2abb6e2b   Johannes Berg   mac80211: sync dr...
320
  			bool synced;
f679f65d4   Johannes Berg   mac80211: general...
321
  		} assoc;
b8bc4b0aa   Johannes Berg   mac80211: support...
322
  		struct {
e4da8c37a   Johannes Berg   mac80211: make of...
323
  			u32 duration;
b8bc4b0aa   Johannes Berg   mac80211: support...
324
  		} remain;
f30221e4e   Johannes Berg   mac80211: impleme...
325
326
327
  		struct {
  			struct sk_buff *frame;
  			u32 wait;
28a1bcdb5   Johannes Berg   mac80211: fix off...
328
  			bool status;
f30221e4e   Johannes Berg   mac80211: impleme...
329
  		} offchan_tx;
f679f65d4   Johannes Berg   mac80211: general...
330
  	};
fffd0934b   Johannes Berg   cfg80211: rework ...
331

f679f65d4   Johannes Berg   mac80211: general...
332
  	int ie_len;
77fdaa12c   Johannes Berg   mac80211: rework ...
333
  	/* must be last */
f679f65d4   Johannes Berg   mac80211: general...
334
  	u8 ie[0];
77fdaa12c   Johannes Berg   mac80211: rework ...
335
  };
469002983   Johannes Berg   mac80211: split I...
336
  /* flags used in struct ieee80211_if_managed.flags */
ab1faead5   Johannes Berg   mac80211: remove ...
337
  enum ieee80211_sta_flags {
b291ba111   Johannes Berg   mac80211: monitor...
338
339
340
  	IEEE80211_STA_BEACON_POLL	= BIT(0),
  	IEEE80211_STA_CONNECTION_POLL	= BIT(1),
  	IEEE80211_STA_CONTROL_PORT	= BIT(2),
b291ba111   Johannes Berg   mac80211: monitor...
341
342
343
  	IEEE80211_STA_DISABLE_11N	= BIT(4),
  	IEEE80211_STA_CSA_RECEIVED	= BIT(5),
  	IEEE80211_STA_MFP_ENABLED	= BIT(6),
ab13315af   Kalle Valo   mac80211: add U-A...
344
  	IEEE80211_STA_UAPSD_ENABLED	= BIT(7),
375177bf3   Vivek Natarajan   mac80211: Retry n...
345
  	IEEE80211_STA_NULLFUNC_ACKED	= BIT(8),
17e4ec147   Jouni Malinen   mac80211: Track B...
346
  	IEEE80211_STA_RESET_SIGNAL_AVE	= BIT(9),
ab1faead5   Johannes Berg   mac80211: remove ...
347
  };
469002983   Johannes Berg   mac80211: split I...
348
  struct ieee80211_if_managed {
056cdd599   Johannes Berg   mac80211: reorder...
349
  	struct timer_list timer;
b291ba111   Johannes Berg   mac80211: monitor...
350
351
  	struct timer_list conn_mon_timer;
  	struct timer_list bcn_mon_timer;
c481ec970   Sujith   mac80211: Add 802...
352
  	struct timer_list chswitch_timer;
b291ba111   Johannes Berg   mac80211: monitor...
353
  	struct work_struct monitor_work;
c481ec970   Sujith   mac80211: Add 802...
354
  	struct work_struct chswitch_work;
1e4dcd012   Juuso Oikarinen   mac80211: Add sup...
355
  	struct work_struct beacon_connection_loss_work;
469002983   Johannes Berg   mac80211: split I...
356

7ccc8bd75   Felix Fietkau   mac80211: calcula...
357
  	unsigned long beacon_timeout;
b291ba111   Johannes Berg   mac80211: monitor...
358
  	unsigned long probe_timeout;
a43abf293   Maxim Levitsky   mac80211: Retry p...
359
  	int probe_send_count;
04ac3c0ee   Felix Fietkau   mac80211: speed u...
360
  	bool nullfunc_failed;
b291ba111   Johannes Berg   mac80211: monitor...
361

77fdaa12c   Johannes Berg   mac80211: rework ...
362
  	struct mutex mtx;
0c1ad2cac   Johannes Berg   mac80211: proper ...
363
  	struct cfg80211_bss *associated;
469002983   Johannes Berg   mac80211: split I...
364

77fdaa12c   Johannes Berg   mac80211: rework ...
365
  	u8 bssid[ETH_ALEN];
469002983   Johannes Berg   mac80211: split I...
366

f0706e828   Jiri Benc   [MAC80211]: Add m...
367
  	u16 aid;
f0706e828   Jiri Benc   [MAC80211]: Add m...
368

5bb644a0f   Johannes Berg   mac80211: cancel/...
369
  	unsigned long timers_running; /* used for quiesce/restart */
965bedadc   Johannes Berg   mac80211: improve...
370
  	bool powersave; /* powersave requested for this iface */
05cb91085   Johannes Berg   mac80211: disable...
371
  	bool broken_ap; /* AP is broken -- turn off powersave */
0f78231bf   Johannes Berg   mac80211: enable ...
372
  	enum ieee80211_smps_mode req_smps, /* requested smps mode */
d1f5b7a34   Johannes Berg   mac80211: allow d...
373
374
375
376
  				 ap_smps, /* smps mode AP thinks we're in */
  				 driver_smps_mode; /* smps mode request */
  
  	struct work_struct request_smps_work;
965bedadc   Johannes Berg   mac80211: improve...
377

d6f2da5b3   Jiri Slaby   [MAC80211]: Remov...
378
  	unsigned int flags;
f0706e828   Jiri Benc   [MAC80211]: Add m...
379

d8ec44335   Juuso Oikarinen   mac80211: Add val...
380
  	bool beacon_crc_valid;
d91f36db5   Johannes Berg   mac80211: impleme...
381
  	u32 beacon_crc;
fdfacf0ae   Jouni Malinen   mac80211: 802.11w...
382
383
384
385
386
  	enum {
  		IEEE80211_MFP_DISABLED,
  		IEEE80211_MFP_OPTIONAL,
  		IEEE80211_MFP_REQUIRED
  	} mfp; /* management frame protection */
f0706e828   Jiri Benc   [MAC80211]: Add m...
387
  	int wmm_last_param_set;
9bc383de3   Johannes Berg   cfg80211: introdu...
388
389
  
  	u8 use_4addr;
17e4ec147   Jouni Malinen   mac80211: Track B...
390
391
392
393
394
395
396
397
398
399
400
401
402
  
  	/* Signal strength from the last Beacon frame in the current BSS. */
  	int last_beacon_signal;
  
  	/*
  	 * Weighted average of the signal strength from Beacon frames in the
  	 * current BSS. This is in units of 1/16 of the signal unit to maintain
  	 * accuracy and to speed up calculations, i.e., the value need to be
  	 * divided by 16 to get the actual value.
  	 */
  	int ave_beacon_signal;
  
  	/*
391a200a8   Jouni Malinen   mac80211: Do not ...
403
404
405
406
407
408
409
  	 * Number of Beacon frames used in ave_beacon_signal. This can be used
  	 * to avoid generating less reliable cqm events that would be based
  	 * only on couple of received frames.
  	 */
  	unsigned int count_beacon_signal;
  
  	/*
17e4ec147   Jouni Malinen   mac80211: Track B...
410
411
412
413
414
  	 * Last Beacon frame signal strength average (ave_beacon_signal / 16)
  	 * that triggered a cqm event. 0 indicates that no event has been
  	 * generated for the current association.
  	 */
  	int last_cqm_event_signal;
615f7b9bb   Meenakshi Venkataraman   mac80211: add dri...
415
416
417
418
419
420
421
422
  
  	/*
  	 * State variables for keeping track of RSSI of the AP currently
  	 * connected to and informing driver when RSSI has gone
  	 * below/above a certain threshold.
  	 */
  	int rssi_min_thold, rssi_max_thold;
  	int last_ave_beacon_signal;
ef96a8420   Ben Greear   mac80211: Support...
423
424
425
  
  	struct ieee80211_ht_cap ht_capa; /* configured ht-cap over-rides */
  	struct ieee80211_ht_cap ht_capa_mask; /* Valid parts of ht_capa */
f0706e828   Jiri Benc   [MAC80211]: Add m...
426
  };
469002983   Johannes Berg   mac80211: split I...
427
428
  struct ieee80211_if_ibss {
  	struct timer_list timer;
469002983   Johannes Berg   mac80211: split I...
429

7a17a33c0   Johannes Berg   mac80211: proper ...
430
  	struct mutex mtx;
af8cdcd82   Johannes Berg   mac80211: convert...
431
  	unsigned long last_scan_completed;
5bb644a0f   Johannes Berg   mac80211: cancel/...
432

fbd2c8dcb   Teemu Paasikivi   mac80211: Set bas...
433
  	u32 basic_rates;
5bb644a0f   Johannes Berg   mac80211: cancel/...
434
  	bool timer_running;
af8cdcd82   Johannes Berg   mac80211: convert...
435
436
  	bool fixed_bssid;
  	bool fixed_channel;
fffd0934b   Johannes Berg   cfg80211: rework ...
437
  	bool privacy;
469002983   Johannes Berg   mac80211: split I...
438
439
  
  	u8 bssid[ETH_ALEN];
af8cdcd82   Johannes Berg   mac80211: convert...
440
441
442
443
  	u8 ssid[IEEE80211_MAX_SSID_LEN];
  	u8 ssid_len, ie_len;
  	u8 *ie;
  	struct ieee80211_channel *channel;
13c40c546   Alexander Simon   mac80211: Add HT ...
444
  	enum nl80211_channel_type channel_type;
469002983   Johannes Berg   mac80211: split I...
445
446
  
  	unsigned long ibss_join_req;
af8cdcd82   Johannes Berg   mac80211: convert...
447
  	/* probe response/beacon for IBSS */
40b275b69   Johannes Berg   mac80211: sparse ...
448
449
  	struct sk_buff __rcu *presp;
  	struct sk_buff *skb;
469002983   Johannes Berg   mac80211: split I...
450

8bf11d8d0   Johannes Berg   mac80211: delay I...
451
452
  	spinlock_t incomplete_lock;
  	struct list_head incomplete_stations;
469002983   Johannes Berg   mac80211: split I...
453
454
455
456
457
  	enum {
  		IEEE80211_IBSS_MLME_SEARCH,
  		IEEE80211_IBSS_MLME_JOINED,
  	} state;
  };
472dbc45d   Johannes Berg   mac80211: split o...
458
  struct ieee80211_if_mesh {
472dbc45d   Johannes Berg   mac80211: split o...
459
460
  	struct timer_list housekeeping_timer;
  	struct timer_list mesh_path_timer;
e304bfd30   Rui Paulo   mac80211: impleme...
461
  	struct timer_list mesh_path_root_timer;
472dbc45d   Johannes Berg   mac80211: split o...
462

5bb644a0f   Johannes Berg   mac80211: cancel/...
463
  	unsigned long timers_running;
18889231e   Javier Cardona   mac80211: Move mp...
464
  	unsigned long wrkq_flags;
472dbc45d   Johannes Berg   mac80211: split o...
465
466
467
468
  
  	u8 mesh_id[IEEE80211_MAX_MESH_ID_LEN];
  	size_t mesh_id_len;
  	/* Active Path Selection Protocol Identifier */
3491707a0   Rui Paulo   mac80211: update ...
469
  	u8 mesh_pp_id;
472dbc45d   Johannes Berg   mac80211: split o...
470
  	/* Active Path Selection Metric Identifier */
3491707a0   Rui Paulo   mac80211: update ...
471
  	u8 mesh_pm_id;
472dbc45d   Johannes Berg   mac80211: split o...
472
  	/* Congestion Control Mode Identifier */
3491707a0   Rui Paulo   mac80211: update ...
473
  	u8 mesh_cc_id;
9e03fdfd0   Javier Cardona   mac80211: Update ...
474
  	/* Synchronization Protocol Identifier */
3491707a0   Rui Paulo   mac80211: update ...
475
  	u8 mesh_sp_id;
9e03fdfd0   Javier Cardona   mac80211: Update ...
476
  	/* Authentication Protocol Identifier */
3491707a0   Rui Paulo   mac80211: update ...
477
  	u8 mesh_auth_id;
d19b3bf63   Rui Paulo   mac80211: replace...
478
479
  	/* Local mesh Sequence Number */
  	u32 sn;
472dbc45d   Johannes Berg   mac80211: split o...
480
481
482
  	/* Last used PREQ ID */
  	u32 preq_id;
  	atomic_t mpaths;
d19b3bf63   Rui Paulo   mac80211: replace...
483
484
  	/* Timestamp of last SN update */
  	unsigned long last_sn_update;
dca7e9430   Thomas Pedersen   {nl,cfg,mac}80211...
485
486
487
  	/* Time when it's ok to send next PERR */
  	unsigned long next_perr;
  	/* Timestamp of last PREQ sent */
472dbc45d   Johannes Berg   mac80211: split o...
488
489
490
491
492
493
494
495
496
  	unsigned long last_preq;
  	struct mesh_rmc *rmc;
  	spinlock_t mesh_preq_queue_lock;
  	struct mesh_preq_queue preq_queue;
  	int preq_queue_len;
  	struct mesh_stats mshstats;
  	struct mesh_config mshcfg;
  	u32 mesh_seqnum;
  	bool accepting_plinks;
5ee68e5b3   Javier Cardona   mac80211: mesh ga...
497
  	int num_gates;
581a8b0fe   Javier Cardona   nl80211: rename N...
498
499
  	const u8 *ie;
  	u8 ie_len;
b130e5cec   Javier Cardona   nl80211: Introduc...
500
501
502
503
504
  	enum {
  		IEEE80211_MESH_SEC_NONE = 0x0,
  		IEEE80211_MESH_SEC_AUTHED = 0x1,
  		IEEE80211_MESH_SEC_SECURED = 0x2,
  	} security;
472dbc45d   Johannes Berg   mac80211: split o...
505
  };
902acc789   Johannes Berg   mac80211: clean u...
506
507
  
  #ifdef CONFIG_MAC80211_MESH
472dbc45d   Johannes Berg   mac80211: split o...
508
509
  #define IEEE80211_IFSTA_MESH_CTR_INC(msh, name)	\
  	do { (msh)->mshstats.name++; } while (0)
902acc789   Johannes Berg   mac80211: clean u...
510
  #else
472dbc45d   Johannes Berg   mac80211: split o...
511
  #define IEEE80211_IFSTA_MESH_CTR_INC(msh, name) \
902acc789   Johannes Berg   mac80211: clean u...
512
513
  	do { } while (0)
  #endif
f0706e828   Jiri Benc   [MAC80211]: Add m...
514

213cd118c   Johannes Berg   mac80211: make br...
515
516
517
518
519
  /**
   * enum ieee80211_sub_if_data_flags - virtual interface flags
   *
   * @IEEE80211_SDATA_ALLMULTI: interface wants all multicast packets
   * @IEEE80211_SDATA_PROMISC: interface is promisc
213cd118c   Johannes Berg   mac80211: make br...
520
521
522
523
   * @IEEE80211_SDATA_OPERATING_GMODE: operating in G-only mode
   * @IEEE80211_SDATA_DONT_BRIDGE_PACKETS: bridge packets between
   *	associated stations and deliver multicast frames both
   *	back to wireless media and to the local net stack.
95acac61b   Johannes Berg   mac80211: allow d...
524
   * @IEEE80211_SDATA_DISCONNECT_RESUME: Disconnect after resume.
7b7eab6fc   Johannes Berg   mac80211: verify ...
525
   * @IEEE80211_SDATA_IN_DRIVER: indicates interface was added to driver
213cd118c   Johannes Berg   mac80211: make br...
526
527
528
529
   */
  enum ieee80211_sub_if_data_flags {
  	IEEE80211_SDATA_ALLMULTI		= BIT(0),
  	IEEE80211_SDATA_PROMISC			= BIT(1),
7986cf958   Johannes Berg   mac80211: remove ...
530
531
  	IEEE80211_SDATA_OPERATING_GMODE		= BIT(2),
  	IEEE80211_SDATA_DONT_BRIDGE_PACKETS	= BIT(3),
95acac61b   Johannes Berg   mac80211: allow d...
532
  	IEEE80211_SDATA_DISCONNECT_RESUME	= BIT(4),
7b7eab6fc   Johannes Berg   mac80211: verify ...
533
  	IEEE80211_SDATA_IN_DRIVER		= BIT(5),
213cd118c   Johannes Berg   mac80211: make br...
534
  };
34d4bc4d4   Johannes Berg   mac80211: support...
535
536
537
538
539
  /**
   * enum ieee80211_sdata_state_bits - virtual interface state bits
   * @SDATA_STATE_RUNNING: virtual interface is up & running; this
   *	mirrors netif_running() but is separate for interface type
   *	change handling while the interface is up
5b714c6a3   Johannes Berg   mac80211: fix off...
540
541
   * @SDATA_STATE_OFFCHANNEL: This interface is currently in offchannel
   *	mode, so queues are stopped
34d4bc4d4   Johannes Berg   mac80211: support...
542
543
544
   */
  enum ieee80211_sdata_state_bits {
  	SDATA_STATE_RUNNING,
5b714c6a3   Johannes Berg   mac80211: fix off...
545
  	SDATA_STATE_OFFCHANNEL,
34d4bc4d4   Johannes Berg   mac80211: support...
546
  };
f0706e828   Jiri Benc   [MAC80211]: Add m...
547
548
  struct ieee80211_sub_if_data {
  	struct list_head list;
f0706e828   Jiri Benc   [MAC80211]: Add m...
549
550
  
  	struct wireless_dev wdev;
11a843b7e   Johannes Berg   [MAC80211]: rewor...
551
552
  	/* keys */
  	struct list_head key_list;
3bff18651   Yogesh Ashok Powar   mac80211: Skip ta...
553
554
  	/* count for keys needing tailroom space allocation */
  	int crypto_tx_tailroom_needed_cnt;
f0706e828   Jiri Benc   [MAC80211]: Add m...
555
556
  	struct net_device *dev;
  	struct ieee80211_local *local;
13262ffd4   Jiri Slaby   [MAC80211]: Remov...
557
  	unsigned int flags;
7e9ed1887   Daniel Drake   [MAC80211]: impro...
558

34d4bc4d4   Johannes Berg   mac80211: support...
559
  	unsigned long state;
f0706e828   Jiri Benc   [MAC80211]: Add m...
560
  	int drop_unencrypted;
f0706e828   Jiri Benc   [MAC80211]: Add m...
561

47846c9b0   Johannes Berg   mac80211: reduce ...
562
  	char name[IFNAMSIZ];
413ad50a5   Johannes Berg   mac80211: properl...
563
564
565
566
567
  	/*
  	 * keep track of whether the HT opmode (stored in
  	 * vif.bss_info.ht_operation_mode) is valid.
  	 */
  	bool ht_opmode_valid;
7da7cc1d4   Johannes Berg   mac80211: per int...
568
569
  	/* to detect idle changes */
  	bool old_idle;
f0706e828   Jiri Benc   [MAC80211]: Add m...
570
571
572
  	/* Fragment table for host-based reassembly */
  	struct ieee80211_fragment_entry	fragments[IEEE80211_FRAGMENT_MAX];
  	unsigned int fragment_next;
b53be7920   Simon Wunderlich   mac80211: Add NoA...
573
574
  	/* TID bitmap for NoAck policy */
  	u16 noack_map;
40b275b69   Johannes Berg   mac80211: sparse ...
575
576
577
578
  	struct ieee80211_key __rcu *keys[NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS];
  	struct ieee80211_key __rcu *default_unicast_key;
  	struct ieee80211_key __rcu *default_multicast_key;
  	struct ieee80211_key __rcu *default_mgmt_key;
f0706e828   Jiri Benc   [MAC80211]: Add m...
579

94778280f   Johannes Berg   mac80211: provide...
580
  	u16 sequence_number;
a621fa4d6   Johannes Berg   mac80211: allow c...
581
582
  	__be16 control_port_protocol;
  	bool control_port_no_encrypt;
94778280f   Johannes Berg   mac80211: provide...
583

f6f3def32   Eliad Peller   mac80211: save tx...
584
  	struct ieee80211_tx_queue_params tx_conf[IEEE80211_MAX_QUEUES];
64592c8fc   Johannes Berg   mac80211: use com...
585
  	struct work_struct work;
35f20c14a   Johannes Berg   mac80211: use com...
586
  	struct sk_buff_head skb_queue;
685429623   Juuso Oikarinen   mac80211: Fix cir...
587
  	bool arp_filter_state;
471b3efdf   Johannes Berg   mac80211: add uni...
588
  	/*
3e122be08   Johannes Berg   mac80211: make ma...
589
590
591
  	 * AP this belongs to: self in AP mode and
  	 * corresponding AP in VLAN mode, NULL for
  	 * all others (might be needed later in IBSS)
471b3efdf   Johannes Berg   mac80211: add uni...
592
  	 */
3e122be08   Johannes Berg   mac80211: make ma...
593
  	struct ieee80211_if_ap *bss;
37eb0b164   Jouni Malinen   cfg80211/mac80211...
594
595
  	/* bitmap of allowed (non-MCS) rate indexes for rate control */
  	u32 rc_rateidx_mask[IEEE80211_NUM_BANDS];
f0706e828   Jiri Benc   [MAC80211]: Add m...
596
597
598
599
600
  
  	union {
  		struct ieee80211_if_ap ap;
  		struct ieee80211_if_wds wds;
  		struct ieee80211_if_vlan vlan;
469002983   Johannes Berg   mac80211: split I...
601
602
  		struct ieee80211_if_managed mgd;
  		struct ieee80211_if_ibss ibss;
472dbc45d   Johannes Berg   mac80211: split o...
603
  		struct ieee80211_if_mesh mesh;
8cc9a7391   Michael Wu   mac80211: Use mon...
604
  		u32 mntr_flags;
f0706e828   Jiri Benc   [MAC80211]: Add m...
605
  	} u;
e9f207f0f   Jiri Benc   [MAC80211]: Add d...
606
607
  
  #ifdef CONFIG_MAC80211_DEBUGFS
2b58b2093   Jouni Malinen   mac80211: Fix deb...
608
  	struct {
7bcfaf2f4   Johannes Berg   cfg80211/mac80211...
609
  		struct dentry *dir;
295bafb47   Ben Greear   mac80211: Support...
610
  		struct dentry *subdir_stations;
f7e0104c1   Johannes Berg   mac80211: support...
611
612
  		struct dentry *default_unicast_key;
  		struct dentry *default_multicast_key;
3cfcf6ac6   Jouni Malinen   mac80211: 802.11w...
613
  		struct dentry *default_mgmt_key;
7bcfaf2f4   Johannes Berg   cfg80211/mac80211...
614
  	} debugfs;
e9f207f0f   Jiri Benc   [MAC80211]: Add d...
615
  #endif
32bfd35d4   Johannes Berg   mac80211: dont us...
616
617
  	/* must be last, dynamically sized area in this! */
  	struct ieee80211_vif vif;
f0706e828   Jiri Benc   [MAC80211]: Add m...
618
  };
32bfd35d4   Johannes Berg   mac80211: dont us...
619
620
621
622
623
  static inline
  struct ieee80211_sub_if_data *vif_to_sdata(struct ieee80211_vif *p)
  {
  	return container_of(p, struct ieee80211_sub_if_data, vif);
  }
c1475ca99   Johannes Berg   mac80211: move ag...
624
625
626
627
628
  enum sdata_queue_type {
  	IEEE80211_SDATA_QUEUE_TYPE_FRAME	= 0,
  	IEEE80211_SDATA_QUEUE_AGG_START		= 1,
  	IEEE80211_SDATA_QUEUE_AGG_STOP		= 2,
  };
f0706e828   Jiri Benc   [MAC80211]: Add m...
629
630
631
  enum {
  	IEEE80211_RX_MSG	= 1,
  	IEEE80211_TX_STATUS_MSG	= 2,
37fbd9080   Johannes Berg   mac80211: allow o...
632
633
634
635
636
  	IEEE80211_EOSP_MSG	= 3,
  };
  
  struct skb_eosp_msg_data {
  	u8 sta[ETH_ALEN], iface[ETH_ALEN];
f0706e828   Jiri Benc   [MAC80211]: Add m...
637
  };
ce7c9111a   Kalle Valo   mac80211: track m...
638
639
  enum queue_stop_reason {
  	IEEE80211_QUEUE_STOP_REASON_DRIVER,
520eb8207   Kalle Valo   mac80211: impleme...
640
  	IEEE80211_QUEUE_STOP_REASON_PS,
96f5e66e8   Johannes Berg   mac80211: fix agg...
641
642
  	IEEE80211_QUEUE_STOP_REASON_CSA,
  	IEEE80211_QUEUE_STOP_REASON_AGGREGATION,
25420604c   Johannes Berg   mac80211: stop qu...
643
  	IEEE80211_QUEUE_STOP_REASON_SUSPEND,
8f77f3849   Johannes Berg   mac80211: do not ...
644
  	IEEE80211_QUEUE_STOP_REASON_SKB_ADD,
693828fe9   Rajkumar Manoharan   mac80211: stop tx...
645
  	IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE,
ce7c9111a   Kalle Valo   mac80211: track m...
646
  };
65a6538a5   Luciano Coelho   mac80211: check f...
647
  #ifdef CONFIG_MAC80211_LEDS
e1e540685   Johannes Berg   mac80211: add thr...
648
649
650
651
652
653
  struct tpt_led_trigger {
  	struct led_trigger trig;
  	char name[32];
  	const struct ieee80211_tpt_blink *blink_table;
  	unsigned int blink_table_len;
  	struct timer_list timer;
e1e540685   Johannes Berg   mac80211: add thr...
654
655
  	unsigned long prev_traffic;
  	unsigned long tx_bytes, rx_bytes;
67408c8c7   Johannes Berg   mac80211: selecti...
656
657
  	unsigned int active, want;
  	bool running;
e1e540685   Johannes Berg   mac80211: add thr...
658
  };
65a6538a5   Luciano Coelho   mac80211: check f...
659
  #endif
e1e540685   Johannes Berg   mac80211: add thr...
660

142b9f507   Helmut Schaa   mac80211: impleme...
661
662
663
664
665
666
667
  /**
   * mac80211 scan flags - currently active scan mode
   *
   * @SCAN_SW_SCANNING: We're currently in the process of scanning but may as
   *	well be on the operating channel
   * @SCAN_HW_SCANNING: The hardware is scanning for us, we have no way to
   *	determine if we are on the operating channel or not
8789d459b   Johannes Berg   mac80211: allow s...
668
669
670
671
   * @SCAN_COMPLETED: Set for our scan work function when the driver reported
   *	that the scan completed.
   * @SCAN_ABORTED: Set for our scan work function when the driver reported
   *	a scan complete for an aborted scan.
142b9f507   Helmut Schaa   mac80211: impleme...
672
   */
fbe9c429f   Helmut Schaa   mac80211: Replace...
673
674
  enum {
  	SCAN_SW_SCANNING,
142b9f507   Helmut Schaa   mac80211: impleme...
675
  	SCAN_HW_SCANNING,
8789d459b   Johannes Berg   mac80211: allow s...
676
677
  	SCAN_COMPLETED,
  	SCAN_ABORTED,
142b9f507   Helmut Schaa   mac80211: impleme...
678
679
680
681
682
683
684
685
686
687
  };
  
  /**
   * enum mac80211_scan_state - scan state machine states
   *
   * @SCAN_DECISION: Main entry point to the scan state machine, this state
   *	determines if we should keep on scanning or switch back to the
   *	operating channel
   * @SCAN_SET_CHANNEL: Set the next channel to be scanned
   * @SCAN_SEND_PROBE: Send probe requests and wait for probe responses
07ef03ee8   Johannes Berg   mac80211: simplif...
688
689
690
   * @SCAN_SUSPEND: Suspend the scan and go back to operating channel to
   *	send out data
   * @SCAN_RESUME: Resume the scan and scan the next channel
142b9f507   Helmut Schaa   mac80211: impleme...
691
692
693
694
695
   */
  enum mac80211_scan_state {
  	SCAN_DECISION,
  	SCAN_SET_CHANNEL,
  	SCAN_SEND_PROBE,
07ef03ee8   Johannes Berg   mac80211: simplif...
696
697
  	SCAN_SUSPEND,
  	SCAN_RESUME,
fbe9c429f   Helmut Schaa   mac80211: Replace...
698
  };
f0706e828   Jiri Benc   [MAC80211]: Add m...
699
700
701
702
703
704
705
  struct ieee80211_local {
  	/* embed the driver visible part.
  	 * don't cast (use the static inlines below), but we keep
  	 * it first anyway so they become a no-op */
  	struct ieee80211_hw hw;
  
  	const struct ieee80211_ops *ops;
42935ecaf   Luis R. Rodriguez   mac80211: redefin...
706
  	/*
af6b63741   Johannes Berg   mac80211: general...
707
708
  	 * work stuff, potentially off-channel (in the future)
  	 */
af6b63741   Johannes Berg   mac80211: general...
709
710
711
712
713
714
  	struct list_head work_list;
  	struct timer_list work_timer;
  	struct work_struct work_work;
  	struct sk_buff_head work_skb_queue;
  
  	/*
42935ecaf   Luis R. Rodriguez   mac80211: redefin...
715
716
717
718
  	 * private workqueue to mac80211. mac80211 makes this accessible
  	 * via ieee80211_queue_work()
  	 */
  	struct workqueue_struct *workqueue;
e4e72fb4d   Johannes Berg   mac80211/iwlwifi:...
719
  	unsigned long queue_stop_reasons[IEEE80211_MAX_QUEUES];
96f5e66e8   Johannes Berg   mac80211: fix agg...
720
  	/* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */
ce7c9111a   Kalle Valo   mac80211: track m...
721
  	spinlock_t queue_stop_reason_lock;
96f5e66e8   Johannes Berg   mac80211: fix agg...
722

f0706e828   Jiri Benc   [MAC80211]: Add m...
723
  	int open_count;
3d30d949c   Michael Wu   mac80211: Add coo...
724
  	int monitors, cooked_mntrs;
8cc9a7391   Michael Wu   mac80211: Use mon...
725
  	/* number of interfaces with corresponding FIF_ flags */
7be5086d4   Johannes Berg   mac80211: add pro...
726
727
728
  	int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll,
  	    fif_probe_req;
  	int probe_req_reg;
4150c5721   Johannes Berg   [PATCH] mac80211:...
729
  	unsigned int filter_flags; /* FIF_* */
3b8d81e02   Johannes Berg   mac80211: remove ...
730

3ffc2a905   Johannes Berg   mac80211: allow v...
731
  	bool wiphy_ciphers_allocated;
3b8d81e02   Johannes Berg   mac80211: remove ...
732
733
  	/* protects the aggregated multicast list and filter calls */
  	spinlock_t filter_lock;
3ac64beec   Johannes Berg   mac80211: allow c...
734
735
  	/* used for uploading changed mc list */
  	struct work_struct reconfig_filter;
0f78231bf   Johannes Berg   mac80211: enable ...
736
737
  	/* used to reconfigure hardware SM PS */
  	struct work_struct recalc_smps;
3b8d81e02   Johannes Berg   mac80211: remove ...
738
  	/* aggregated multicast list */
22bedad3c   Jiri Pirko   net: convert mult...
739
  	struct netdev_hw_addr_list mc_list;
3b8d81e02   Johannes Berg   mac80211: remove ...
740

d0709a651   Johannes Berg   mac80211: RCU-ify...
741
  	bool tim_in_locked_section; /* see ieee80211_beacon_get() */
5bb644a0f   Johannes Berg   mac80211: cancel/...
742
743
744
745
746
747
748
749
750
751
  
  	/*
  	 * suspended is true if we finished all the suspend _and_ we have
  	 * not yet come up from resume. This is to be used by mac80211
  	 * to ensure driver sanity during suspend and mac80211's own
  	 * sanity. It can eventually be used for WoW as well.
  	 */
  	bool suspended;
  
  	/*
ceb99fe07   Johannes Berg   mac80211: fix resume
752
753
754
755
756
757
758
759
  	 * Resuming is true while suspended, but when we're reprogramming the
  	 * hardware -- at that time it's allowed to use ieee80211_queue_work()
  	 * again even though some other parts of the stack are still suspended
  	 * and we still drop received frames to avoid waking the stack.
  	 */
  	bool resuming;
  
  	/*
5bb644a0f   Johannes Berg   mac80211: cancel/...
760
761
762
763
  	 * quiescing is true during the suspend process _only_ to
  	 * ease timer cancelling etc.
  	 */
  	bool quiescing;
ea77f12f2   Johannes Berg   mac80211: remove ...
764
765
  	/* device is started */
  	bool started;
eecc48000   Johannes Berg   mac80211: add bas...
766
767
  	/* wowlan is enabled -- don't reconfig on resume */
  	bool wowlan;
b306f4530   Johannes Berg   [PATCH] mac80211:...
768
  	int tx_headroom; /* required headroom for hardware/radiotap */
f0706e828   Jiri Benc   [MAC80211]: Add m...
769

f0706e828   Jiri Benc   [MAC80211]: Add m...
770
771
772
773
774
775
776
777
  	/* Tasklet and skb queue to process calls from IRQ mode. All frames
  	 * added to skb_queue will be processed, but frames in
  	 * skb_queue_unreliable may be dropped if the total length of these
  	 * queues increases over the limit. */
  #define IEEE80211_IRQSAFE_QUEUE_LIMIT 128
  	struct tasklet_struct tasklet;
  	struct sk_buff_head skb_queue;
  	struct sk_buff_head skb_queue_unreliable;
24a8fdad3   Christian Lamparter   mac80211: seriali...
778
779
780
781
782
783
784
785
  	/*
  	 * Internal FIFO queue which is shared between multiple rx path
  	 * stages. Its main task is to provide a serialization mechanism,
  	 * so all rx handlers can enjoy having exclusive access to their
  	 * private data structures.
  	 */
  	struct sk_buff_head rx_skb_queue;
  	bool running_rx_handler;	/* protected by rx_skb_queue.lock */
d0709a651   Johannes Berg   mac80211: RCU-ify...
786
787
  	/* Station data */
  	/*
4d33960bf   Johannes Berg   mac80211: reduce ...
788
789
  	 * The mutex only protects the list, hash table and
  	 * counter, reads are done with RCU.
d0709a651   Johannes Berg   mac80211: RCU-ify...
790
  	 */
34e895075   Johannes Berg   mac80211: allow s...
791
  	struct mutex sta_mtx;
4d33960bf   Johannes Berg   mac80211: reduce ...
792
  	spinlock_t tim_lock;
d0709a651   Johannes Berg   mac80211: RCU-ify...
793
  	unsigned long num_sta;
4d33960bf   Johannes Berg   mac80211: reduce ...
794
  	struct list_head sta_list;
40b275b69   Johannes Berg   mac80211: sparse ...
795
  	struct sta_info __rcu *sta_hash[STA_HASH_SIZE];
f0706e828   Jiri Benc   [MAC80211]: Add m...
796
  	struct timer_list sta_cleanup;
f5ea9120b   Johannes Berg   nl80211: add gene...
797
  	int sta_generation;
f0706e828   Jiri Benc   [MAC80211]: Add m...
798

2a577d987   Johannes Berg   mac80211: rework ...
799
  	struct sk_buff_head pending[IEEE80211_MAX_QUEUES];
f0706e828   Jiri Benc   [MAC80211]: Add m...
800
  	struct tasklet_struct tx_pending_tasklet;
a6a67db2b   Johannes Berg   mac80211: refcoun...
801
  	atomic_t agg_queue_stop[IEEE80211_MAX_QUEUES];
cd8ffc800   Johannes Berg   mac80211: fix agg...
802

53918994b   Johannes Berg   [PATCH] mac80211:...
803
804
  	/* number of interfaces with corresponding IFF_ flags */
  	atomic_t iff_allmultis, iff_promiscs;
f0706e828   Jiri Benc   [MAC80211]: Add m...
805
806
  
  	struct rate_control_ref *rate_ctrl;
5f9f1812b   Felix Fietkau   mac80211: remove ...
807
808
  	struct crypto_cipher *wep_tx_tfm;
  	struct crypto_cipher *wep_rx_tfm;
f0706e828   Jiri Benc   [MAC80211]: Add m...
809
  	u32 wep_iv;
f0706e828   Jiri Benc   [MAC80211]: Add m...
810

c771c9d8d   Johannes Berg   mac80211: add int...
811
  	/* see iface.c */
79010420c   Johannes Berg   [PATCH] mac80211:...
812
  	struct list_head interfaces;
c771c9d8d   Johannes Berg   mac80211: add int...
813
  	struct mutex iflist_mtx;
79010420c   Johannes Berg   [PATCH] mac80211:...
814

b16bd15c3   Johannes Berg   mac80211: fix spi...
815
  	/*
ad0e2b5a0   Johannes Berg   mac80211: simplif...
816
  	 * Key mutex, protects sdata's key_list and sta_info's
b16bd15c3   Johannes Berg   mac80211: fix spi...
817
818
  	 * key pointers (write access, they're RCU.)
  	 */
ad0e2b5a0   Johannes Berg   mac80211: simplif...
819
  	struct mutex key_mtx;
b16bd15c3   Johannes Berg   mac80211: fix spi...
820

a1699b75a   Johannes Berg   mac80211: unify s...
821
822
  	/* mutex for scan and work locking */
  	struct mutex mtx;
b16bd15c3   Johannes Berg   mac80211: fix spi...
823

c2b13452b   Johannes Berg   mac80211: clean u...
824
  	/* Scanning and BSS list */
fbe9c429f   Helmut Schaa   mac80211: Replace...
825
  	unsigned long scanning;
2a5193119   Johannes Berg   cfg80211/nl80211:...
826
  	struct cfg80211_ssid scan_ssid;
5ba63533b   Johannes Berg   cfg80211: fix ali...
827
  	struct cfg80211_scan_request *int_scan_req;
4d36ec582   Johannes Berg   mac80211: split h...
828
  	struct cfg80211_scan_request *scan_req, *hw_scan_req;
2a5193119   Johannes Berg   cfg80211/nl80211:...
829
  	struct ieee80211_channel *scan_channel;
4d36ec582   Johannes Berg   mac80211: split h...
830
  	enum ieee80211_band hw_scan_band;
f0706e828   Jiri Benc   [MAC80211]: Add m...
831
  	int scan_channel_idx;
de95a54b1   Johannes Berg   mac80211: pass al...
832
  	int scan_ies_len;
8318d78a4   Johannes Berg   cfg80211 API for ...
833

79f460ca4   Luciano Coelho   mac80211: add sup...
834
835
  	bool sched_scanning;
  	struct ieee80211_sched_scan_ies sched_scan_ies;
85a9994a0   Luciano Coelho   cfg80211/mac80211...
836
  	struct work_struct sched_scan_stopped_work;
79f460ca4   Luciano Coelho   mac80211: add sup...
837

df13cce53   Helmut Schaa   mac80211: Improve...
838
  	unsigned long leave_oper_channel_time;
977923b00   Helmut Schaa   mac80211: rename ...
839
  	enum mac80211_scan_state next_scan_state;
f0706e828   Jiri Benc   [MAC80211]: Add m...
840
  	struct delayed_work scan_work;
491775a50   Johannes Berg   mac80211: use sda...
841
  	struct ieee80211_sub_if_data *scan_sdata;
0aaffa9b9   Johannes Berg   mac80211: improve...
842
  	enum nl80211_channel_type _oper_channel_type;
2a5193119   Johannes Berg   cfg80211/nl80211:...
843
  	struct ieee80211_channel *oper_channel, *csa_channel;
f0706e828   Jiri Benc   [MAC80211]: Add m...
844

b8bc4b0aa   Johannes Berg   mac80211: support...
845
846
847
  	/* Temporary remain-on-channel for off-channel operations */
  	struct ieee80211_channel *tmp_channel;
  	enum nl80211_channel_type tmp_channel_type;
f0706e828   Jiri Benc   [MAC80211]: Add m...
848
849
850
851
852
853
854
855
856
857
858
  	/* SNMP counters */
  	/* dot11CountersTable */
  	u32 dot11TransmittedFragmentCount;
  	u32 dot11MulticastTransmittedFrameCount;
  	u32 dot11FailedCount;
  	u32 dot11RetryCount;
  	u32 dot11MultipleRetryCount;
  	u32 dot11FrameDuplicateCount;
  	u32 dot11ReceivedFragmentCount;
  	u32 dot11MulticastReceivedFrameCount;
  	u32 dot11TransmittedFrameCount;
f0706e828   Jiri Benc   [MAC80211]: Add m...
859
860
861
  
  #ifdef CONFIG_MAC80211_LEDS
  	int tx_led_counter, rx_led_counter;
cdcb006fb   Ivo van Doorn   mac80211: Add rad...
862
  	struct led_trigger *tx_led, *rx_led, *assoc_led, *radio_led;
e1e540685   Johannes Berg   mac80211: add thr...
863
  	struct tpt_led_trigger *tpt_led_trigger;
cdcb006fb   Ivo van Doorn   mac80211: Add rad...
864
865
  	char tx_led_name[32], rx_led_name[32],
  	     assoc_led_name[32], radio_led_name[32];
f0706e828   Jiri Benc   [MAC80211]: Add m...
866
  #endif
f0706e828   Jiri Benc   [MAC80211]: Add m...
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
  #ifdef CONFIG_MAC80211_DEBUG_COUNTERS
  	/* TX/RX handler statistics */
  	unsigned int tx_handlers_drop;
  	unsigned int tx_handlers_queued;
  	unsigned int tx_handlers_drop_unencrypted;
  	unsigned int tx_handlers_drop_fragment;
  	unsigned int tx_handlers_drop_wep;
  	unsigned int tx_handlers_drop_not_assoc;
  	unsigned int tx_handlers_drop_unauth_port;
  	unsigned int rx_handlers_drop;
  	unsigned int rx_handlers_queued;
  	unsigned int rx_handlers_drop_nullfunc;
  	unsigned int rx_handlers_drop_defrag;
  	unsigned int rx_handlers_drop_short;
  	unsigned int rx_handlers_drop_passive_scan;
  	unsigned int tx_expand_skb_head;
  	unsigned int tx_expand_skb_head_cloned;
  	unsigned int rx_expand_skb_head;
  	unsigned int rx_expand_skb_head2;
  	unsigned int rx_handlers_fragments;
  	unsigned int tx_status_drop;
f0706e828   Jiri Benc   [MAC80211]: Add m...
888
889
890
891
  #define I802_DEBUG_INC(c) (c)++
  #else /* CONFIG_MAC80211_DEBUG_COUNTERS */
  #define I802_DEBUG_INC(c) do { } while (0)
  #endif /* CONFIG_MAC80211_DEBUG_COUNTERS */
f0706e828   Jiri Benc   [MAC80211]: Add m...
892
893
894
  	int total_ps_buffered; /* total number of all buffered unicast and
  				* multicast packets for power saving stations
  				*/
f0706e828   Jiri Benc   [MAC80211]: Add m...
895
  	unsigned int wmm_acm; /* bit field of ACM bits (BIT(802.1D tag)) */
520eb8207   Kalle Valo   mac80211: impleme...
896

50ae0cf15   Kalle Valo   mac80211: add deb...
897
898
899
900
901
902
903
904
905
906
907
908
909
  	/*
  	 * Bitmask of enabled u-apsd queues,
  	 * IEEE80211_WMM_IE_STA_QOSINFO_AC_BE & co. Needs a new association
  	 * to take effect.
  	 */
  	unsigned int uapsd_queues;
  
  	/*
  	 * Maximum number of buffered frames AP can deliver during a
  	 * service period, IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL or similar.
  	 * Needs a new association to take effect.
  	 */
  	unsigned int uapsd_max_sp_len;
572e00122   Kalle Valo   mac80211: use ps-...
910
  	bool pspolling;
b203ffc3a   Jouni Malinen   mac80211: General...
911
  	bool offchannel_ps_enabled;
965bedadc   Johannes Berg   mac80211: improve...
912
913
914
915
916
  	/*
  	 * PS can only be enabled when we have exactly one managed
  	 * interface (and monitors) in PS, this then points there.
  	 */
  	struct ieee80211_sub_if_data *ps_sdata;
520eb8207   Kalle Valo   mac80211: impleme...
917
918
919
  	struct work_struct dynamic_ps_enable_work;
  	struct work_struct dynamic_ps_disable_work;
  	struct timer_list dynamic_ps_timer;
10f644a47   Johannes Berg   mac80211: disable...
920
  	struct notifier_block network_latency_notifier;
2b2c009ec   Juuso Oikarinen   mac80211: Add sup...
921
  	struct notifier_block ifa_notifier;
f0706e828   Jiri Benc   [MAC80211]: Add m...
922

ff6163810   Juuso Oikarinen   mac80211: Fix ps-...
923
924
925
926
927
  	/*
  	 * The dynamic ps timeout configured from user space via WEXT -
  	 * this will override whatever chosen by mac80211 internally.
  	 */
  	int dynamic_ps_forced_timeout;
f90754c15   Juuso Oikarinen   mac80211: Add int...
928
929
  	int dynamic_ps_user_timeout;
  	bool disable_dynamic_ps;
ff6163810   Juuso Oikarinen   mac80211: Fix ps-...
930

2bf30faba   Johannes Berg   mac80211: remove ...
931
  	int user_power_level; /* in dBm */
a8302de93   Vasanthakumar Thiagarajan   mac80211: Handle ...
932
  	int power_constr_level; /* in dBm */
2bf30faba   Johannes Berg   mac80211: remove ...
933

0f78231bf   Johannes Berg   mac80211: enable ...
934
  	enum ieee80211_smps_mode smps_mode;
f2753ddba   Johannes Berg   mac80211: add har...
935
  	struct work_struct restart_work;
e9f207f0f   Jiri Benc   [MAC80211]: Add d...
936
937
  #ifdef CONFIG_MAC80211_DEBUGFS
  	struct local_debugfsdentries {
4b7679a56   Johannes Berg   mac80211: clean u...
938
  		struct dentry *rcdir;
e9f207f0f   Jiri Benc   [MAC80211]: Add d...
939
940
941
  		struct dentry *keys;
  	} debugfs;
  #endif
4e6cbfd09   John W. Linville   mac80211: support...
942

21f835896   Johannes Berg   mac80211: impleme...
943
944
  	struct ieee80211_channel *hw_roc_channel;
  	struct net_device *hw_roc_dev;
4334ec851   Johannes Berg   mac80211: fix TX ...
945
  	struct sk_buff *hw_roc_skb, *hw_roc_skb_for_status;
21f835896   Johannes Berg   mac80211: impleme...
946
947
948
949
  	struct work_struct hw_roc_start, hw_roc_done;
  	enum nl80211_channel_type hw_roc_channel_type;
  	unsigned int hw_roc_duration;
  	u32 hw_roc_cookie;
90fc4b3a5   Johannes Berg   mac80211: impleme...
950
  	bool hw_roc_for_tx;
21f835896   Johannes Berg   mac80211: impleme...
951

a729cff8a   Johannes Berg   mac80211: impleme...
952
953
  	struct idr ack_status_frames;
  	spinlock_t ack_status_lock;
4e6cbfd09   John W. Linville   mac80211: support...
954
955
956
957
  	/* dummy netdev for use w/ NAPI */
  	struct net_device napi_dev;
  
  	struct napi_struct napi;
f0706e828   Jiri Benc   [MAC80211]: Add m...
958
  };
3e122be08   Johannes Berg   mac80211: make ma...
959
960
961
  static inline struct ieee80211_sub_if_data *
  IEEE80211_DEV_TO_SUB_IF(struct net_device *dev)
  {
3e122be08   Johannes Berg   mac80211: make ma...
962
963
  	return netdev_priv(dev);
  }
c1475ca99   Johannes Berg   mac80211: move ag...
964
  /* this struct represents 802.11n's RA/TID combination */
eadc8d9e9   Ron Rindjunsky   mac80211: A-MPDU ...
965
966
967
968
  struct ieee80211_ra_tid {
  	u8 ra[ETH_ALEN];
  	u16 tid;
  };
dd76986b0   Johannes Berg   cfg80211/mac80211...
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
  /* Parsed Information Elements */
  struct ieee802_11_elems {
  	u8 *ie_start;
  	size_t total_len;
  
  	/* pointers to IEs */
  	u8 *ssid;
  	u8 *supp_rates;
  	u8 *fh_params;
  	u8 *ds_params;
  	u8 *cf_params;
  	struct ieee80211_tim_ie *tim;
  	u8 *ibss_params;
  	u8 *challenge;
  	u8 *wpa;
  	u8 *rsn;
  	u8 *erp_info;
  	u8 *ext_supp_rates;
  	u8 *wmm_info;
  	u8 *wmm_param;
  	struct ieee80211_ht_cap *ht_cap_elem;
  	struct ieee80211_ht_info *ht_info_elem;
  	struct ieee80211_meshconf_ie *mesh_config;
  	u8 *mesh_id;
  	u8 *peering;
  	u8 *preq;
  	u8 *prep;
  	u8 *perr;
  	struct ieee80211_rann_ie *rann;
  	u8 *ch_switch_elem;
  	u8 *country_elem;
  	u8 *pwr_constr_elem;
  	u8 *quiet_elem;	/* first quite element */
  	u8 *timeout_int;
  
  	/* length of them, respectively */
  	u8 ssid_len;
  	u8 supp_rates_len;
  	u8 fh_params_len;
  	u8 ds_params_len;
  	u8 cf_params_len;
  	u8 tim_len;
  	u8 ibss_params_len;
  	u8 challenge_len;
  	u8 wpa_len;
  	u8 rsn_len;
  	u8 erp_info_len;
  	u8 ext_supp_rates_len;
  	u8 wmm_info_len;
  	u8 wmm_param_len;
  	u8 mesh_id_len;
  	u8 peering_len;
  	u8 preq_len;
  	u8 prep_len;
  	u8 perr_len;
  	u8 ch_switch_elem_len;
  	u8 country_elem_len;
  	u8 pwr_constr_elem_len;
  	u8 quiet_elem_len;
  	u8 num_of_quiet_elem;	/* can be more the one */
  	u8 timeout_int_len;
  };
f0706e828   Jiri Benc   [MAC80211]: Add m...
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
  static inline struct ieee80211_local *hw_to_local(
  	struct ieee80211_hw *hw)
  {
  	return container_of(hw, struct ieee80211_local, hw);
  }
  
  static inline struct ieee80211_hw *local_to_hw(
  	struct ieee80211_local *local)
  {
  	return &local->hw;
  }
f0706e828   Jiri Benc   [MAC80211]: Add m...
1042

571ecf676   Johannes Berg   [MAC80211]: split...
1043
1044
1045
1046
1047
  static inline int ieee80211_bssid_match(const u8 *raddr, const u8 *addr)
  {
  	return compare_ether_addr(raddr, addr) == 0 ||
  	       is_broadcast_ether_addr(raddr);
  }
e8975581f   Johannes Berg   mac80211: introdu...
1048
  int ieee80211_hw_config(struct ieee80211_local *local, u32 changed);
5cf121c3c   Johannes Berg   mac80211: split i...
1049
  void ieee80211_tx_set_protected(struct ieee80211_tx_data *tx);
9c6bd7901   Johannes Berg   mac80211: reorder...
1050
1051
  void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
  				      u32 changed);
0d143fe1e   Johannes Berg   mac80211: move re...
1052
  void ieee80211_configure_filter(struct ieee80211_local *local);
469002983   Johannes Berg   mac80211: split I...
1053
  u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata);
f0706e828   Jiri Benc   [MAC80211]: Add m...
1054

469002983   Johannes Berg   mac80211: split I...
1055
  /* STA code */
9c6bd7901   Johannes Berg   mac80211: reorder...
1056
  void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata);
77fdaa12c   Johannes Berg   mac80211: rework ...
1057
1058
1059
1060
1061
  int ieee80211_mgd_auth(struct ieee80211_sub_if_data *sdata,
  		       struct cfg80211_auth_request *req);
  int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
  			struct cfg80211_assoc_request *req);
  int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
667503ddc   Johannes Berg   cfg80211: fix loc...
1062
1063
  			 struct cfg80211_deauth_request *req,
  			 void *cookie);
77fdaa12c   Johannes Berg   mac80211: rework ...
1064
  int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata,
667503ddc   Johannes Berg   cfg80211: fix loc...
1065
1066
  			   struct cfg80211_disassoc_request *req,
  			   void *cookie);
572e00122   Kalle Valo   mac80211: use ps-...
1067
1068
  void ieee80211_send_pspoll(struct ieee80211_local *local,
  			   struct ieee80211_sub_if_data *sdata);
10f644a47   Johannes Berg   mac80211: disable...
1069
1070
1071
  void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency);
  int ieee80211_max_network_latency(struct notifier_block *nb,
  				  unsigned long data, void *dummy);
2b2c009ec   Juuso Oikarinen   mac80211: Add sup...
1072
  int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata);
cc32abd49   Johannes Berg   mac80211: move ch...
1073
1074
  void ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
  				      struct ieee80211_channel_sw_ie *sw_elem,
5ce6e438d   Johannes Berg   mac80211: add off...
1075
1076
  				      struct ieee80211_bss *bss,
  				      u64 timestamp);
5bb644a0f   Johannes Berg   mac80211: cancel/...
1077
1078
  void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata);
  void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata);
1fa57d017   Johannes Berg   mac80211: use com...
1079
1080
1081
  void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata);
  void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
  				  struct sk_buff *skb);
d3a910a8e   Luis R. Rodriguez   mac80211: make th...
1082
  void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata);
be099e82e   Luis R. Rodriguez   mac80211: add hel...
1083
  void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata);
9c6bd7901   Johannes Berg   mac80211: reorder...
1084

469002983   Johannes Berg   mac80211: split I...
1085
  /* IBSS code */
469002983   Johannes Berg   mac80211: split I...
1086
1087
  void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local);
  void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata);
8bf11d8d0   Johannes Berg   mac80211: delay I...
1088
1089
  void ieee80211_ibss_rx_no_sta(struct ieee80211_sub_if_data *sdata,
  			      const u8 *bssid, const u8 *addr, u32 supp_rates);
af8cdcd82   Johannes Berg   mac80211: convert...
1090
1091
1092
  int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
  			struct cfg80211_ibss_params *params);
  int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata);
5bb644a0f   Johannes Berg   mac80211: cancel/...
1093
1094
  void ieee80211_ibss_quiesce(struct ieee80211_sub_if_data *sdata);
  void ieee80211_ibss_restart(struct ieee80211_sub_if_data *sdata);
1fa57d017   Johannes Berg   mac80211: use com...
1095
1096
1097
1098
1099
1100
1101
1102
  void ieee80211_ibss_work(struct ieee80211_sub_if_data *sdata);
  void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
  				   struct sk_buff *skb);
  
  /* mesh code */
  void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata);
  void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
  				   struct sk_buff *skb);
469002983   Johannes Berg   mac80211: split I...
1103

9c6bd7901   Johannes Berg   mac80211: reorder...
1104
  /* scan/BSS handling */
469002983   Johannes Berg   mac80211: split I...
1105
  void ieee80211_scan_work(struct work_struct *work);
f3b85252f   Johannes Berg   mac80211: fix sca...
1106
  int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
be4a4b6a5   Johannes Berg   mac80211: improve...
1107
1108
  				    const u8 *ssid, u8 ssid_len,
  				    struct ieee80211_channel *chan);
c2b13452b   Johannes Berg   mac80211: clean u...
1109
  int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
2a5193119   Johannes Berg   cfg80211/nl80211:...
1110
  			   struct cfg80211_scan_request *req);
5bb644a0f   Johannes Berg   mac80211: cancel/...
1111
  void ieee80211_scan_cancel(struct ieee80211_local *local);
c2b13452b   Johannes Berg   mac80211: clean u...
1112
  ieee80211_rx_result
f1d58c252   Johannes Berg   mac80211: push rx...
1113
  ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb);
9c6bd7901   Johannes Berg   mac80211: reorder...
1114

0a51b27e9   Johannes Berg   mac80211: start m...
1115
  void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local);
c2b13452b   Johannes Berg   mac80211: clean u...
1116
  struct ieee80211_bss *
98c8fccfa   Johannes Berg   mac80211: refacto...
1117
1118
1119
1120
1121
  ieee80211_bss_info_update(struct ieee80211_local *local,
  			  struct ieee80211_rx_status *rx_status,
  			  struct ieee80211_mgmt *mgmt,
  			  size_t len,
  			  struct ieee802_11_elems *elems,
2a5193119   Johannes Berg   cfg80211/nl80211:...
1122
1123
  			  struct ieee80211_channel *channel,
  			  bool beacon);
c2b13452b   Johannes Berg   mac80211: clean u...
1124
  struct ieee80211_bss *
5484e2374   Johannes Berg   mac80211: move BS...
1125
1126
  ieee80211_rx_bss_get(struct ieee80211_local *local, u8 *bssid, int freq,
  		     u8 *ssid, u8 ssid_len);
98c8fccfa   Johannes Berg   mac80211: refacto...
1127
  void ieee80211_rx_bss_put(struct ieee80211_local *local,
c2b13452b   Johannes Berg   mac80211: clean u...
1128
  			  struct ieee80211_bss *bss);
ee3858551   Luis Carlos Cobo   mac80211: mesh da...
1129

79f460ca4   Luciano Coelho   mac80211: add sup...
1130
1131
1132
  /* scheduled scan handling */
  int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
  				       struct cfg80211_sched_scan_request *req);
85a9994a0   Luciano Coelho   cfg80211/mac80211...
1133
1134
  int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata);
  void ieee80211_sched_scan_stopped_work(struct work_struct *work);
79f460ca4   Luciano Coelho   mac80211: add sup...
1135

b203ffc3a   Jouni Malinen   mac80211: General...
1136
  /* off-channel helpers */
b23b025fe   Ben Greear   mac80211: Optimiz...
1137
1138
  void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local,
  				    bool offchannel_ps_enable);
b203ffc3a   Jouni Malinen   mac80211: General...
1139
  void ieee80211_offchannel_return(struct ieee80211_local *local,
b23b025fe   Ben Greear   mac80211: Optimiz...
1140
  				 bool offchannel_ps_disable);
21f835896   Johannes Berg   mac80211: impleme...
1141
  void ieee80211_hw_roc_setup(struct ieee80211_local *local);
b203ffc3a   Jouni Malinen   mac80211: General...
1142

3e122be08   Johannes Berg   mac80211: make ma...
1143
  /* interface handling */
47846c9b0   Johannes Berg   mac80211: reduce ...
1144
1145
  int ieee80211_iface_init(void);
  void ieee80211_iface_exit(void);
3e122be08   Johannes Berg   mac80211: make ma...
1146
  int ieee80211_if_add(struct ieee80211_local *local, const char *name,
05c914fe3   Johannes Berg   mac80211: use nl8...
1147
  		     struct net_device **new_dev, enum nl80211_iftype type,
ee3858551   Luis Carlos Cobo   mac80211: mesh da...
1148
  		     struct vif_params *params);
f3947e2df   Johannes Berg   mac80211: push in...
1149
  int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata,
05c914fe3   Johannes Berg   mac80211: use nl8...
1150
  			     enum nl80211_iftype type);
f698d856f   Jasper Bryant-Greene   replace net_devic...
1151
  void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata);
75636525f   Johannes Berg   mac80211: revamp ...
1152
  void ieee80211_remove_interfaces(struct ieee80211_local *local);
5cff20e6c   Johannes Berg   mac80211: tell dr...
1153
1154
  u32 __ieee80211_recalc_idle(struct ieee80211_local *local);
  void ieee80211_recalc_idle(struct ieee80211_local *local);
85416a4fa   Christian Lamparter   mac80211: fix rx ...
1155
1156
  void ieee80211_adjust_monitor_flags(struct ieee80211_sub_if_data *sdata,
  				    const int offset);
f0706e828   Jiri Benc   [MAC80211]: Add m...
1157

9607e6b66   Johannes Berg   mac80211: add iee...
1158
1159
  static inline bool ieee80211_sdata_running(struct ieee80211_sub_if_data *sdata)
  {
34d4bc4d4   Johannes Berg   mac80211: support...
1160
  	return test_bit(SDATA_STATE_RUNNING, &sdata->state);
9607e6b66   Johannes Berg   mac80211: add iee...
1161
  }
e2ebc74d7   Johannes Berg   [MAC80211]: split...
1162
  /* tx handling */
e2ebc74d7   Johannes Berg   [MAC80211]: split...
1163
1164
  void ieee80211_clear_tx_pending(struct ieee80211_local *local);
  void ieee80211_tx_pending(unsigned long data);
d0cf9c0da   Stephen Hemminger   wireless: convert...
1165
1166
1167
1168
  netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
  					 struct net_device *dev);
  netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
  				       struct net_device *dev);
e2ebc74d7   Johannes Berg   [MAC80211]: split...
1169

de1ede7ac   Johannes Berg   mac80211: make BA...
1170
  /* HT */
ef96a8420   Ben Greear   mac80211: Support...
1171
1172
1173
1174
1175
  bool ieee80111_cfg_override_disables_ht40(struct ieee80211_sub_if_data *sdata);
  void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata,
  				     struct ieee80211_sta_ht_cap *ht_cap);
  void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_sub_if_data *sdata,
  				       struct ieee80211_supported_band *sband,
ae5eb0264   Johannes Berg   mac80211: rewrite...
1176
  				       struct ieee80211_ht_cap *ht_cap_ie,
d9fe60dea   Johannes Berg   802.11: clean up/...
1177
  				       struct ieee80211_sta_ht_cap *ht_cap);
b8695a8fe   Johannes Berg   mac80211: restruc...
1178
1179
1180
  void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata,
  			  const u8 *da, u16 tid,
  			  u16 initiator, u16 reason_code);
0f78231bf   Johannes Berg   mac80211: enable ...
1181
1182
1183
  int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata,
  			       enum ieee80211_smps_mode smps, const u8 *da,
  			       const u8 *bssid);
d1f5b7a34   Johannes Berg   mac80211: allow d...
1184
  void ieee80211_request_smps_work(struct work_struct *work);
de1ede7ac   Johannes Berg   mac80211: make BA...
1185

7c3b1dd8f   Johannes Berg   mac80211: defer R...
1186
  void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
53f73c09d   Johannes Berg   mac80211: avoid t...
1187
  				     u16 initiator, u16 reason, bool stop);
849b79678   Johannes Berg   mac80211: further...
1188
  void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
53f73c09d   Johannes Berg   mac80211: avoid t...
1189
1190
  				    u16 initiator, u16 reason, bool stop);
  void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta, bool tx);
de1ede7ac   Johannes Berg   mac80211: make BA...
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
  void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata,
  			     struct sta_info *sta,
  			     struct ieee80211_mgmt *mgmt, size_t len);
  void ieee80211_process_addba_resp(struct ieee80211_local *local,
  				  struct sta_info *sta,
  				  struct ieee80211_mgmt *mgmt,
  				  size_t len);
  void ieee80211_process_addba_request(struct ieee80211_local *local,
  				     struct sta_info *sta,
  				     struct ieee80211_mgmt *mgmt,
  				     size_t len);
849b79678   Johannes Berg   mac80211: further...
1202
  int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
53f73c09d   Johannes Berg   mac80211: avoid t...
1203
1204
  				   enum ieee80211_back_parties initiator,
  				   bool tx);
67c282c00   Johannes Berg   mac80211: move BA...
1205
  int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
53f73c09d   Johannes Berg   mac80211: avoid t...
1206
1207
  				    enum ieee80211_back_parties initiator,
  				    bool tx);
5d22c89b9   Johannes Berg   mac80211: remove ...
1208
1209
  void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid);
  void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid);
67c282c00   Johannes Berg   mac80211: move BA...
1210
1211
  void ieee80211_ba_session_work(struct work_struct *work);
  void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid);
2bff8ebf3   Christian Lamparter   mac80211: AMPDU r...
1212
  void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid);
849b79678   Johannes Berg   mac80211: further...
1213

39192c0bc   Johannes Berg   mac80211: move sp...
1214
1215
1216
1217
  /* Spectrum management */
  void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
  				       struct ieee80211_mgmt *mgmt,
  				       size_t len);
f2753ddba   Johannes Berg   mac80211: add har...
1218
1219
  /* Suspend/resume and hw reconfiguration */
  int ieee80211_reconfig(struct ieee80211_local *local);
84f6a01ce   Johannes Berg   mac80211: fix con...
1220
  void ieee80211_stop_device(struct ieee80211_local *local);
f2753ddba   Johannes Berg   mac80211: add har...
1221

827b1fb44   Johannes Berg   mac80211: resume ...
1222
  #ifdef CONFIG_PM
eecc48000   Johannes Berg   mac80211: add bas...
1223
1224
  int __ieee80211_suspend(struct ieee80211_hw *hw,
  			struct cfg80211_wowlan *wowlan);
f2753ddba   Johannes Berg   mac80211: add har...
1225
1226
1227
  
  static inline int __ieee80211_resume(struct ieee80211_hw *hw)
  {
85f72bc83   John W. Linville   mac80211: only ca...
1228
1229
1230
1231
1232
1233
  	struct ieee80211_local *local = hw_to_local(hw);
  
  	WARN(test_bit(SCAN_HW_SCANNING, &local->scanning),
  		"%s: resume with hardware scan still in progress
  ",
  		wiphy_name(hw->wiphy));
f2753ddba   Johannes Berg   mac80211: add har...
1234
1235
  	return ieee80211_reconfig(hw_to_local(hw));
  }
827b1fb44   Johannes Berg   mac80211: resume ...
1236
  #else
eecc48000   Johannes Berg   mac80211: add bas...
1237
1238
  static inline int __ieee80211_suspend(struct ieee80211_hw *hw,
  				      struct cfg80211_wowlan *wowlan)
827b1fb44   Johannes Berg   mac80211: resume ...
1239
1240
1241
  {
  	return 0;
  }
f2753ddba   Johannes Berg   mac80211: add har...
1242

827b1fb44   Johannes Berg   mac80211: resume ...
1243
1244
1245
1246
1247
  static inline int __ieee80211_resume(struct ieee80211_hw *hw)
  {
  	return 0;
  }
  #endif
665af4fc8   Bob Copeland   mac80211: add sus...
1248

c2d1560ad   Johannes Berg   [MAC80211]: intro...
1249
1250
  /* utility functions/constants */
  extern void *mac80211_wiphy_privid; /* for wiphy privid */
713647169   Ron Rindjunsky   mac80211: A-MPDU ...
1251
  u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len,
05c914fe3   Johannes Berg   mac80211: use nl8...
1252
  			enum nl80211_iftype type);
c2d1560ad   Johannes Berg   [MAC80211]: intro...
1253
1254
  int ieee80211_frame_duration(struct ieee80211_local *local, size_t len,
  			     int rate, int erp, int short_preamble);
f698d856f   Jasper Bryant-Greene   replace net_devic...
1255
  void mac80211_ev_michael_mic_failure(struct ieee80211_sub_if_data *sdata, int keyidx,
e6d6e3420   Johannes Berg   cfg80211: use pro...
1256
1257
  				     struct ieee80211_hdr *hdr, const u8 *tsc,
  				     gfp_t gfp);
5825fe100   Johannes Berg   mac80211: initial...
1258
  void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata);
ce662b44c   Johannes Berg   mac80211: send (Q...
1259
  void ieee80211_xmit(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb);
cf6bb79ad   Helmut Schaa   mac80211: Use app...
1260
1261
1262
1263
1264
1265
1266
1267
1268
  
  void ieee80211_tx_skb_tid(struct ieee80211_sub_if_data *sdata,
  			  struct sk_buff *skb, int tid);
  static void inline ieee80211_tx_skb(struct ieee80211_sub_if_data *sdata,
  				    struct sk_buff *skb)
  {
  	/* Send all internal mgmt frames on VO. Accordingly set TID to 7. */
  	ieee80211_tx_skb_tid(sdata, skb, 7);
  }
9c6bd7901   Johannes Berg   mac80211: reorder...
1269
1270
  void ieee802_11_parse_elems(u8 *start, size_t len,
  			    struct ieee802_11_elems *elems);
d91f36db5   Johannes Berg   mac80211: impleme...
1271
1272
1273
  u32 ieee802_11_parse_elems_crc(u8 *start, size_t len,
  			       struct ieee802_11_elems *elems,
  			       u64 filter, u32 crc);
881d948c2   Johannes Berg   wireless: restric...
1274
  u32 ieee80211_mandatory_rates(struct ieee80211_local *local,
96dd22ac0   Johannes Berg   mac80211: inform ...
1275
  			      enum ieee80211_band band);
f0706e828   Jiri Benc   [MAC80211]: Add m...
1276

520eb8207   Kalle Valo   mac80211: impleme...
1277
1278
1279
  void ieee80211_dynamic_ps_enable_work(struct work_struct *work);
  void ieee80211_dynamic_ps_disable_work(struct work_struct *work);
  void ieee80211_dynamic_ps_timer(unsigned long data);
a97b77b90   Vivek Natarajan   mac80211: Enhance...
1280
1281
1282
  void ieee80211_send_nullfunc(struct ieee80211_local *local,
  			     struct ieee80211_sub_if_data *sdata,
  			     int powersave);
3cf335d52   Kalle Valo   mac80211: decreas...
1283
1284
  void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata,
  			     struct ieee80211_hdr *hdr);
4e5ff3769   Felix Fietkau   mac80211: use nul...
1285
  void ieee80211_sta_tx_notify(struct ieee80211_sub_if_data *sdata,
04ac3c0ee   Felix Fietkau   mac80211: speed u...
1286
  			     struct ieee80211_hdr *hdr, bool ack);
1e4dcd012   Juuso Oikarinen   mac80211: Add sup...
1287
  void ieee80211_beacon_connection_loss_work(struct work_struct *work);
520eb8207   Kalle Valo   mac80211: impleme...
1288

ce7c9111a   Kalle Valo   mac80211: track m...
1289
1290
1291
1292
  void ieee80211_wake_queues_by_reason(struct ieee80211_hw *hw,
  				     enum queue_stop_reason reason);
  void ieee80211_stop_queues_by_reason(struct ieee80211_hw *hw,
  				     enum queue_stop_reason reason);
96f5e66e8   Johannes Berg   mac80211: fix agg...
1293
1294
1295
1296
  void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue,
  				    enum queue_stop_reason reason);
  void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue,
  				    enum queue_stop_reason reason);
8f77f3849   Johannes Berg   mac80211: do not ...
1297
1298
  void ieee80211_add_pending_skb(struct ieee80211_local *local,
  			       struct sk_buff *skb);
b0b97a8ad   Johannes Berg   mac80211: remove ...
1299
1300
1301
1302
1303
  void ieee80211_add_pending_skbs(struct ieee80211_local *local,
  				struct sk_buff_head *skbs);
  void ieee80211_add_pending_skbs_fn(struct ieee80211_local *local,
  				   struct sk_buff_head *skbs,
  				   void (*fn)(void *data), void *data);
ce7c9111a   Kalle Valo   mac80211: track m...
1304

469002983   Johannes Berg   mac80211: split I...
1305
1306
  void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,
  			 u16 transaction, u16 auth_alg,
fffd0934b   Johannes Berg   cfg80211: rework ...
1307
1308
  			 u8 *extra, size_t extra_len, const u8 *bssid,
  			 const u8 *key, u8 key_len, u8 key_idx);
de95a54b1   Johannes Berg   mac80211: pass al...
1309
  int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
4d36ec582   Johannes Berg   mac80211: split h...
1310
  			     const u8 *ie, size_t ie_len,
651b52254   Jouni Malinen   mac80211: Add DS ...
1311
1312
  			     enum ieee80211_band band, u32 rate_mask,
  			     u8 channel);
a619a4c0e   Juuso Oikarinen   mac80211: Add fun...
1313
  struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata,
85a237fe3   Johannes Berg   mac80211: impleme...
1314
  					  u8 *dst, u32 ratemask,
a619a4c0e   Juuso Oikarinen   mac80211: Add fun...
1315
  					  const u8 *ssid, size_t ssid_len,
a806c558e   Paul Stewart   mac80211: Drop DS...
1316
1317
  					  const u8 *ie, size_t ie_len,
  					  bool directed);
469002983   Johannes Berg   mac80211: split I...
1318
  void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst,
de95a54b1   Johannes Berg   mac80211: pass al...
1319
  			      const u8 *ssid, size_t ssid_len,
a806c558e   Paul Stewart   mac80211: Drop DS...
1320
  			      const u8 *ie, size_t ie_len,
aad14ceb4   Rajkumar Manoharan   mac80211: Send th...
1321
  			      u32 ratemask, bool directed, bool no_cck);
469002983   Johannes Berg   mac80211: split I...
1322
1323
1324
1325
1326
1327
1328
  
  void ieee80211_sta_def_wmm_params(struct ieee80211_sub_if_data *sdata,
  				  const size_t supp_rates_len,
  				  const u8 *supp_rates);
  u32 ieee80211_sta_get_rates(struct ieee80211_local *local,
  			    struct ieee802_11_elems *elems,
  			    enum ieee80211_band band);
0f78231bf   Johannes Berg   mac80211: enable ...
1329
1330
  int __ieee80211_request_smps(struct ieee80211_sub_if_data *sdata,
  			     enum ieee80211_smps_mode smps_mode);
025e6be22   Johannes Berg   mac80211: fix dea...
1331
  void ieee80211_recalc_smps(struct ieee80211_local *local);
469002983   Johannes Berg   mac80211: split I...
1332

8e664fb3f   Johannes Berg   mac80211: split u...
1333
1334
1335
  size_t ieee80211_ie_split(const u8 *ies, size_t ielen,
  			  const u8 *ids, int n_ids, size_t offset);
  size_t ieee80211_ie_split_vendor(const u8 *ies, size_t ielen, size_t offset);
ef96a8420   Ben Greear   mac80211: Support...
1336
  u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
42e7aa771   Alexander Simon   mac80211: Add HT ...
1337
1338
1339
1340
1341
  			      u16 cap);
  u8 *ieee80211_ie_build_ht_info(u8 *pos,
  				struct ieee80211_sta_ht_cap *ht_cap,
  				struct ieee80211_channel *channel,
  				enum nl80211_channel_type channel_type);
8e664fb3f   Johannes Berg   mac80211: split u...
1342

af6b63741   Johannes Berg   mac80211: general...
1343
1344
1345
1346
1347
1348
1349
  /* internal work items */
  void ieee80211_work_init(struct ieee80211_local *local);
  void ieee80211_add_work(struct ieee80211_work *wk);
  void free_work(struct ieee80211_work *wk);
  void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata);
  ieee80211_rx_result ieee80211_work_rx_mgmt(struct ieee80211_sub_if_data *sdata,
  					   struct sk_buff *skb);
b8bc4b0aa   Johannes Berg   mac80211: support...
1350
1351
1352
1353
1354
1355
  int ieee80211_wk_remain_on_channel(struct ieee80211_sub_if_data *sdata,
  				   struct ieee80211_channel *chan,
  				   enum nl80211_channel_type channel_type,
  				   unsigned int duration, u64 *cookie);
  int ieee80211_wk_cancel_remain_on_channel(
  	struct ieee80211_sub_if_data *sdata, u64 cookie);
af6b63741   Johannes Berg   mac80211: general...
1356

f444de05d   Johannes Berg   cfg80211/mac80211...
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
  /* channel management */
  enum ieee80211_chan_mode {
  	CHAN_MODE_UNDEFINED,
  	CHAN_MODE_HOPPING,
  	CHAN_MODE_FIXED,
  };
  
  enum ieee80211_chan_mode
  ieee80211_get_channel_mode(struct ieee80211_local *local,
  			   struct ieee80211_sub_if_data *ignore);
0aaffa9b9   Johannes Berg   mac80211: improve...
1367
1368
1369
  bool ieee80211_set_channel_type(struct ieee80211_local *local,
  				struct ieee80211_sub_if_data *sdata,
  				enum nl80211_channel_type chantype);
42e7aa771   Alexander Simon   mac80211: Add HT ...
1370
1371
  enum nl80211_channel_type
  ieee80211_ht_info_to_channel_type(struct ieee80211_ht_info *ht_info);
f444de05d   Johannes Berg   cfg80211/mac80211...
1372

f4ea83dd7   Johannes Berg   mac80211: rework ...
1373
  #ifdef CONFIG_MAC80211_NOINLINE
d9e8a70fa   Johannes Berg   mac80211: get rid...
1374
1375
1376
1377
  #define debug_noinline noinline
  #else
  #define debug_noinline
  #endif
f0706e828   Jiri Benc   [MAC80211]: Add m...
1378
  #endif /* IEEE80211_I_H */