Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.2 1372 lines 42 kB view raw
1/* 2 * Copyright 2002-2005, Instant802 Networks, Inc. 3 * Copyright 2005, Devicescape Software, Inc. 4 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 5 * Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 */ 11 12#ifndef IEEE80211_I_H 13#define IEEE80211_I_H 14 15#include <linux/kernel.h> 16#include <linux/device.h> 17#include <linux/if_ether.h> 18#include <linux/interrupt.h> 19#include <linux/list.h> 20#include <linux/netdevice.h> 21#include <linux/skbuff.h> 22#include <linux/workqueue.h> 23#include <linux/types.h> 24#include <linux/spinlock.h> 25#include <linux/etherdevice.h> 26#include <linux/leds.h> 27#include <net/ieee80211_radiotap.h> 28#include <net/cfg80211.h> 29#include <net/mac80211.h> 30#include "key.h" 31#include "sta_info.h" 32 33struct ieee80211_local; 34 35/* Maximum number of broadcast/multicast frames to buffer when some of the 36 * associated stations are using power saving. */ 37#define AP_MAX_BC_BUFFER 128 38 39/* Maximum number of frames buffered to all STAs, including multicast frames. 40 * Note: increasing this limit increases the potential memory requirement. Each 41 * frame can be up to about 2 kB long. */ 42#define TOTAL_MAX_TX_BUFFER 512 43 44/* Required encryption head and tailroom */ 45#define IEEE80211_ENCRYPT_HEADROOM 8 46#define IEEE80211_ENCRYPT_TAILROOM 18 47 48/* IEEE 802.11 (Ch. 9.5 Defragmentation) requires support for concurrent 49 * reception of at least three fragmented frames. This limit can be increased 50 * by changing this define, at the cost of slower frame reassembly and 51 * increased memory use (about 2 kB of RAM per entry). */ 52#define IEEE80211_FRAGMENT_MAX 4 53 54#define TU_TO_EXP_TIME(x) (jiffies + usecs_to_jiffies((x) * 1024)) 55 56#define IEEE80211_DEFAULT_UAPSD_QUEUES \ 57 (IEEE80211_WMM_IE_STA_QOSINFO_AC_BK | \ 58 IEEE80211_WMM_IE_STA_QOSINFO_AC_BE | \ 59 IEEE80211_WMM_IE_STA_QOSINFO_AC_VI | \ 60 IEEE80211_WMM_IE_STA_QOSINFO_AC_VO) 61 62#define IEEE80211_DEFAULT_MAX_SP_LEN \ 63 IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL 64 65struct ieee80211_fragment_entry { 66 unsigned long first_frag_time; 67 unsigned int seq; 68 unsigned int rx_queue; 69 unsigned int last_frag; 70 unsigned int extra_len; 71 struct sk_buff_head skb_list; 72 int ccmp; /* Whether fragments were encrypted with CCMP */ 73 u8 last_pn[6]; /* PN of the last fragment if CCMP was used */ 74}; 75 76 77struct ieee80211_bss { 78 /* don't want to look up all the time */ 79 size_t ssid_len; 80 u8 ssid[IEEE80211_MAX_SSID_LEN]; 81 82 u8 dtim_period; 83 84 bool wmm_used; 85 bool uapsd_supported; 86 87 unsigned long last_probe_resp; 88 89#ifdef CONFIG_MAC80211_MESH 90 u8 *mesh_id; 91 size_t mesh_id_len; 92 u8 *mesh_cfg; 93#endif 94 95#define IEEE80211_MAX_SUPP_RATES 32 96 u8 supp_rates[IEEE80211_MAX_SUPP_RATES]; 97 size_t supp_rates_len; 98 99 /* 100 * During association, we save an ERP value from a probe response so 101 * that we can feed ERP info to the driver when handling the 102 * association completes. these fields probably won't be up-to-date 103 * otherwise, you probably don't want to use them. 104 */ 105 bool has_erp_value; 106 u8 erp_value; 107}; 108 109static inline u8 *bss_mesh_cfg(struct ieee80211_bss *bss) 110{ 111#ifdef CONFIG_MAC80211_MESH 112 return bss->mesh_cfg; 113#endif 114 return NULL; 115} 116 117static inline u8 *bss_mesh_id(struct ieee80211_bss *bss) 118{ 119#ifdef CONFIG_MAC80211_MESH 120 return bss->mesh_id; 121#endif 122 return NULL; 123} 124 125static inline u8 bss_mesh_id_len(struct ieee80211_bss *bss) 126{ 127#ifdef CONFIG_MAC80211_MESH 128 return bss->mesh_id_len; 129#endif 130 return 0; 131} 132 133 134typedef unsigned __bitwise__ ieee80211_tx_result; 135#define TX_CONTINUE ((__force ieee80211_tx_result) 0u) 136#define TX_DROP ((__force ieee80211_tx_result) 1u) 137#define TX_QUEUED ((__force ieee80211_tx_result) 2u) 138 139#define IEEE80211_TX_UNICAST BIT(1) 140#define IEEE80211_TX_PS_BUFFERED BIT(2) 141 142struct ieee80211_tx_data { 143 struct sk_buff *skb; 144 struct ieee80211_local *local; 145 struct ieee80211_sub_if_data *sdata; 146 struct sta_info *sta; 147 struct ieee80211_key *key; 148 149 struct ieee80211_channel *channel; 150 151 unsigned int flags; 152}; 153 154 155typedef unsigned __bitwise__ ieee80211_rx_result; 156#define RX_CONTINUE ((__force ieee80211_rx_result) 0u) 157#define RX_DROP_UNUSABLE ((__force ieee80211_rx_result) 1u) 158#define RX_DROP_MONITOR ((__force ieee80211_rx_result) 2u) 159#define RX_QUEUED ((__force ieee80211_rx_result) 3u) 160 161/** 162 * enum ieee80211_packet_rx_flags - packet RX flags 163 * @IEEE80211_RX_RA_MATCH: frame is destined to interface currently processed 164 * (incl. multicast frames) 165 * @IEEE80211_RX_IN_SCAN: received while scanning 166 * @IEEE80211_RX_FRAGMENTED: fragmented frame 167 * @IEEE80211_RX_AMSDU: a-MSDU packet 168 * @IEEE80211_RX_MALFORMED_ACTION_FRM: action frame is malformed 169 * @IEEE80211_RX_DEFERRED_RELEASE: frame was subjected to receive reordering 170 * 171 * These are per-frame flags that are attached to a frame in the 172 * @rx_flags field of &struct ieee80211_rx_status. 173 */ 174enum ieee80211_packet_rx_flags { 175 IEEE80211_RX_IN_SCAN = BIT(0), 176 IEEE80211_RX_RA_MATCH = BIT(1), 177 IEEE80211_RX_FRAGMENTED = BIT(2), 178 IEEE80211_RX_AMSDU = BIT(3), 179 IEEE80211_RX_MALFORMED_ACTION_FRM = BIT(4), 180 IEEE80211_RX_DEFERRED_RELEASE = BIT(5), 181}; 182 183/** 184 * enum ieee80211_rx_flags - RX data flags 185 * 186 * @IEEE80211_RX_CMNTR: received on cooked monitor already 187 * 188 * These flags are used across handling multiple interfaces 189 * for a single frame. 190 */ 191enum ieee80211_rx_flags { 192 IEEE80211_RX_CMNTR = BIT(0), 193}; 194 195struct ieee80211_rx_data { 196 struct sk_buff *skb; 197 struct ieee80211_local *local; 198 struct ieee80211_sub_if_data *sdata; 199 struct sta_info *sta; 200 struct ieee80211_key *key; 201 202 unsigned int flags; 203 204 /* 205 * Index into sequence numbers array, 0..16 206 * since the last (16) is used for non-QoS, 207 * will be 16 on non-QoS frames. 208 */ 209 int seqno_idx; 210 211 /* 212 * Index into the security IV/PN arrays, 0..16 213 * since the last (16) is used for CCMP-encrypted 214 * management frames, will be set to 16 on mgmt 215 * frames and 0 on non-QoS frames. 216 */ 217 int security_idx; 218 219 u32 tkip_iv32; 220 u16 tkip_iv16; 221}; 222 223struct beacon_data { 224 u8 *head, *tail; 225 int head_len, tail_len; 226 int dtim_period; 227}; 228 229struct ieee80211_if_ap { 230 struct beacon_data __rcu *beacon; 231 232 struct list_head vlans; 233 234 /* yes, this looks ugly, but guarantees that we can later use 235 * bitmap_empty :) 236 * NB: don't touch this bitmap, use sta_info_{set,clear}_tim_bit */ 237 u8 tim[sizeof(unsigned long) * BITS_TO_LONGS(IEEE80211_MAX_AID + 1)]; 238 struct sk_buff_head ps_bc_buf; 239 atomic_t num_sta_ps; /* number of stations in PS mode */ 240 int dtim_count; 241 bool dtim_bc_mc; 242}; 243 244struct ieee80211_if_wds { 245 struct sta_info *sta; 246 u8 remote_addr[ETH_ALEN]; 247}; 248 249struct ieee80211_if_vlan { 250 struct list_head list; 251 252 /* used for all tx if the VLAN is configured to 4-addr mode */ 253 struct sta_info __rcu *sta; 254}; 255 256struct mesh_stats { 257 __u32 fwded_mcast; /* Mesh forwarded multicast frames */ 258 __u32 fwded_unicast; /* Mesh forwarded unicast frames */ 259 __u32 fwded_frames; /* Mesh total forwarded frames */ 260 __u32 dropped_frames_ttl; /* Not transmitted since mesh_ttl == 0*/ 261 __u32 dropped_frames_no_route; /* Not transmitted, no route found */ 262 __u32 dropped_frames_congestion;/* Not forwarded due to congestion */ 263 atomic_t estab_plinks; 264}; 265 266#define PREQ_Q_F_START 0x1 267#define PREQ_Q_F_REFRESH 0x2 268struct mesh_preq_queue { 269 struct list_head list; 270 u8 dst[ETH_ALEN]; 271 u8 flags; 272}; 273 274enum ieee80211_work_type { 275 IEEE80211_WORK_ABORT, 276 IEEE80211_WORK_DIRECT_PROBE, 277 IEEE80211_WORK_AUTH, 278 IEEE80211_WORK_ASSOC_BEACON_WAIT, 279 IEEE80211_WORK_ASSOC, 280 IEEE80211_WORK_REMAIN_ON_CHANNEL, 281 IEEE80211_WORK_OFFCHANNEL_TX, 282}; 283 284/** 285 * enum work_done_result - indicates what to do after work was done 286 * 287 * @WORK_DONE_DESTROY: This work item is no longer needed, destroy. 288 * @WORK_DONE_REQUEUE: This work item was reset to be reused, and 289 * should be requeued. 290 */ 291enum work_done_result { 292 WORK_DONE_DESTROY, 293 WORK_DONE_REQUEUE, 294}; 295 296struct ieee80211_work { 297 struct list_head list; 298 299 struct rcu_head rcu_head; 300 301 struct ieee80211_sub_if_data *sdata; 302 303 enum work_done_result (*done)(struct ieee80211_work *wk, 304 struct sk_buff *skb); 305 306 struct ieee80211_channel *chan; 307 enum nl80211_channel_type chan_type; 308 309 unsigned long timeout; 310 enum ieee80211_work_type type; 311 312 u8 filter_ta[ETH_ALEN]; 313 314 bool started; 315 316 union { 317 struct { 318 int tries; 319 u16 algorithm, transaction; 320 u8 ssid[IEEE80211_MAX_SSID_LEN]; 321 u8 ssid_len; 322 u8 key[WLAN_KEY_LEN_WEP104]; 323 u8 key_len, key_idx; 324 bool privacy; 325 bool synced; 326 } probe_auth; 327 struct { 328 struct cfg80211_bss *bss; 329 const u8 *supp_rates; 330 const u8 *ht_information_ie; 331 enum ieee80211_smps_mode smps; 332 int tries; 333 u16 capability; 334 u8 prev_bssid[ETH_ALEN]; 335 u8 ssid[IEEE80211_MAX_SSID_LEN]; 336 u8 ssid_len; 337 u8 supp_rates_len; 338 bool wmm_used, use_11n, uapsd_used; 339 bool synced; 340 } assoc; 341 struct { 342 u32 duration; 343 } remain; 344 struct { 345 struct sk_buff *frame; 346 u32 wait; 347 bool status; 348 } offchan_tx; 349 }; 350 351 int ie_len; 352 /* must be last */ 353 u8 ie[0]; 354}; 355 356/* flags used in struct ieee80211_if_managed.flags */ 357enum ieee80211_sta_flags { 358 IEEE80211_STA_BEACON_POLL = BIT(0), 359 IEEE80211_STA_CONNECTION_POLL = BIT(1), 360 IEEE80211_STA_CONTROL_PORT = BIT(2), 361 IEEE80211_STA_DISABLE_11N = BIT(4), 362 IEEE80211_STA_CSA_RECEIVED = BIT(5), 363 IEEE80211_STA_MFP_ENABLED = BIT(6), 364 IEEE80211_STA_UAPSD_ENABLED = BIT(7), 365 IEEE80211_STA_NULLFUNC_ACKED = BIT(8), 366 IEEE80211_STA_RESET_SIGNAL_AVE = BIT(9), 367}; 368 369struct ieee80211_if_managed { 370 struct timer_list timer; 371 struct timer_list conn_mon_timer; 372 struct timer_list bcn_mon_timer; 373 struct timer_list chswitch_timer; 374 struct work_struct monitor_work; 375 struct work_struct chswitch_work; 376 struct work_struct beacon_connection_loss_work; 377 378 unsigned long beacon_timeout; 379 unsigned long probe_timeout; 380 int probe_send_count; 381 bool nullfunc_failed; 382 383 struct mutex mtx; 384 struct cfg80211_bss *associated; 385 386 u8 bssid[ETH_ALEN]; 387 388 u16 aid; 389 390 unsigned long timers_running; /* used for quiesce/restart */ 391 bool powersave; /* powersave requested for this iface */ 392 bool broken_ap; /* AP is broken -- turn off powersave */ 393 enum ieee80211_smps_mode req_smps, /* requested smps mode */ 394 ap_smps, /* smps mode AP thinks we're in */ 395 driver_smps_mode; /* smps mode request */ 396 397 struct work_struct request_smps_work; 398 399 unsigned int flags; 400 401 bool beacon_crc_valid; 402 u32 beacon_crc; 403 404 enum { 405 IEEE80211_MFP_DISABLED, 406 IEEE80211_MFP_OPTIONAL, 407 IEEE80211_MFP_REQUIRED 408 } mfp; /* management frame protection */ 409 410 int wmm_last_param_set; 411 412 u8 use_4addr; 413 414 /* Signal strength from the last Beacon frame in the current BSS. */ 415 int last_beacon_signal; 416 417 /* 418 * Weighted average of the signal strength from Beacon frames in the 419 * current BSS. This is in units of 1/16 of the signal unit to maintain 420 * accuracy and to speed up calculations, i.e., the value need to be 421 * divided by 16 to get the actual value. 422 */ 423 int ave_beacon_signal; 424 425 /* 426 * Number of Beacon frames used in ave_beacon_signal. This can be used 427 * to avoid generating less reliable cqm events that would be based 428 * only on couple of received frames. 429 */ 430 unsigned int count_beacon_signal; 431 432 /* 433 * Last Beacon frame signal strength average (ave_beacon_signal / 16) 434 * that triggered a cqm event. 0 indicates that no event has been 435 * generated for the current association. 436 */ 437 int last_cqm_event_signal; 438 439 /* 440 * State variables for keeping track of RSSI of the AP currently 441 * connected to and informing driver when RSSI has gone 442 * below/above a certain threshold. 443 */ 444 int rssi_min_thold, rssi_max_thold; 445 int last_ave_beacon_signal; 446}; 447 448struct ieee80211_if_ibss { 449 struct timer_list timer; 450 451 struct mutex mtx; 452 453 unsigned long last_scan_completed; 454 455 u32 basic_rates; 456 457 bool timer_running; 458 459 bool fixed_bssid; 460 bool fixed_channel; 461 bool privacy; 462 463 u8 bssid[ETH_ALEN]; 464 u8 ssid[IEEE80211_MAX_SSID_LEN]; 465 u8 ssid_len, ie_len; 466 u8 *ie; 467 struct ieee80211_channel *channel; 468 469 unsigned long ibss_join_req; 470 /* probe response/beacon for IBSS */ 471 struct sk_buff __rcu *presp; 472 struct sk_buff *skb; 473 474 enum { 475 IEEE80211_IBSS_MLME_SEARCH, 476 IEEE80211_IBSS_MLME_JOINED, 477 } state; 478}; 479 480struct ieee80211_if_mesh { 481 struct timer_list housekeeping_timer; 482 struct timer_list mesh_path_timer; 483 struct timer_list mesh_path_root_timer; 484 485 unsigned long timers_running; 486 487 unsigned long wrkq_flags; 488 489 u8 mesh_id[IEEE80211_MAX_MESH_ID_LEN]; 490 size_t mesh_id_len; 491 /* Active Path Selection Protocol Identifier */ 492 u8 mesh_pp_id; 493 /* Active Path Selection Metric Identifier */ 494 u8 mesh_pm_id; 495 /* Congestion Control Mode Identifier */ 496 u8 mesh_cc_id; 497 /* Synchronization Protocol Identifier */ 498 u8 mesh_sp_id; 499 /* Authentication Protocol Identifier */ 500 u8 mesh_auth_id; 501 /* Local mesh Sequence Number */ 502 u32 sn; 503 /* Last used PREQ ID */ 504 u32 preq_id; 505 atomic_t mpaths; 506 /* Timestamp of last SN update */ 507 unsigned long last_sn_update; 508 /* Timestamp of last SN sent */ 509 unsigned long last_preq; 510 struct mesh_rmc *rmc; 511 spinlock_t mesh_preq_queue_lock; 512 struct mesh_preq_queue preq_queue; 513 int preq_queue_len; 514 struct mesh_stats mshstats; 515 struct mesh_config mshcfg; 516 u32 mesh_seqnum; 517 bool accepting_plinks; 518 int num_gates; 519 const u8 *ie; 520 u8 ie_len; 521 enum { 522 IEEE80211_MESH_SEC_NONE = 0x0, 523 IEEE80211_MESH_SEC_AUTHED = 0x1, 524 IEEE80211_MESH_SEC_SECURED = 0x2, 525 } security; 526}; 527 528#ifdef CONFIG_MAC80211_MESH 529#define IEEE80211_IFSTA_MESH_CTR_INC(msh, name) \ 530 do { (msh)->mshstats.name++; } while (0) 531#else 532#define IEEE80211_IFSTA_MESH_CTR_INC(msh, name) \ 533 do { } while (0) 534#endif 535 536/** 537 * enum ieee80211_sub_if_data_flags - virtual interface flags 538 * 539 * @IEEE80211_SDATA_ALLMULTI: interface wants all multicast packets 540 * @IEEE80211_SDATA_PROMISC: interface is promisc 541 * @IEEE80211_SDATA_OPERATING_GMODE: operating in G-only mode 542 * @IEEE80211_SDATA_DONT_BRIDGE_PACKETS: bridge packets between 543 * associated stations and deliver multicast frames both 544 * back to wireless media and to the local net stack. 545 * @IEEE80211_SDATA_DISCONNECT_RESUME: Disconnect after resume. 546 */ 547enum ieee80211_sub_if_data_flags { 548 IEEE80211_SDATA_ALLMULTI = BIT(0), 549 IEEE80211_SDATA_PROMISC = BIT(1), 550 IEEE80211_SDATA_OPERATING_GMODE = BIT(2), 551 IEEE80211_SDATA_DONT_BRIDGE_PACKETS = BIT(3), 552 IEEE80211_SDATA_DISCONNECT_RESUME = BIT(4), 553}; 554 555/** 556 * enum ieee80211_sdata_state_bits - virtual interface state bits 557 * @SDATA_STATE_RUNNING: virtual interface is up & running; this 558 * mirrors netif_running() but is separate for interface type 559 * change handling while the interface is up 560 * @SDATA_STATE_OFFCHANNEL: This interface is currently in offchannel 561 * mode, so queues are stopped 562 */ 563enum ieee80211_sdata_state_bits { 564 SDATA_STATE_RUNNING, 565 SDATA_STATE_OFFCHANNEL, 566}; 567 568struct ieee80211_sub_if_data { 569 struct list_head list; 570 571 struct wireless_dev wdev; 572 573 /* keys */ 574 struct list_head key_list; 575 576 /* count for keys needing tailroom space allocation */ 577 int crypto_tx_tailroom_needed_cnt; 578 579 struct net_device *dev; 580 struct ieee80211_local *local; 581 582 unsigned int flags; 583 584 unsigned long state; 585 586 int drop_unencrypted; 587 588 char name[IFNAMSIZ]; 589 590 /* 591 * keep track of whether the HT opmode (stored in 592 * vif.bss_info.ht_operation_mode) is valid. 593 */ 594 bool ht_opmode_valid; 595 596 /* to detect idle changes */ 597 bool old_idle; 598 599 /* Fragment table for host-based reassembly */ 600 struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX]; 601 unsigned int fragment_next; 602 603 struct ieee80211_key __rcu *keys[NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS]; 604 struct ieee80211_key __rcu *default_unicast_key; 605 struct ieee80211_key __rcu *default_multicast_key; 606 struct ieee80211_key __rcu *default_mgmt_key; 607 608 u16 sequence_number; 609 __be16 control_port_protocol; 610 bool control_port_no_encrypt; 611 612 struct ieee80211_tx_queue_params tx_conf[IEEE80211_MAX_QUEUES]; 613 614 struct work_struct work; 615 struct sk_buff_head skb_queue; 616 617 bool arp_filter_state; 618 619 /* 620 * AP this belongs to: self in AP mode and 621 * corresponding AP in VLAN mode, NULL for 622 * all others (might be needed later in IBSS) 623 */ 624 struct ieee80211_if_ap *bss; 625 626 /* bitmap of allowed (non-MCS) rate indexes for rate control */ 627 u32 rc_rateidx_mask[IEEE80211_NUM_BANDS]; 628 629 union { 630 struct ieee80211_if_ap ap; 631 struct ieee80211_if_wds wds; 632 struct ieee80211_if_vlan vlan; 633 struct ieee80211_if_managed mgd; 634 struct ieee80211_if_ibss ibss; 635 struct ieee80211_if_mesh mesh; 636 u32 mntr_flags; 637 } u; 638 639#ifdef CONFIG_MAC80211_DEBUGFS 640 struct { 641 struct dentry *dir; 642 struct dentry *subdir_stations; 643 struct dentry *default_unicast_key; 644 struct dentry *default_multicast_key; 645 struct dentry *default_mgmt_key; 646 } debugfs; 647#endif 648 /* must be last, dynamically sized area in this! */ 649 struct ieee80211_vif vif; 650}; 651 652static inline 653struct ieee80211_sub_if_data *vif_to_sdata(struct ieee80211_vif *p) 654{ 655 return container_of(p, struct ieee80211_sub_if_data, vif); 656} 657 658enum sdata_queue_type { 659 IEEE80211_SDATA_QUEUE_TYPE_FRAME = 0, 660 IEEE80211_SDATA_QUEUE_AGG_START = 1, 661 IEEE80211_SDATA_QUEUE_AGG_STOP = 2, 662}; 663 664enum { 665 IEEE80211_RX_MSG = 1, 666 IEEE80211_TX_STATUS_MSG = 2, 667 IEEE80211_EOSP_MSG = 3, 668}; 669 670struct skb_eosp_msg_data { 671 u8 sta[ETH_ALEN], iface[ETH_ALEN]; 672}; 673 674enum queue_stop_reason { 675 IEEE80211_QUEUE_STOP_REASON_DRIVER, 676 IEEE80211_QUEUE_STOP_REASON_PS, 677 IEEE80211_QUEUE_STOP_REASON_CSA, 678 IEEE80211_QUEUE_STOP_REASON_AGGREGATION, 679 IEEE80211_QUEUE_STOP_REASON_SUSPEND, 680 IEEE80211_QUEUE_STOP_REASON_SKB_ADD, 681 IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE, 682}; 683 684#ifdef CONFIG_MAC80211_LEDS 685struct tpt_led_trigger { 686 struct led_trigger trig; 687 char name[32]; 688 const struct ieee80211_tpt_blink *blink_table; 689 unsigned int blink_table_len; 690 struct timer_list timer; 691 unsigned long prev_traffic; 692 unsigned long tx_bytes, rx_bytes; 693 unsigned int active, want; 694 bool running; 695}; 696#endif 697 698/** 699 * mac80211 scan flags - currently active scan mode 700 * 701 * @SCAN_SW_SCANNING: We're currently in the process of scanning but may as 702 * well be on the operating channel 703 * @SCAN_HW_SCANNING: The hardware is scanning for us, we have no way to 704 * determine if we are on the operating channel or not 705 * @SCAN_COMPLETED: Set for our scan work function when the driver reported 706 * that the scan completed. 707 * @SCAN_ABORTED: Set for our scan work function when the driver reported 708 * a scan complete for an aborted scan. 709 */ 710enum { 711 SCAN_SW_SCANNING, 712 SCAN_HW_SCANNING, 713 SCAN_COMPLETED, 714 SCAN_ABORTED, 715}; 716 717/** 718 * enum mac80211_scan_state - scan state machine states 719 * 720 * @SCAN_DECISION: Main entry point to the scan state machine, this state 721 * determines if we should keep on scanning or switch back to the 722 * operating channel 723 * @SCAN_SET_CHANNEL: Set the next channel to be scanned 724 * @SCAN_SEND_PROBE: Send probe requests and wait for probe responses 725 * @SCAN_LEAVE_OPER_CHANNEL: Leave the operating channel, notify the AP 726 * about us leaving the channel and stop all associated STA interfaces 727 * @SCAN_ENTER_OPER_CHANNEL: Enter the operating channel again, notify the 728 * AP about us being back and restart all associated STA interfaces 729 */ 730enum mac80211_scan_state { 731 SCAN_DECISION, 732 SCAN_SET_CHANNEL, 733 SCAN_SEND_PROBE, 734 SCAN_LEAVE_OPER_CHANNEL, 735 SCAN_ENTER_OPER_CHANNEL, 736}; 737 738struct ieee80211_local { 739 /* embed the driver visible part. 740 * don't cast (use the static inlines below), but we keep 741 * it first anyway so they become a no-op */ 742 struct ieee80211_hw hw; 743 744 const struct ieee80211_ops *ops; 745 746 /* 747 * work stuff, potentially off-channel (in the future) 748 */ 749 struct list_head work_list; 750 struct timer_list work_timer; 751 struct work_struct work_work; 752 struct sk_buff_head work_skb_queue; 753 754 /* 755 * private workqueue to mac80211. mac80211 makes this accessible 756 * via ieee80211_queue_work() 757 */ 758 struct workqueue_struct *workqueue; 759 760 unsigned long queue_stop_reasons[IEEE80211_MAX_QUEUES]; 761 /* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */ 762 spinlock_t queue_stop_reason_lock; 763 764 int open_count; 765 int monitors, cooked_mntrs; 766 /* number of interfaces with corresponding FIF_ flags */ 767 int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll, 768 fif_probe_req; 769 int probe_req_reg; 770 unsigned int filter_flags; /* FIF_* */ 771 772 bool wiphy_ciphers_allocated; 773 774 /* protects the aggregated multicast list and filter calls */ 775 spinlock_t filter_lock; 776 777 /* used for uploading changed mc list */ 778 struct work_struct reconfig_filter; 779 780 /* used to reconfigure hardware SM PS */ 781 struct work_struct recalc_smps; 782 783 /* aggregated multicast list */ 784 struct netdev_hw_addr_list mc_list; 785 786 bool tim_in_locked_section; /* see ieee80211_beacon_get() */ 787 788 /* 789 * suspended is true if we finished all the suspend _and_ we have 790 * not yet come up from resume. This is to be used by mac80211 791 * to ensure driver sanity during suspend and mac80211's own 792 * sanity. It can eventually be used for WoW as well. 793 */ 794 bool suspended; 795 796 /* 797 * Resuming is true while suspended, but when we're reprogramming the 798 * hardware -- at that time it's allowed to use ieee80211_queue_work() 799 * again even though some other parts of the stack are still suspended 800 * and we still drop received frames to avoid waking the stack. 801 */ 802 bool resuming; 803 804 /* 805 * quiescing is true during the suspend process _only_ to 806 * ease timer cancelling etc. 807 */ 808 bool quiescing; 809 810 /* device is started */ 811 bool started; 812 813 /* wowlan is enabled -- don't reconfig on resume */ 814 bool wowlan; 815 816 int tx_headroom; /* required headroom for hardware/radiotap */ 817 818 /* Tasklet and skb queue to process calls from IRQ mode. All frames 819 * added to skb_queue will be processed, but frames in 820 * skb_queue_unreliable may be dropped if the total length of these 821 * queues increases over the limit. */ 822#define IEEE80211_IRQSAFE_QUEUE_LIMIT 128 823 struct tasklet_struct tasklet; 824 struct sk_buff_head skb_queue; 825 struct sk_buff_head skb_queue_unreliable; 826 827 /* 828 * Internal FIFO queue which is shared between multiple rx path 829 * stages. Its main task is to provide a serialization mechanism, 830 * so all rx handlers can enjoy having exclusive access to their 831 * private data structures. 832 */ 833 struct sk_buff_head rx_skb_queue; 834 bool running_rx_handler; /* protected by rx_skb_queue.lock */ 835 836 /* Station data */ 837 /* 838 * The mutex only protects the list and counter, 839 * reads are done in RCU. 840 * Additionally, the lock protects the hash table, 841 * the pending list and each BSS's TIM bitmap. 842 */ 843 struct mutex sta_mtx; 844 spinlock_t sta_lock; 845 unsigned long num_sta; 846 struct list_head sta_list, sta_pending_list; 847 struct sta_info __rcu *sta_hash[STA_HASH_SIZE]; 848 struct timer_list sta_cleanup; 849 struct work_struct sta_finish_work; 850 int sta_generation; 851 852 struct sk_buff_head pending[IEEE80211_MAX_QUEUES]; 853 struct tasklet_struct tx_pending_tasklet; 854 855 atomic_t agg_queue_stop[IEEE80211_MAX_QUEUES]; 856 857 /* number of interfaces with corresponding IFF_ flags */ 858 atomic_t iff_allmultis, iff_promiscs; 859 860 struct rate_control_ref *rate_ctrl; 861 862 struct crypto_cipher *wep_tx_tfm; 863 struct crypto_cipher *wep_rx_tfm; 864 u32 wep_iv; 865 866 /* see iface.c */ 867 struct list_head interfaces; 868 struct mutex iflist_mtx; 869 870 /* 871 * Key mutex, protects sdata's key_list and sta_info's 872 * key pointers (write access, they're RCU.) 873 */ 874 struct mutex key_mtx; 875 876 /* mutex for scan and work locking */ 877 struct mutex mtx; 878 879 /* Scanning and BSS list */ 880 unsigned long scanning; 881 struct cfg80211_ssid scan_ssid; 882 struct cfg80211_scan_request *int_scan_req; 883 struct cfg80211_scan_request *scan_req, *hw_scan_req; 884 struct ieee80211_channel *scan_channel; 885 enum ieee80211_band hw_scan_band; 886 int scan_channel_idx; 887 int scan_ies_len; 888 889 bool sched_scanning; 890 struct ieee80211_sched_scan_ies sched_scan_ies; 891 struct work_struct sched_scan_stopped_work; 892 893 unsigned long leave_oper_channel_time; 894 enum mac80211_scan_state next_scan_state; 895 struct delayed_work scan_work; 896 struct ieee80211_sub_if_data *scan_sdata; 897 enum nl80211_channel_type _oper_channel_type; 898 struct ieee80211_channel *oper_channel, *csa_channel; 899 900 /* Temporary remain-on-channel for off-channel operations */ 901 struct ieee80211_channel *tmp_channel; 902 enum nl80211_channel_type tmp_channel_type; 903 904 /* SNMP counters */ 905 /* dot11CountersTable */ 906 u32 dot11TransmittedFragmentCount; 907 u32 dot11MulticastTransmittedFrameCount; 908 u32 dot11FailedCount; 909 u32 dot11RetryCount; 910 u32 dot11MultipleRetryCount; 911 u32 dot11FrameDuplicateCount; 912 u32 dot11ReceivedFragmentCount; 913 u32 dot11MulticastReceivedFrameCount; 914 u32 dot11TransmittedFrameCount; 915 916#ifdef CONFIG_MAC80211_LEDS 917 int tx_led_counter, rx_led_counter; 918 struct led_trigger *tx_led, *rx_led, *assoc_led, *radio_led; 919 struct tpt_led_trigger *tpt_led_trigger; 920 char tx_led_name[32], rx_led_name[32], 921 assoc_led_name[32], radio_led_name[32]; 922#endif 923 924#ifdef CONFIG_MAC80211_DEBUG_COUNTERS 925 /* TX/RX handler statistics */ 926 unsigned int tx_handlers_drop; 927 unsigned int tx_handlers_queued; 928 unsigned int tx_handlers_drop_unencrypted; 929 unsigned int tx_handlers_drop_fragment; 930 unsigned int tx_handlers_drop_wep; 931 unsigned int tx_handlers_drop_not_assoc; 932 unsigned int tx_handlers_drop_unauth_port; 933 unsigned int rx_handlers_drop; 934 unsigned int rx_handlers_queued; 935 unsigned int rx_handlers_drop_nullfunc; 936 unsigned int rx_handlers_drop_defrag; 937 unsigned int rx_handlers_drop_short; 938 unsigned int rx_handlers_drop_passive_scan; 939 unsigned int tx_expand_skb_head; 940 unsigned int tx_expand_skb_head_cloned; 941 unsigned int rx_expand_skb_head; 942 unsigned int rx_expand_skb_head2; 943 unsigned int rx_handlers_fragments; 944 unsigned int tx_status_drop; 945#define I802_DEBUG_INC(c) (c)++ 946#else /* CONFIG_MAC80211_DEBUG_COUNTERS */ 947#define I802_DEBUG_INC(c) do { } while (0) 948#endif /* CONFIG_MAC80211_DEBUG_COUNTERS */ 949 950 951 int total_ps_buffered; /* total number of all buffered unicast and 952 * multicast packets for power saving stations 953 */ 954 int wifi_wme_noack_test; 955 unsigned int wmm_acm; /* bit field of ACM bits (BIT(802.1D tag)) */ 956 957 /* 958 * Bitmask of enabled u-apsd queues, 959 * IEEE80211_WMM_IE_STA_QOSINFO_AC_BE & co. Needs a new association 960 * to take effect. 961 */ 962 unsigned int uapsd_queues; 963 964 /* 965 * Maximum number of buffered frames AP can deliver during a 966 * service period, IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL or similar. 967 * Needs a new association to take effect. 968 */ 969 unsigned int uapsd_max_sp_len; 970 971 bool pspolling; 972 bool offchannel_ps_enabled; 973 /* 974 * PS can only be enabled when we have exactly one managed 975 * interface (and monitors) in PS, this then points there. 976 */ 977 struct ieee80211_sub_if_data *ps_sdata; 978 struct work_struct dynamic_ps_enable_work; 979 struct work_struct dynamic_ps_disable_work; 980 struct timer_list dynamic_ps_timer; 981 struct notifier_block network_latency_notifier; 982 struct notifier_block ifa_notifier; 983 984 /* 985 * The dynamic ps timeout configured from user space via WEXT - 986 * this will override whatever chosen by mac80211 internally. 987 */ 988 int dynamic_ps_forced_timeout; 989 int dynamic_ps_user_timeout; 990 bool disable_dynamic_ps; 991 992 int user_power_level; /* in dBm */ 993 int power_constr_level; /* in dBm */ 994 995 enum ieee80211_smps_mode smps_mode; 996 997 struct work_struct restart_work; 998 999#ifdef CONFIG_MAC80211_DEBUGFS 1000 struct local_debugfsdentries { 1001 struct dentry *rcdir; 1002 struct dentry *keys; 1003 } debugfs; 1004#endif 1005 1006 struct ieee80211_channel *hw_roc_channel; 1007 struct net_device *hw_roc_dev; 1008 struct sk_buff *hw_roc_skb, *hw_roc_skb_for_status; 1009 struct work_struct hw_roc_start, hw_roc_done; 1010 enum nl80211_channel_type hw_roc_channel_type; 1011 unsigned int hw_roc_duration; 1012 u32 hw_roc_cookie; 1013 bool hw_roc_for_tx; 1014 1015 /* dummy netdev for use w/ NAPI */ 1016 struct net_device napi_dev; 1017 1018 struct napi_struct napi; 1019}; 1020 1021static inline struct ieee80211_sub_if_data * 1022IEEE80211_DEV_TO_SUB_IF(struct net_device *dev) 1023{ 1024 return netdev_priv(dev); 1025} 1026 1027/* this struct represents 802.11n's RA/TID combination */ 1028struct ieee80211_ra_tid { 1029 u8 ra[ETH_ALEN]; 1030 u16 tid; 1031}; 1032 1033static inline struct ieee80211_local *hw_to_local( 1034 struct ieee80211_hw *hw) 1035{ 1036 return container_of(hw, struct ieee80211_local, hw); 1037} 1038 1039static inline struct ieee80211_hw *local_to_hw( 1040 struct ieee80211_local *local) 1041{ 1042 return &local->hw; 1043} 1044 1045 1046static inline int ieee80211_bssid_match(const u8 *raddr, const u8 *addr) 1047{ 1048 return compare_ether_addr(raddr, addr) == 0 || 1049 is_broadcast_ether_addr(raddr); 1050} 1051 1052 1053int ieee80211_hw_config(struct ieee80211_local *local, u32 changed); 1054void ieee80211_tx_set_protected(struct ieee80211_tx_data *tx); 1055void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata, 1056 u32 changed); 1057void ieee80211_configure_filter(struct ieee80211_local *local); 1058u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata); 1059 1060/* STA code */ 1061void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata); 1062int ieee80211_mgd_auth(struct ieee80211_sub_if_data *sdata, 1063 struct cfg80211_auth_request *req); 1064int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata, 1065 struct cfg80211_assoc_request *req); 1066int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata, 1067 struct cfg80211_deauth_request *req, 1068 void *cookie); 1069int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata, 1070 struct cfg80211_disassoc_request *req, 1071 void *cookie); 1072void ieee80211_send_pspoll(struct ieee80211_local *local, 1073 struct ieee80211_sub_if_data *sdata); 1074void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency); 1075int ieee80211_max_network_latency(struct notifier_block *nb, 1076 unsigned long data, void *dummy); 1077int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata); 1078void ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata, 1079 struct ieee80211_channel_sw_ie *sw_elem, 1080 struct ieee80211_bss *bss, 1081 u64 timestamp); 1082void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata); 1083void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata); 1084void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata); 1085void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, 1086 struct sk_buff *skb); 1087void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata); 1088void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata); 1089 1090/* IBSS code */ 1091void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local); 1092void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata); 1093struct sta_info *ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, 1094 u8 *bssid, u8 *addr, u32 supp_rates, 1095 gfp_t gfp); 1096int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata, 1097 struct cfg80211_ibss_params *params); 1098int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata); 1099void ieee80211_ibss_quiesce(struct ieee80211_sub_if_data *sdata); 1100void ieee80211_ibss_restart(struct ieee80211_sub_if_data *sdata); 1101void ieee80211_ibss_work(struct ieee80211_sub_if_data *sdata); 1102void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, 1103 struct sk_buff *skb); 1104 1105/* mesh code */ 1106void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata); 1107void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, 1108 struct sk_buff *skb); 1109 1110/* scan/BSS handling */ 1111void ieee80211_scan_work(struct work_struct *work); 1112int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata, 1113 const u8 *ssid, u8 ssid_len, 1114 struct ieee80211_channel *chan); 1115int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata, 1116 struct cfg80211_scan_request *req); 1117void ieee80211_scan_cancel(struct ieee80211_local *local); 1118ieee80211_rx_result 1119ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb); 1120 1121void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local); 1122struct ieee80211_bss * 1123ieee80211_bss_info_update(struct ieee80211_local *local, 1124 struct ieee80211_rx_status *rx_status, 1125 struct ieee80211_mgmt *mgmt, 1126 size_t len, 1127 struct ieee802_11_elems *elems, 1128 struct ieee80211_channel *channel, 1129 bool beacon); 1130struct ieee80211_bss * 1131ieee80211_rx_bss_get(struct ieee80211_local *local, u8 *bssid, int freq, 1132 u8 *ssid, u8 ssid_len); 1133void ieee80211_rx_bss_put(struct ieee80211_local *local, 1134 struct ieee80211_bss *bss); 1135 1136/* scheduled scan handling */ 1137int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata, 1138 struct cfg80211_sched_scan_request *req); 1139int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata); 1140void ieee80211_sched_scan_stopped_work(struct work_struct *work); 1141 1142/* off-channel helpers */ 1143bool ieee80211_cfg_on_oper_channel(struct ieee80211_local *local); 1144void ieee80211_offchannel_enable_all_ps(struct ieee80211_local *local, 1145 bool tell_ap); 1146void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local, 1147 bool offchannel_ps_enable); 1148void ieee80211_offchannel_return(struct ieee80211_local *local, 1149 bool enable_beaconing, 1150 bool offchannel_ps_disable); 1151void ieee80211_hw_roc_setup(struct ieee80211_local *local); 1152 1153/* interface handling */ 1154int ieee80211_iface_init(void); 1155void ieee80211_iface_exit(void); 1156int ieee80211_if_add(struct ieee80211_local *local, const char *name, 1157 struct net_device **new_dev, enum nl80211_iftype type, 1158 struct vif_params *params); 1159int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata, 1160 enum nl80211_iftype type); 1161void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata); 1162void ieee80211_remove_interfaces(struct ieee80211_local *local); 1163u32 __ieee80211_recalc_idle(struct ieee80211_local *local); 1164void ieee80211_recalc_idle(struct ieee80211_local *local); 1165void ieee80211_adjust_monitor_flags(struct ieee80211_sub_if_data *sdata, 1166 const int offset); 1167 1168static inline bool ieee80211_sdata_running(struct ieee80211_sub_if_data *sdata) 1169{ 1170 return test_bit(SDATA_STATE_RUNNING, &sdata->state); 1171} 1172 1173/* tx handling */ 1174void ieee80211_clear_tx_pending(struct ieee80211_local *local); 1175void ieee80211_tx_pending(unsigned long data); 1176netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb, 1177 struct net_device *dev); 1178netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, 1179 struct net_device *dev); 1180 1181/* HT */ 1182void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_supported_band *sband, 1183 struct ieee80211_ht_cap *ht_cap_ie, 1184 struct ieee80211_sta_ht_cap *ht_cap); 1185void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, 1186 const u8 *da, u16 tid, 1187 u16 initiator, u16 reason_code); 1188int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata, 1189 enum ieee80211_smps_mode smps, const u8 *da, 1190 const u8 *bssid); 1191void ieee80211_request_smps_work(struct work_struct *work); 1192 1193void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, 1194 u16 initiator, u16 reason, bool stop); 1195void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, 1196 u16 initiator, u16 reason, bool stop); 1197void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta, bool tx); 1198void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata, 1199 struct sta_info *sta, 1200 struct ieee80211_mgmt *mgmt, size_t len); 1201void ieee80211_process_addba_resp(struct ieee80211_local *local, 1202 struct sta_info *sta, 1203 struct ieee80211_mgmt *mgmt, 1204 size_t len); 1205void ieee80211_process_addba_request(struct ieee80211_local *local, 1206 struct sta_info *sta, 1207 struct ieee80211_mgmt *mgmt, 1208 size_t len); 1209 1210int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, 1211 enum ieee80211_back_parties initiator, 1212 bool tx); 1213int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, 1214 enum ieee80211_back_parties initiator, 1215 bool tx); 1216void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid); 1217void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid); 1218void ieee80211_ba_session_work(struct work_struct *work); 1219void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid); 1220void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid); 1221 1222/* Spectrum management */ 1223void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, 1224 struct ieee80211_mgmt *mgmt, 1225 size_t len); 1226 1227/* Suspend/resume and hw reconfiguration */ 1228int ieee80211_reconfig(struct ieee80211_local *local); 1229void ieee80211_stop_device(struct ieee80211_local *local); 1230 1231#ifdef CONFIG_PM 1232int __ieee80211_suspend(struct ieee80211_hw *hw, 1233 struct cfg80211_wowlan *wowlan); 1234 1235static inline int __ieee80211_resume(struct ieee80211_hw *hw) 1236{ 1237 struct ieee80211_local *local = hw_to_local(hw); 1238 1239 WARN(test_bit(SCAN_HW_SCANNING, &local->scanning), 1240 "%s: resume with hardware scan still in progress\n", 1241 wiphy_name(hw->wiphy)); 1242 1243 return ieee80211_reconfig(hw_to_local(hw)); 1244} 1245#else 1246static inline int __ieee80211_suspend(struct ieee80211_hw *hw, 1247 struct cfg80211_wowlan *wowlan) 1248{ 1249 return 0; 1250} 1251 1252static inline int __ieee80211_resume(struct ieee80211_hw *hw) 1253{ 1254 return 0; 1255} 1256#endif 1257 1258/* utility functions/constants */ 1259extern void *mac80211_wiphy_privid; /* for wiphy privid */ 1260u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len, 1261 enum nl80211_iftype type); 1262int ieee80211_frame_duration(struct ieee80211_local *local, size_t len, 1263 int rate, int erp, int short_preamble); 1264void mac80211_ev_michael_mic_failure(struct ieee80211_sub_if_data *sdata, int keyidx, 1265 struct ieee80211_hdr *hdr, const u8 *tsc, 1266 gfp_t gfp); 1267void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata); 1268void ieee80211_xmit(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb); 1269void ieee80211_tx_skb(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb); 1270void ieee802_11_parse_elems(u8 *start, size_t len, 1271 struct ieee802_11_elems *elems); 1272u32 ieee802_11_parse_elems_crc(u8 *start, size_t len, 1273 struct ieee802_11_elems *elems, 1274 u64 filter, u32 crc); 1275u32 ieee80211_mandatory_rates(struct ieee80211_local *local, 1276 enum ieee80211_band band); 1277 1278void ieee80211_dynamic_ps_enable_work(struct work_struct *work); 1279void ieee80211_dynamic_ps_disable_work(struct work_struct *work); 1280void ieee80211_dynamic_ps_timer(unsigned long data); 1281void ieee80211_send_nullfunc(struct ieee80211_local *local, 1282 struct ieee80211_sub_if_data *sdata, 1283 int powersave); 1284void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata, 1285 struct ieee80211_hdr *hdr); 1286void ieee80211_sta_tx_notify(struct ieee80211_sub_if_data *sdata, 1287 struct ieee80211_hdr *hdr, bool ack); 1288void ieee80211_beacon_connection_loss_work(struct work_struct *work); 1289 1290void ieee80211_wake_queues_by_reason(struct ieee80211_hw *hw, 1291 enum queue_stop_reason reason); 1292void ieee80211_stop_queues_by_reason(struct ieee80211_hw *hw, 1293 enum queue_stop_reason reason); 1294void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue, 1295 enum queue_stop_reason reason); 1296void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue, 1297 enum queue_stop_reason reason); 1298void ieee80211_add_pending_skb(struct ieee80211_local *local, 1299 struct sk_buff *skb); 1300void ieee80211_add_pending_skbs(struct ieee80211_local *local, 1301 struct sk_buff_head *skbs); 1302void ieee80211_add_pending_skbs_fn(struct ieee80211_local *local, 1303 struct sk_buff_head *skbs, 1304 void (*fn)(void *data), void *data); 1305 1306void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, 1307 u16 transaction, u16 auth_alg, 1308 u8 *extra, size_t extra_len, const u8 *bssid, 1309 const u8 *key, u8 key_len, u8 key_idx); 1310int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, 1311 const u8 *ie, size_t ie_len, 1312 enum ieee80211_band band, u32 rate_mask, 1313 u8 channel); 1314struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata, 1315 u8 *dst, u32 ratemask, 1316 const u8 *ssid, size_t ssid_len, 1317 const u8 *ie, size_t ie_len, 1318 bool directed); 1319void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, 1320 const u8 *ssid, size_t ssid_len, 1321 const u8 *ie, size_t ie_len, 1322 u32 ratemask, bool directed, bool no_cck); 1323 1324void ieee80211_sta_def_wmm_params(struct ieee80211_sub_if_data *sdata, 1325 const size_t supp_rates_len, 1326 const u8 *supp_rates); 1327u32 ieee80211_sta_get_rates(struct ieee80211_local *local, 1328 struct ieee802_11_elems *elems, 1329 enum ieee80211_band band); 1330int __ieee80211_request_smps(struct ieee80211_sub_if_data *sdata, 1331 enum ieee80211_smps_mode smps_mode); 1332void ieee80211_recalc_smps(struct ieee80211_local *local); 1333 1334size_t ieee80211_ie_split(const u8 *ies, size_t ielen, 1335 const u8 *ids, int n_ids, size_t offset); 1336size_t ieee80211_ie_split_vendor(const u8 *ies, size_t ielen, size_t offset); 1337 1338/* internal work items */ 1339void ieee80211_work_init(struct ieee80211_local *local); 1340void ieee80211_add_work(struct ieee80211_work *wk); 1341void free_work(struct ieee80211_work *wk); 1342void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata); 1343ieee80211_rx_result ieee80211_work_rx_mgmt(struct ieee80211_sub_if_data *sdata, 1344 struct sk_buff *skb); 1345int ieee80211_wk_remain_on_channel(struct ieee80211_sub_if_data *sdata, 1346 struct ieee80211_channel *chan, 1347 enum nl80211_channel_type channel_type, 1348 unsigned int duration, u64 *cookie); 1349int ieee80211_wk_cancel_remain_on_channel( 1350 struct ieee80211_sub_if_data *sdata, u64 cookie); 1351 1352/* channel management */ 1353enum ieee80211_chan_mode { 1354 CHAN_MODE_UNDEFINED, 1355 CHAN_MODE_HOPPING, 1356 CHAN_MODE_FIXED, 1357}; 1358 1359enum ieee80211_chan_mode 1360ieee80211_get_channel_mode(struct ieee80211_local *local, 1361 struct ieee80211_sub_if_data *ignore); 1362bool ieee80211_set_channel_type(struct ieee80211_local *local, 1363 struct ieee80211_sub_if_data *sdata, 1364 enum nl80211_channel_type chantype); 1365 1366#ifdef CONFIG_MAC80211_NOINLINE 1367#define debug_noinline noinline 1368#else 1369#define debug_noinline 1370#endif 1371 1372#endif /* IEEE80211_I_H */