aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/ieee80211_i.h
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r--net/mac80211/ieee80211_i.h260
1 files changed, 144 insertions, 116 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 68eb5052179a..588005c84a6d 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -24,7 +24,6 @@
24#include <linux/spinlock.h> 24#include <linux/spinlock.h>
25#include <linux/etherdevice.h> 25#include <linux/etherdevice.h>
26#include <net/cfg80211.h> 26#include <net/cfg80211.h>
27#include <net/iw_handler.h>
28#include <net/mac80211.h> 27#include <net/mac80211.h>
29#include "key.h" 28#include "key.h"
30#include "sta_info.h" 29#include "sta_info.h"
@@ -213,7 +212,9 @@ struct ieee80211_if_vlan {
213}; 212};
214 213
215struct mesh_stats { 214struct mesh_stats {
216 __u32 fwded_frames; /* Mesh forwarded frames */ 215 __u32 fwded_mcast; /* Mesh forwarded multicast frames */
216 __u32 fwded_unicast; /* Mesh forwarded unicast frames */
217 __u32 fwded_frames; /* Mesh total forwarded frames */
217 __u32 dropped_frames_ttl; /* Not transmitted since mesh_ttl == 0*/ 218 __u32 dropped_frames_ttl; /* Not transmitted since mesh_ttl == 0*/
218 __u32 dropped_frames_no_route; /* Not transmitted, no route found */ 219 __u32 dropped_frames_no_route; /* Not transmitted, no route found */
219 atomic_t estab_plinks; 220 atomic_t estab_plinks;
@@ -227,86 +228,81 @@ struct mesh_preq_queue {
227 u8 flags; 228 u8 flags;
228}; 229};
229 230
231enum ieee80211_mgd_state {
232 IEEE80211_MGD_STATE_IDLE,
233 IEEE80211_MGD_STATE_PROBE,
234 IEEE80211_MGD_STATE_AUTH,
235 IEEE80211_MGD_STATE_ASSOC,
236};
237
238struct ieee80211_mgd_work {
239 struct list_head list;
240 struct ieee80211_bss *bss;
241 int ie_len;
242 u8 prev_bssid[ETH_ALEN];
243 u8 ssid[IEEE80211_MAX_SSID_LEN];
244 u8 ssid_len;
245 unsigned long timeout;
246 enum ieee80211_mgd_state state;
247 u16 auth_alg, auth_transaction;
248
249 int tries;
250
251 u8 key[WLAN_KEY_LEN_WEP104];
252 u8 key_len, key_idx;
253
254 /* must be last */
255 u8 ie[0]; /* for auth or assoc frame, not probe */
256};
257
230/* flags used in struct ieee80211_if_managed.flags */ 258/* flags used in struct ieee80211_if_managed.flags */
231#define IEEE80211_STA_SSID_SET BIT(0) 259enum ieee80211_sta_flags {
232#define IEEE80211_STA_BSSID_SET BIT(1) 260 IEEE80211_STA_BEACON_POLL = BIT(0),
233#define IEEE80211_STA_PREV_BSSID_SET BIT(2) 261 IEEE80211_STA_CONNECTION_POLL = BIT(1),
234#define IEEE80211_STA_AUTHENTICATED BIT(3) 262 IEEE80211_STA_CONTROL_PORT = BIT(2),
235#define IEEE80211_STA_ASSOCIATED BIT(4) 263 IEEE80211_STA_WMM_ENABLED = BIT(3),
236#define IEEE80211_STA_PROBEREQ_POLL BIT(5) 264 IEEE80211_STA_DISABLE_11N = BIT(4),
237#define IEEE80211_STA_CREATE_IBSS BIT(6) 265 IEEE80211_STA_CSA_RECEIVED = BIT(5),
238#define IEEE80211_STA_CONTROL_PORT BIT(7) 266 IEEE80211_STA_MFP_ENABLED = BIT(6),
239#define IEEE80211_STA_WMM_ENABLED BIT(8) 267};
240/* hole at 9, please re-use */
241#define IEEE80211_STA_AUTO_SSID_SEL BIT(10)
242#define IEEE80211_STA_AUTO_BSSID_SEL BIT(11)
243#define IEEE80211_STA_AUTO_CHANNEL_SEL BIT(12)
244#define IEEE80211_STA_PRIVACY_INVOKED BIT(13)
245#define IEEE80211_STA_TKIP_WEP_USED BIT(14)
246#define IEEE80211_STA_CSA_RECEIVED BIT(15)
247#define IEEE80211_STA_MFP_ENABLED BIT(16)
248#define IEEE80211_STA_EXT_SME BIT(17)
249/* flags for MLME request */
250#define IEEE80211_STA_REQ_SCAN 0
251#define IEEE80211_STA_REQ_AUTH 1
252#define IEEE80211_STA_REQ_RUN 2
253 268
254/* bitfield of allowed auth algs */ 269/* flags for MLME request */
255#define IEEE80211_AUTH_ALG_OPEN BIT(0) 270enum ieee80211_sta_request {
256#define IEEE80211_AUTH_ALG_SHARED_KEY BIT(1) 271 IEEE80211_STA_REQ_SCAN,
257#define IEEE80211_AUTH_ALG_LEAP BIT(2) 272};
258#define IEEE80211_AUTH_ALG_FT BIT(3)
259 273
260struct ieee80211_if_managed { 274struct ieee80211_if_managed {
261 struct timer_list timer; 275 struct timer_list timer;
276 struct timer_list conn_mon_timer;
277 struct timer_list bcn_mon_timer;
262 struct timer_list chswitch_timer; 278 struct timer_list chswitch_timer;
263 struct work_struct work; 279 struct work_struct work;
280 struct work_struct monitor_work;
264 struct work_struct chswitch_work; 281 struct work_struct chswitch_work;
265 struct work_struct beacon_loss_work; 282 struct work_struct beacon_loss_work;
266 283
267 u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN]; 284 unsigned long probe_timeout;
285 int probe_send_count;
268 286
269 u8 ssid[IEEE80211_MAX_SSID_LEN]; 287 struct mutex mtx;
270 size_t ssid_len; 288 struct ieee80211_bss *associated;
289 struct ieee80211_mgd_work *old_associate_work;
290 struct list_head work_list;
271 291
272 enum { 292 u8 bssid[ETH_ALEN];
273 IEEE80211_STA_MLME_DISABLED,
274 IEEE80211_STA_MLME_DIRECT_PROBE,
275 IEEE80211_STA_MLME_AUTHENTICATE,
276 IEEE80211_STA_MLME_ASSOCIATE,
277 IEEE80211_STA_MLME_ASSOCIATED,
278 } state;
279 293
280 u16 aid; 294 u16 aid;
281 u16 ap_capab, capab; 295 u16 capab;
282 u8 *extra_ie; /* to be added to the end of AssocReq */
283 size_t extra_ie_len;
284
285 /* The last AssocReq/Resp IEs */
286 u8 *assocreq_ies, *assocresp_ies;
287 size_t assocreq_ies_len, assocresp_ies_len;
288 296
289 struct sk_buff_head skb_queue; 297 struct sk_buff_head skb_queue;
290 298
291 int assoc_scan_tries; /* number of scans done pre-association */
292 int direct_probe_tries; /* retries for direct probes */
293 int auth_tries; /* retries for auth req */
294 int assoc_tries; /* retries for assoc req */
295
296 unsigned long timers_running; /* used for quiesce/restart */ 299 unsigned long timers_running; /* used for quiesce/restart */
297 bool powersave; /* powersave requested for this iface */ 300 bool powersave; /* powersave requested for this iface */
298 301
299 unsigned long request; 302 unsigned long request;
300 303
301 unsigned long last_probe;
302 unsigned long last_beacon;
303
304 unsigned int flags; 304 unsigned int flags;
305 305
306 unsigned int auth_algs; /* bitfield of allowed auth algs */
307 int auth_alg; /* currently used IEEE 802.11 authentication algorithm */
308 int auth_transaction;
309
310 u32 beacon_crc; 306 u32 beacon_crc;
311 307
312 enum { 308 enum {
@@ -316,10 +312,6 @@ struct ieee80211_if_managed {
316 } mfp; /* management frame protection */ 312 } mfp; /* management frame protection */
317 313
318 int wmm_last_param_set; 314 int wmm_last_param_set;
319
320 /* Extra IE data for management frames */
321 u8 *sme_auth_ie;
322 size_t sme_auth_ie_len;
323}; 315};
324 316
325enum ieee80211_ibss_request { 317enum ieee80211_ibss_request {
@@ -339,6 +331,7 @@ struct ieee80211_if_ibss {
339 331
340 bool fixed_bssid; 332 bool fixed_bssid;
341 bool fixed_channel; 333 bool fixed_channel;
334 bool privacy;
342 335
343 u8 bssid[ETH_ALEN]; 336 u8 bssid[ETH_ALEN];
344 u8 ssid[IEEE80211_MAX_SSID_LEN]; 337 u8 ssid[IEEE80211_MAX_SSID_LEN];
@@ -364,7 +357,7 @@ struct ieee80211_if_mesh {
364 357
365 unsigned long timers_running; 358 unsigned long timers_running;
366 359
367 bool housekeeping; 360 unsigned long wrkq_flags;
368 361
369 u8 mesh_id[IEEE80211_MAX_MESH_ID_LEN]; 362 u8 mesh_id[IEEE80211_MAX_MESH_ID_LEN];
370 size_t mesh_id_len; 363 size_t mesh_id_len;
@@ -374,6 +367,10 @@ struct ieee80211_if_mesh {
374 u8 mesh_pm_id[4]; 367 u8 mesh_pm_id[4];
375 /* Congestion Control Mode Identifier */ 368 /* Congestion Control Mode Identifier */
376 u8 mesh_cc_id[4]; 369 u8 mesh_cc_id[4];
370 /* Synchronization Protocol Identifier */
371 u8 mesh_sp_id[4];
372 /* Authentication Protocol Identifier */
373 u8 mesh_auth_id[4];
377 /* Local mesh Destination Sequence Number */ 374 /* Local mesh Destination Sequence Number */
378 u32 dsn; 375 u32 dsn;
379 /* Last used PREQ ID */ 376 /* Last used PREQ ID */
@@ -478,20 +475,9 @@ struct ieee80211_sub_if_data {
478 union { 475 union {
479 struct { 476 struct {
480 struct dentry *drop_unencrypted; 477 struct dentry *drop_unencrypted;
481 struct dentry *state;
482 struct dentry *bssid; 478 struct dentry *bssid;
483 struct dentry *prev_bssid;
484 struct dentry *ssid_len;
485 struct dentry *aid; 479 struct dentry *aid;
486 struct dentry *ap_capab;
487 struct dentry *capab; 480 struct dentry *capab;
488 struct dentry *extra_ie_len;
489 struct dentry *auth_tries;
490 struct dentry *assoc_tries;
491 struct dentry *auth_algs;
492 struct dentry *auth_alg;
493 struct dentry *auth_transaction;
494 struct dentry *flags;
495 struct dentry *force_unicast_rateidx; 481 struct dentry *force_unicast_rateidx;
496 struct dentry *max_ratectrl_rateidx; 482 struct dentry *max_ratectrl_rateidx;
497 } sta; 483 } sta;
@@ -526,6 +512,8 @@ struct ieee80211_sub_if_data {
526#ifdef CONFIG_MAC80211_MESH 512#ifdef CONFIG_MAC80211_MESH
527 struct dentry *mesh_stats_dir; 513 struct dentry *mesh_stats_dir;
528 struct { 514 struct {
515 struct dentry *fwded_mcast;
516 struct dentry *fwded_unicast;
529 struct dentry *fwded_frames; 517 struct dentry *fwded_frames;
530 struct dentry *dropped_frames_ttl; 518 struct dentry *dropped_frames_ttl;
531 struct dentry *dropped_frames_no_route; 519 struct dentry *dropped_frames_no_route;
@@ -588,12 +576,44 @@ enum queue_stop_reason {
588 IEEE80211_QUEUE_STOP_REASON_CSA, 576 IEEE80211_QUEUE_STOP_REASON_CSA,
589 IEEE80211_QUEUE_STOP_REASON_AGGREGATION, 577 IEEE80211_QUEUE_STOP_REASON_AGGREGATION,
590 IEEE80211_QUEUE_STOP_REASON_SUSPEND, 578 IEEE80211_QUEUE_STOP_REASON_SUSPEND,
591 IEEE80211_QUEUE_STOP_REASON_PENDING,
592 IEEE80211_QUEUE_STOP_REASON_SKB_ADD, 579 IEEE80211_QUEUE_STOP_REASON_SKB_ADD,
593}; 580};
594 581
595struct ieee80211_master_priv { 582/**
596 struct ieee80211_local *local; 583 * mac80211 scan flags - currently active scan mode
584 *
585 * @SCAN_SW_SCANNING: We're currently in the process of scanning but may as
586 * well be on the operating channel
587 * @SCAN_HW_SCANNING: The hardware is scanning for us, we have no way to
588 * determine if we are on the operating channel or not
589 * @SCAN_OFF_CHANNEL: We're off our operating channel for scanning,
590 * gets only set in conjunction with SCAN_SW_SCANNING
591 */
592enum {
593 SCAN_SW_SCANNING,
594 SCAN_HW_SCANNING,
595 SCAN_OFF_CHANNEL,
596};
597
598/**
599 * enum mac80211_scan_state - scan state machine states
600 *
601 * @SCAN_DECISION: Main entry point to the scan state machine, this state
602 * determines if we should keep on scanning or switch back to the
603 * operating channel
604 * @SCAN_SET_CHANNEL: Set the next channel to be scanned
605 * @SCAN_SEND_PROBE: Send probe requests and wait for probe responses
606 * @SCAN_LEAVE_OPER_CHANNEL: Leave the operating channel, notify the AP
607 * about us leaving the channel and stop all associated STA interfaces
608 * @SCAN_ENTER_OPER_CHANNEL: Enter the operating channel again, notify the
609 * AP about us being back and restart all associated STA interfaces
610 */
611enum mac80211_scan_state {
612 SCAN_DECISION,
613 SCAN_SET_CHANNEL,
614 SCAN_SEND_PROBE,
615 SCAN_LEAVE_OPER_CHANNEL,
616 SCAN_ENTER_OPER_CHANNEL,
597}; 617};
598 618
599struct ieee80211_local { 619struct ieee80211_local {
@@ -604,17 +624,33 @@ struct ieee80211_local {
604 624
605 const struct ieee80211_ops *ops; 625 const struct ieee80211_ops *ops;
606 626
627 /*
628 * private workqueue to mac80211. mac80211 makes this accessible
629 * via ieee80211_queue_work()
630 */
631 struct workqueue_struct *workqueue;
632
607 unsigned long queue_stop_reasons[IEEE80211_MAX_QUEUES]; 633 unsigned long queue_stop_reasons[IEEE80211_MAX_QUEUES];
608 /* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */ 634 /* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */
609 spinlock_t queue_stop_reason_lock; 635 spinlock_t queue_stop_reason_lock;
610 636
611 struct net_device *mdev; /* wmaster# - "master" 802.11 device */
612 int open_count; 637 int open_count;
613 int monitors, cooked_mntrs; 638 int monitors, cooked_mntrs;
614 /* number of interfaces with corresponding FIF_ flags */ 639 /* number of interfaces with corresponding FIF_ flags */
615 int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss; 640 int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll;
616 unsigned int filter_flags; /* FIF_* */ 641 unsigned int filter_flags; /* FIF_* */
617 struct iw_statistics wstats; 642 struct iw_statistics wstats;
643
644 /* protects the aggregated multicast list and filter calls */
645 spinlock_t filter_lock;
646
647 /* used for uploading changed mc list */
648 struct work_struct reconfig_filter;
649
650 /* aggregated multicast list */
651 struct dev_addr_list *mc_list;
652 int mc_count;
653
618 bool tim_in_locked_section; /* see ieee80211_beacon_get() */ 654 bool tim_in_locked_section; /* see ieee80211_beacon_get() */
619 655
620 /* 656 /*
@@ -631,6 +667,9 @@ struct ieee80211_local {
631 */ 667 */
632 bool quiescing; 668 bool quiescing;
633 669
670 /* device is started */
671 bool started;
672
634 int tx_headroom; /* required headroom for hardware/radiotap */ 673 int tx_headroom; /* required headroom for hardware/radiotap */
635 674
636 /* Tasklet and skb queue to process calls from IRQ mode. All frames 675 /* Tasklet and skb queue to process calls from IRQ mode. All frames
@@ -653,6 +692,7 @@ struct ieee80211_local {
653 struct list_head sta_list; 692 struct list_head sta_list;
654 struct sta_info *sta_hash[STA_HASH_SIZE]; 693 struct sta_info *sta_hash[STA_HASH_SIZE];
655 struct timer_list sta_cleanup; 694 struct timer_list sta_cleanup;
695 int sta_generation;
656 696
657 struct sk_buff_head pending[IEEE80211_MAX_QUEUES]; 697 struct sk_buff_head pending[IEEE80211_MAX_QUEUES];
658 struct tasklet_struct tx_pending_tasklet; 698 struct tasklet_struct tx_pending_tasklet;
@@ -687,9 +727,9 @@ struct ieee80211_local {
687 727
688 /* Scanning and BSS list */ 728 /* Scanning and BSS list */
689 struct mutex scan_mtx; 729 struct mutex scan_mtx;
690 bool sw_scanning, hw_scanning; 730 unsigned long scanning;
691 struct cfg80211_ssid scan_ssid; 731 struct cfg80211_ssid scan_ssid;
692 struct cfg80211_scan_request int_scan_req; 732 struct cfg80211_scan_request *int_scan_req;
693 struct cfg80211_scan_request *scan_req; 733 struct cfg80211_scan_request *scan_req;
694 struct ieee80211_channel *scan_channel; 734 struct ieee80211_channel *scan_channel;
695 const u8 *orig_ies; 735 const u8 *orig_ies;
@@ -697,7 +737,7 @@ struct ieee80211_local {
697 int scan_channel_idx; 737 int scan_channel_idx;
698 int scan_ies_len; 738 int scan_ies_len;
699 739
700 enum { SCAN_SET_CHANNEL, SCAN_SEND_PROBE } scan_state; 740 enum mac80211_scan_state next_scan_state;
701 struct delayed_work scan_work; 741 struct delayed_work scan_work;
702 struct ieee80211_sub_if_data *scan_sdata; 742 struct ieee80211_sub_if_data *scan_sdata;
703 enum nl80211_channel_type oper_channel_type; 743 enum nl80211_channel_type oper_channel_type;
@@ -834,10 +874,6 @@ struct ieee80211_local {
834static inline struct ieee80211_sub_if_data * 874static inline struct ieee80211_sub_if_data *
835IEEE80211_DEV_TO_SUB_IF(struct net_device *dev) 875IEEE80211_DEV_TO_SUB_IF(struct net_device *dev)
836{ 876{
837 struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
838
839 BUG_ON(!local || local->mdev == dev);
840
841 return netdev_priv(dev); 877 return netdev_priv(dev);
842} 878}
843 879
@@ -937,21 +973,20 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
937void ieee80211_configure_filter(struct ieee80211_local *local); 973void ieee80211_configure_filter(struct ieee80211_local *local);
938u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata); 974u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata);
939 975
940/* wireless extensions */
941extern const struct iw_handler_def ieee80211_iw_handler_def;
942
943/* STA code */ 976/* STA code */
944void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata); 977void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata);
978int ieee80211_mgd_auth(struct ieee80211_sub_if_data *sdata,
979 struct cfg80211_auth_request *req);
980int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
981 struct cfg80211_assoc_request *req);
982int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
983 struct cfg80211_deauth_request *req,
984 void *cookie);
985int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata,
986 struct cfg80211_disassoc_request *req,
987 void *cookie);
945ieee80211_rx_result ieee80211_sta_rx_mgmt(struct ieee80211_sub_if_data *sdata, 988ieee80211_rx_result ieee80211_sta_rx_mgmt(struct ieee80211_sub_if_data *sdata,
946 struct sk_buff *skb, 989 struct sk_buff *skb);
947 struct ieee80211_rx_status *rx_status);
948int ieee80211_sta_commit(struct ieee80211_sub_if_data *sdata);
949int ieee80211_sta_set_ssid(struct ieee80211_sub_if_data *sdata, char *ssid, size_t len);
950int ieee80211_sta_get_ssid(struct ieee80211_sub_if_data *sdata, char *ssid, size_t *len);
951int ieee80211_sta_set_bssid(struct ieee80211_sub_if_data *sdata, u8 *bssid);
952void ieee80211_sta_req_auth(struct ieee80211_sub_if_data *sdata);
953int ieee80211_sta_deauthenticate(struct ieee80211_sub_if_data *sdata, u16 reason);
954int ieee80211_sta_disassociate(struct ieee80211_sub_if_data *sdata, u16 reason);
955void ieee80211_send_pspoll(struct ieee80211_local *local, 990void ieee80211_send_pspoll(struct ieee80211_local *local,
956 struct ieee80211_sub_if_data *sdata); 991 struct ieee80211_sub_if_data *sdata);
957void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency); 992void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency);
@@ -967,8 +1002,7 @@ void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata);
967void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local); 1002void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local);
968void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata); 1003void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata);
969ieee80211_rx_result 1004ieee80211_rx_result
970ieee80211_ibss_rx_mgmt(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb, 1005ieee80211_ibss_rx_mgmt(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb);
971 struct ieee80211_rx_status *rx_status);
972struct sta_info *ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, 1006struct sta_info *ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata,
973 u8 *bssid, u8 *addr, u32 supp_rates); 1007 u8 *bssid, u8 *addr, u32 supp_rates);
974int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata, 1008int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
@@ -983,16 +1017,9 @@ int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
983 const u8 *ssid, u8 ssid_len); 1017 const u8 *ssid, u8 ssid_len);
984int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata, 1018int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
985 struct cfg80211_scan_request *req); 1019 struct cfg80211_scan_request *req);
986int ieee80211_scan_results(struct ieee80211_local *local,
987 struct iw_request_info *info,
988 char *buf, size_t len);
989void ieee80211_scan_cancel(struct ieee80211_local *local); 1020void ieee80211_scan_cancel(struct ieee80211_local *local);
990ieee80211_rx_result 1021ieee80211_rx_result
991ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, 1022ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb);
992 struct sk_buff *skb,
993 struct ieee80211_rx_status *rx_status);
994int ieee80211_sta_set_extra_ie(struct ieee80211_sub_if_data *sdata,
995 const char *ie, size_t len);
996 1023
997void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local); 1024void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local);
998struct ieee80211_bss * 1025struct ieee80211_bss *
@@ -1008,8 +1035,6 @@ ieee80211_rx_bss_get(struct ieee80211_local *local, u8 *bssid, int freq,
1008 u8 *ssid, u8 ssid_len); 1035 u8 *ssid, u8 ssid_len);
1009void ieee80211_rx_bss_put(struct ieee80211_local *local, 1036void ieee80211_rx_bss_put(struct ieee80211_local *local,
1010 struct ieee80211_bss *bss); 1037 struct ieee80211_bss *bss);
1011void ieee80211_rx_bss_remove(struct ieee80211_sub_if_data *sdata, u8 *bssid,
1012 int freq, u8 *ssid, u8 ssid_len);
1013 1038
1014/* interface handling */ 1039/* interface handling */
1015int ieee80211_if_add(struct ieee80211_local *local, const char *name, 1040int ieee80211_if_add(struct ieee80211_local *local, const char *name,
@@ -1025,9 +1050,10 @@ void ieee80211_recalc_idle(struct ieee80211_local *local);
1025/* tx handling */ 1050/* tx handling */
1026void ieee80211_clear_tx_pending(struct ieee80211_local *local); 1051void ieee80211_clear_tx_pending(struct ieee80211_local *local);
1027void ieee80211_tx_pending(unsigned long data); 1052void ieee80211_tx_pending(unsigned long data);
1028int ieee80211_master_start_xmit(struct sk_buff *skb, struct net_device *dev); 1053netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
1029int ieee80211_monitor_start_xmit(struct sk_buff *skb, struct net_device *dev); 1054 struct net_device *dev);
1030int ieee80211_subif_start_xmit(struct sk_buff *skb, struct net_device *dev); 1055netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
1056 struct net_device *dev);
1031 1057
1032/* HT */ 1058/* HT */
1033void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_supported_band *sband, 1059void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_supported_band *sband,
@@ -1065,6 +1091,7 @@ void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
1065 1091
1066/* Suspend/resume and hw reconfiguration */ 1092/* Suspend/resume and hw reconfiguration */
1067int ieee80211_reconfig(struct ieee80211_local *local); 1093int ieee80211_reconfig(struct ieee80211_local *local);
1094void ieee80211_stop_device(struct ieee80211_local *local);
1068 1095
1069#ifdef CONFIG_PM 1096#ifdef CONFIG_PM
1070int __ieee80211_suspend(struct ieee80211_hw *hw); 1097int __ieee80211_suspend(struct ieee80211_hw *hw);
@@ -1092,7 +1119,8 @@ u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len,
1092int ieee80211_frame_duration(struct ieee80211_local *local, size_t len, 1119int ieee80211_frame_duration(struct ieee80211_local *local, size_t len,
1093 int rate, int erp, int short_preamble); 1120 int rate, int erp, int short_preamble);
1094void mac80211_ev_michael_mic_failure(struct ieee80211_sub_if_data *sdata, int keyidx, 1121void mac80211_ev_michael_mic_failure(struct ieee80211_sub_if_data *sdata, int keyidx,
1095 struct ieee80211_hdr *hdr, const u8 *tsc); 1122 struct ieee80211_hdr *hdr, const u8 *tsc,
1123 gfp_t gfp);
1096void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata); 1124void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata);
1097void ieee80211_tx_skb(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb, 1125void ieee80211_tx_skb(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb,
1098 int encrypt); 1126 int encrypt);
@@ -1129,8 +1157,8 @@ int ieee80211_add_pending_skbs(struct ieee80211_local *local,
1129 1157
1130void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, 1158void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,
1131 u16 transaction, u16 auth_alg, 1159 u16 transaction, u16 auth_alg,
1132 u8 *extra, size_t extra_len, 1160 u8 *extra, size_t extra_len, const u8 *bssid,
1133 const u8 *bssid, int encrypt); 1161 const u8 *key, u8 key_len, u8 key_idx);
1134int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, 1162int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
1135 const u8 *ie, size_t ie_len); 1163 const u8 *ie, size_t ie_len);
1136void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, 1164void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst,