Commit 27b3eb9c06a7193bdc9800cd00764a130343bc8a

Authored by Johannes Berg
1 parent d51b70ff51

mac80211: add APIs to allow keeping connections after WoWLAN

In order to be able to (securely) keep connections alive after
the system was suspended for WoWLAN, we need some additional
APIs. We already have API (ieee80211_gtk_rekey_notify) to tell
wpa_supplicant about the new replay counter if GTK rekeying
was done by the device while the host was asleep, but that's
not sufficient.

If GTK rekeying wasn't done, we need to tell the host about
sequence counters for the GTK (and PTK regardless of rekeying)
that was used while asleep, add ieee80211_set_key_rx_seq() for
that.

If GTK rekeying was done, then we need to be able to disable
the old keys (with ieee80211_remove_key()) and allocate the
new GTK key(s) in mac80211 (with ieee80211_gtk_rekey_add()).

If protocol offload (e.g. ARP) is implemented, then also the
TX sequence counter for the PTK must be updated, using the new
ieee80211_set_key_tx_seq() function.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>

Showing 3 changed files with 231 additions and 8 deletions Inline Diff

include/net/mac80211.h
1 /* 1 /*
2 * mac80211 <-> driver interface 2 * mac80211 <-> driver interface
3 * 3 *
4 * Copyright 2002-2005, Devicescape Software, Inc. 4 * Copyright 2002-2005, Devicescape Software, Inc.
5 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 5 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
6 * Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net> 6 * Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net>
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as 9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation. 10 * published by the Free Software Foundation.
11 */ 11 */
12 12
13 #ifndef MAC80211_H 13 #ifndef MAC80211_H
14 #define MAC80211_H 14 #define MAC80211_H
15 15
16 #include <linux/bug.h> 16 #include <linux/bug.h>
17 #include <linux/kernel.h> 17 #include <linux/kernel.h>
18 #include <linux/if_ether.h> 18 #include <linux/if_ether.h>
19 #include <linux/skbuff.h> 19 #include <linux/skbuff.h>
20 #include <linux/ieee80211.h> 20 #include <linux/ieee80211.h>
21 #include <net/cfg80211.h> 21 #include <net/cfg80211.h>
22 #include <asm/unaligned.h> 22 #include <asm/unaligned.h>
23 23
24 /** 24 /**
25 * DOC: Introduction 25 * DOC: Introduction
26 * 26 *
27 * mac80211 is the Linux stack for 802.11 hardware that implements 27 * mac80211 is the Linux stack for 802.11 hardware that implements
28 * only partial functionality in hard- or firmware. This document 28 * only partial functionality in hard- or firmware. This document
29 * defines the interface between mac80211 and low-level hardware 29 * defines the interface between mac80211 and low-level hardware
30 * drivers. 30 * drivers.
31 */ 31 */
32 32
33 /** 33 /**
34 * DOC: Calling mac80211 from interrupts 34 * DOC: Calling mac80211 from interrupts
35 * 35 *
36 * Only ieee80211_tx_status_irqsafe() and ieee80211_rx_irqsafe() can be 36 * Only ieee80211_tx_status_irqsafe() and ieee80211_rx_irqsafe() can be
37 * called in hardware interrupt context. The low-level driver must not call any 37 * called in hardware interrupt context. The low-level driver must not call any
38 * other functions in hardware interrupt context. If there is a need for such 38 * other functions in hardware interrupt context. If there is a need for such
39 * call, the low-level driver should first ACK the interrupt and perform the 39 * call, the low-level driver should first ACK the interrupt and perform the
40 * IEEE 802.11 code call after this, e.g. from a scheduled workqueue or even 40 * IEEE 802.11 code call after this, e.g. from a scheduled workqueue or even
41 * tasklet function. 41 * tasklet function.
42 * 42 *
43 * NOTE: If the driver opts to use the _irqsafe() functions, it may not also 43 * NOTE: If the driver opts to use the _irqsafe() functions, it may not also
44 * use the non-IRQ-safe functions! 44 * use the non-IRQ-safe functions!
45 */ 45 */
46 46
47 /** 47 /**
48 * DOC: Warning 48 * DOC: Warning
49 * 49 *
50 * If you're reading this document and not the header file itself, it will 50 * If you're reading this document and not the header file itself, it will
51 * be incomplete because not all documentation has been converted yet. 51 * be incomplete because not all documentation has been converted yet.
52 */ 52 */
53 53
54 /** 54 /**
55 * DOC: Frame format 55 * DOC: Frame format
56 * 56 *
57 * As a general rule, when frames are passed between mac80211 and the driver, 57 * As a general rule, when frames are passed between mac80211 and the driver,
58 * they start with the IEEE 802.11 header and include the same octets that are 58 * they start with the IEEE 802.11 header and include the same octets that are
59 * sent over the air except for the FCS which should be calculated by the 59 * sent over the air except for the FCS which should be calculated by the
60 * hardware. 60 * hardware.
61 * 61 *
62 * There are, however, various exceptions to this rule for advanced features: 62 * There are, however, various exceptions to this rule for advanced features:
63 * 63 *
64 * The first exception is for hardware encryption and decryption offload 64 * The first exception is for hardware encryption and decryption offload
65 * where the IV/ICV may or may not be generated in hardware. 65 * where the IV/ICV may or may not be generated in hardware.
66 * 66 *
67 * Secondly, when the hardware handles fragmentation, the frame handed to 67 * Secondly, when the hardware handles fragmentation, the frame handed to
68 * the driver from mac80211 is the MSDU, not the MPDU. 68 * the driver from mac80211 is the MSDU, not the MPDU.
69 * 69 *
70 * Finally, for received frames, the driver is able to indicate that it has 70 * Finally, for received frames, the driver is able to indicate that it has
71 * filled a radiotap header and put that in front of the frame; if it does 71 * filled a radiotap header and put that in front of the frame; if it does
72 * not do so then mac80211 may add this under certain circumstances. 72 * not do so then mac80211 may add this under certain circumstances.
73 */ 73 */
74 74
75 /** 75 /**
76 * DOC: mac80211 workqueue 76 * DOC: mac80211 workqueue
77 * 77 *
78 * mac80211 provides its own workqueue for drivers and internal mac80211 use. 78 * mac80211 provides its own workqueue for drivers and internal mac80211 use.
79 * The workqueue is a single threaded workqueue and can only be accessed by 79 * The workqueue is a single threaded workqueue and can only be accessed by
80 * helpers for sanity checking. Drivers must ensure all work added onto the 80 * helpers for sanity checking. Drivers must ensure all work added onto the
81 * mac80211 workqueue should be cancelled on the driver stop() callback. 81 * mac80211 workqueue should be cancelled on the driver stop() callback.
82 * 82 *
83 * mac80211 will flushed the workqueue upon interface removal and during 83 * mac80211 will flushed the workqueue upon interface removal and during
84 * suspend. 84 * suspend.
85 * 85 *
86 * All work performed on the mac80211 workqueue must not acquire the RTNL lock. 86 * All work performed on the mac80211 workqueue must not acquire the RTNL lock.
87 * 87 *
88 */ 88 */
89 89
90 struct device; 90 struct device;
91 91
92 /** 92 /**
93 * enum ieee80211_max_queues - maximum number of queues 93 * enum ieee80211_max_queues - maximum number of queues
94 * 94 *
95 * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues. 95 * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues.
96 * @IEEE80211_MAX_QUEUE_MAP: bitmap with maximum queues set 96 * @IEEE80211_MAX_QUEUE_MAP: bitmap with maximum queues set
97 */ 97 */
98 enum ieee80211_max_queues { 98 enum ieee80211_max_queues {
99 IEEE80211_MAX_QUEUES = 16, 99 IEEE80211_MAX_QUEUES = 16,
100 IEEE80211_MAX_QUEUE_MAP = BIT(IEEE80211_MAX_QUEUES) - 1, 100 IEEE80211_MAX_QUEUE_MAP = BIT(IEEE80211_MAX_QUEUES) - 1,
101 }; 101 };
102 102
103 #define IEEE80211_INVAL_HW_QUEUE 0xff 103 #define IEEE80211_INVAL_HW_QUEUE 0xff
104 104
105 /** 105 /**
106 * enum ieee80211_ac_numbers - AC numbers as used in mac80211 106 * enum ieee80211_ac_numbers - AC numbers as used in mac80211
107 * @IEEE80211_AC_VO: voice 107 * @IEEE80211_AC_VO: voice
108 * @IEEE80211_AC_VI: video 108 * @IEEE80211_AC_VI: video
109 * @IEEE80211_AC_BE: best effort 109 * @IEEE80211_AC_BE: best effort
110 * @IEEE80211_AC_BK: background 110 * @IEEE80211_AC_BK: background
111 */ 111 */
112 enum ieee80211_ac_numbers { 112 enum ieee80211_ac_numbers {
113 IEEE80211_AC_VO = 0, 113 IEEE80211_AC_VO = 0,
114 IEEE80211_AC_VI = 1, 114 IEEE80211_AC_VI = 1,
115 IEEE80211_AC_BE = 2, 115 IEEE80211_AC_BE = 2,
116 IEEE80211_AC_BK = 3, 116 IEEE80211_AC_BK = 3,
117 }; 117 };
118 #define IEEE80211_NUM_ACS 4 118 #define IEEE80211_NUM_ACS 4
119 119
120 /** 120 /**
121 * struct ieee80211_tx_queue_params - transmit queue configuration 121 * struct ieee80211_tx_queue_params - transmit queue configuration
122 * 122 *
123 * The information provided in this structure is required for QoS 123 * The information provided in this structure is required for QoS
124 * transmit queue configuration. Cf. IEEE 802.11 7.3.2.29. 124 * transmit queue configuration. Cf. IEEE 802.11 7.3.2.29.
125 * 125 *
126 * @aifs: arbitration interframe space [0..255] 126 * @aifs: arbitration interframe space [0..255]
127 * @cw_min: minimum contention window [a value of the form 127 * @cw_min: minimum contention window [a value of the form
128 * 2^n-1 in the range 1..32767] 128 * 2^n-1 in the range 1..32767]
129 * @cw_max: maximum contention window [like @cw_min] 129 * @cw_max: maximum contention window [like @cw_min]
130 * @txop: maximum burst time in units of 32 usecs, 0 meaning disabled 130 * @txop: maximum burst time in units of 32 usecs, 0 meaning disabled
131 * @acm: is mandatory admission control required for the access category 131 * @acm: is mandatory admission control required for the access category
132 * @uapsd: is U-APSD mode enabled for the queue 132 * @uapsd: is U-APSD mode enabled for the queue
133 */ 133 */
134 struct ieee80211_tx_queue_params { 134 struct ieee80211_tx_queue_params {
135 u16 txop; 135 u16 txop;
136 u16 cw_min; 136 u16 cw_min;
137 u16 cw_max; 137 u16 cw_max;
138 u8 aifs; 138 u8 aifs;
139 bool acm; 139 bool acm;
140 bool uapsd; 140 bool uapsd;
141 }; 141 };
142 142
143 struct ieee80211_low_level_stats { 143 struct ieee80211_low_level_stats {
144 unsigned int dot11ACKFailureCount; 144 unsigned int dot11ACKFailureCount;
145 unsigned int dot11RTSFailureCount; 145 unsigned int dot11RTSFailureCount;
146 unsigned int dot11FCSErrorCount; 146 unsigned int dot11FCSErrorCount;
147 unsigned int dot11RTSSuccessCount; 147 unsigned int dot11RTSSuccessCount;
148 }; 148 };
149 149
150 /** 150 /**
151 * enum ieee80211_chanctx_change - change flag for channel context 151 * enum ieee80211_chanctx_change - change flag for channel context
152 * @IEEE80211_CHANCTX_CHANGE_WIDTH: The channel width changed 152 * @IEEE80211_CHANCTX_CHANGE_WIDTH: The channel width changed
153 * @IEEE80211_CHANCTX_CHANGE_RX_CHAINS: The number of RX chains changed 153 * @IEEE80211_CHANCTX_CHANGE_RX_CHAINS: The number of RX chains changed
154 * @IEEE80211_CHANCTX_CHANGE_RADAR: radar detection flag changed 154 * @IEEE80211_CHANCTX_CHANGE_RADAR: radar detection flag changed
155 * @IEEE80211_CHANCTX_CHANGE_CHANNEL: switched to another operating channel, 155 * @IEEE80211_CHANCTX_CHANGE_CHANNEL: switched to another operating channel,
156 * this is used only with channel switching with CSA 156 * this is used only with channel switching with CSA
157 */ 157 */
158 enum ieee80211_chanctx_change { 158 enum ieee80211_chanctx_change {
159 IEEE80211_CHANCTX_CHANGE_WIDTH = BIT(0), 159 IEEE80211_CHANCTX_CHANGE_WIDTH = BIT(0),
160 IEEE80211_CHANCTX_CHANGE_RX_CHAINS = BIT(1), 160 IEEE80211_CHANCTX_CHANGE_RX_CHAINS = BIT(1),
161 IEEE80211_CHANCTX_CHANGE_RADAR = BIT(2), 161 IEEE80211_CHANCTX_CHANGE_RADAR = BIT(2),
162 IEEE80211_CHANCTX_CHANGE_CHANNEL = BIT(3), 162 IEEE80211_CHANCTX_CHANGE_CHANNEL = BIT(3),
163 }; 163 };
164 164
165 /** 165 /**
166 * struct ieee80211_chanctx_conf - channel context that vifs may be tuned to 166 * struct ieee80211_chanctx_conf - channel context that vifs may be tuned to
167 * 167 *
168 * This is the driver-visible part. The ieee80211_chanctx 168 * This is the driver-visible part. The ieee80211_chanctx
169 * that contains it is visible in mac80211 only. 169 * that contains it is visible in mac80211 only.
170 * 170 *
171 * @def: the channel definition 171 * @def: the channel definition
172 * @rx_chains_static: The number of RX chains that must always be 172 * @rx_chains_static: The number of RX chains that must always be
173 * active on the channel to receive MIMO transmissions 173 * active on the channel to receive MIMO transmissions
174 * @rx_chains_dynamic: The number of RX chains that must be enabled 174 * @rx_chains_dynamic: The number of RX chains that must be enabled
175 * after RTS/CTS handshake to receive SMPS MIMO transmissions; 175 * after RTS/CTS handshake to receive SMPS MIMO transmissions;
176 * this will always be >= @rx_chains_static. 176 * this will always be >= @rx_chains_static.
177 * @radar_enabled: whether radar detection is enabled on this channel. 177 * @radar_enabled: whether radar detection is enabled on this channel.
178 * @drv_priv: data area for driver use, will always be aligned to 178 * @drv_priv: data area for driver use, will always be aligned to
179 * sizeof(void *), size is determined in hw information. 179 * sizeof(void *), size is determined in hw information.
180 */ 180 */
181 struct ieee80211_chanctx_conf { 181 struct ieee80211_chanctx_conf {
182 struct cfg80211_chan_def def; 182 struct cfg80211_chan_def def;
183 183
184 u8 rx_chains_static, rx_chains_dynamic; 184 u8 rx_chains_static, rx_chains_dynamic;
185 185
186 bool radar_enabled; 186 bool radar_enabled;
187 187
188 u8 drv_priv[0] __aligned(sizeof(void *)); 188 u8 drv_priv[0] __aligned(sizeof(void *));
189 }; 189 };
190 190
191 /** 191 /**
192 * enum ieee80211_bss_change - BSS change notification flags 192 * enum ieee80211_bss_change - BSS change notification flags
193 * 193 *
194 * These flags are used with the bss_info_changed() callback 194 * These flags are used with the bss_info_changed() callback
195 * to indicate which BSS parameter changed. 195 * to indicate which BSS parameter changed.
196 * 196 *
197 * @BSS_CHANGED_ASSOC: association status changed (associated/disassociated), 197 * @BSS_CHANGED_ASSOC: association status changed (associated/disassociated),
198 * also implies a change in the AID. 198 * also implies a change in the AID.
199 * @BSS_CHANGED_ERP_CTS_PROT: CTS protection changed 199 * @BSS_CHANGED_ERP_CTS_PROT: CTS protection changed
200 * @BSS_CHANGED_ERP_PREAMBLE: preamble changed 200 * @BSS_CHANGED_ERP_PREAMBLE: preamble changed
201 * @BSS_CHANGED_ERP_SLOT: slot timing changed 201 * @BSS_CHANGED_ERP_SLOT: slot timing changed
202 * @BSS_CHANGED_HT: 802.11n parameters changed 202 * @BSS_CHANGED_HT: 802.11n parameters changed
203 * @BSS_CHANGED_BASIC_RATES: Basic rateset changed 203 * @BSS_CHANGED_BASIC_RATES: Basic rateset changed
204 * @BSS_CHANGED_BEACON_INT: Beacon interval changed 204 * @BSS_CHANGED_BEACON_INT: Beacon interval changed
205 * @BSS_CHANGED_BSSID: BSSID changed, for whatever 205 * @BSS_CHANGED_BSSID: BSSID changed, for whatever
206 * reason (IBSS and managed mode) 206 * reason (IBSS and managed mode)
207 * @BSS_CHANGED_BEACON: Beacon data changed, retrieve 207 * @BSS_CHANGED_BEACON: Beacon data changed, retrieve
208 * new beacon (beaconing modes) 208 * new beacon (beaconing modes)
209 * @BSS_CHANGED_BEACON_ENABLED: Beaconing should be 209 * @BSS_CHANGED_BEACON_ENABLED: Beaconing should be
210 * enabled/disabled (beaconing modes) 210 * enabled/disabled (beaconing modes)
211 * @BSS_CHANGED_CQM: Connection quality monitor config changed 211 * @BSS_CHANGED_CQM: Connection quality monitor config changed
212 * @BSS_CHANGED_IBSS: IBSS join status changed 212 * @BSS_CHANGED_IBSS: IBSS join status changed
213 * @BSS_CHANGED_ARP_FILTER: Hardware ARP filter address list or state changed. 213 * @BSS_CHANGED_ARP_FILTER: Hardware ARP filter address list or state changed.
214 * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note 214 * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note
215 * that it is only ever disabled for station mode. 215 * that it is only ever disabled for station mode.
216 * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface. 216 * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface.
217 * @BSS_CHANGED_SSID: SSID changed for this BSS (AP and IBSS mode) 217 * @BSS_CHANGED_SSID: SSID changed for this BSS (AP and IBSS mode)
218 * @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode) 218 * @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode)
219 * @BSS_CHANGED_PS: PS changed for this BSS (STA mode) 219 * @BSS_CHANGED_PS: PS changed for this BSS (STA mode)
220 * @BSS_CHANGED_TXPOWER: TX power setting changed for this interface 220 * @BSS_CHANGED_TXPOWER: TX power setting changed for this interface
221 * @BSS_CHANGED_P2P_PS: P2P powersave settings (CTWindow, opportunistic PS) 221 * @BSS_CHANGED_P2P_PS: P2P powersave settings (CTWindow, opportunistic PS)
222 * changed (currently only in P2P client mode, GO mode will be later) 222 * changed (currently only in P2P client mode, GO mode will be later)
223 * @BSS_CHANGED_BEACON_INFO: Data from the AP's beacon became available: 223 * @BSS_CHANGED_BEACON_INFO: Data from the AP's beacon became available:
224 * currently dtim_period only is under consideration. 224 * currently dtim_period only is under consideration.
225 * @BSS_CHANGED_BANDWIDTH: The bandwidth used by this interface changed, 225 * @BSS_CHANGED_BANDWIDTH: The bandwidth used by this interface changed,
226 * note that this is only called when it changes after the channel 226 * note that this is only called when it changes after the channel
227 * context had been assigned. 227 * context had been assigned.
228 */ 228 */
229 enum ieee80211_bss_change { 229 enum ieee80211_bss_change {
230 BSS_CHANGED_ASSOC = 1<<0, 230 BSS_CHANGED_ASSOC = 1<<0,
231 BSS_CHANGED_ERP_CTS_PROT = 1<<1, 231 BSS_CHANGED_ERP_CTS_PROT = 1<<1,
232 BSS_CHANGED_ERP_PREAMBLE = 1<<2, 232 BSS_CHANGED_ERP_PREAMBLE = 1<<2,
233 BSS_CHANGED_ERP_SLOT = 1<<3, 233 BSS_CHANGED_ERP_SLOT = 1<<3,
234 BSS_CHANGED_HT = 1<<4, 234 BSS_CHANGED_HT = 1<<4,
235 BSS_CHANGED_BASIC_RATES = 1<<5, 235 BSS_CHANGED_BASIC_RATES = 1<<5,
236 BSS_CHANGED_BEACON_INT = 1<<6, 236 BSS_CHANGED_BEACON_INT = 1<<6,
237 BSS_CHANGED_BSSID = 1<<7, 237 BSS_CHANGED_BSSID = 1<<7,
238 BSS_CHANGED_BEACON = 1<<8, 238 BSS_CHANGED_BEACON = 1<<8,
239 BSS_CHANGED_BEACON_ENABLED = 1<<9, 239 BSS_CHANGED_BEACON_ENABLED = 1<<9,
240 BSS_CHANGED_CQM = 1<<10, 240 BSS_CHANGED_CQM = 1<<10,
241 BSS_CHANGED_IBSS = 1<<11, 241 BSS_CHANGED_IBSS = 1<<11,
242 BSS_CHANGED_ARP_FILTER = 1<<12, 242 BSS_CHANGED_ARP_FILTER = 1<<12,
243 BSS_CHANGED_QOS = 1<<13, 243 BSS_CHANGED_QOS = 1<<13,
244 BSS_CHANGED_IDLE = 1<<14, 244 BSS_CHANGED_IDLE = 1<<14,
245 BSS_CHANGED_SSID = 1<<15, 245 BSS_CHANGED_SSID = 1<<15,
246 BSS_CHANGED_AP_PROBE_RESP = 1<<16, 246 BSS_CHANGED_AP_PROBE_RESP = 1<<16,
247 BSS_CHANGED_PS = 1<<17, 247 BSS_CHANGED_PS = 1<<17,
248 BSS_CHANGED_TXPOWER = 1<<18, 248 BSS_CHANGED_TXPOWER = 1<<18,
249 BSS_CHANGED_P2P_PS = 1<<19, 249 BSS_CHANGED_P2P_PS = 1<<19,
250 BSS_CHANGED_BEACON_INFO = 1<<20, 250 BSS_CHANGED_BEACON_INFO = 1<<20,
251 BSS_CHANGED_BANDWIDTH = 1<<21, 251 BSS_CHANGED_BANDWIDTH = 1<<21,
252 252
253 /* when adding here, make sure to change ieee80211_reconfig */ 253 /* when adding here, make sure to change ieee80211_reconfig */
254 }; 254 };
255 255
256 /* 256 /*
257 * The maximum number of IPv4 addresses listed for ARP filtering. If the number 257 * The maximum number of IPv4 addresses listed for ARP filtering. If the number
258 * of addresses for an interface increase beyond this value, hardware ARP 258 * of addresses for an interface increase beyond this value, hardware ARP
259 * filtering will be disabled. 259 * filtering will be disabled.
260 */ 260 */
261 #define IEEE80211_BSS_ARP_ADDR_LIST_LEN 4 261 #define IEEE80211_BSS_ARP_ADDR_LIST_LEN 4
262 262
263 /** 263 /**
264 * enum ieee80211_rssi_event - RSSI threshold event 264 * enum ieee80211_rssi_event - RSSI threshold event
265 * An indicator for when RSSI goes below/above a certain threshold. 265 * An indicator for when RSSI goes below/above a certain threshold.
266 * @RSSI_EVENT_HIGH: AP's rssi crossed the high threshold set by the driver. 266 * @RSSI_EVENT_HIGH: AP's rssi crossed the high threshold set by the driver.
267 * @RSSI_EVENT_LOW: AP's rssi crossed the low threshold set by the driver. 267 * @RSSI_EVENT_LOW: AP's rssi crossed the low threshold set by the driver.
268 */ 268 */
269 enum ieee80211_rssi_event { 269 enum ieee80211_rssi_event {
270 RSSI_EVENT_HIGH, 270 RSSI_EVENT_HIGH,
271 RSSI_EVENT_LOW, 271 RSSI_EVENT_LOW,
272 }; 272 };
273 273
274 /** 274 /**
275 * struct ieee80211_bss_conf - holds the BSS's changing parameters 275 * struct ieee80211_bss_conf - holds the BSS's changing parameters
276 * 276 *
277 * This structure keeps information about a BSS (and an association 277 * This structure keeps information about a BSS (and an association
278 * to that BSS) that can change during the lifetime of the BSS. 278 * to that BSS) that can change during the lifetime of the BSS.
279 * 279 *
280 * @assoc: association status 280 * @assoc: association status
281 * @ibss_joined: indicates whether this station is part of an IBSS 281 * @ibss_joined: indicates whether this station is part of an IBSS
282 * or not 282 * or not
283 * @ibss_creator: indicates if a new IBSS network is being created 283 * @ibss_creator: indicates if a new IBSS network is being created
284 * @aid: association ID number, valid only when @assoc is true 284 * @aid: association ID number, valid only when @assoc is true
285 * @use_cts_prot: use CTS protection 285 * @use_cts_prot: use CTS protection
286 * @use_short_preamble: use 802.11b short preamble; 286 * @use_short_preamble: use 802.11b short preamble;
287 * if the hardware cannot handle this it must set the 287 * if the hardware cannot handle this it must set the
288 * IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE hardware flag 288 * IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE hardware flag
289 * @use_short_slot: use short slot time (only relevant for ERP); 289 * @use_short_slot: use short slot time (only relevant for ERP);
290 * if the hardware cannot handle this it must set the 290 * if the hardware cannot handle this it must set the
291 * IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE hardware flag 291 * IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE hardware flag
292 * @dtim_period: num of beacons before the next DTIM, for beaconing, 292 * @dtim_period: num of beacons before the next DTIM, for beaconing,
293 * valid in station mode only if after the driver was notified 293 * valid in station mode only if after the driver was notified
294 * with the %BSS_CHANGED_BEACON_INFO flag, will be non-zero then. 294 * with the %BSS_CHANGED_BEACON_INFO flag, will be non-zero then.
295 * @sync_tsf: last beacon's/probe response's TSF timestamp (could be old 295 * @sync_tsf: last beacon's/probe response's TSF timestamp (could be old
296 * as it may have been received during scanning long ago). If the 296 * as it may have been received during scanning long ago). If the
297 * HW flag %IEEE80211_HW_TIMING_BEACON_ONLY is set, then this can 297 * HW flag %IEEE80211_HW_TIMING_BEACON_ONLY is set, then this can
298 * only come from a beacon, but might not become valid until after 298 * only come from a beacon, but might not become valid until after
299 * association when a beacon is received (which is notified with the 299 * association when a beacon is received (which is notified with the
300 * %BSS_CHANGED_DTIM flag.) 300 * %BSS_CHANGED_DTIM flag.)
301 * @sync_device_ts: the device timestamp corresponding to the sync_tsf, 301 * @sync_device_ts: the device timestamp corresponding to the sync_tsf,
302 * the driver/device can use this to calculate synchronisation 302 * the driver/device can use this to calculate synchronisation
303 * (see @sync_tsf) 303 * (see @sync_tsf)
304 * @sync_dtim_count: Only valid when %IEEE80211_HW_TIMING_BEACON_ONLY 304 * @sync_dtim_count: Only valid when %IEEE80211_HW_TIMING_BEACON_ONLY
305 * is requested, see @sync_tsf/@sync_device_ts. 305 * is requested, see @sync_tsf/@sync_device_ts.
306 * @beacon_int: beacon interval 306 * @beacon_int: beacon interval
307 * @assoc_capability: capabilities taken from assoc resp 307 * @assoc_capability: capabilities taken from assoc resp
308 * @basic_rates: bitmap of basic rates, each bit stands for an 308 * @basic_rates: bitmap of basic rates, each bit stands for an
309 * index into the rate table configured by the driver in 309 * index into the rate table configured by the driver in
310 * the current band. 310 * the current band.
311 * @beacon_rate: associated AP's beacon TX rate 311 * @beacon_rate: associated AP's beacon TX rate
312 * @mcast_rate: per-band multicast rate index + 1 (0: disabled) 312 * @mcast_rate: per-band multicast rate index + 1 (0: disabled)
313 * @bssid: The BSSID for this BSS 313 * @bssid: The BSSID for this BSS
314 * @enable_beacon: whether beaconing should be enabled or not 314 * @enable_beacon: whether beaconing should be enabled or not
315 * @chandef: Channel definition for this BSS -- the hardware might be 315 * @chandef: Channel definition for this BSS -- the hardware might be
316 * configured a higher bandwidth than this BSS uses, for example. 316 * configured a higher bandwidth than this BSS uses, for example.
317 * @ht_operation_mode: HT operation mode like in &struct ieee80211_ht_operation. 317 * @ht_operation_mode: HT operation mode like in &struct ieee80211_ht_operation.
318 * This field is only valid when the channel type is one of the HT types. 318 * This field is only valid when the channel type is one of the HT types.
319 * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value 319 * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value
320 * implies disabled 320 * implies disabled
321 * @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis 321 * @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis
322 * @arp_addr_list: List of IPv4 addresses for hardware ARP filtering. The 322 * @arp_addr_list: List of IPv4 addresses for hardware ARP filtering. The
323 * may filter ARP queries targeted for other addresses than listed here. 323 * may filter ARP queries targeted for other addresses than listed here.
324 * The driver must allow ARP queries targeted for all address listed here 324 * The driver must allow ARP queries targeted for all address listed here
325 * to pass through. An empty list implies no ARP queries need to pass. 325 * to pass through. An empty list implies no ARP queries need to pass.
326 * @arp_addr_cnt: Number of addresses currently on the list. Note that this 326 * @arp_addr_cnt: Number of addresses currently on the list. Note that this
327 * may be larger than %IEEE80211_BSS_ARP_ADDR_LIST_LEN (the arp_addr_list 327 * may be larger than %IEEE80211_BSS_ARP_ADDR_LIST_LEN (the arp_addr_list
328 * array size), it's up to the driver what to do in that case. 328 * array size), it's up to the driver what to do in that case.
329 * @qos: This is a QoS-enabled BSS. 329 * @qos: This is a QoS-enabled BSS.
330 * @idle: This interface is idle. There's also a global idle flag in the 330 * @idle: This interface is idle. There's also a global idle flag in the
331 * hardware config which may be more appropriate depending on what 331 * hardware config which may be more appropriate depending on what
332 * your driver/device needs to do. 332 * your driver/device needs to do.
333 * @ps: power-save mode (STA only). This flag is NOT affected by 333 * @ps: power-save mode (STA only). This flag is NOT affected by
334 * offchannel/dynamic_ps operations. 334 * offchannel/dynamic_ps operations.
335 * @ssid: The SSID of the current vif. Valid in AP and IBSS mode. 335 * @ssid: The SSID of the current vif. Valid in AP and IBSS mode.
336 * @ssid_len: Length of SSID given in @ssid. 336 * @ssid_len: Length of SSID given in @ssid.
337 * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode. 337 * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode.
338 * @txpower: TX power in dBm 338 * @txpower: TX power in dBm
339 * @p2p_noa_attr: P2P NoA attribute for P2P powersave 339 * @p2p_noa_attr: P2P NoA attribute for P2P powersave
340 */ 340 */
341 struct ieee80211_bss_conf { 341 struct ieee80211_bss_conf {
342 const u8 *bssid; 342 const u8 *bssid;
343 /* association related data */ 343 /* association related data */
344 bool assoc, ibss_joined; 344 bool assoc, ibss_joined;
345 bool ibss_creator; 345 bool ibss_creator;
346 u16 aid; 346 u16 aid;
347 /* erp related data */ 347 /* erp related data */
348 bool use_cts_prot; 348 bool use_cts_prot;
349 bool use_short_preamble; 349 bool use_short_preamble;
350 bool use_short_slot; 350 bool use_short_slot;
351 bool enable_beacon; 351 bool enable_beacon;
352 u8 dtim_period; 352 u8 dtim_period;
353 u16 beacon_int; 353 u16 beacon_int;
354 u16 assoc_capability; 354 u16 assoc_capability;
355 u64 sync_tsf; 355 u64 sync_tsf;
356 u32 sync_device_ts; 356 u32 sync_device_ts;
357 u8 sync_dtim_count; 357 u8 sync_dtim_count;
358 u32 basic_rates; 358 u32 basic_rates;
359 struct ieee80211_rate *beacon_rate; 359 struct ieee80211_rate *beacon_rate;
360 int mcast_rate[IEEE80211_NUM_BANDS]; 360 int mcast_rate[IEEE80211_NUM_BANDS];
361 u16 ht_operation_mode; 361 u16 ht_operation_mode;
362 s32 cqm_rssi_thold; 362 s32 cqm_rssi_thold;
363 u32 cqm_rssi_hyst; 363 u32 cqm_rssi_hyst;
364 struct cfg80211_chan_def chandef; 364 struct cfg80211_chan_def chandef;
365 __be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN]; 365 __be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN];
366 int arp_addr_cnt; 366 int arp_addr_cnt;
367 bool qos; 367 bool qos;
368 bool idle; 368 bool idle;
369 bool ps; 369 bool ps;
370 u8 ssid[IEEE80211_MAX_SSID_LEN]; 370 u8 ssid[IEEE80211_MAX_SSID_LEN];
371 size_t ssid_len; 371 size_t ssid_len;
372 bool hidden_ssid; 372 bool hidden_ssid;
373 int txpower; 373 int txpower;
374 struct ieee80211_p2p_noa_attr p2p_noa_attr; 374 struct ieee80211_p2p_noa_attr p2p_noa_attr;
375 }; 375 };
376 376
377 /** 377 /**
378 * enum mac80211_tx_info_flags - flags to describe transmission information/status 378 * enum mac80211_tx_info_flags - flags to describe transmission information/status
379 * 379 *
380 * These flags are used with the @flags member of &ieee80211_tx_info. 380 * These flags are used with the @flags member of &ieee80211_tx_info.
381 * 381 *
382 * @IEEE80211_TX_CTL_REQ_TX_STATUS: require TX status callback for this frame. 382 * @IEEE80211_TX_CTL_REQ_TX_STATUS: require TX status callback for this frame.
383 * @IEEE80211_TX_CTL_ASSIGN_SEQ: The driver has to assign a sequence 383 * @IEEE80211_TX_CTL_ASSIGN_SEQ: The driver has to assign a sequence
384 * number to this frame, taking care of not overwriting the fragment 384 * number to this frame, taking care of not overwriting the fragment
385 * number and increasing the sequence number only when the 385 * number and increasing the sequence number only when the
386 * IEEE80211_TX_CTL_FIRST_FRAGMENT flag is set. mac80211 will properly 386 * IEEE80211_TX_CTL_FIRST_FRAGMENT flag is set. mac80211 will properly
387 * assign sequence numbers to QoS-data frames but cannot do so correctly 387 * assign sequence numbers to QoS-data frames but cannot do so correctly
388 * for non-QoS-data and management frames because beacons need them from 388 * for non-QoS-data and management frames because beacons need them from
389 * that counter as well and mac80211 cannot guarantee proper sequencing. 389 * that counter as well and mac80211 cannot guarantee proper sequencing.
390 * If this flag is set, the driver should instruct the hardware to 390 * If this flag is set, the driver should instruct the hardware to
391 * assign a sequence number to the frame or assign one itself. Cf. IEEE 391 * assign a sequence number to the frame or assign one itself. Cf. IEEE
392 * 802.11-2007 7.1.3.4.1 paragraph 3. This flag will always be set for 392 * 802.11-2007 7.1.3.4.1 paragraph 3. This flag will always be set for
393 * beacons and always be clear for frames without a sequence number field. 393 * beacons and always be clear for frames without a sequence number field.
394 * @IEEE80211_TX_CTL_NO_ACK: tell the low level not to wait for an ack 394 * @IEEE80211_TX_CTL_NO_ACK: tell the low level not to wait for an ack
395 * @IEEE80211_TX_CTL_CLEAR_PS_FILT: clear powersave filter for destination 395 * @IEEE80211_TX_CTL_CLEAR_PS_FILT: clear powersave filter for destination
396 * station 396 * station
397 * @IEEE80211_TX_CTL_FIRST_FRAGMENT: this is a first fragment of the frame 397 * @IEEE80211_TX_CTL_FIRST_FRAGMENT: this is a first fragment of the frame
398 * @IEEE80211_TX_CTL_SEND_AFTER_DTIM: send this frame after DTIM beacon 398 * @IEEE80211_TX_CTL_SEND_AFTER_DTIM: send this frame after DTIM beacon
399 * @IEEE80211_TX_CTL_AMPDU: this frame should be sent as part of an A-MPDU 399 * @IEEE80211_TX_CTL_AMPDU: this frame should be sent as part of an A-MPDU
400 * @IEEE80211_TX_CTL_INJECTED: Frame was injected, internal to mac80211. 400 * @IEEE80211_TX_CTL_INJECTED: Frame was injected, internal to mac80211.
401 * @IEEE80211_TX_STAT_TX_FILTERED: The frame was not transmitted 401 * @IEEE80211_TX_STAT_TX_FILTERED: The frame was not transmitted
402 * because the destination STA was in powersave mode. Note that to 402 * because the destination STA was in powersave mode. Note that to
403 * avoid race conditions, the filter must be set by the hardware or 403 * avoid race conditions, the filter must be set by the hardware or
404 * firmware upon receiving a frame that indicates that the station 404 * firmware upon receiving a frame that indicates that the station
405 * went to sleep (must be done on device to filter frames already on 405 * went to sleep (must be done on device to filter frames already on
406 * the queue) and may only be unset after mac80211 gives the OK for 406 * the queue) and may only be unset after mac80211 gives the OK for
407 * that by setting the IEEE80211_TX_CTL_CLEAR_PS_FILT (see above), 407 * that by setting the IEEE80211_TX_CTL_CLEAR_PS_FILT (see above),
408 * since only then is it guaranteed that no more frames are in the 408 * since only then is it guaranteed that no more frames are in the
409 * hardware queue. 409 * hardware queue.
410 * @IEEE80211_TX_STAT_ACK: Frame was acknowledged 410 * @IEEE80211_TX_STAT_ACK: Frame was acknowledged
411 * @IEEE80211_TX_STAT_AMPDU: The frame was aggregated, so status 411 * @IEEE80211_TX_STAT_AMPDU: The frame was aggregated, so status
412 * is for the whole aggregation. 412 * is for the whole aggregation.
413 * @IEEE80211_TX_STAT_AMPDU_NO_BACK: no block ack was returned, 413 * @IEEE80211_TX_STAT_AMPDU_NO_BACK: no block ack was returned,
414 * so consider using block ack request (BAR). 414 * so consider using block ack request (BAR).
415 * @IEEE80211_TX_CTL_RATE_CTRL_PROBE: internal to mac80211, can be 415 * @IEEE80211_TX_CTL_RATE_CTRL_PROBE: internal to mac80211, can be
416 * set by rate control algorithms to indicate probe rate, will 416 * set by rate control algorithms to indicate probe rate, will
417 * be cleared for fragmented frames (except on the last fragment) 417 * be cleared for fragmented frames (except on the last fragment)
418 * @IEEE80211_TX_INTFL_OFFCHAN_TX_OK: Internal to mac80211. Used to indicate 418 * @IEEE80211_TX_INTFL_OFFCHAN_TX_OK: Internal to mac80211. Used to indicate
419 * that a frame can be transmitted while the queues are stopped for 419 * that a frame can be transmitted while the queues are stopped for
420 * off-channel operation. 420 * off-channel operation.
421 * @IEEE80211_TX_INTFL_NEED_TXPROCESSING: completely internal to mac80211, 421 * @IEEE80211_TX_INTFL_NEED_TXPROCESSING: completely internal to mac80211,
422 * used to indicate that a pending frame requires TX processing before 422 * used to indicate that a pending frame requires TX processing before
423 * it can be sent out. 423 * it can be sent out.
424 * @IEEE80211_TX_INTFL_RETRIED: completely internal to mac80211, 424 * @IEEE80211_TX_INTFL_RETRIED: completely internal to mac80211,
425 * used to indicate that a frame was already retried due to PS 425 * used to indicate that a frame was already retried due to PS
426 * @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211, 426 * @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211,
427 * used to indicate frame should not be encrypted 427 * used to indicate frame should not be encrypted
428 * @IEEE80211_TX_CTL_NO_PS_BUFFER: This frame is a response to a poll 428 * @IEEE80211_TX_CTL_NO_PS_BUFFER: This frame is a response to a poll
429 * frame (PS-Poll or uAPSD) or a non-bufferable MMPDU and must 429 * frame (PS-Poll or uAPSD) or a non-bufferable MMPDU and must
430 * be sent although the station is in powersave mode. 430 * be sent although the station is in powersave mode.
431 * @IEEE80211_TX_CTL_MORE_FRAMES: More frames will be passed to the 431 * @IEEE80211_TX_CTL_MORE_FRAMES: More frames will be passed to the
432 * transmit function after the current frame, this can be used 432 * transmit function after the current frame, this can be used
433 * by drivers to kick the DMA queue only if unset or when the 433 * by drivers to kick the DMA queue only if unset or when the
434 * queue gets full. 434 * queue gets full.
435 * @IEEE80211_TX_INTFL_RETRANSMISSION: This frame is being retransmitted 435 * @IEEE80211_TX_INTFL_RETRANSMISSION: This frame is being retransmitted
436 * after TX status because the destination was asleep, it must not 436 * after TX status because the destination was asleep, it must not
437 * be modified again (no seqno assignment, crypto, etc.) 437 * be modified again (no seqno assignment, crypto, etc.)
438 * @IEEE80211_TX_INTFL_MLME_CONN_TX: This frame was transmitted by the MLME 438 * @IEEE80211_TX_INTFL_MLME_CONN_TX: This frame was transmitted by the MLME
439 * code for connection establishment, this indicates that its status 439 * code for connection establishment, this indicates that its status
440 * should kick the MLME state machine. 440 * should kick the MLME state machine.
441 * @IEEE80211_TX_INTFL_NL80211_FRAME_TX: Frame was requested through nl80211 441 * @IEEE80211_TX_INTFL_NL80211_FRAME_TX: Frame was requested through nl80211
442 * MLME command (internal to mac80211 to figure out whether to send TX 442 * MLME command (internal to mac80211 to figure out whether to send TX
443 * status to user space) 443 * status to user space)
444 * @IEEE80211_TX_CTL_LDPC: tells the driver to use LDPC for this frame 444 * @IEEE80211_TX_CTL_LDPC: tells the driver to use LDPC for this frame
445 * @IEEE80211_TX_CTL_STBC: Enables Space-Time Block Coding (STBC) for this 445 * @IEEE80211_TX_CTL_STBC: Enables Space-Time Block Coding (STBC) for this
446 * frame and selects the maximum number of streams that it can use. 446 * frame and selects the maximum number of streams that it can use.
447 * @IEEE80211_TX_CTL_TX_OFFCHAN: Marks this packet to be transmitted on 447 * @IEEE80211_TX_CTL_TX_OFFCHAN: Marks this packet to be transmitted on
448 * the off-channel channel when a remain-on-channel offload is done 448 * the off-channel channel when a remain-on-channel offload is done
449 * in hardware -- normal packets still flow and are expected to be 449 * in hardware -- normal packets still flow and are expected to be
450 * handled properly by the device. 450 * handled properly by the device.
451 * @IEEE80211_TX_INTFL_TKIP_MIC_FAILURE: Marks this packet to be used for TKIP 451 * @IEEE80211_TX_INTFL_TKIP_MIC_FAILURE: Marks this packet to be used for TKIP
452 * testing. It will be sent out with incorrect Michael MIC key to allow 452 * testing. It will be sent out with incorrect Michael MIC key to allow
453 * TKIP countermeasures to be tested. 453 * TKIP countermeasures to be tested.
454 * @IEEE80211_TX_CTL_NO_CCK_RATE: This frame will be sent at non CCK rate. 454 * @IEEE80211_TX_CTL_NO_CCK_RATE: This frame will be sent at non CCK rate.
455 * This flag is actually used for management frame especially for P2P 455 * This flag is actually used for management frame especially for P2P
456 * frames not being sent at CCK rate in 2GHz band. 456 * frames not being sent at CCK rate in 2GHz band.
457 * @IEEE80211_TX_STATUS_EOSP: This packet marks the end of service period, 457 * @IEEE80211_TX_STATUS_EOSP: This packet marks the end of service period,
458 * when its status is reported the service period ends. For frames in 458 * when its status is reported the service period ends. For frames in
459 * an SP that mac80211 transmits, it is already set; for driver frames 459 * an SP that mac80211 transmits, it is already set; for driver frames
460 * the driver may set this flag. It is also used to do the same for 460 * the driver may set this flag. It is also used to do the same for
461 * PS-Poll responses. 461 * PS-Poll responses.
462 * @IEEE80211_TX_CTL_USE_MINRATE: This frame will be sent at lowest rate. 462 * @IEEE80211_TX_CTL_USE_MINRATE: This frame will be sent at lowest rate.
463 * This flag is used to send nullfunc frame at minimum rate when 463 * This flag is used to send nullfunc frame at minimum rate when
464 * the nullfunc is used for connection monitoring purpose. 464 * the nullfunc is used for connection monitoring purpose.
465 * @IEEE80211_TX_CTL_DONTFRAG: Don't fragment this packet even if it 465 * @IEEE80211_TX_CTL_DONTFRAG: Don't fragment this packet even if it
466 * would be fragmented by size (this is optional, only used for 466 * would be fragmented by size (this is optional, only used for
467 * monitor injection). 467 * monitor injection).
468 * @IEEE80211_TX_CTL_PS_RESPONSE: This frame is a response to a poll 468 * @IEEE80211_TX_CTL_PS_RESPONSE: This frame is a response to a poll
469 * frame (PS-Poll or uAPSD). 469 * frame (PS-Poll or uAPSD).
470 * 470 *
471 * Note: If you have to add new flags to the enumeration, then don't 471 * Note: If you have to add new flags to the enumeration, then don't
472 * forget to update %IEEE80211_TX_TEMPORARY_FLAGS when necessary. 472 * forget to update %IEEE80211_TX_TEMPORARY_FLAGS when necessary.
473 */ 473 */
474 enum mac80211_tx_info_flags { 474 enum mac80211_tx_info_flags {
475 IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), 475 IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0),
476 IEEE80211_TX_CTL_ASSIGN_SEQ = BIT(1), 476 IEEE80211_TX_CTL_ASSIGN_SEQ = BIT(1),
477 IEEE80211_TX_CTL_NO_ACK = BIT(2), 477 IEEE80211_TX_CTL_NO_ACK = BIT(2),
478 IEEE80211_TX_CTL_CLEAR_PS_FILT = BIT(3), 478 IEEE80211_TX_CTL_CLEAR_PS_FILT = BIT(3),
479 IEEE80211_TX_CTL_FIRST_FRAGMENT = BIT(4), 479 IEEE80211_TX_CTL_FIRST_FRAGMENT = BIT(4),
480 IEEE80211_TX_CTL_SEND_AFTER_DTIM = BIT(5), 480 IEEE80211_TX_CTL_SEND_AFTER_DTIM = BIT(5),
481 IEEE80211_TX_CTL_AMPDU = BIT(6), 481 IEEE80211_TX_CTL_AMPDU = BIT(6),
482 IEEE80211_TX_CTL_INJECTED = BIT(7), 482 IEEE80211_TX_CTL_INJECTED = BIT(7),
483 IEEE80211_TX_STAT_TX_FILTERED = BIT(8), 483 IEEE80211_TX_STAT_TX_FILTERED = BIT(8),
484 IEEE80211_TX_STAT_ACK = BIT(9), 484 IEEE80211_TX_STAT_ACK = BIT(9),
485 IEEE80211_TX_STAT_AMPDU = BIT(10), 485 IEEE80211_TX_STAT_AMPDU = BIT(10),
486 IEEE80211_TX_STAT_AMPDU_NO_BACK = BIT(11), 486 IEEE80211_TX_STAT_AMPDU_NO_BACK = BIT(11),
487 IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12), 487 IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12),
488 IEEE80211_TX_INTFL_OFFCHAN_TX_OK = BIT(13), 488 IEEE80211_TX_INTFL_OFFCHAN_TX_OK = BIT(13),
489 IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14), 489 IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14),
490 IEEE80211_TX_INTFL_RETRIED = BIT(15), 490 IEEE80211_TX_INTFL_RETRIED = BIT(15),
491 IEEE80211_TX_INTFL_DONT_ENCRYPT = BIT(16), 491 IEEE80211_TX_INTFL_DONT_ENCRYPT = BIT(16),
492 IEEE80211_TX_CTL_NO_PS_BUFFER = BIT(17), 492 IEEE80211_TX_CTL_NO_PS_BUFFER = BIT(17),
493 IEEE80211_TX_CTL_MORE_FRAMES = BIT(18), 493 IEEE80211_TX_CTL_MORE_FRAMES = BIT(18),
494 IEEE80211_TX_INTFL_RETRANSMISSION = BIT(19), 494 IEEE80211_TX_INTFL_RETRANSMISSION = BIT(19),
495 IEEE80211_TX_INTFL_MLME_CONN_TX = BIT(20), 495 IEEE80211_TX_INTFL_MLME_CONN_TX = BIT(20),
496 IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21), 496 IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21),
497 IEEE80211_TX_CTL_LDPC = BIT(22), 497 IEEE80211_TX_CTL_LDPC = BIT(22),
498 IEEE80211_TX_CTL_STBC = BIT(23) | BIT(24), 498 IEEE80211_TX_CTL_STBC = BIT(23) | BIT(24),
499 IEEE80211_TX_CTL_TX_OFFCHAN = BIT(25), 499 IEEE80211_TX_CTL_TX_OFFCHAN = BIT(25),
500 IEEE80211_TX_INTFL_TKIP_MIC_FAILURE = BIT(26), 500 IEEE80211_TX_INTFL_TKIP_MIC_FAILURE = BIT(26),
501 IEEE80211_TX_CTL_NO_CCK_RATE = BIT(27), 501 IEEE80211_TX_CTL_NO_CCK_RATE = BIT(27),
502 IEEE80211_TX_STATUS_EOSP = BIT(28), 502 IEEE80211_TX_STATUS_EOSP = BIT(28),
503 IEEE80211_TX_CTL_USE_MINRATE = BIT(29), 503 IEEE80211_TX_CTL_USE_MINRATE = BIT(29),
504 IEEE80211_TX_CTL_DONTFRAG = BIT(30), 504 IEEE80211_TX_CTL_DONTFRAG = BIT(30),
505 IEEE80211_TX_CTL_PS_RESPONSE = BIT(31), 505 IEEE80211_TX_CTL_PS_RESPONSE = BIT(31),
506 }; 506 };
507 507
508 #define IEEE80211_TX_CTL_STBC_SHIFT 23 508 #define IEEE80211_TX_CTL_STBC_SHIFT 23
509 509
510 /** 510 /**
511 * enum mac80211_tx_control_flags - flags to describe transmit control 511 * enum mac80211_tx_control_flags - flags to describe transmit control
512 * 512 *
513 * @IEEE80211_TX_CTRL_PORT_CTRL_PROTO: this frame is a port control 513 * @IEEE80211_TX_CTRL_PORT_CTRL_PROTO: this frame is a port control
514 * protocol frame (e.g. EAP) 514 * protocol frame (e.g. EAP)
515 * 515 *
516 * These flags are used in tx_info->control.flags. 516 * These flags are used in tx_info->control.flags.
517 */ 517 */
518 enum mac80211_tx_control_flags { 518 enum mac80211_tx_control_flags {
519 IEEE80211_TX_CTRL_PORT_CTRL_PROTO = BIT(0), 519 IEEE80211_TX_CTRL_PORT_CTRL_PROTO = BIT(0),
520 }; 520 };
521 521
522 /* 522 /*
523 * This definition is used as a mask to clear all temporary flags, which are 523 * This definition is used as a mask to clear all temporary flags, which are
524 * set by the tx handlers for each transmission attempt by the mac80211 stack. 524 * set by the tx handlers for each transmission attempt by the mac80211 stack.
525 */ 525 */
526 #define IEEE80211_TX_TEMPORARY_FLAGS (IEEE80211_TX_CTL_NO_ACK | \ 526 #define IEEE80211_TX_TEMPORARY_FLAGS (IEEE80211_TX_CTL_NO_ACK | \
527 IEEE80211_TX_CTL_CLEAR_PS_FILT | IEEE80211_TX_CTL_FIRST_FRAGMENT | \ 527 IEEE80211_TX_CTL_CLEAR_PS_FILT | IEEE80211_TX_CTL_FIRST_FRAGMENT | \
528 IEEE80211_TX_CTL_SEND_AFTER_DTIM | IEEE80211_TX_CTL_AMPDU | \ 528 IEEE80211_TX_CTL_SEND_AFTER_DTIM | IEEE80211_TX_CTL_AMPDU | \
529 IEEE80211_TX_STAT_TX_FILTERED | IEEE80211_TX_STAT_ACK | \ 529 IEEE80211_TX_STAT_TX_FILTERED | IEEE80211_TX_STAT_ACK | \
530 IEEE80211_TX_STAT_AMPDU | IEEE80211_TX_STAT_AMPDU_NO_BACK | \ 530 IEEE80211_TX_STAT_AMPDU | IEEE80211_TX_STAT_AMPDU_NO_BACK | \
531 IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_NO_PS_BUFFER | \ 531 IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_NO_PS_BUFFER | \
532 IEEE80211_TX_CTL_MORE_FRAMES | IEEE80211_TX_CTL_LDPC | \ 532 IEEE80211_TX_CTL_MORE_FRAMES | IEEE80211_TX_CTL_LDPC | \
533 IEEE80211_TX_CTL_STBC | IEEE80211_TX_STATUS_EOSP) 533 IEEE80211_TX_CTL_STBC | IEEE80211_TX_STATUS_EOSP)
534 534
535 /** 535 /**
536 * enum mac80211_rate_control_flags - per-rate flags set by the 536 * enum mac80211_rate_control_flags - per-rate flags set by the
537 * Rate Control algorithm. 537 * Rate Control algorithm.
538 * 538 *
539 * These flags are set by the Rate control algorithm for each rate during tx, 539 * These flags are set by the Rate control algorithm for each rate during tx,
540 * in the @flags member of struct ieee80211_tx_rate. 540 * in the @flags member of struct ieee80211_tx_rate.
541 * 541 *
542 * @IEEE80211_TX_RC_USE_RTS_CTS: Use RTS/CTS exchange for this rate. 542 * @IEEE80211_TX_RC_USE_RTS_CTS: Use RTS/CTS exchange for this rate.
543 * @IEEE80211_TX_RC_USE_CTS_PROTECT: CTS-to-self protection is required. 543 * @IEEE80211_TX_RC_USE_CTS_PROTECT: CTS-to-self protection is required.
544 * This is set if the current BSS requires ERP protection. 544 * This is set if the current BSS requires ERP protection.
545 * @IEEE80211_TX_RC_USE_SHORT_PREAMBLE: Use short preamble. 545 * @IEEE80211_TX_RC_USE_SHORT_PREAMBLE: Use short preamble.
546 * @IEEE80211_TX_RC_MCS: HT rate. 546 * @IEEE80211_TX_RC_MCS: HT rate.
547 * @IEEE80211_TX_RC_VHT_MCS: VHT MCS rate, in this case the idx field is split 547 * @IEEE80211_TX_RC_VHT_MCS: VHT MCS rate, in this case the idx field is split
548 * into a higher 4 bits (Nss) and lower 4 bits (MCS number) 548 * into a higher 4 bits (Nss) and lower 4 bits (MCS number)
549 * @IEEE80211_TX_RC_GREEN_FIELD: Indicates whether this rate should be used in 549 * @IEEE80211_TX_RC_GREEN_FIELD: Indicates whether this rate should be used in
550 * Greenfield mode. 550 * Greenfield mode.
551 * @IEEE80211_TX_RC_40_MHZ_WIDTH: Indicates if the Channel Width should be 40 MHz. 551 * @IEEE80211_TX_RC_40_MHZ_WIDTH: Indicates if the Channel Width should be 40 MHz.
552 * @IEEE80211_TX_RC_80_MHZ_WIDTH: Indicates 80 MHz transmission 552 * @IEEE80211_TX_RC_80_MHZ_WIDTH: Indicates 80 MHz transmission
553 * @IEEE80211_TX_RC_160_MHZ_WIDTH: Indicates 160 MHz transmission 553 * @IEEE80211_TX_RC_160_MHZ_WIDTH: Indicates 160 MHz transmission
554 * (80+80 isn't supported yet) 554 * (80+80 isn't supported yet)
555 * @IEEE80211_TX_RC_DUP_DATA: The frame should be transmitted on both of the 555 * @IEEE80211_TX_RC_DUP_DATA: The frame should be transmitted on both of the
556 * adjacent 20 MHz channels, if the current channel type is 556 * adjacent 20 MHz channels, if the current channel type is
557 * NL80211_CHAN_HT40MINUS or NL80211_CHAN_HT40PLUS. 557 * NL80211_CHAN_HT40MINUS or NL80211_CHAN_HT40PLUS.
558 * @IEEE80211_TX_RC_SHORT_GI: Short Guard interval should be used for this rate. 558 * @IEEE80211_TX_RC_SHORT_GI: Short Guard interval should be used for this rate.
559 */ 559 */
560 enum mac80211_rate_control_flags { 560 enum mac80211_rate_control_flags {
561 IEEE80211_TX_RC_USE_RTS_CTS = BIT(0), 561 IEEE80211_TX_RC_USE_RTS_CTS = BIT(0),
562 IEEE80211_TX_RC_USE_CTS_PROTECT = BIT(1), 562 IEEE80211_TX_RC_USE_CTS_PROTECT = BIT(1),
563 IEEE80211_TX_RC_USE_SHORT_PREAMBLE = BIT(2), 563 IEEE80211_TX_RC_USE_SHORT_PREAMBLE = BIT(2),
564 564
565 /* rate index is an HT/VHT MCS instead of an index */ 565 /* rate index is an HT/VHT MCS instead of an index */
566 IEEE80211_TX_RC_MCS = BIT(3), 566 IEEE80211_TX_RC_MCS = BIT(3),
567 IEEE80211_TX_RC_GREEN_FIELD = BIT(4), 567 IEEE80211_TX_RC_GREEN_FIELD = BIT(4),
568 IEEE80211_TX_RC_40_MHZ_WIDTH = BIT(5), 568 IEEE80211_TX_RC_40_MHZ_WIDTH = BIT(5),
569 IEEE80211_TX_RC_DUP_DATA = BIT(6), 569 IEEE80211_TX_RC_DUP_DATA = BIT(6),
570 IEEE80211_TX_RC_SHORT_GI = BIT(7), 570 IEEE80211_TX_RC_SHORT_GI = BIT(7),
571 IEEE80211_TX_RC_VHT_MCS = BIT(8), 571 IEEE80211_TX_RC_VHT_MCS = BIT(8),
572 IEEE80211_TX_RC_80_MHZ_WIDTH = BIT(9), 572 IEEE80211_TX_RC_80_MHZ_WIDTH = BIT(9),
573 IEEE80211_TX_RC_160_MHZ_WIDTH = BIT(10), 573 IEEE80211_TX_RC_160_MHZ_WIDTH = BIT(10),
574 }; 574 };
575 575
576 576
577 /* there are 40 bytes if you don't need the rateset to be kept */ 577 /* there are 40 bytes if you don't need the rateset to be kept */
578 #define IEEE80211_TX_INFO_DRIVER_DATA_SIZE 40 578 #define IEEE80211_TX_INFO_DRIVER_DATA_SIZE 40
579 579
580 /* if you do need the rateset, then you have less space */ 580 /* if you do need the rateset, then you have less space */
581 #define IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE 24 581 #define IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE 24
582 582
583 /* maximum number of rate stages */ 583 /* maximum number of rate stages */
584 #define IEEE80211_TX_MAX_RATES 4 584 #define IEEE80211_TX_MAX_RATES 4
585 585
586 /* maximum number of rate table entries */ 586 /* maximum number of rate table entries */
587 #define IEEE80211_TX_RATE_TABLE_SIZE 4 587 #define IEEE80211_TX_RATE_TABLE_SIZE 4
588 588
589 /** 589 /**
590 * struct ieee80211_tx_rate - rate selection/status 590 * struct ieee80211_tx_rate - rate selection/status
591 * 591 *
592 * @idx: rate index to attempt to send with 592 * @idx: rate index to attempt to send with
593 * @flags: rate control flags (&enum mac80211_rate_control_flags) 593 * @flags: rate control flags (&enum mac80211_rate_control_flags)
594 * @count: number of tries in this rate before going to the next rate 594 * @count: number of tries in this rate before going to the next rate
595 * 595 *
596 * A value of -1 for @idx indicates an invalid rate and, if used 596 * A value of -1 for @idx indicates an invalid rate and, if used
597 * in an array of retry rates, that no more rates should be tried. 597 * in an array of retry rates, that no more rates should be tried.
598 * 598 *
599 * When used for transmit status reporting, the driver should 599 * When used for transmit status reporting, the driver should
600 * always report the rate along with the flags it used. 600 * always report the rate along with the flags it used.
601 * 601 *
602 * &struct ieee80211_tx_info contains an array of these structs 602 * &struct ieee80211_tx_info contains an array of these structs
603 * in the control information, and it will be filled by the rate 603 * in the control information, and it will be filled by the rate
604 * control algorithm according to what should be sent. For example, 604 * control algorithm according to what should be sent. For example,
605 * if this array contains, in the format { <idx>, <count> } the 605 * if this array contains, in the format { <idx>, <count> } the
606 * information 606 * information
607 * { 3, 2 }, { 2, 2 }, { 1, 4 }, { -1, 0 }, { -1, 0 } 607 * { 3, 2 }, { 2, 2 }, { 1, 4 }, { -1, 0 }, { -1, 0 }
608 * then this means that the frame should be transmitted 608 * then this means that the frame should be transmitted
609 * up to twice at rate 3, up to twice at rate 2, and up to four 609 * up to twice at rate 3, up to twice at rate 2, and up to four
610 * times at rate 1 if it doesn't get acknowledged. Say it gets 610 * times at rate 1 if it doesn't get acknowledged. Say it gets
611 * acknowledged by the peer after the fifth attempt, the status 611 * acknowledged by the peer after the fifth attempt, the status
612 * information should then contain 612 * information should then contain
613 * { 3, 2 }, { 2, 2 }, { 1, 1 }, { -1, 0 } ... 613 * { 3, 2 }, { 2, 2 }, { 1, 1 }, { -1, 0 } ...
614 * since it was transmitted twice at rate 3, twice at rate 2 614 * since it was transmitted twice at rate 3, twice at rate 2
615 * and once at rate 1 after which we received an acknowledgement. 615 * and once at rate 1 after which we received an acknowledgement.
616 */ 616 */
617 struct ieee80211_tx_rate { 617 struct ieee80211_tx_rate {
618 s8 idx; 618 s8 idx;
619 u16 count:5, 619 u16 count:5,
620 flags:11; 620 flags:11;
621 } __packed; 621 } __packed;
622 622
623 #define IEEE80211_MAX_TX_RETRY 31 623 #define IEEE80211_MAX_TX_RETRY 31
624 624
625 static inline void ieee80211_rate_set_vht(struct ieee80211_tx_rate *rate, 625 static inline void ieee80211_rate_set_vht(struct ieee80211_tx_rate *rate,
626 u8 mcs, u8 nss) 626 u8 mcs, u8 nss)
627 { 627 {
628 WARN_ON(mcs & ~0xF); 628 WARN_ON(mcs & ~0xF);
629 WARN_ON((nss - 1) & ~0x7); 629 WARN_ON((nss - 1) & ~0x7);
630 rate->idx = ((nss - 1) << 4) | mcs; 630 rate->idx = ((nss - 1) << 4) | mcs;
631 } 631 }
632 632
633 static inline u8 633 static inline u8
634 ieee80211_rate_get_vht_mcs(const struct ieee80211_tx_rate *rate) 634 ieee80211_rate_get_vht_mcs(const struct ieee80211_tx_rate *rate)
635 { 635 {
636 return rate->idx & 0xF; 636 return rate->idx & 0xF;
637 } 637 }
638 638
639 static inline u8 639 static inline u8
640 ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate) 640 ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate)
641 { 641 {
642 return (rate->idx >> 4) + 1; 642 return (rate->idx >> 4) + 1;
643 } 643 }
644 644
645 /** 645 /**
646 * struct ieee80211_tx_info - skb transmit information 646 * struct ieee80211_tx_info - skb transmit information
647 * 647 *
648 * This structure is placed in skb->cb for three uses: 648 * This structure is placed in skb->cb for three uses:
649 * (1) mac80211 TX control - mac80211 tells the driver what to do 649 * (1) mac80211 TX control - mac80211 tells the driver what to do
650 * (2) driver internal use (if applicable) 650 * (2) driver internal use (if applicable)
651 * (3) TX status information - driver tells mac80211 what happened 651 * (3) TX status information - driver tells mac80211 what happened
652 * 652 *
653 * @flags: transmit info flags, defined above 653 * @flags: transmit info flags, defined above
654 * @band: the band to transmit on (use for checking for races) 654 * @band: the band to transmit on (use for checking for races)
655 * @hw_queue: HW queue to put the frame on, skb_get_queue_mapping() gives the AC 655 * @hw_queue: HW queue to put the frame on, skb_get_queue_mapping() gives the AC
656 * @ack_frame_id: internal frame ID for TX status, used internally 656 * @ack_frame_id: internal frame ID for TX status, used internally
657 * @control: union for control data 657 * @control: union for control data
658 * @status: union for status data 658 * @status: union for status data
659 * @driver_data: array of driver_data pointers 659 * @driver_data: array of driver_data pointers
660 * @ampdu_ack_len: number of acked aggregated frames. 660 * @ampdu_ack_len: number of acked aggregated frames.
661 * relevant only if IEEE80211_TX_STAT_AMPDU was set. 661 * relevant only if IEEE80211_TX_STAT_AMPDU was set.
662 * @ampdu_len: number of aggregated frames. 662 * @ampdu_len: number of aggregated frames.
663 * relevant only if IEEE80211_TX_STAT_AMPDU was set. 663 * relevant only if IEEE80211_TX_STAT_AMPDU was set.
664 * @ack_signal: signal strength of the ACK frame 664 * @ack_signal: signal strength of the ACK frame
665 */ 665 */
666 struct ieee80211_tx_info { 666 struct ieee80211_tx_info {
667 /* common information */ 667 /* common information */
668 u32 flags; 668 u32 flags;
669 u8 band; 669 u8 band;
670 670
671 u8 hw_queue; 671 u8 hw_queue;
672 672
673 u16 ack_frame_id; 673 u16 ack_frame_id;
674 674
675 union { 675 union {
676 struct { 676 struct {
677 union { 677 union {
678 /* rate control */ 678 /* rate control */
679 struct { 679 struct {
680 struct ieee80211_tx_rate rates[ 680 struct ieee80211_tx_rate rates[
681 IEEE80211_TX_MAX_RATES]; 681 IEEE80211_TX_MAX_RATES];
682 s8 rts_cts_rate_idx; 682 s8 rts_cts_rate_idx;
683 u8 use_rts:1; 683 u8 use_rts:1;
684 u8 use_cts_prot:1; 684 u8 use_cts_prot:1;
685 u8 short_preamble:1; 685 u8 short_preamble:1;
686 u8 skip_table:1; 686 u8 skip_table:1;
687 /* 2 bytes free */ 687 /* 2 bytes free */
688 }; 688 };
689 /* only needed before rate control */ 689 /* only needed before rate control */
690 unsigned long jiffies; 690 unsigned long jiffies;
691 }; 691 };
692 /* NB: vif can be NULL for injected frames */ 692 /* NB: vif can be NULL for injected frames */
693 struct ieee80211_vif *vif; 693 struct ieee80211_vif *vif;
694 struct ieee80211_key_conf *hw_key; 694 struct ieee80211_key_conf *hw_key;
695 u32 flags; 695 u32 flags;
696 /* 4 bytes free */ 696 /* 4 bytes free */
697 } control; 697 } control;
698 struct { 698 struct {
699 struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES]; 699 struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES];
700 int ack_signal; 700 int ack_signal;
701 u8 ampdu_ack_len; 701 u8 ampdu_ack_len;
702 u8 ampdu_len; 702 u8 ampdu_len;
703 u8 antenna; 703 u8 antenna;
704 /* 21 bytes free */ 704 /* 21 bytes free */
705 } status; 705 } status;
706 struct { 706 struct {
707 struct ieee80211_tx_rate driver_rates[ 707 struct ieee80211_tx_rate driver_rates[
708 IEEE80211_TX_MAX_RATES]; 708 IEEE80211_TX_MAX_RATES];
709 u8 pad[4]; 709 u8 pad[4];
710 710
711 void *rate_driver_data[ 711 void *rate_driver_data[
712 IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE / sizeof(void *)]; 712 IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE / sizeof(void *)];
713 }; 713 };
714 void *driver_data[ 714 void *driver_data[
715 IEEE80211_TX_INFO_DRIVER_DATA_SIZE / sizeof(void *)]; 715 IEEE80211_TX_INFO_DRIVER_DATA_SIZE / sizeof(void *)];
716 }; 716 };
717 }; 717 };
718 718
719 /** 719 /**
720 * struct ieee80211_sched_scan_ies - scheduled scan IEs 720 * struct ieee80211_sched_scan_ies - scheduled scan IEs
721 * 721 *
722 * This structure is used to pass the appropriate IEs to be used in scheduled 722 * This structure is used to pass the appropriate IEs to be used in scheduled
723 * scans for all bands. It contains both the IEs passed from the userspace 723 * scans for all bands. It contains both the IEs passed from the userspace
724 * and the ones generated by mac80211. 724 * and the ones generated by mac80211.
725 * 725 *
726 * @ie: array with the IEs for each supported band 726 * @ie: array with the IEs for each supported band
727 * @len: array with the total length of the IEs for each band 727 * @len: array with the total length of the IEs for each band
728 */ 728 */
729 struct ieee80211_sched_scan_ies { 729 struct ieee80211_sched_scan_ies {
730 u8 *ie[IEEE80211_NUM_BANDS]; 730 u8 *ie[IEEE80211_NUM_BANDS];
731 size_t len[IEEE80211_NUM_BANDS]; 731 size_t len[IEEE80211_NUM_BANDS];
732 }; 732 };
733 733
734 static inline struct ieee80211_tx_info *IEEE80211_SKB_CB(struct sk_buff *skb) 734 static inline struct ieee80211_tx_info *IEEE80211_SKB_CB(struct sk_buff *skb)
735 { 735 {
736 return (struct ieee80211_tx_info *)skb->cb; 736 return (struct ieee80211_tx_info *)skb->cb;
737 } 737 }
738 738
739 static inline struct ieee80211_rx_status *IEEE80211_SKB_RXCB(struct sk_buff *skb) 739 static inline struct ieee80211_rx_status *IEEE80211_SKB_RXCB(struct sk_buff *skb)
740 { 740 {
741 return (struct ieee80211_rx_status *)skb->cb; 741 return (struct ieee80211_rx_status *)skb->cb;
742 } 742 }
743 743
744 /** 744 /**
745 * ieee80211_tx_info_clear_status - clear TX status 745 * ieee80211_tx_info_clear_status - clear TX status
746 * 746 *
747 * @info: The &struct ieee80211_tx_info to be cleared. 747 * @info: The &struct ieee80211_tx_info to be cleared.
748 * 748 *
749 * When the driver passes an skb back to mac80211, it must report 749 * When the driver passes an skb back to mac80211, it must report
750 * a number of things in TX status. This function clears everything 750 * a number of things in TX status. This function clears everything
751 * in the TX status but the rate control information (it does clear 751 * in the TX status but the rate control information (it does clear
752 * the count since you need to fill that in anyway). 752 * the count since you need to fill that in anyway).
753 * 753 *
754 * NOTE: You can only use this function if you do NOT use 754 * NOTE: You can only use this function if you do NOT use
755 * info->driver_data! Use info->rate_driver_data 755 * info->driver_data! Use info->rate_driver_data
756 * instead if you need only the less space that allows. 756 * instead if you need only the less space that allows.
757 */ 757 */
758 static inline void 758 static inline void
759 ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info) 759 ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
760 { 760 {
761 int i; 761 int i;
762 762
763 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) != 763 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) !=
764 offsetof(struct ieee80211_tx_info, control.rates)); 764 offsetof(struct ieee80211_tx_info, control.rates));
765 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) != 765 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) !=
766 offsetof(struct ieee80211_tx_info, driver_rates)); 766 offsetof(struct ieee80211_tx_info, driver_rates));
767 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) != 8); 767 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) != 8);
768 /* clear the rate counts */ 768 /* clear the rate counts */
769 for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) 769 for (i = 0; i < IEEE80211_TX_MAX_RATES; i++)
770 info->status.rates[i].count = 0; 770 info->status.rates[i].count = 0;
771 771
772 BUILD_BUG_ON( 772 BUILD_BUG_ON(
773 offsetof(struct ieee80211_tx_info, status.ack_signal) != 20); 773 offsetof(struct ieee80211_tx_info, status.ack_signal) != 20);
774 memset(&info->status.ampdu_ack_len, 0, 774 memset(&info->status.ampdu_ack_len, 0,
775 sizeof(struct ieee80211_tx_info) - 775 sizeof(struct ieee80211_tx_info) -
776 offsetof(struct ieee80211_tx_info, status.ampdu_ack_len)); 776 offsetof(struct ieee80211_tx_info, status.ampdu_ack_len));
777 } 777 }
778 778
779 779
780 /** 780 /**
781 * enum mac80211_rx_flags - receive flags 781 * enum mac80211_rx_flags - receive flags
782 * 782 *
783 * These flags are used with the @flag member of &struct ieee80211_rx_status. 783 * These flags are used with the @flag member of &struct ieee80211_rx_status.
784 * @RX_FLAG_MMIC_ERROR: Michael MIC error was reported on this frame. 784 * @RX_FLAG_MMIC_ERROR: Michael MIC error was reported on this frame.
785 * Use together with %RX_FLAG_MMIC_STRIPPED. 785 * Use together with %RX_FLAG_MMIC_STRIPPED.
786 * @RX_FLAG_DECRYPTED: This frame was decrypted in hardware. 786 * @RX_FLAG_DECRYPTED: This frame was decrypted in hardware.
787 * @RX_FLAG_MMIC_STRIPPED: the Michael MIC is stripped off this frame, 787 * @RX_FLAG_MMIC_STRIPPED: the Michael MIC is stripped off this frame,
788 * verification has been done by the hardware. 788 * verification has been done by the hardware.
789 * @RX_FLAG_IV_STRIPPED: The IV/ICV are stripped from this frame. 789 * @RX_FLAG_IV_STRIPPED: The IV/ICV are stripped from this frame.
790 * If this flag is set, the stack cannot do any replay detection 790 * If this flag is set, the stack cannot do any replay detection
791 * hence the driver or hardware will have to do that. 791 * hence the driver or hardware will have to do that.
792 * @RX_FLAG_FAILED_FCS_CRC: Set this flag if the FCS check failed on 792 * @RX_FLAG_FAILED_FCS_CRC: Set this flag if the FCS check failed on
793 * the frame. 793 * the frame.
794 * @RX_FLAG_FAILED_PLCP_CRC: Set this flag if the PCLP check failed on 794 * @RX_FLAG_FAILED_PLCP_CRC: Set this flag if the PCLP check failed on
795 * the frame. 795 * the frame.
796 * @RX_FLAG_MACTIME_START: The timestamp passed in the RX status (@mactime 796 * @RX_FLAG_MACTIME_START: The timestamp passed in the RX status (@mactime
797 * field) is valid and contains the time the first symbol of the MPDU 797 * field) is valid and contains the time the first symbol of the MPDU
798 * was received. This is useful in monitor mode and for proper IBSS 798 * was received. This is useful in monitor mode and for proper IBSS
799 * merging. 799 * merging.
800 * @RX_FLAG_MACTIME_END: The timestamp passed in the RX status (@mactime 800 * @RX_FLAG_MACTIME_END: The timestamp passed in the RX status (@mactime
801 * field) is valid and contains the time the last symbol of the MPDU 801 * field) is valid and contains the time the last symbol of the MPDU
802 * (including FCS) was received. 802 * (including FCS) was received.
803 * @RX_FLAG_SHORTPRE: Short preamble was used for this frame 803 * @RX_FLAG_SHORTPRE: Short preamble was used for this frame
804 * @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index 804 * @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index
805 * @RX_FLAG_VHT: VHT MCS was used and rate_index is MCS index 805 * @RX_FLAG_VHT: VHT MCS was used and rate_index is MCS index
806 * @RX_FLAG_40MHZ: HT40 (40 MHz) was used 806 * @RX_FLAG_40MHZ: HT40 (40 MHz) was used
807 * @RX_FLAG_80MHZ: 80 MHz was used 807 * @RX_FLAG_80MHZ: 80 MHz was used
808 * @RX_FLAG_80P80MHZ: 80+80 MHz was used 808 * @RX_FLAG_80P80MHZ: 80+80 MHz was used
809 * @RX_FLAG_160MHZ: 160 MHz was used 809 * @RX_FLAG_160MHZ: 160 MHz was used
810 * @RX_FLAG_SHORT_GI: Short guard interval was used 810 * @RX_FLAG_SHORT_GI: Short guard interval was used
811 * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present. 811 * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present.
812 * Valid only for data frames (mainly A-MPDU) 812 * Valid only for data frames (mainly A-MPDU)
813 * @RX_FLAG_HT_GF: This frame was received in a HT-greenfield transmission, if 813 * @RX_FLAG_HT_GF: This frame was received in a HT-greenfield transmission, if
814 * the driver fills this value it should add %IEEE80211_RADIOTAP_MCS_HAVE_FMT 814 * the driver fills this value it should add %IEEE80211_RADIOTAP_MCS_HAVE_FMT
815 * to hw.radiotap_mcs_details to advertise that fact 815 * to hw.radiotap_mcs_details to advertise that fact
816 * @RX_FLAG_AMPDU_DETAILS: A-MPDU details are known, in particular the reference 816 * @RX_FLAG_AMPDU_DETAILS: A-MPDU details are known, in particular the reference
817 * number (@ampdu_reference) must be populated and be a distinct number for 817 * number (@ampdu_reference) must be populated and be a distinct number for
818 * each A-MPDU 818 * each A-MPDU
819 * @RX_FLAG_AMPDU_REPORT_ZEROLEN: driver reports 0-length subframes 819 * @RX_FLAG_AMPDU_REPORT_ZEROLEN: driver reports 0-length subframes
820 * @RX_FLAG_AMPDU_IS_ZEROLEN: This is a zero-length subframe, for 820 * @RX_FLAG_AMPDU_IS_ZEROLEN: This is a zero-length subframe, for
821 * monitoring purposes only 821 * monitoring purposes only
822 * @RX_FLAG_AMPDU_LAST_KNOWN: last subframe is known, should be set on all 822 * @RX_FLAG_AMPDU_LAST_KNOWN: last subframe is known, should be set on all
823 * subframes of a single A-MPDU 823 * subframes of a single A-MPDU
824 * @RX_FLAG_AMPDU_IS_LAST: this subframe is the last subframe of the A-MPDU 824 * @RX_FLAG_AMPDU_IS_LAST: this subframe is the last subframe of the A-MPDU
825 * @RX_FLAG_AMPDU_DELIM_CRC_ERROR: A delimiter CRC error has been detected 825 * @RX_FLAG_AMPDU_DELIM_CRC_ERROR: A delimiter CRC error has been detected
826 * on this subframe 826 * on this subframe
827 * @RX_FLAG_AMPDU_DELIM_CRC_KNOWN: The delimiter CRC field is known (the CRC 827 * @RX_FLAG_AMPDU_DELIM_CRC_KNOWN: The delimiter CRC field is known (the CRC
828 * is stored in the @ampdu_delimiter_crc field) 828 * is stored in the @ampdu_delimiter_crc field)
829 * @RX_FLAG_STBC_MASK: STBC 2 bit bitmask. 1 - Nss=1, 2 - Nss=2, 3 - Nss=3 829 * @RX_FLAG_STBC_MASK: STBC 2 bit bitmask. 1 - Nss=1, 2 - Nss=2, 3 - Nss=3
830 * @RX_FLAG_10MHZ: 10 MHz (half channel) was used 830 * @RX_FLAG_10MHZ: 10 MHz (half channel) was used
831 * @RX_FLAG_5MHZ: 5 MHz (quarter channel) was used 831 * @RX_FLAG_5MHZ: 5 MHz (quarter channel) was used
832 */ 832 */
833 enum mac80211_rx_flags { 833 enum mac80211_rx_flags {
834 RX_FLAG_MMIC_ERROR = BIT(0), 834 RX_FLAG_MMIC_ERROR = BIT(0),
835 RX_FLAG_DECRYPTED = BIT(1), 835 RX_FLAG_DECRYPTED = BIT(1),
836 RX_FLAG_MMIC_STRIPPED = BIT(3), 836 RX_FLAG_MMIC_STRIPPED = BIT(3),
837 RX_FLAG_IV_STRIPPED = BIT(4), 837 RX_FLAG_IV_STRIPPED = BIT(4),
838 RX_FLAG_FAILED_FCS_CRC = BIT(5), 838 RX_FLAG_FAILED_FCS_CRC = BIT(5),
839 RX_FLAG_FAILED_PLCP_CRC = BIT(6), 839 RX_FLAG_FAILED_PLCP_CRC = BIT(6),
840 RX_FLAG_MACTIME_START = BIT(7), 840 RX_FLAG_MACTIME_START = BIT(7),
841 RX_FLAG_SHORTPRE = BIT(8), 841 RX_FLAG_SHORTPRE = BIT(8),
842 RX_FLAG_HT = BIT(9), 842 RX_FLAG_HT = BIT(9),
843 RX_FLAG_40MHZ = BIT(10), 843 RX_FLAG_40MHZ = BIT(10),
844 RX_FLAG_SHORT_GI = BIT(11), 844 RX_FLAG_SHORT_GI = BIT(11),
845 RX_FLAG_NO_SIGNAL_VAL = BIT(12), 845 RX_FLAG_NO_SIGNAL_VAL = BIT(12),
846 RX_FLAG_HT_GF = BIT(13), 846 RX_FLAG_HT_GF = BIT(13),
847 RX_FLAG_AMPDU_DETAILS = BIT(14), 847 RX_FLAG_AMPDU_DETAILS = BIT(14),
848 RX_FLAG_AMPDU_REPORT_ZEROLEN = BIT(15), 848 RX_FLAG_AMPDU_REPORT_ZEROLEN = BIT(15),
849 RX_FLAG_AMPDU_IS_ZEROLEN = BIT(16), 849 RX_FLAG_AMPDU_IS_ZEROLEN = BIT(16),
850 RX_FLAG_AMPDU_LAST_KNOWN = BIT(17), 850 RX_FLAG_AMPDU_LAST_KNOWN = BIT(17),
851 RX_FLAG_AMPDU_IS_LAST = BIT(18), 851 RX_FLAG_AMPDU_IS_LAST = BIT(18),
852 RX_FLAG_AMPDU_DELIM_CRC_ERROR = BIT(19), 852 RX_FLAG_AMPDU_DELIM_CRC_ERROR = BIT(19),
853 RX_FLAG_AMPDU_DELIM_CRC_KNOWN = BIT(20), 853 RX_FLAG_AMPDU_DELIM_CRC_KNOWN = BIT(20),
854 RX_FLAG_MACTIME_END = BIT(21), 854 RX_FLAG_MACTIME_END = BIT(21),
855 RX_FLAG_VHT = BIT(22), 855 RX_FLAG_VHT = BIT(22),
856 RX_FLAG_80MHZ = BIT(23), 856 RX_FLAG_80MHZ = BIT(23),
857 RX_FLAG_80P80MHZ = BIT(24), 857 RX_FLAG_80P80MHZ = BIT(24),
858 RX_FLAG_160MHZ = BIT(25), 858 RX_FLAG_160MHZ = BIT(25),
859 RX_FLAG_STBC_MASK = BIT(26) | BIT(27), 859 RX_FLAG_STBC_MASK = BIT(26) | BIT(27),
860 RX_FLAG_10MHZ = BIT(28), 860 RX_FLAG_10MHZ = BIT(28),
861 RX_FLAG_5MHZ = BIT(29), 861 RX_FLAG_5MHZ = BIT(29),
862 }; 862 };
863 863
864 #define RX_FLAG_STBC_SHIFT 26 864 #define RX_FLAG_STBC_SHIFT 26
865 865
866 /** 866 /**
867 * struct ieee80211_rx_status - receive status 867 * struct ieee80211_rx_status - receive status
868 * 868 *
869 * The low-level driver should provide this information (the subset 869 * The low-level driver should provide this information (the subset
870 * supported by hardware) to the 802.11 code with each received 870 * supported by hardware) to the 802.11 code with each received
871 * frame, in the skb's control buffer (cb). 871 * frame, in the skb's control buffer (cb).
872 * 872 *
873 * @mactime: value in microseconds of the 64-bit Time Synchronization Function 873 * @mactime: value in microseconds of the 64-bit Time Synchronization Function
874 * (TSF) timer when the first data symbol (MPDU) arrived at the hardware. 874 * (TSF) timer when the first data symbol (MPDU) arrived at the hardware.
875 * @device_timestamp: arbitrary timestamp for the device, mac80211 doesn't use 875 * @device_timestamp: arbitrary timestamp for the device, mac80211 doesn't use
876 * it but can store it and pass it back to the driver for synchronisation 876 * it but can store it and pass it back to the driver for synchronisation
877 * @band: the active band when this frame was received 877 * @band: the active band when this frame was received
878 * @freq: frequency the radio was tuned to when receiving this frame, in MHz 878 * @freq: frequency the radio was tuned to when receiving this frame, in MHz
879 * @signal: signal strength when receiving this frame, either in dBm, in dB or 879 * @signal: signal strength when receiving this frame, either in dBm, in dB or
880 * unspecified depending on the hardware capabilities flags 880 * unspecified depending on the hardware capabilities flags
881 * @IEEE80211_HW_SIGNAL_* 881 * @IEEE80211_HW_SIGNAL_*
882 * @chains: bitmask of receive chains for which separate signal strength 882 * @chains: bitmask of receive chains for which separate signal strength
883 * values were filled. 883 * values were filled.
884 * @chain_signal: per-chain signal strength, in dBm (unlike @signal, doesn't 884 * @chain_signal: per-chain signal strength, in dBm (unlike @signal, doesn't
885 * support dB or unspecified units) 885 * support dB or unspecified units)
886 * @antenna: antenna used 886 * @antenna: antenna used
887 * @rate_idx: index of data rate into band's supported rates or MCS index if 887 * @rate_idx: index of data rate into band's supported rates or MCS index if
888 * HT or VHT is used (%RX_FLAG_HT/%RX_FLAG_VHT) 888 * HT or VHT is used (%RX_FLAG_HT/%RX_FLAG_VHT)
889 * @vht_nss: number of streams (VHT only) 889 * @vht_nss: number of streams (VHT only)
890 * @flag: %RX_FLAG_* 890 * @flag: %RX_FLAG_*
891 * @rx_flags: internal RX flags for mac80211 891 * @rx_flags: internal RX flags for mac80211
892 * @ampdu_reference: A-MPDU reference number, must be a different value for 892 * @ampdu_reference: A-MPDU reference number, must be a different value for
893 * each A-MPDU but the same for each subframe within one A-MPDU 893 * each A-MPDU but the same for each subframe within one A-MPDU
894 * @ampdu_delimiter_crc: A-MPDU delimiter CRC 894 * @ampdu_delimiter_crc: A-MPDU delimiter CRC
895 * @vendor_radiotap_bitmap: radiotap vendor namespace presence bitmap 895 * @vendor_radiotap_bitmap: radiotap vendor namespace presence bitmap
896 * @vendor_radiotap_len: radiotap vendor namespace length 896 * @vendor_radiotap_len: radiotap vendor namespace length
897 * @vendor_radiotap_align: radiotap vendor namespace alignment. Note 897 * @vendor_radiotap_align: radiotap vendor namespace alignment. Note
898 * that the actual data must be at the start of the SKB data 898 * that the actual data must be at the start of the SKB data
899 * already. 899 * already.
900 * @vendor_radiotap_oui: radiotap vendor namespace OUI 900 * @vendor_radiotap_oui: radiotap vendor namespace OUI
901 * @vendor_radiotap_subns: radiotap vendor sub namespace 901 * @vendor_radiotap_subns: radiotap vendor sub namespace
902 */ 902 */
903 struct ieee80211_rx_status { 903 struct ieee80211_rx_status {
904 u64 mactime; 904 u64 mactime;
905 u32 device_timestamp; 905 u32 device_timestamp;
906 u32 ampdu_reference; 906 u32 ampdu_reference;
907 u32 flag; 907 u32 flag;
908 u32 vendor_radiotap_bitmap; 908 u32 vendor_radiotap_bitmap;
909 u16 vendor_radiotap_len; 909 u16 vendor_radiotap_len;
910 u16 freq; 910 u16 freq;
911 u8 rate_idx; 911 u8 rate_idx;
912 u8 vht_nss; 912 u8 vht_nss;
913 u8 rx_flags; 913 u8 rx_flags;
914 u8 band; 914 u8 band;
915 u8 antenna; 915 u8 antenna;
916 s8 signal; 916 s8 signal;
917 u8 chains; 917 u8 chains;
918 s8 chain_signal[IEEE80211_MAX_CHAINS]; 918 s8 chain_signal[IEEE80211_MAX_CHAINS];
919 u8 ampdu_delimiter_crc; 919 u8 ampdu_delimiter_crc;
920 u8 vendor_radiotap_align; 920 u8 vendor_radiotap_align;
921 u8 vendor_radiotap_oui[3]; 921 u8 vendor_radiotap_oui[3];
922 u8 vendor_radiotap_subns; 922 u8 vendor_radiotap_subns;
923 }; 923 };
924 924
925 /** 925 /**
926 * enum ieee80211_conf_flags - configuration flags 926 * enum ieee80211_conf_flags - configuration flags
927 * 927 *
928 * Flags to define PHY configuration options 928 * Flags to define PHY configuration options
929 * 929 *
930 * @IEEE80211_CONF_MONITOR: there's a monitor interface present -- use this 930 * @IEEE80211_CONF_MONITOR: there's a monitor interface present -- use this
931 * to determine for example whether to calculate timestamps for packets 931 * to determine for example whether to calculate timestamps for packets
932 * or not, do not use instead of filter flags! 932 * or not, do not use instead of filter flags!
933 * @IEEE80211_CONF_PS: Enable 802.11 power save mode (managed mode only). 933 * @IEEE80211_CONF_PS: Enable 802.11 power save mode (managed mode only).
934 * This is the power save mode defined by IEEE 802.11-2007 section 11.2, 934 * This is the power save mode defined by IEEE 802.11-2007 section 11.2,
935 * meaning that the hardware still wakes up for beacons, is able to 935 * meaning that the hardware still wakes up for beacons, is able to
936 * transmit frames and receive the possible acknowledgment frames. 936 * transmit frames and receive the possible acknowledgment frames.
937 * Not to be confused with hardware specific wakeup/sleep states, 937 * Not to be confused with hardware specific wakeup/sleep states,
938 * driver is responsible for that. See the section "Powersave support" 938 * driver is responsible for that. See the section "Powersave support"
939 * for more. 939 * for more.
940 * @IEEE80211_CONF_IDLE: The device is running, but idle; if the flag is set 940 * @IEEE80211_CONF_IDLE: The device is running, but idle; if the flag is set
941 * the driver should be prepared to handle configuration requests but 941 * the driver should be prepared to handle configuration requests but
942 * may turn the device off as much as possible. Typically, this flag will 942 * may turn the device off as much as possible. Typically, this flag will
943 * be set when an interface is set UP but not associated or scanning, but 943 * be set when an interface is set UP but not associated or scanning, but
944 * it can also be unset in that case when monitor interfaces are active. 944 * it can also be unset in that case when monitor interfaces are active.
945 * @IEEE80211_CONF_OFFCHANNEL: The device is currently not on its main 945 * @IEEE80211_CONF_OFFCHANNEL: The device is currently not on its main
946 * operating channel. 946 * operating channel.
947 */ 947 */
948 enum ieee80211_conf_flags { 948 enum ieee80211_conf_flags {
949 IEEE80211_CONF_MONITOR = (1<<0), 949 IEEE80211_CONF_MONITOR = (1<<0),
950 IEEE80211_CONF_PS = (1<<1), 950 IEEE80211_CONF_PS = (1<<1),
951 IEEE80211_CONF_IDLE = (1<<2), 951 IEEE80211_CONF_IDLE = (1<<2),
952 IEEE80211_CONF_OFFCHANNEL = (1<<3), 952 IEEE80211_CONF_OFFCHANNEL = (1<<3),
953 }; 953 };
954 954
955 955
956 /** 956 /**
957 * enum ieee80211_conf_changed - denotes which configuration changed 957 * enum ieee80211_conf_changed - denotes which configuration changed
958 * 958 *
959 * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed 959 * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed
960 * @IEEE80211_CONF_CHANGE_MONITOR: the monitor flag changed 960 * @IEEE80211_CONF_CHANGE_MONITOR: the monitor flag changed
961 * @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed 961 * @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed
962 * @IEEE80211_CONF_CHANGE_POWER: the TX power changed 962 * @IEEE80211_CONF_CHANGE_POWER: the TX power changed
963 * @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed 963 * @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed
964 * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed 964 * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed
965 * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed 965 * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed
966 * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed 966 * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed
967 * Note that this is only valid if channel contexts are not used, 967 * Note that this is only valid if channel contexts are not used,
968 * otherwise each channel context has the number of chains listed. 968 * otherwise each channel context has the number of chains listed.
969 */ 969 */
970 enum ieee80211_conf_changed { 970 enum ieee80211_conf_changed {
971 IEEE80211_CONF_CHANGE_SMPS = BIT(1), 971 IEEE80211_CONF_CHANGE_SMPS = BIT(1),
972 IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), 972 IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2),
973 IEEE80211_CONF_CHANGE_MONITOR = BIT(3), 973 IEEE80211_CONF_CHANGE_MONITOR = BIT(3),
974 IEEE80211_CONF_CHANGE_PS = BIT(4), 974 IEEE80211_CONF_CHANGE_PS = BIT(4),
975 IEEE80211_CONF_CHANGE_POWER = BIT(5), 975 IEEE80211_CONF_CHANGE_POWER = BIT(5),
976 IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), 976 IEEE80211_CONF_CHANGE_CHANNEL = BIT(6),
977 IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), 977 IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7),
978 IEEE80211_CONF_CHANGE_IDLE = BIT(8), 978 IEEE80211_CONF_CHANGE_IDLE = BIT(8),
979 }; 979 };
980 980
981 /** 981 /**
982 * enum ieee80211_smps_mode - spatial multiplexing power save mode 982 * enum ieee80211_smps_mode - spatial multiplexing power save mode
983 * 983 *
984 * @IEEE80211_SMPS_AUTOMATIC: automatic 984 * @IEEE80211_SMPS_AUTOMATIC: automatic
985 * @IEEE80211_SMPS_OFF: off 985 * @IEEE80211_SMPS_OFF: off
986 * @IEEE80211_SMPS_STATIC: static 986 * @IEEE80211_SMPS_STATIC: static
987 * @IEEE80211_SMPS_DYNAMIC: dynamic 987 * @IEEE80211_SMPS_DYNAMIC: dynamic
988 * @IEEE80211_SMPS_NUM_MODES: internal, don't use 988 * @IEEE80211_SMPS_NUM_MODES: internal, don't use
989 */ 989 */
990 enum ieee80211_smps_mode { 990 enum ieee80211_smps_mode {
991 IEEE80211_SMPS_AUTOMATIC, 991 IEEE80211_SMPS_AUTOMATIC,
992 IEEE80211_SMPS_OFF, 992 IEEE80211_SMPS_OFF,
993 IEEE80211_SMPS_STATIC, 993 IEEE80211_SMPS_STATIC,
994 IEEE80211_SMPS_DYNAMIC, 994 IEEE80211_SMPS_DYNAMIC,
995 995
996 /* keep last */ 996 /* keep last */
997 IEEE80211_SMPS_NUM_MODES, 997 IEEE80211_SMPS_NUM_MODES,
998 }; 998 };
999 999
1000 /** 1000 /**
1001 * struct ieee80211_conf - configuration of the device 1001 * struct ieee80211_conf - configuration of the device
1002 * 1002 *
1003 * This struct indicates how the driver shall configure the hardware. 1003 * This struct indicates how the driver shall configure the hardware.
1004 * 1004 *
1005 * @flags: configuration flags defined above 1005 * @flags: configuration flags defined above
1006 * 1006 *
1007 * @listen_interval: listen interval in units of beacon interval 1007 * @listen_interval: listen interval in units of beacon interval
1008 * @max_sleep_period: the maximum number of beacon intervals to sleep for 1008 * @max_sleep_period: the maximum number of beacon intervals to sleep for
1009 * before checking the beacon for a TIM bit (managed mode only); this 1009 * before checking the beacon for a TIM bit (managed mode only); this
1010 * value will be only achievable between DTIM frames, the hardware 1010 * value will be only achievable between DTIM frames, the hardware
1011 * needs to check for the multicast traffic bit in DTIM beacons. 1011 * needs to check for the multicast traffic bit in DTIM beacons.
1012 * This variable is valid only when the CONF_PS flag is set. 1012 * This variable is valid only when the CONF_PS flag is set.
1013 * @ps_dtim_period: The DTIM period of the AP we're connected to, for use 1013 * @ps_dtim_period: The DTIM period of the AP we're connected to, for use
1014 * in power saving. Power saving will not be enabled until a beacon 1014 * in power saving. Power saving will not be enabled until a beacon
1015 * has been received and the DTIM period is known. 1015 * has been received and the DTIM period is known.
1016 * @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the 1016 * @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the
1017 * powersave documentation below. This variable is valid only when 1017 * powersave documentation below. This variable is valid only when
1018 * the CONF_PS flag is set. 1018 * the CONF_PS flag is set.
1019 * 1019 *
1020 * @power_level: requested transmit power (in dBm), backward compatibility 1020 * @power_level: requested transmit power (in dBm), backward compatibility
1021 * value only that is set to the minimum of all interfaces 1021 * value only that is set to the minimum of all interfaces
1022 * 1022 *
1023 * @chandef: the channel definition to tune to 1023 * @chandef: the channel definition to tune to
1024 * @radar_enabled: whether radar detection is enabled 1024 * @radar_enabled: whether radar detection is enabled
1025 * 1025 *
1026 * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame 1026 * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame
1027 * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11, 1027 * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11,
1028 * but actually means the number of transmissions not the number of retries 1028 * but actually means the number of transmissions not the number of retries
1029 * @short_frame_max_tx_count: Maximum number of transmissions for a "short" 1029 * @short_frame_max_tx_count: Maximum number of transmissions for a "short"
1030 * frame, called "dot11ShortRetryLimit" in 802.11, but actually means the 1030 * frame, called "dot11ShortRetryLimit" in 802.11, but actually means the
1031 * number of transmissions not the number of retries 1031 * number of transmissions not the number of retries
1032 * 1032 *
1033 * @smps_mode: spatial multiplexing powersave mode; note that 1033 * @smps_mode: spatial multiplexing powersave mode; note that
1034 * %IEEE80211_SMPS_STATIC is used when the device is not 1034 * %IEEE80211_SMPS_STATIC is used when the device is not
1035 * configured for an HT channel. 1035 * configured for an HT channel.
1036 * Note that this is only valid if channel contexts are not used, 1036 * Note that this is only valid if channel contexts are not used,
1037 * otherwise each channel context has the number of chains listed. 1037 * otherwise each channel context has the number of chains listed.
1038 */ 1038 */
1039 struct ieee80211_conf { 1039 struct ieee80211_conf {
1040 u32 flags; 1040 u32 flags;
1041 int power_level, dynamic_ps_timeout; 1041 int power_level, dynamic_ps_timeout;
1042 int max_sleep_period; 1042 int max_sleep_period;
1043 1043
1044 u16 listen_interval; 1044 u16 listen_interval;
1045 u8 ps_dtim_period; 1045 u8 ps_dtim_period;
1046 1046
1047 u8 long_frame_max_tx_count, short_frame_max_tx_count; 1047 u8 long_frame_max_tx_count, short_frame_max_tx_count;
1048 1048
1049 struct cfg80211_chan_def chandef; 1049 struct cfg80211_chan_def chandef;
1050 bool radar_enabled; 1050 bool radar_enabled;
1051 enum ieee80211_smps_mode smps_mode; 1051 enum ieee80211_smps_mode smps_mode;
1052 }; 1052 };
1053 1053
1054 /** 1054 /**
1055 * struct ieee80211_channel_switch - holds the channel switch data 1055 * struct ieee80211_channel_switch - holds the channel switch data
1056 * 1056 *
1057 * The information provided in this structure is required for channel switch 1057 * The information provided in this structure is required for channel switch
1058 * operation. 1058 * operation.
1059 * 1059 *
1060 * @timestamp: value in microseconds of the 64-bit Time Synchronization 1060 * @timestamp: value in microseconds of the 64-bit Time Synchronization
1061 * Function (TSF) timer when the frame containing the channel switch 1061 * Function (TSF) timer when the frame containing the channel switch
1062 * announcement was received. This is simply the rx.mactime parameter 1062 * announcement was received. This is simply the rx.mactime parameter
1063 * the driver passed into mac80211. 1063 * the driver passed into mac80211.
1064 * @block_tx: Indicates whether transmission must be blocked before the 1064 * @block_tx: Indicates whether transmission must be blocked before the
1065 * scheduled channel switch, as indicated by the AP. 1065 * scheduled channel switch, as indicated by the AP.
1066 * @chandef: the new channel to switch to 1066 * @chandef: the new channel to switch to
1067 * @count: the number of TBTT's until the channel switch event 1067 * @count: the number of TBTT's until the channel switch event
1068 */ 1068 */
1069 struct ieee80211_channel_switch { 1069 struct ieee80211_channel_switch {
1070 u64 timestamp; 1070 u64 timestamp;
1071 bool block_tx; 1071 bool block_tx;
1072 struct cfg80211_chan_def chandef; 1072 struct cfg80211_chan_def chandef;
1073 u8 count; 1073 u8 count;
1074 }; 1074 };
1075 1075
1076 /** 1076 /**
1077 * enum ieee80211_vif_flags - virtual interface flags 1077 * enum ieee80211_vif_flags - virtual interface flags
1078 * 1078 *
1079 * @IEEE80211_VIF_BEACON_FILTER: the device performs beacon filtering 1079 * @IEEE80211_VIF_BEACON_FILTER: the device performs beacon filtering
1080 * on this virtual interface to avoid unnecessary CPU wakeups 1080 * on this virtual interface to avoid unnecessary CPU wakeups
1081 * @IEEE80211_VIF_SUPPORTS_CQM_RSSI: the device can do connection quality 1081 * @IEEE80211_VIF_SUPPORTS_CQM_RSSI: the device can do connection quality
1082 * monitoring on this virtual interface -- i.e. it can monitor 1082 * monitoring on this virtual interface -- i.e. it can monitor
1083 * connection quality related parameters, such as the RSSI level and 1083 * connection quality related parameters, such as the RSSI level and
1084 * provide notifications if configured trigger levels are reached. 1084 * provide notifications if configured trigger levels are reached.
1085 */ 1085 */
1086 enum ieee80211_vif_flags { 1086 enum ieee80211_vif_flags {
1087 IEEE80211_VIF_BEACON_FILTER = BIT(0), 1087 IEEE80211_VIF_BEACON_FILTER = BIT(0),
1088 IEEE80211_VIF_SUPPORTS_CQM_RSSI = BIT(1), 1088 IEEE80211_VIF_SUPPORTS_CQM_RSSI = BIT(1),
1089 }; 1089 };
1090 1090
1091 /** 1091 /**
1092 * struct ieee80211_vif - per-interface data 1092 * struct ieee80211_vif - per-interface data
1093 * 1093 *
1094 * Data in this structure is continually present for driver 1094 * Data in this structure is continually present for driver
1095 * use during the life of a virtual interface. 1095 * use during the life of a virtual interface.
1096 * 1096 *
1097 * @type: type of this virtual interface 1097 * @type: type of this virtual interface
1098 * @bss_conf: BSS configuration for this interface, either our own 1098 * @bss_conf: BSS configuration for this interface, either our own
1099 * or the BSS we're associated to 1099 * or the BSS we're associated to
1100 * @addr: address of this interface 1100 * @addr: address of this interface
1101 * @p2p: indicates whether this AP or STA interface is a p2p 1101 * @p2p: indicates whether this AP or STA interface is a p2p
1102 * interface, i.e. a GO or p2p-sta respectively 1102 * interface, i.e. a GO or p2p-sta respectively
1103 * @csa_active: marks whether a channel switch is going on 1103 * @csa_active: marks whether a channel switch is going on
1104 * @driver_flags: flags/capabilities the driver has for this interface, 1104 * @driver_flags: flags/capabilities the driver has for this interface,
1105 * these need to be set (or cleared) when the interface is added 1105 * these need to be set (or cleared) when the interface is added
1106 * or, if supported by the driver, the interface type is changed 1106 * or, if supported by the driver, the interface type is changed
1107 * at runtime, mac80211 will never touch this field 1107 * at runtime, mac80211 will never touch this field
1108 * @hw_queue: hardware queue for each AC 1108 * @hw_queue: hardware queue for each AC
1109 * @cab_queue: content-after-beacon (DTIM beacon really) queue, AP mode only 1109 * @cab_queue: content-after-beacon (DTIM beacon really) queue, AP mode only
1110 * @chanctx_conf: The channel context this interface is assigned to, or %NULL 1110 * @chanctx_conf: The channel context this interface is assigned to, or %NULL
1111 * when it is not assigned. This pointer is RCU-protected due to the TX 1111 * when it is not assigned. This pointer is RCU-protected due to the TX
1112 * path needing to access it; even though the netdev carrier will always 1112 * path needing to access it; even though the netdev carrier will always
1113 * be off when it is %NULL there can still be races and packets could be 1113 * be off when it is %NULL there can still be races and packets could be
1114 * processed after it switches back to %NULL. 1114 * processed after it switches back to %NULL.
1115 * @debugfs_dir: debugfs dentry, can be used by drivers to create own per 1115 * @debugfs_dir: debugfs dentry, can be used by drivers to create own per
1116 * interface debug files. Note that it will be NULL for the virtual 1116 * interface debug files. Note that it will be NULL for the virtual
1117 * monitor interface (if that is requested.) 1117 * monitor interface (if that is requested.)
1118 * @drv_priv: data area for driver use, will always be aligned to 1118 * @drv_priv: data area for driver use, will always be aligned to
1119 * sizeof(void *). 1119 * sizeof(void *).
1120 */ 1120 */
1121 struct ieee80211_vif { 1121 struct ieee80211_vif {
1122 enum nl80211_iftype type; 1122 enum nl80211_iftype type;
1123 struct ieee80211_bss_conf bss_conf; 1123 struct ieee80211_bss_conf bss_conf;
1124 u8 addr[ETH_ALEN]; 1124 u8 addr[ETH_ALEN];
1125 bool p2p; 1125 bool p2p;
1126 bool csa_active; 1126 bool csa_active;
1127 1127
1128 u8 cab_queue; 1128 u8 cab_queue;
1129 u8 hw_queue[IEEE80211_NUM_ACS]; 1129 u8 hw_queue[IEEE80211_NUM_ACS];
1130 1130
1131 struct ieee80211_chanctx_conf __rcu *chanctx_conf; 1131 struct ieee80211_chanctx_conf __rcu *chanctx_conf;
1132 1132
1133 u32 driver_flags; 1133 u32 driver_flags;
1134 1134
1135 #ifdef CONFIG_MAC80211_DEBUGFS 1135 #ifdef CONFIG_MAC80211_DEBUGFS
1136 struct dentry *debugfs_dir; 1136 struct dentry *debugfs_dir;
1137 #endif 1137 #endif
1138 1138
1139 /* must be last */ 1139 /* must be last */
1140 u8 drv_priv[0] __aligned(sizeof(void *)); 1140 u8 drv_priv[0] __aligned(sizeof(void *));
1141 }; 1141 };
1142 1142
1143 static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif) 1143 static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif)
1144 { 1144 {
1145 #ifdef CONFIG_MAC80211_MESH 1145 #ifdef CONFIG_MAC80211_MESH
1146 return vif->type == NL80211_IFTYPE_MESH_POINT; 1146 return vif->type == NL80211_IFTYPE_MESH_POINT;
1147 #endif 1147 #endif
1148 return false; 1148 return false;
1149 } 1149 }
1150 1150
1151 /** 1151 /**
1152 * enum ieee80211_key_flags - key flags 1152 * enum ieee80211_key_flags - key flags
1153 * 1153 *
1154 * These flags are used for communication about keys between the driver 1154 * These flags are used for communication about keys between the driver
1155 * and mac80211, with the @flags parameter of &struct ieee80211_key_conf. 1155 * and mac80211, with the @flags parameter of &struct ieee80211_key_conf.
1156 * 1156 *
1157 * @IEEE80211_KEY_FLAG_GENERATE_IV: This flag should be set by the 1157 * @IEEE80211_KEY_FLAG_GENERATE_IV: This flag should be set by the
1158 * driver to indicate that it requires IV generation for this 1158 * driver to indicate that it requires IV generation for this
1159 * particular key. 1159 * particular key.
1160 * @IEEE80211_KEY_FLAG_GENERATE_MMIC: This flag should be set by 1160 * @IEEE80211_KEY_FLAG_GENERATE_MMIC: This flag should be set by
1161 * the driver for a TKIP key if it requires Michael MIC 1161 * the driver for a TKIP key if it requires Michael MIC
1162 * generation in software. 1162 * generation in software.
1163 * @IEEE80211_KEY_FLAG_PAIRWISE: Set by mac80211, this flag indicates 1163 * @IEEE80211_KEY_FLAG_PAIRWISE: Set by mac80211, this flag indicates
1164 * that the key is pairwise rather then a shared key. 1164 * that the key is pairwise rather then a shared key.
1165 * @IEEE80211_KEY_FLAG_SW_MGMT_TX: This flag should be set by the driver for a 1165 * @IEEE80211_KEY_FLAG_SW_MGMT_TX: This flag should be set by the driver for a
1166 * CCMP key if it requires CCMP encryption of management frames (MFP) to 1166 * CCMP key if it requires CCMP encryption of management frames (MFP) to
1167 * be done in software. 1167 * be done in software.
1168 * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver 1168 * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver
1169 * if space should be prepared for the IV, but the IV 1169 * if space should be prepared for the IV, but the IV
1170 * itself should not be generated. Do not set together with 1170 * itself should not be generated. Do not set together with
1171 * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. 1171 * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key.
1172 * @IEEE80211_KEY_FLAG_RX_MGMT: This key will be used to decrypt received 1172 * @IEEE80211_KEY_FLAG_RX_MGMT: This key will be used to decrypt received
1173 * management frames. The flag can help drivers that have a hardware 1173 * management frames. The flag can help drivers that have a hardware
1174 * crypto implementation that doesn't deal with management frames 1174 * crypto implementation that doesn't deal with management frames
1175 * properly by allowing them to not upload the keys to hardware and 1175 * properly by allowing them to not upload the keys to hardware and
1176 * fall back to software crypto. Note that this flag deals only with 1176 * fall back to software crypto. Note that this flag deals only with
1177 * RX, if your crypto engine can't deal with TX you can also set the 1177 * RX, if your crypto engine can't deal with TX you can also set the
1178 * %IEEE80211_KEY_FLAG_SW_MGMT_TX flag to encrypt such frames in SW. 1178 * %IEEE80211_KEY_FLAG_SW_MGMT_TX flag to encrypt such frames in SW.
1179 */ 1179 */
1180 enum ieee80211_key_flags { 1180 enum ieee80211_key_flags {
1181 IEEE80211_KEY_FLAG_GENERATE_IV = 1<<1, 1181 IEEE80211_KEY_FLAG_GENERATE_IV = 1<<1,
1182 IEEE80211_KEY_FLAG_GENERATE_MMIC= 1<<2, 1182 IEEE80211_KEY_FLAG_GENERATE_MMIC= 1<<2,
1183 IEEE80211_KEY_FLAG_PAIRWISE = 1<<3, 1183 IEEE80211_KEY_FLAG_PAIRWISE = 1<<3,
1184 IEEE80211_KEY_FLAG_SW_MGMT_TX = 1<<4, 1184 IEEE80211_KEY_FLAG_SW_MGMT_TX = 1<<4,
1185 IEEE80211_KEY_FLAG_PUT_IV_SPACE = 1<<5, 1185 IEEE80211_KEY_FLAG_PUT_IV_SPACE = 1<<5,
1186 IEEE80211_KEY_FLAG_RX_MGMT = 1<<6, 1186 IEEE80211_KEY_FLAG_RX_MGMT = 1<<6,
1187 }; 1187 };
1188 1188
1189 /** 1189 /**
1190 * struct ieee80211_key_conf - key information 1190 * struct ieee80211_key_conf - key information
1191 * 1191 *
1192 * This key information is given by mac80211 to the driver by 1192 * This key information is given by mac80211 to the driver by
1193 * the set_key() callback in &struct ieee80211_ops. 1193 * the set_key() callback in &struct ieee80211_ops.
1194 * 1194 *
1195 * @hw_key_idx: To be set by the driver, this is the key index the driver 1195 * @hw_key_idx: To be set by the driver, this is the key index the driver
1196 * wants to be given when a frame is transmitted and needs to be 1196 * wants to be given when a frame is transmitted and needs to be
1197 * encrypted in hardware. 1197 * encrypted in hardware.
1198 * @cipher: The key's cipher suite selector. 1198 * @cipher: The key's cipher suite selector.
1199 * @flags: key flags, see &enum ieee80211_key_flags. 1199 * @flags: key flags, see &enum ieee80211_key_flags.
1200 * @keyidx: the key index (0-3) 1200 * @keyidx: the key index (0-3)
1201 * @keylen: key material length 1201 * @keylen: key material length
1202 * @key: key material. For ALG_TKIP the key is encoded as a 256-bit (32 byte) 1202 * @key: key material. For ALG_TKIP the key is encoded as a 256-bit (32 byte)
1203 * data block: 1203 * data block:
1204 * - Temporal Encryption Key (128 bits) 1204 * - Temporal Encryption Key (128 bits)
1205 * - Temporal Authenticator Tx MIC Key (64 bits) 1205 * - Temporal Authenticator Tx MIC Key (64 bits)
1206 * - Temporal Authenticator Rx MIC Key (64 bits) 1206 * - Temporal Authenticator Rx MIC Key (64 bits)
1207 * @icv_len: The ICV length for this key type 1207 * @icv_len: The ICV length for this key type
1208 * @iv_len: The IV length for this key type 1208 * @iv_len: The IV length for this key type
1209 */ 1209 */
1210 struct ieee80211_key_conf { 1210 struct ieee80211_key_conf {
1211 u32 cipher; 1211 u32 cipher;
1212 u8 icv_len; 1212 u8 icv_len;
1213 u8 iv_len; 1213 u8 iv_len;
1214 u8 hw_key_idx; 1214 u8 hw_key_idx;
1215 u8 flags; 1215 u8 flags;
1216 s8 keyidx; 1216 s8 keyidx;
1217 u8 keylen; 1217 u8 keylen;
1218 u8 key[0]; 1218 u8 key[0];
1219 }; 1219 };
1220 1220
1221 /** 1221 /**
1222 * enum set_key_cmd - key command 1222 * enum set_key_cmd - key command
1223 * 1223 *
1224 * Used with the set_key() callback in &struct ieee80211_ops, this 1224 * Used with the set_key() callback in &struct ieee80211_ops, this
1225 * indicates whether a key is being removed or added. 1225 * indicates whether a key is being removed or added.
1226 * 1226 *
1227 * @SET_KEY: a key is set 1227 * @SET_KEY: a key is set
1228 * @DISABLE_KEY: a key must be disabled 1228 * @DISABLE_KEY: a key must be disabled
1229 */ 1229 */
1230 enum set_key_cmd { 1230 enum set_key_cmd {
1231 SET_KEY, DISABLE_KEY, 1231 SET_KEY, DISABLE_KEY,
1232 }; 1232 };
1233 1233
1234 /** 1234 /**
1235 * enum ieee80211_sta_state - station state 1235 * enum ieee80211_sta_state - station state
1236 * 1236 *
1237 * @IEEE80211_STA_NOTEXIST: station doesn't exist at all, 1237 * @IEEE80211_STA_NOTEXIST: station doesn't exist at all,
1238 * this is a special state for add/remove transitions 1238 * this is a special state for add/remove transitions
1239 * @IEEE80211_STA_NONE: station exists without special state 1239 * @IEEE80211_STA_NONE: station exists without special state
1240 * @IEEE80211_STA_AUTH: station is authenticated 1240 * @IEEE80211_STA_AUTH: station is authenticated
1241 * @IEEE80211_STA_ASSOC: station is associated 1241 * @IEEE80211_STA_ASSOC: station is associated
1242 * @IEEE80211_STA_AUTHORIZED: station is authorized (802.1X) 1242 * @IEEE80211_STA_AUTHORIZED: station is authorized (802.1X)
1243 */ 1243 */
1244 enum ieee80211_sta_state { 1244 enum ieee80211_sta_state {
1245 /* NOTE: These need to be ordered correctly! */ 1245 /* NOTE: These need to be ordered correctly! */
1246 IEEE80211_STA_NOTEXIST, 1246 IEEE80211_STA_NOTEXIST,
1247 IEEE80211_STA_NONE, 1247 IEEE80211_STA_NONE,
1248 IEEE80211_STA_AUTH, 1248 IEEE80211_STA_AUTH,
1249 IEEE80211_STA_ASSOC, 1249 IEEE80211_STA_ASSOC,
1250 IEEE80211_STA_AUTHORIZED, 1250 IEEE80211_STA_AUTHORIZED,
1251 }; 1251 };
1252 1252
1253 /** 1253 /**
1254 * enum ieee80211_sta_rx_bandwidth - station RX bandwidth 1254 * enum ieee80211_sta_rx_bandwidth - station RX bandwidth
1255 * @IEEE80211_STA_RX_BW_20: station can only receive 20 MHz 1255 * @IEEE80211_STA_RX_BW_20: station can only receive 20 MHz
1256 * @IEEE80211_STA_RX_BW_40: station can receive up to 40 MHz 1256 * @IEEE80211_STA_RX_BW_40: station can receive up to 40 MHz
1257 * @IEEE80211_STA_RX_BW_80: station can receive up to 80 MHz 1257 * @IEEE80211_STA_RX_BW_80: station can receive up to 80 MHz
1258 * @IEEE80211_STA_RX_BW_160: station can receive up to 160 MHz 1258 * @IEEE80211_STA_RX_BW_160: station can receive up to 160 MHz
1259 * (including 80+80 MHz) 1259 * (including 80+80 MHz)
1260 * 1260 *
1261 * Implementation note: 20 must be zero to be initialized 1261 * Implementation note: 20 must be zero to be initialized
1262 * correctly, the values must be sorted. 1262 * correctly, the values must be sorted.
1263 */ 1263 */
1264 enum ieee80211_sta_rx_bandwidth { 1264 enum ieee80211_sta_rx_bandwidth {
1265 IEEE80211_STA_RX_BW_20 = 0, 1265 IEEE80211_STA_RX_BW_20 = 0,
1266 IEEE80211_STA_RX_BW_40, 1266 IEEE80211_STA_RX_BW_40,
1267 IEEE80211_STA_RX_BW_80, 1267 IEEE80211_STA_RX_BW_80,
1268 IEEE80211_STA_RX_BW_160, 1268 IEEE80211_STA_RX_BW_160,
1269 }; 1269 };
1270 1270
1271 /** 1271 /**
1272 * struct ieee80211_sta_rates - station rate selection table 1272 * struct ieee80211_sta_rates - station rate selection table
1273 * 1273 *
1274 * @rcu_head: RCU head used for freeing the table on update 1274 * @rcu_head: RCU head used for freeing the table on update
1275 * @rate: transmit rates/flags to be used by default. 1275 * @rate: transmit rates/flags to be used by default.
1276 * Overriding entries per-packet is possible by using cb tx control. 1276 * Overriding entries per-packet is possible by using cb tx control.
1277 */ 1277 */
1278 struct ieee80211_sta_rates { 1278 struct ieee80211_sta_rates {
1279 struct rcu_head rcu_head; 1279 struct rcu_head rcu_head;
1280 struct { 1280 struct {
1281 s8 idx; 1281 s8 idx;
1282 u8 count; 1282 u8 count;
1283 u8 count_cts; 1283 u8 count_cts;
1284 u8 count_rts; 1284 u8 count_rts;
1285 u16 flags; 1285 u16 flags;
1286 } rate[IEEE80211_TX_RATE_TABLE_SIZE]; 1286 } rate[IEEE80211_TX_RATE_TABLE_SIZE];
1287 }; 1287 };
1288 1288
1289 /** 1289 /**
1290 * struct ieee80211_sta - station table entry 1290 * struct ieee80211_sta - station table entry
1291 * 1291 *
1292 * A station table entry represents a station we are possibly 1292 * A station table entry represents a station we are possibly
1293 * communicating with. Since stations are RCU-managed in 1293 * communicating with. Since stations are RCU-managed in
1294 * mac80211, any ieee80211_sta pointer you get access to must 1294 * mac80211, any ieee80211_sta pointer you get access to must
1295 * either be protected by rcu_read_lock() explicitly or implicitly, 1295 * either be protected by rcu_read_lock() explicitly or implicitly,
1296 * or you must take good care to not use such a pointer after a 1296 * or you must take good care to not use such a pointer after a
1297 * call to your sta_remove callback that removed it. 1297 * call to your sta_remove callback that removed it.
1298 * 1298 *
1299 * @addr: MAC address 1299 * @addr: MAC address
1300 * @aid: AID we assigned to the station if we're an AP 1300 * @aid: AID we assigned to the station if we're an AP
1301 * @supp_rates: Bitmap of supported rates (per band) 1301 * @supp_rates: Bitmap of supported rates (per band)
1302 * @ht_cap: HT capabilities of this STA; restricted to our own capabilities 1302 * @ht_cap: HT capabilities of this STA; restricted to our own capabilities
1303 * @vht_cap: VHT capabilities of this STA; restricted to our own capabilities 1303 * @vht_cap: VHT capabilities of this STA; restricted to our own capabilities
1304 * @wme: indicates whether the STA supports WME. Only valid during AP-mode. 1304 * @wme: indicates whether the STA supports WME. Only valid during AP-mode.
1305 * @drv_priv: data area for driver use, will always be aligned to 1305 * @drv_priv: data area for driver use, will always be aligned to
1306 * sizeof(void *), size is determined in hw information. 1306 * sizeof(void *), size is determined in hw information.
1307 * @uapsd_queues: bitmap of queues configured for uapsd. Only valid 1307 * @uapsd_queues: bitmap of queues configured for uapsd. Only valid
1308 * if wme is supported. 1308 * if wme is supported.
1309 * @max_sp: max Service Period. Only valid if wme is supported. 1309 * @max_sp: max Service Period. Only valid if wme is supported.
1310 * @bandwidth: current bandwidth the station can receive with 1310 * @bandwidth: current bandwidth the station can receive with
1311 * @rx_nss: in HT/VHT, the maximum number of spatial streams the 1311 * @rx_nss: in HT/VHT, the maximum number of spatial streams the
1312 * station can receive at the moment, changed by operating mode 1312 * station can receive at the moment, changed by operating mode
1313 * notifications and capabilities. The value is only valid after 1313 * notifications and capabilities. The value is only valid after
1314 * the station moves to associated state. 1314 * the station moves to associated state.
1315 * @smps_mode: current SMPS mode (off, static or dynamic) 1315 * @smps_mode: current SMPS mode (off, static or dynamic)
1316 * @rates: rate control selection table 1316 * @rates: rate control selection table
1317 */ 1317 */
1318 struct ieee80211_sta { 1318 struct ieee80211_sta {
1319 u32 supp_rates[IEEE80211_NUM_BANDS]; 1319 u32 supp_rates[IEEE80211_NUM_BANDS];
1320 u8 addr[ETH_ALEN]; 1320 u8 addr[ETH_ALEN];
1321 u16 aid; 1321 u16 aid;
1322 struct ieee80211_sta_ht_cap ht_cap; 1322 struct ieee80211_sta_ht_cap ht_cap;
1323 struct ieee80211_sta_vht_cap vht_cap; 1323 struct ieee80211_sta_vht_cap vht_cap;
1324 bool wme; 1324 bool wme;
1325 u8 uapsd_queues; 1325 u8 uapsd_queues;
1326 u8 max_sp; 1326 u8 max_sp;
1327 u8 rx_nss; 1327 u8 rx_nss;
1328 enum ieee80211_sta_rx_bandwidth bandwidth; 1328 enum ieee80211_sta_rx_bandwidth bandwidth;
1329 enum ieee80211_smps_mode smps_mode; 1329 enum ieee80211_smps_mode smps_mode;
1330 struct ieee80211_sta_rates __rcu *rates; 1330 struct ieee80211_sta_rates __rcu *rates;
1331 1331
1332 /* must be last */ 1332 /* must be last */
1333 u8 drv_priv[0] __aligned(sizeof(void *)); 1333 u8 drv_priv[0] __aligned(sizeof(void *));
1334 }; 1334 };
1335 1335
1336 /** 1336 /**
1337 * enum sta_notify_cmd - sta notify command 1337 * enum sta_notify_cmd - sta notify command
1338 * 1338 *
1339 * Used with the sta_notify() callback in &struct ieee80211_ops, this 1339 * Used with the sta_notify() callback in &struct ieee80211_ops, this
1340 * indicates if an associated station made a power state transition. 1340 * indicates if an associated station made a power state transition.
1341 * 1341 *
1342 * @STA_NOTIFY_SLEEP: a station is now sleeping 1342 * @STA_NOTIFY_SLEEP: a station is now sleeping
1343 * @STA_NOTIFY_AWAKE: a sleeping station woke up 1343 * @STA_NOTIFY_AWAKE: a sleeping station woke up
1344 */ 1344 */
1345 enum sta_notify_cmd { 1345 enum sta_notify_cmd {
1346 STA_NOTIFY_SLEEP, STA_NOTIFY_AWAKE, 1346 STA_NOTIFY_SLEEP, STA_NOTIFY_AWAKE,
1347 }; 1347 };
1348 1348
1349 /** 1349 /**
1350 * struct ieee80211_tx_control - TX control data 1350 * struct ieee80211_tx_control - TX control data
1351 * 1351 *
1352 * @sta: station table entry, this sta pointer may be NULL and 1352 * @sta: station table entry, this sta pointer may be NULL and
1353 * it is not allowed to copy the pointer, due to RCU. 1353 * it is not allowed to copy the pointer, due to RCU.
1354 */ 1354 */
1355 struct ieee80211_tx_control { 1355 struct ieee80211_tx_control {
1356 struct ieee80211_sta *sta; 1356 struct ieee80211_sta *sta;
1357 }; 1357 };
1358 1358
1359 /** 1359 /**
1360 * enum ieee80211_hw_flags - hardware flags 1360 * enum ieee80211_hw_flags - hardware flags
1361 * 1361 *
1362 * These flags are used to indicate hardware capabilities to 1362 * These flags are used to indicate hardware capabilities to
1363 * the stack. Generally, flags here should have their meaning 1363 * the stack. Generally, flags here should have their meaning
1364 * done in a way that the simplest hardware doesn't need setting 1364 * done in a way that the simplest hardware doesn't need setting
1365 * any particular flags. There are some exceptions to this rule, 1365 * any particular flags. There are some exceptions to this rule,
1366 * however, so you are advised to review these flags carefully. 1366 * however, so you are advised to review these flags carefully.
1367 * 1367 *
1368 * @IEEE80211_HW_HAS_RATE_CONTROL: 1368 * @IEEE80211_HW_HAS_RATE_CONTROL:
1369 * The hardware or firmware includes rate control, and cannot be 1369 * The hardware or firmware includes rate control, and cannot be
1370 * controlled by the stack. As such, no rate control algorithm 1370 * controlled by the stack. As such, no rate control algorithm
1371 * should be instantiated, and the TX rate reported to userspace 1371 * should be instantiated, and the TX rate reported to userspace
1372 * will be taken from the TX status instead of the rate control 1372 * will be taken from the TX status instead of the rate control
1373 * algorithm. 1373 * algorithm.
1374 * Note that this requires that the driver implement a number of 1374 * Note that this requires that the driver implement a number of
1375 * callbacks so it has the correct information, it needs to have 1375 * callbacks so it has the correct information, it needs to have
1376 * the @set_rts_threshold callback and must look at the BSS config 1376 * the @set_rts_threshold callback and must look at the BSS config
1377 * @use_cts_prot for G/N protection, @use_short_slot for slot 1377 * @use_cts_prot for G/N protection, @use_short_slot for slot
1378 * timing in 2.4 GHz and @use_short_preamble for preambles for 1378 * timing in 2.4 GHz and @use_short_preamble for preambles for
1379 * CCK frames. 1379 * CCK frames.
1380 * 1380 *
1381 * @IEEE80211_HW_RX_INCLUDES_FCS: 1381 * @IEEE80211_HW_RX_INCLUDES_FCS:
1382 * Indicates that received frames passed to the stack include 1382 * Indicates that received frames passed to the stack include
1383 * the FCS at the end. 1383 * the FCS at the end.
1384 * 1384 *
1385 * @IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING: 1385 * @IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING:
1386 * Some wireless LAN chipsets buffer broadcast/multicast frames 1386 * Some wireless LAN chipsets buffer broadcast/multicast frames
1387 * for power saving stations in the hardware/firmware and others 1387 * for power saving stations in the hardware/firmware and others
1388 * rely on the host system for such buffering. This option is used 1388 * rely on the host system for such buffering. This option is used
1389 * to configure the IEEE 802.11 upper layer to buffer broadcast and 1389 * to configure the IEEE 802.11 upper layer to buffer broadcast and
1390 * multicast frames when there are power saving stations so that 1390 * multicast frames when there are power saving stations so that
1391 * the driver can fetch them with ieee80211_get_buffered_bc(). 1391 * the driver can fetch them with ieee80211_get_buffered_bc().
1392 * 1392 *
1393 * @IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE: 1393 * @IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE:
1394 * Hardware is not capable of short slot operation on the 2.4 GHz band. 1394 * Hardware is not capable of short slot operation on the 2.4 GHz band.
1395 * 1395 *
1396 * @IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE: 1396 * @IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE:
1397 * Hardware is not capable of receiving frames with short preamble on 1397 * Hardware is not capable of receiving frames with short preamble on
1398 * the 2.4 GHz band. 1398 * the 2.4 GHz band.
1399 * 1399 *
1400 * @IEEE80211_HW_SIGNAL_UNSPEC: 1400 * @IEEE80211_HW_SIGNAL_UNSPEC:
1401 * Hardware can provide signal values but we don't know its units. We 1401 * Hardware can provide signal values but we don't know its units. We
1402 * expect values between 0 and @max_signal. 1402 * expect values between 0 and @max_signal.
1403 * If possible please provide dB or dBm instead. 1403 * If possible please provide dB or dBm instead.
1404 * 1404 *
1405 * @IEEE80211_HW_SIGNAL_DBM: 1405 * @IEEE80211_HW_SIGNAL_DBM:
1406 * Hardware gives signal values in dBm, decibel difference from 1406 * Hardware gives signal values in dBm, decibel difference from
1407 * one milliwatt. This is the preferred method since it is standardized 1407 * one milliwatt. This is the preferred method since it is standardized
1408 * between different devices. @max_signal does not need to be set. 1408 * between different devices. @max_signal does not need to be set.
1409 * 1409 *
1410 * @IEEE80211_HW_SPECTRUM_MGMT: 1410 * @IEEE80211_HW_SPECTRUM_MGMT:
1411 * Hardware supports spectrum management defined in 802.11h 1411 * Hardware supports spectrum management defined in 802.11h
1412 * Measurement, Channel Switch, Quieting, TPC 1412 * Measurement, Channel Switch, Quieting, TPC
1413 * 1413 *
1414 * @IEEE80211_HW_AMPDU_AGGREGATION: 1414 * @IEEE80211_HW_AMPDU_AGGREGATION:
1415 * Hardware supports 11n A-MPDU aggregation. 1415 * Hardware supports 11n A-MPDU aggregation.
1416 * 1416 *
1417 * @IEEE80211_HW_SUPPORTS_PS: 1417 * @IEEE80211_HW_SUPPORTS_PS:
1418 * Hardware has power save support (i.e. can go to sleep). 1418 * Hardware has power save support (i.e. can go to sleep).
1419 * 1419 *
1420 * @IEEE80211_HW_PS_NULLFUNC_STACK: 1420 * @IEEE80211_HW_PS_NULLFUNC_STACK:
1421 * Hardware requires nullfunc frame handling in stack, implies 1421 * Hardware requires nullfunc frame handling in stack, implies
1422 * stack support for dynamic PS. 1422 * stack support for dynamic PS.
1423 * 1423 *
1424 * @IEEE80211_HW_SUPPORTS_DYNAMIC_PS: 1424 * @IEEE80211_HW_SUPPORTS_DYNAMIC_PS:
1425 * Hardware has support for dynamic PS. 1425 * Hardware has support for dynamic PS.
1426 * 1426 *
1427 * @IEEE80211_HW_MFP_CAPABLE: 1427 * @IEEE80211_HW_MFP_CAPABLE:
1428 * Hardware supports management frame protection (MFP, IEEE 802.11w). 1428 * Hardware supports management frame protection (MFP, IEEE 802.11w).
1429 * 1429 *
1430 * @IEEE80211_HW_SUPPORTS_STATIC_SMPS: 1430 * @IEEE80211_HW_SUPPORTS_STATIC_SMPS:
1431 * Hardware supports static spatial multiplexing powersave, 1431 * Hardware supports static spatial multiplexing powersave,
1432 * ie. can turn off all but one chain even on HT connections 1432 * ie. can turn off all but one chain even on HT connections
1433 * that should be using more chains. 1433 * that should be using more chains.
1434 * 1434 *
1435 * @IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS: 1435 * @IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS:
1436 * Hardware supports dynamic spatial multiplexing powersave, 1436 * Hardware supports dynamic spatial multiplexing powersave,
1437 * ie. can turn off all but one chain and then wake the rest 1437 * ie. can turn off all but one chain and then wake the rest
1438 * up as required after, for example, rts/cts handshake. 1438 * up as required after, for example, rts/cts handshake.
1439 * 1439 *
1440 * @IEEE80211_HW_SUPPORTS_UAPSD: 1440 * @IEEE80211_HW_SUPPORTS_UAPSD:
1441 * Hardware supports Unscheduled Automatic Power Save Delivery 1441 * Hardware supports Unscheduled Automatic Power Save Delivery
1442 * (U-APSD) in managed mode. The mode is configured with 1442 * (U-APSD) in managed mode. The mode is configured with
1443 * conf_tx() operation. 1443 * conf_tx() operation.
1444 * 1444 *
1445 * @IEEE80211_HW_REPORTS_TX_ACK_STATUS: 1445 * @IEEE80211_HW_REPORTS_TX_ACK_STATUS:
1446 * Hardware can provide ack status reports of Tx frames to 1446 * Hardware can provide ack status reports of Tx frames to
1447 * the stack. 1447 * the stack.
1448 * 1448 *
1449 * @IEEE80211_HW_CONNECTION_MONITOR: 1449 * @IEEE80211_HW_CONNECTION_MONITOR:
1450 * The hardware performs its own connection monitoring, including 1450 * The hardware performs its own connection monitoring, including
1451 * periodic keep-alives to the AP and probing the AP on beacon loss. 1451 * periodic keep-alives to the AP and probing the AP on beacon loss.
1452 * When this flag is set, signaling beacon-loss will cause an immediate 1452 * When this flag is set, signaling beacon-loss will cause an immediate
1453 * change to disassociated state. 1453 * change to disassociated state.
1454 * 1454 *
1455 * @IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC: 1455 * @IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC:
1456 * This device needs to get data from beacon before association (i.e. 1456 * This device needs to get data from beacon before association (i.e.
1457 * dtim_period). 1457 * dtim_period).
1458 * 1458 *
1459 * @IEEE80211_HW_SUPPORTS_PER_STA_GTK: The device's crypto engine supports 1459 * @IEEE80211_HW_SUPPORTS_PER_STA_GTK: The device's crypto engine supports
1460 * per-station GTKs as used by IBSS RSN or during fast transition. If 1460 * per-station GTKs as used by IBSS RSN or during fast transition. If
1461 * the device doesn't support per-station GTKs, but can be asked not 1461 * the device doesn't support per-station GTKs, but can be asked not
1462 * to decrypt group addressed frames, then IBSS RSN support is still 1462 * to decrypt group addressed frames, then IBSS RSN support is still
1463 * possible but software crypto will be used. Advertise the wiphy flag 1463 * possible but software crypto will be used. Advertise the wiphy flag
1464 * only in that case. 1464 * only in that case.
1465 * 1465 *
1466 * @IEEE80211_HW_AP_LINK_PS: When operating in AP mode the device 1466 * @IEEE80211_HW_AP_LINK_PS: When operating in AP mode the device
1467 * autonomously manages the PS status of connected stations. When 1467 * autonomously manages the PS status of connected stations. When
1468 * this flag is set mac80211 will not trigger PS mode for connected 1468 * this flag is set mac80211 will not trigger PS mode for connected
1469 * stations based on the PM bit of incoming frames. 1469 * stations based on the PM bit of incoming frames.
1470 * Use ieee80211_start_ps()/ieee8021_end_ps() to manually configure 1470 * Use ieee80211_start_ps()/ieee8021_end_ps() to manually configure
1471 * the PS mode of connected stations. 1471 * the PS mode of connected stations.
1472 * 1472 *
1473 * @IEEE80211_HW_TX_AMPDU_SETUP_IN_HW: The device handles TX A-MPDU session 1473 * @IEEE80211_HW_TX_AMPDU_SETUP_IN_HW: The device handles TX A-MPDU session
1474 * setup strictly in HW. mac80211 should not attempt to do this in 1474 * setup strictly in HW. mac80211 should not attempt to do this in
1475 * software. 1475 * software.
1476 * 1476 *
1477 * @IEEE80211_HW_WANT_MONITOR_VIF: The driver would like to be informed of 1477 * @IEEE80211_HW_WANT_MONITOR_VIF: The driver would like to be informed of
1478 * a virtual monitor interface when monitor interfaces are the only 1478 * a virtual monitor interface when monitor interfaces are the only
1479 * active interfaces. 1479 * active interfaces.
1480 * 1480 *
1481 * @IEEE80211_HW_QUEUE_CONTROL: The driver wants to control per-interface 1481 * @IEEE80211_HW_QUEUE_CONTROL: The driver wants to control per-interface
1482 * queue mapping in order to use different queues (not just one per AC) 1482 * queue mapping in order to use different queues (not just one per AC)
1483 * for different virtual interfaces. See the doc section on HW queue 1483 * for different virtual interfaces. See the doc section on HW queue
1484 * control for more details. 1484 * control for more details.
1485 * 1485 *
1486 * @IEEE80211_HW_SUPPORTS_RC_TABLE: The driver supports using a rate 1486 * @IEEE80211_HW_SUPPORTS_RC_TABLE: The driver supports using a rate
1487 * selection table provided by the rate control algorithm. 1487 * selection table provided by the rate control algorithm.
1488 * 1488 *
1489 * @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any 1489 * @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any
1490 * P2P Interface. This will be honoured even if more than one interface 1490 * P2P Interface. This will be honoured even if more than one interface
1491 * is supported. 1491 * is supported.
1492 * 1492 *
1493 * @IEEE80211_HW_TIMING_BEACON_ONLY: Use sync timing from beacon frames 1493 * @IEEE80211_HW_TIMING_BEACON_ONLY: Use sync timing from beacon frames
1494 * only, to allow getting TBTT of a DTIM beacon. 1494 * only, to allow getting TBTT of a DTIM beacon.
1495 */ 1495 */
1496 enum ieee80211_hw_flags { 1496 enum ieee80211_hw_flags {
1497 IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, 1497 IEEE80211_HW_HAS_RATE_CONTROL = 1<<0,
1498 IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, 1498 IEEE80211_HW_RX_INCLUDES_FCS = 1<<1,
1499 IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2, 1499 IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2,
1500 IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3, 1500 IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3,
1501 IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, 1501 IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4,
1502 IEEE80211_HW_SIGNAL_UNSPEC = 1<<5, 1502 IEEE80211_HW_SIGNAL_UNSPEC = 1<<5,
1503 IEEE80211_HW_SIGNAL_DBM = 1<<6, 1503 IEEE80211_HW_SIGNAL_DBM = 1<<6,
1504 IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC = 1<<7, 1504 IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC = 1<<7,
1505 IEEE80211_HW_SPECTRUM_MGMT = 1<<8, 1505 IEEE80211_HW_SPECTRUM_MGMT = 1<<8,
1506 IEEE80211_HW_AMPDU_AGGREGATION = 1<<9, 1506 IEEE80211_HW_AMPDU_AGGREGATION = 1<<9,
1507 IEEE80211_HW_SUPPORTS_PS = 1<<10, 1507 IEEE80211_HW_SUPPORTS_PS = 1<<10,
1508 IEEE80211_HW_PS_NULLFUNC_STACK = 1<<11, 1508 IEEE80211_HW_PS_NULLFUNC_STACK = 1<<11,
1509 IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12, 1509 IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12,
1510 IEEE80211_HW_MFP_CAPABLE = 1<<13, 1510 IEEE80211_HW_MFP_CAPABLE = 1<<13,
1511 IEEE80211_HW_WANT_MONITOR_VIF = 1<<14, 1511 IEEE80211_HW_WANT_MONITOR_VIF = 1<<14,
1512 IEEE80211_HW_SUPPORTS_STATIC_SMPS = 1<<15, 1512 IEEE80211_HW_SUPPORTS_STATIC_SMPS = 1<<15,
1513 IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16, 1513 IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16,
1514 IEEE80211_HW_SUPPORTS_UAPSD = 1<<17, 1514 IEEE80211_HW_SUPPORTS_UAPSD = 1<<17,
1515 IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<18, 1515 IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<18,
1516 IEEE80211_HW_CONNECTION_MONITOR = 1<<19, 1516 IEEE80211_HW_CONNECTION_MONITOR = 1<<19,
1517 IEEE80211_HW_QUEUE_CONTROL = 1<<20, 1517 IEEE80211_HW_QUEUE_CONTROL = 1<<20,
1518 IEEE80211_HW_SUPPORTS_PER_STA_GTK = 1<<21, 1518 IEEE80211_HW_SUPPORTS_PER_STA_GTK = 1<<21,
1519 IEEE80211_HW_AP_LINK_PS = 1<<22, 1519 IEEE80211_HW_AP_LINK_PS = 1<<22,
1520 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23, 1520 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23,
1521 IEEE80211_HW_SUPPORTS_RC_TABLE = 1<<24, 1521 IEEE80211_HW_SUPPORTS_RC_TABLE = 1<<24,
1522 IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 1<<25, 1522 IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 1<<25,
1523 IEEE80211_HW_TIMING_BEACON_ONLY = 1<<26, 1523 IEEE80211_HW_TIMING_BEACON_ONLY = 1<<26,
1524 }; 1524 };
1525 1525
1526 /** 1526 /**
1527 * struct ieee80211_hw - hardware information and state 1527 * struct ieee80211_hw - hardware information and state
1528 * 1528 *
1529 * This structure contains the configuration and hardware 1529 * This structure contains the configuration and hardware
1530 * information for an 802.11 PHY. 1530 * information for an 802.11 PHY.
1531 * 1531 *
1532 * @wiphy: This points to the &struct wiphy allocated for this 1532 * @wiphy: This points to the &struct wiphy allocated for this
1533 * 802.11 PHY. You must fill in the @perm_addr and @dev 1533 * 802.11 PHY. You must fill in the @perm_addr and @dev
1534 * members of this structure using SET_IEEE80211_DEV() 1534 * members of this structure using SET_IEEE80211_DEV()
1535 * and SET_IEEE80211_PERM_ADDR(). Additionally, all supported 1535 * and SET_IEEE80211_PERM_ADDR(). Additionally, all supported
1536 * bands (with channels, bitrates) are registered here. 1536 * bands (with channels, bitrates) are registered here.
1537 * 1537 *
1538 * @conf: &struct ieee80211_conf, device configuration, don't use. 1538 * @conf: &struct ieee80211_conf, device configuration, don't use.
1539 * 1539 *
1540 * @priv: pointer to private area that was allocated for driver use 1540 * @priv: pointer to private area that was allocated for driver use
1541 * along with this structure. 1541 * along with this structure.
1542 * 1542 *
1543 * @flags: hardware flags, see &enum ieee80211_hw_flags. 1543 * @flags: hardware flags, see &enum ieee80211_hw_flags.
1544 * 1544 *
1545 * @extra_tx_headroom: headroom to reserve in each transmit skb 1545 * @extra_tx_headroom: headroom to reserve in each transmit skb
1546 * for use by the driver (e.g. for transmit headers.) 1546 * for use by the driver (e.g. for transmit headers.)
1547 * 1547 *
1548 * @channel_change_time: time (in microseconds) it takes to change channels. 1548 * @channel_change_time: time (in microseconds) it takes to change channels.
1549 * 1549 *
1550 * @max_signal: Maximum value for signal (rssi) in RX information, used 1550 * @max_signal: Maximum value for signal (rssi) in RX information, used
1551 * only when @IEEE80211_HW_SIGNAL_UNSPEC or @IEEE80211_HW_SIGNAL_DB 1551 * only when @IEEE80211_HW_SIGNAL_UNSPEC or @IEEE80211_HW_SIGNAL_DB
1552 * 1552 *
1553 * @max_listen_interval: max listen interval in units of beacon interval 1553 * @max_listen_interval: max listen interval in units of beacon interval
1554 * that HW supports 1554 * that HW supports
1555 * 1555 *
1556 * @queues: number of available hardware transmit queues for 1556 * @queues: number of available hardware transmit queues for
1557 * data packets. WMM/QoS requires at least four, these 1557 * data packets. WMM/QoS requires at least four, these
1558 * queues need to have configurable access parameters. 1558 * queues need to have configurable access parameters.
1559 * 1559 *
1560 * @rate_control_algorithm: rate control algorithm for this hardware. 1560 * @rate_control_algorithm: rate control algorithm for this hardware.
1561 * If unset (NULL), the default algorithm will be used. Must be 1561 * If unset (NULL), the default algorithm will be used. Must be
1562 * set before calling ieee80211_register_hw(). 1562 * set before calling ieee80211_register_hw().
1563 * 1563 *
1564 * @vif_data_size: size (in bytes) of the drv_priv data area 1564 * @vif_data_size: size (in bytes) of the drv_priv data area
1565 * within &struct ieee80211_vif. 1565 * within &struct ieee80211_vif.
1566 * @sta_data_size: size (in bytes) of the drv_priv data area 1566 * @sta_data_size: size (in bytes) of the drv_priv data area
1567 * within &struct ieee80211_sta. 1567 * within &struct ieee80211_sta.
1568 * @chanctx_data_size: size (in bytes) of the drv_priv data area 1568 * @chanctx_data_size: size (in bytes) of the drv_priv data area
1569 * within &struct ieee80211_chanctx_conf. 1569 * within &struct ieee80211_chanctx_conf.
1570 * 1570 *
1571 * @max_rates: maximum number of alternate rate retry stages the hw 1571 * @max_rates: maximum number of alternate rate retry stages the hw
1572 * can handle. 1572 * can handle.
1573 * @max_report_rates: maximum number of alternate rate retry stages 1573 * @max_report_rates: maximum number of alternate rate retry stages
1574 * the hw can report back. 1574 * the hw can report back.
1575 * @max_rate_tries: maximum number of tries for each stage 1575 * @max_rate_tries: maximum number of tries for each stage
1576 * 1576 *
1577 * @napi_weight: weight used for NAPI polling. You must specify an 1577 * @napi_weight: weight used for NAPI polling. You must specify an
1578 * appropriate value here if a napi_poll operation is provided 1578 * appropriate value here if a napi_poll operation is provided
1579 * by your driver. 1579 * by your driver.
1580 * 1580 *
1581 * @max_rx_aggregation_subframes: maximum buffer size (number of 1581 * @max_rx_aggregation_subframes: maximum buffer size (number of
1582 * sub-frames) to be used for A-MPDU block ack receiver 1582 * sub-frames) to be used for A-MPDU block ack receiver
1583 * aggregation. 1583 * aggregation.
1584 * This is only relevant if the device has restrictions on the 1584 * This is only relevant if the device has restrictions on the
1585 * number of subframes, if it relies on mac80211 to do reordering 1585 * number of subframes, if it relies on mac80211 to do reordering
1586 * it shouldn't be set. 1586 * it shouldn't be set.
1587 * 1587 *
1588 * @max_tx_aggregation_subframes: maximum number of subframes in an 1588 * @max_tx_aggregation_subframes: maximum number of subframes in an
1589 * aggregate an HT driver will transmit, used by the peer as a 1589 * aggregate an HT driver will transmit, used by the peer as a
1590 * hint to size its reorder buffer. 1590 * hint to size its reorder buffer.
1591 * 1591 *
1592 * @offchannel_tx_hw_queue: HW queue ID to use for offchannel TX 1592 * @offchannel_tx_hw_queue: HW queue ID to use for offchannel TX
1593 * (if %IEEE80211_HW_QUEUE_CONTROL is set) 1593 * (if %IEEE80211_HW_QUEUE_CONTROL is set)
1594 * 1594 *
1595 * @radiotap_mcs_details: lists which MCS information can the HW 1595 * @radiotap_mcs_details: lists which MCS information can the HW
1596 * reports, by default it is set to _MCS, _GI and _BW but doesn't 1596 * reports, by default it is set to _MCS, _GI and _BW but doesn't
1597 * include _FMT. Use %IEEE80211_RADIOTAP_MCS_HAVE_* values, only 1597 * include _FMT. Use %IEEE80211_RADIOTAP_MCS_HAVE_* values, only
1598 * adding _BW is supported today. 1598 * adding _BW is supported today.
1599 * 1599 *
1600 * @radiotap_vht_details: lists which VHT MCS information the HW reports, 1600 * @radiotap_vht_details: lists which VHT MCS information the HW reports,
1601 * the default is _GI | _BANDWIDTH. 1601 * the default is _GI | _BANDWIDTH.
1602 * Use the %IEEE80211_RADIOTAP_VHT_KNOWN_* values. 1602 * Use the %IEEE80211_RADIOTAP_VHT_KNOWN_* values.
1603 * 1603 *
1604 * @netdev_features: netdev features to be set in each netdev created 1604 * @netdev_features: netdev features to be set in each netdev created
1605 * from this HW. Note only HW checksum features are currently 1605 * from this HW. Note only HW checksum features are currently
1606 * compatible with mac80211. Other feature bits will be rejected. 1606 * compatible with mac80211. Other feature bits will be rejected.
1607 * 1607 *
1608 * @uapsd_queues: This bitmap is included in (re)association frame to indicate 1608 * @uapsd_queues: This bitmap is included in (re)association frame to indicate
1609 * for each access category if it is uAPSD trigger-enabled and delivery- 1609 * for each access category if it is uAPSD trigger-enabled and delivery-
1610 * enabled. Use IEEE80211_WMM_IE_STA_QOSINFO_AC_* to set this bitmap. 1610 * enabled. Use IEEE80211_WMM_IE_STA_QOSINFO_AC_* to set this bitmap.
1611 * Each bit corresponds to different AC. Value '1' in specific bit means 1611 * Each bit corresponds to different AC. Value '1' in specific bit means
1612 * that corresponding AC is both trigger- and delivery-enabled. '0' means 1612 * that corresponding AC is both trigger- and delivery-enabled. '0' means
1613 * neither enabled. 1613 * neither enabled.
1614 * 1614 *
1615 * @uapsd_max_sp_len: maximum number of total buffered frames the WMM AP may 1615 * @uapsd_max_sp_len: maximum number of total buffered frames the WMM AP may
1616 * deliver to a WMM STA during any Service Period triggered by the WMM STA. 1616 * deliver to a WMM STA during any Service Period triggered by the WMM STA.
1617 * Use IEEE80211_WMM_IE_STA_QOSINFO_SP_* for correct values. 1617 * Use IEEE80211_WMM_IE_STA_QOSINFO_SP_* for correct values.
1618 */ 1618 */
1619 struct ieee80211_hw { 1619 struct ieee80211_hw {
1620 struct ieee80211_conf conf; 1620 struct ieee80211_conf conf;
1621 struct wiphy *wiphy; 1621 struct wiphy *wiphy;
1622 const char *rate_control_algorithm; 1622 const char *rate_control_algorithm;
1623 void *priv; 1623 void *priv;
1624 u32 flags; 1624 u32 flags;
1625 unsigned int extra_tx_headroom; 1625 unsigned int extra_tx_headroom;
1626 int channel_change_time; 1626 int channel_change_time;
1627 int vif_data_size; 1627 int vif_data_size;
1628 int sta_data_size; 1628 int sta_data_size;
1629 int chanctx_data_size; 1629 int chanctx_data_size;
1630 int napi_weight; 1630 int napi_weight;
1631 u16 queues; 1631 u16 queues;
1632 u16 max_listen_interval; 1632 u16 max_listen_interval;
1633 s8 max_signal; 1633 s8 max_signal;
1634 u8 max_rates; 1634 u8 max_rates;
1635 u8 max_report_rates; 1635 u8 max_report_rates;
1636 u8 max_rate_tries; 1636 u8 max_rate_tries;
1637 u8 max_rx_aggregation_subframes; 1637 u8 max_rx_aggregation_subframes;
1638 u8 max_tx_aggregation_subframes; 1638 u8 max_tx_aggregation_subframes;
1639 u8 offchannel_tx_hw_queue; 1639 u8 offchannel_tx_hw_queue;
1640 u8 radiotap_mcs_details; 1640 u8 radiotap_mcs_details;
1641 u16 radiotap_vht_details; 1641 u16 radiotap_vht_details;
1642 netdev_features_t netdev_features; 1642 netdev_features_t netdev_features;
1643 u8 uapsd_queues; 1643 u8 uapsd_queues;
1644 u8 uapsd_max_sp_len; 1644 u8 uapsd_max_sp_len;
1645 }; 1645 };
1646 1646
1647 /** 1647 /**
1648 * wiphy_to_ieee80211_hw - return a mac80211 driver hw struct from a wiphy 1648 * wiphy_to_ieee80211_hw - return a mac80211 driver hw struct from a wiphy
1649 * 1649 *
1650 * @wiphy: the &struct wiphy which we want to query 1650 * @wiphy: the &struct wiphy which we want to query
1651 * 1651 *
1652 * mac80211 drivers can use this to get to their respective 1652 * mac80211 drivers can use this to get to their respective
1653 * &struct ieee80211_hw. Drivers wishing to get to their own private 1653 * &struct ieee80211_hw. Drivers wishing to get to their own private
1654 * structure can then access it via hw->priv. Note that mac802111 drivers should 1654 * structure can then access it via hw->priv. Note that mac802111 drivers should
1655 * not use wiphy_priv() to try to get their private driver structure as this 1655 * not use wiphy_priv() to try to get their private driver structure as this
1656 * is already used internally by mac80211. 1656 * is already used internally by mac80211.
1657 * 1657 *
1658 * Return: The mac80211 driver hw struct of @wiphy. 1658 * Return: The mac80211 driver hw struct of @wiphy.
1659 */ 1659 */
1660 struct ieee80211_hw *wiphy_to_ieee80211_hw(struct wiphy *wiphy); 1660 struct ieee80211_hw *wiphy_to_ieee80211_hw(struct wiphy *wiphy);
1661 1661
1662 /** 1662 /**
1663 * SET_IEEE80211_DEV - set device for 802.11 hardware 1663 * SET_IEEE80211_DEV - set device for 802.11 hardware
1664 * 1664 *
1665 * @hw: the &struct ieee80211_hw to set the device for 1665 * @hw: the &struct ieee80211_hw to set the device for
1666 * @dev: the &struct device of this 802.11 device 1666 * @dev: the &struct device of this 802.11 device
1667 */ 1667 */
1668 static inline void SET_IEEE80211_DEV(struct ieee80211_hw *hw, struct device *dev) 1668 static inline void SET_IEEE80211_DEV(struct ieee80211_hw *hw, struct device *dev)
1669 { 1669 {
1670 set_wiphy_dev(hw->wiphy, dev); 1670 set_wiphy_dev(hw->wiphy, dev);
1671 } 1671 }
1672 1672
1673 /** 1673 /**
1674 * SET_IEEE80211_PERM_ADDR - set the permanent MAC address for 802.11 hardware 1674 * SET_IEEE80211_PERM_ADDR - set the permanent MAC address for 802.11 hardware
1675 * 1675 *
1676 * @hw: the &struct ieee80211_hw to set the MAC address for 1676 * @hw: the &struct ieee80211_hw to set the MAC address for
1677 * @addr: the address to set 1677 * @addr: the address to set
1678 */ 1678 */
1679 static inline void SET_IEEE80211_PERM_ADDR(struct ieee80211_hw *hw, u8 *addr) 1679 static inline void SET_IEEE80211_PERM_ADDR(struct ieee80211_hw *hw, u8 *addr)
1680 { 1680 {
1681 memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN); 1681 memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN);
1682 } 1682 }
1683 1683
1684 static inline struct ieee80211_rate * 1684 static inline struct ieee80211_rate *
1685 ieee80211_get_tx_rate(const struct ieee80211_hw *hw, 1685 ieee80211_get_tx_rate(const struct ieee80211_hw *hw,
1686 const struct ieee80211_tx_info *c) 1686 const struct ieee80211_tx_info *c)
1687 { 1687 {
1688 if (WARN_ON_ONCE(c->control.rates[0].idx < 0)) 1688 if (WARN_ON_ONCE(c->control.rates[0].idx < 0))
1689 return NULL; 1689 return NULL;
1690 return &hw->wiphy->bands[c->band]->bitrates[c->control.rates[0].idx]; 1690 return &hw->wiphy->bands[c->band]->bitrates[c->control.rates[0].idx];
1691 } 1691 }
1692 1692
1693 static inline struct ieee80211_rate * 1693 static inline struct ieee80211_rate *
1694 ieee80211_get_rts_cts_rate(const struct ieee80211_hw *hw, 1694 ieee80211_get_rts_cts_rate(const struct ieee80211_hw *hw,
1695 const struct ieee80211_tx_info *c) 1695 const struct ieee80211_tx_info *c)
1696 { 1696 {
1697 if (c->control.rts_cts_rate_idx < 0) 1697 if (c->control.rts_cts_rate_idx < 0)
1698 return NULL; 1698 return NULL;
1699 return &hw->wiphy->bands[c->band]->bitrates[c->control.rts_cts_rate_idx]; 1699 return &hw->wiphy->bands[c->band]->bitrates[c->control.rts_cts_rate_idx];
1700 } 1700 }
1701 1701
1702 static inline struct ieee80211_rate * 1702 static inline struct ieee80211_rate *
1703 ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, 1703 ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,
1704 const struct ieee80211_tx_info *c, int idx) 1704 const struct ieee80211_tx_info *c, int idx)
1705 { 1705 {
1706 if (c->control.rates[idx + 1].idx < 0) 1706 if (c->control.rates[idx + 1].idx < 0)
1707 return NULL; 1707 return NULL;
1708 return &hw->wiphy->bands[c->band]->bitrates[c->control.rates[idx + 1].idx]; 1708 return &hw->wiphy->bands[c->band]->bitrates[c->control.rates[idx + 1].idx];
1709 } 1709 }
1710 1710
1711 /** 1711 /**
1712 * ieee80211_free_txskb - free TX skb 1712 * ieee80211_free_txskb - free TX skb
1713 * @hw: the hardware 1713 * @hw: the hardware
1714 * @skb: the skb 1714 * @skb: the skb
1715 * 1715 *
1716 * Free a transmit skb. Use this funtion when some failure 1716 * Free a transmit skb. Use this funtion when some failure
1717 * to transmit happened and thus status cannot be reported. 1717 * to transmit happened and thus status cannot be reported.
1718 */ 1718 */
1719 void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb); 1719 void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb);
1720 1720
1721 /** 1721 /**
1722 * DOC: Hardware crypto acceleration 1722 * DOC: Hardware crypto acceleration
1723 * 1723 *
1724 * mac80211 is capable of taking advantage of many hardware 1724 * mac80211 is capable of taking advantage of many hardware
1725 * acceleration designs for encryption and decryption operations. 1725 * acceleration designs for encryption and decryption operations.
1726 * 1726 *
1727 * The set_key() callback in the &struct ieee80211_ops for a given 1727 * The set_key() callback in the &struct ieee80211_ops for a given
1728 * device is called to enable hardware acceleration of encryption and 1728 * device is called to enable hardware acceleration of encryption and
1729 * decryption. The callback takes a @sta parameter that will be NULL 1729 * decryption. The callback takes a @sta parameter that will be NULL
1730 * for default keys or keys used for transmission only, or point to 1730 * for default keys or keys used for transmission only, or point to
1731 * the station information for the peer for individual keys. 1731 * the station information for the peer for individual keys.
1732 * Multiple transmission keys with the same key index may be used when 1732 * Multiple transmission keys with the same key index may be used when
1733 * VLANs are configured for an access point. 1733 * VLANs are configured for an access point.
1734 * 1734 *
1735 * When transmitting, the TX control data will use the @hw_key_idx 1735 * When transmitting, the TX control data will use the @hw_key_idx
1736 * selected by the driver by modifying the &struct ieee80211_key_conf 1736 * selected by the driver by modifying the &struct ieee80211_key_conf
1737 * pointed to by the @key parameter to the set_key() function. 1737 * pointed to by the @key parameter to the set_key() function.
1738 * 1738 *
1739 * The set_key() call for the %SET_KEY command should return 0 if 1739 * The set_key() call for the %SET_KEY command should return 0 if
1740 * the key is now in use, -%EOPNOTSUPP or -%ENOSPC if it couldn't be 1740 * the key is now in use, -%EOPNOTSUPP or -%ENOSPC if it couldn't be
1741 * added; if you return 0 then hw_key_idx must be assigned to the 1741 * added; if you return 0 then hw_key_idx must be assigned to the
1742 * hardware key index, you are free to use the full u8 range. 1742 * hardware key index, you are free to use the full u8 range.
1743 * 1743 *
1744 * When the cmd is %DISABLE_KEY then it must succeed. 1744 * When the cmd is %DISABLE_KEY then it must succeed.
1745 * 1745 *
1746 * Note that it is permissible to not decrypt a frame even if a key 1746 * Note that it is permissible to not decrypt a frame even if a key
1747 * for it has been uploaded to hardware, the stack will not make any 1747 * for it has been uploaded to hardware, the stack will not make any
1748 * decision based on whether a key has been uploaded or not but rather 1748 * decision based on whether a key has been uploaded or not but rather
1749 * based on the receive flags. 1749 * based on the receive flags.
1750 * 1750 *
1751 * The &struct ieee80211_key_conf structure pointed to by the @key 1751 * The &struct ieee80211_key_conf structure pointed to by the @key
1752 * parameter is guaranteed to be valid until another call to set_key() 1752 * parameter is guaranteed to be valid until another call to set_key()
1753 * removes it, but it can only be used as a cookie to differentiate 1753 * removes it, but it can only be used as a cookie to differentiate
1754 * keys. 1754 * keys.
1755 * 1755 *
1756 * In TKIP some HW need to be provided a phase 1 key, for RX decryption 1756 * In TKIP some HW need to be provided a phase 1 key, for RX decryption
1757 * acceleration (i.e. iwlwifi). Those drivers should provide update_tkip_key 1757 * acceleration (i.e. iwlwifi). Those drivers should provide update_tkip_key
1758 * handler. 1758 * handler.
1759 * The update_tkip_key() call updates the driver with the new phase 1 key. 1759 * The update_tkip_key() call updates the driver with the new phase 1 key.
1760 * This happens every time the iv16 wraps around (every 65536 packets). The 1760 * This happens every time the iv16 wraps around (every 65536 packets). The
1761 * set_key() call will happen only once for each key (unless the AP did 1761 * set_key() call will happen only once for each key (unless the AP did
1762 * rekeying), it will not include a valid phase 1 key. The valid phase 1 key is 1762 * rekeying), it will not include a valid phase 1 key. The valid phase 1 key is
1763 * provided by update_tkip_key only. The trigger that makes mac80211 call this 1763 * provided by update_tkip_key only. The trigger that makes mac80211 call this
1764 * handler is software decryption with wrap around of iv16. 1764 * handler is software decryption with wrap around of iv16.
1765 * 1765 *
1766 * The set_default_unicast_key() call updates the default WEP key index 1766 * The set_default_unicast_key() call updates the default WEP key index
1767 * configured to the hardware for WEP encryption type. This is required 1767 * configured to the hardware for WEP encryption type. This is required
1768 * for devices that support offload of data packets (e.g. ARP responses). 1768 * for devices that support offload of data packets (e.g. ARP responses).
1769 */ 1769 */
1770 1770
1771 /** 1771 /**
1772 * DOC: Powersave support 1772 * DOC: Powersave support
1773 * 1773 *
1774 * mac80211 has support for various powersave implementations. 1774 * mac80211 has support for various powersave implementations.
1775 * 1775 *
1776 * First, it can support hardware that handles all powersaving by itself, 1776 * First, it can support hardware that handles all powersaving by itself,
1777 * such hardware should simply set the %IEEE80211_HW_SUPPORTS_PS hardware 1777 * such hardware should simply set the %IEEE80211_HW_SUPPORTS_PS hardware
1778 * flag. In that case, it will be told about the desired powersave mode 1778 * flag. In that case, it will be told about the desired powersave mode
1779 * with the %IEEE80211_CONF_PS flag depending on the association status. 1779 * with the %IEEE80211_CONF_PS flag depending on the association status.
1780 * The hardware must take care of sending nullfunc frames when necessary, 1780 * The hardware must take care of sending nullfunc frames when necessary,
1781 * i.e. when entering and leaving powersave mode. The hardware is required 1781 * i.e. when entering and leaving powersave mode. The hardware is required
1782 * to look at the AID in beacons and signal to the AP that it woke up when 1782 * to look at the AID in beacons and signal to the AP that it woke up when
1783 * it finds traffic directed to it. 1783 * it finds traffic directed to it.
1784 * 1784 *
1785 * %IEEE80211_CONF_PS flag enabled means that the powersave mode defined in 1785 * %IEEE80211_CONF_PS flag enabled means that the powersave mode defined in
1786 * IEEE 802.11-2007 section 11.2 is enabled. This is not to be confused 1786 * IEEE 802.11-2007 section 11.2 is enabled. This is not to be confused
1787 * with hardware wakeup and sleep states. Driver is responsible for waking 1787 * with hardware wakeup and sleep states. Driver is responsible for waking
1788 * up the hardware before issuing commands to the hardware and putting it 1788 * up the hardware before issuing commands to the hardware and putting it
1789 * back to sleep at appropriate times. 1789 * back to sleep at appropriate times.
1790 * 1790 *
1791 * When PS is enabled, hardware needs to wakeup for beacons and receive the 1791 * When PS is enabled, hardware needs to wakeup for beacons and receive the
1792 * buffered multicast/broadcast frames after the beacon. Also it must be 1792 * buffered multicast/broadcast frames after the beacon. Also it must be
1793 * possible to send frames and receive the acknowledment frame. 1793 * possible to send frames and receive the acknowledment frame.
1794 * 1794 *
1795 * Other hardware designs cannot send nullfunc frames by themselves and also 1795 * Other hardware designs cannot send nullfunc frames by themselves and also
1796 * need software support for parsing the TIM bitmap. This is also supported 1796 * need software support for parsing the TIM bitmap. This is also supported
1797 * by mac80211 by combining the %IEEE80211_HW_SUPPORTS_PS and 1797 * by mac80211 by combining the %IEEE80211_HW_SUPPORTS_PS and
1798 * %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still 1798 * %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still
1799 * required to pass up beacons. The hardware is still required to handle 1799 * required to pass up beacons. The hardware is still required to handle
1800 * waking up for multicast traffic; if it cannot the driver must handle that 1800 * waking up for multicast traffic; if it cannot the driver must handle that
1801 * as best as it can, mac80211 is too slow to do that. 1801 * as best as it can, mac80211 is too slow to do that.
1802 * 1802 *
1803 * Dynamic powersave is an extension to normal powersave in which the 1803 * Dynamic powersave is an extension to normal powersave in which the
1804 * hardware stays awake for a user-specified period of time after sending a 1804 * hardware stays awake for a user-specified period of time after sending a
1805 * frame so that reply frames need not be buffered and therefore delayed to 1805 * frame so that reply frames need not be buffered and therefore delayed to
1806 * the next wakeup. It's compromise of getting good enough latency when 1806 * the next wakeup. It's compromise of getting good enough latency when
1807 * there's data traffic and still saving significantly power in idle 1807 * there's data traffic and still saving significantly power in idle
1808 * periods. 1808 * periods.
1809 * 1809 *
1810 * Dynamic powersave is simply supported by mac80211 enabling and disabling 1810 * Dynamic powersave is simply supported by mac80211 enabling and disabling
1811 * PS based on traffic. Driver needs to only set %IEEE80211_HW_SUPPORTS_PS 1811 * PS based on traffic. Driver needs to only set %IEEE80211_HW_SUPPORTS_PS
1812 * flag and mac80211 will handle everything automatically. Additionally, 1812 * flag and mac80211 will handle everything automatically. Additionally,
1813 * hardware having support for the dynamic PS feature may set the 1813 * hardware having support for the dynamic PS feature may set the
1814 * %IEEE80211_HW_SUPPORTS_DYNAMIC_PS flag to indicate that it can support 1814 * %IEEE80211_HW_SUPPORTS_DYNAMIC_PS flag to indicate that it can support
1815 * dynamic PS mode itself. The driver needs to look at the 1815 * dynamic PS mode itself. The driver needs to look at the
1816 * @dynamic_ps_timeout hardware configuration value and use it that value 1816 * @dynamic_ps_timeout hardware configuration value and use it that value
1817 * whenever %IEEE80211_CONF_PS is set. In this case mac80211 will disable 1817 * whenever %IEEE80211_CONF_PS is set. In this case mac80211 will disable
1818 * dynamic PS feature in stack and will just keep %IEEE80211_CONF_PS 1818 * dynamic PS feature in stack and will just keep %IEEE80211_CONF_PS
1819 * enabled whenever user has enabled powersave. 1819 * enabled whenever user has enabled powersave.
1820 * 1820 *
1821 * Driver informs U-APSD client support by enabling 1821 * Driver informs U-APSD client support by enabling
1822 * %IEEE80211_HW_SUPPORTS_UAPSD flag. The mode is configured through the 1822 * %IEEE80211_HW_SUPPORTS_UAPSD flag. The mode is configured through the
1823 * uapsd paramater in conf_tx() operation. Hardware needs to send the QoS 1823 * uapsd paramater in conf_tx() operation. Hardware needs to send the QoS
1824 * Nullfunc frames and stay awake until the service period has ended. To 1824 * Nullfunc frames and stay awake until the service period has ended. To
1825 * utilize U-APSD, dynamic powersave is disabled for voip AC and all frames 1825 * utilize U-APSD, dynamic powersave is disabled for voip AC and all frames
1826 * from that AC are transmitted with powersave enabled. 1826 * from that AC are transmitted with powersave enabled.
1827 * 1827 *
1828 * Note: U-APSD client mode is not yet supported with 1828 * Note: U-APSD client mode is not yet supported with
1829 * %IEEE80211_HW_PS_NULLFUNC_STACK. 1829 * %IEEE80211_HW_PS_NULLFUNC_STACK.
1830 */ 1830 */
1831 1831
1832 /** 1832 /**
1833 * DOC: Beacon filter support 1833 * DOC: Beacon filter support
1834 * 1834 *
1835 * Some hardware have beacon filter support to reduce host cpu wakeups 1835 * Some hardware have beacon filter support to reduce host cpu wakeups
1836 * which will reduce system power consumption. It usually works so that 1836 * which will reduce system power consumption. It usually works so that
1837 * the firmware creates a checksum of the beacon but omits all constantly 1837 * the firmware creates a checksum of the beacon but omits all constantly
1838 * changing elements (TSF, TIM etc). Whenever the checksum changes the 1838 * changing elements (TSF, TIM etc). Whenever the checksum changes the
1839 * beacon is forwarded to the host, otherwise it will be just dropped. That 1839 * beacon is forwarded to the host, otherwise it will be just dropped. That
1840 * way the host will only receive beacons where some relevant information 1840 * way the host will only receive beacons where some relevant information
1841 * (for example ERP protection or WMM settings) have changed. 1841 * (for example ERP protection or WMM settings) have changed.
1842 * 1842 *
1843 * Beacon filter support is advertised with the %IEEE80211_VIF_BEACON_FILTER 1843 * Beacon filter support is advertised with the %IEEE80211_VIF_BEACON_FILTER
1844 * interface capability. The driver needs to enable beacon filter support 1844 * interface capability. The driver needs to enable beacon filter support
1845 * whenever power save is enabled, that is %IEEE80211_CONF_PS is set. When 1845 * whenever power save is enabled, that is %IEEE80211_CONF_PS is set. When
1846 * power save is enabled, the stack will not check for beacon loss and the 1846 * power save is enabled, the stack will not check for beacon loss and the
1847 * driver needs to notify about loss of beacons with ieee80211_beacon_loss(). 1847 * driver needs to notify about loss of beacons with ieee80211_beacon_loss().
1848 * 1848 *
1849 * The time (or number of beacons missed) until the firmware notifies the 1849 * The time (or number of beacons missed) until the firmware notifies the
1850 * driver of a beacon loss event (which in turn causes the driver to call 1850 * driver of a beacon loss event (which in turn causes the driver to call
1851 * ieee80211_beacon_loss()) should be configurable and will be controlled 1851 * ieee80211_beacon_loss()) should be configurable and will be controlled
1852 * by mac80211 and the roaming algorithm in the future. 1852 * by mac80211 and the roaming algorithm in the future.
1853 * 1853 *
1854 * Since there may be constantly changing information elements that nothing 1854 * Since there may be constantly changing information elements that nothing
1855 * in the software stack cares about, we will, in the future, have mac80211 1855 * in the software stack cares about, we will, in the future, have mac80211
1856 * tell the driver which information elements are interesting in the sense 1856 * tell the driver which information elements are interesting in the sense
1857 * that we want to see changes in them. This will include 1857 * that we want to see changes in them. This will include
1858 * - a list of information element IDs 1858 * - a list of information element IDs
1859 * - a list of OUIs for the vendor information element 1859 * - a list of OUIs for the vendor information element
1860 * 1860 *
1861 * Ideally, the hardware would filter out any beacons without changes in the 1861 * Ideally, the hardware would filter out any beacons without changes in the
1862 * requested elements, but if it cannot support that it may, at the expense 1862 * requested elements, but if it cannot support that it may, at the expense
1863 * of some efficiency, filter out only a subset. For example, if the device 1863 * of some efficiency, filter out only a subset. For example, if the device
1864 * doesn't support checking for OUIs it should pass up all changes in all 1864 * doesn't support checking for OUIs it should pass up all changes in all
1865 * vendor information elements. 1865 * vendor information elements.
1866 * 1866 *
1867 * Note that change, for the sake of simplification, also includes information 1867 * Note that change, for the sake of simplification, also includes information
1868 * elements appearing or disappearing from the beacon. 1868 * elements appearing or disappearing from the beacon.
1869 * 1869 *
1870 * Some hardware supports an "ignore list" instead, just make sure nothing 1870 * Some hardware supports an "ignore list" instead, just make sure nothing
1871 * that was requested is on the ignore list, and include commonly changing 1871 * that was requested is on the ignore list, and include commonly changing
1872 * information element IDs in the ignore list, for example 11 (BSS load) and 1872 * information element IDs in the ignore list, for example 11 (BSS load) and
1873 * the various vendor-assigned IEs with unknown contents (128, 129, 133-136, 1873 * the various vendor-assigned IEs with unknown contents (128, 129, 133-136,
1874 * 149, 150, 155, 156, 173, 176, 178, 179, 219); for forward compatibility 1874 * 149, 150, 155, 156, 173, 176, 178, 179, 219); for forward compatibility
1875 * it could also include some currently unused IDs. 1875 * it could also include some currently unused IDs.
1876 * 1876 *
1877 * 1877 *
1878 * In addition to these capabilities, hardware should support notifying the 1878 * In addition to these capabilities, hardware should support notifying the
1879 * host of changes in the beacon RSSI. This is relevant to implement roaming 1879 * host of changes in the beacon RSSI. This is relevant to implement roaming
1880 * when no traffic is flowing (when traffic is flowing we see the RSSI of 1880 * when no traffic is flowing (when traffic is flowing we see the RSSI of
1881 * the received data packets). This can consist in notifying the host when 1881 * the received data packets). This can consist in notifying the host when
1882 * the RSSI changes significantly or when it drops below or rises above 1882 * the RSSI changes significantly or when it drops below or rises above
1883 * configurable thresholds. In the future these thresholds will also be 1883 * configurable thresholds. In the future these thresholds will also be
1884 * configured by mac80211 (which gets them from userspace) to implement 1884 * configured by mac80211 (which gets them from userspace) to implement
1885 * them as the roaming algorithm requires. 1885 * them as the roaming algorithm requires.
1886 * 1886 *
1887 * If the hardware cannot implement this, the driver should ask it to 1887 * If the hardware cannot implement this, the driver should ask it to
1888 * periodically pass beacon frames to the host so that software can do the 1888 * periodically pass beacon frames to the host so that software can do the
1889 * signal strength threshold checking. 1889 * signal strength threshold checking.
1890 */ 1890 */
1891 1891
1892 /** 1892 /**
1893 * DOC: Spatial multiplexing power save 1893 * DOC: Spatial multiplexing power save
1894 * 1894 *
1895 * SMPS (Spatial multiplexing power save) is a mechanism to conserve 1895 * SMPS (Spatial multiplexing power save) is a mechanism to conserve
1896 * power in an 802.11n implementation. For details on the mechanism 1896 * power in an 802.11n implementation. For details on the mechanism
1897 * and rationale, please refer to 802.11 (as amended by 802.11n-2009) 1897 * and rationale, please refer to 802.11 (as amended by 802.11n-2009)
1898 * "11.2.3 SM power save". 1898 * "11.2.3 SM power save".
1899 * 1899 *
1900 * The mac80211 implementation is capable of sending action frames 1900 * The mac80211 implementation is capable of sending action frames
1901 * to update the AP about the station's SMPS mode, and will instruct 1901 * to update the AP about the station's SMPS mode, and will instruct
1902 * the driver to enter the specific mode. It will also announce the 1902 * the driver to enter the specific mode. It will also announce the
1903 * requested SMPS mode during the association handshake. Hardware 1903 * requested SMPS mode during the association handshake. Hardware
1904 * support for this feature is required, and can be indicated by 1904 * support for this feature is required, and can be indicated by
1905 * hardware flags. 1905 * hardware flags.
1906 * 1906 *
1907 * The default mode will be "automatic", which nl80211/cfg80211 1907 * The default mode will be "automatic", which nl80211/cfg80211
1908 * defines to be dynamic SMPS in (regular) powersave, and SMPS 1908 * defines to be dynamic SMPS in (regular) powersave, and SMPS
1909 * turned off otherwise. 1909 * turned off otherwise.
1910 * 1910 *
1911 * To support this feature, the driver must set the appropriate 1911 * To support this feature, the driver must set the appropriate
1912 * hardware support flags, and handle the SMPS flag to the config() 1912 * hardware support flags, and handle the SMPS flag to the config()
1913 * operation. It will then with this mechanism be instructed to 1913 * operation. It will then with this mechanism be instructed to
1914 * enter the requested SMPS mode while associated to an HT AP. 1914 * enter the requested SMPS mode while associated to an HT AP.
1915 */ 1915 */
1916 1916
1917 /** 1917 /**
1918 * DOC: Frame filtering 1918 * DOC: Frame filtering
1919 * 1919 *
1920 * mac80211 requires to see many management frames for proper 1920 * mac80211 requires to see many management frames for proper
1921 * operation, and users may want to see many more frames when 1921 * operation, and users may want to see many more frames when
1922 * in monitor mode. However, for best CPU usage and power consumption, 1922 * in monitor mode. However, for best CPU usage and power consumption,
1923 * having as few frames as possible percolate through the stack is 1923 * having as few frames as possible percolate through the stack is
1924 * desirable. Hence, the hardware should filter as much as possible. 1924 * desirable. Hence, the hardware should filter as much as possible.
1925 * 1925 *
1926 * To achieve this, mac80211 uses filter flags (see below) to tell 1926 * To achieve this, mac80211 uses filter flags (see below) to tell
1927 * the driver's configure_filter() function which frames should be 1927 * the driver's configure_filter() function which frames should be
1928 * passed to mac80211 and which should be filtered out. 1928 * passed to mac80211 and which should be filtered out.
1929 * 1929 *
1930 * Before configure_filter() is invoked, the prepare_multicast() 1930 * Before configure_filter() is invoked, the prepare_multicast()
1931 * callback is invoked with the parameters @mc_count and @mc_list 1931 * callback is invoked with the parameters @mc_count and @mc_list
1932 * for the combined multicast address list of all virtual interfaces. 1932 * for the combined multicast address list of all virtual interfaces.
1933 * It's use is optional, and it returns a u64 that is passed to 1933 * It's use is optional, and it returns a u64 that is passed to
1934 * configure_filter(). Additionally, configure_filter() has the 1934 * configure_filter(). Additionally, configure_filter() has the
1935 * arguments @changed_flags telling which flags were changed and 1935 * arguments @changed_flags telling which flags were changed and
1936 * @total_flags with the new flag states. 1936 * @total_flags with the new flag states.
1937 * 1937 *
1938 * If your device has no multicast address filters your driver will 1938 * If your device has no multicast address filters your driver will
1939 * need to check both the %FIF_ALLMULTI flag and the @mc_count 1939 * need to check both the %FIF_ALLMULTI flag and the @mc_count
1940 * parameter to see whether multicast frames should be accepted 1940 * parameter to see whether multicast frames should be accepted
1941 * or dropped. 1941 * or dropped.
1942 * 1942 *
1943 * All unsupported flags in @total_flags must be cleared. 1943 * All unsupported flags in @total_flags must be cleared.
1944 * Hardware does not support a flag if it is incapable of _passing_ 1944 * Hardware does not support a flag if it is incapable of _passing_
1945 * the frame to the stack. Otherwise the driver must ignore 1945 * the frame to the stack. Otherwise the driver must ignore
1946 * the flag, but not clear it. 1946 * the flag, but not clear it.
1947 * You must _only_ clear the flag (announce no support for the 1947 * You must _only_ clear the flag (announce no support for the
1948 * flag to mac80211) if you are not able to pass the packet type 1948 * flag to mac80211) if you are not able to pass the packet type
1949 * to the stack (so the hardware always filters it). 1949 * to the stack (so the hardware always filters it).
1950 * So for example, you should clear @FIF_CONTROL, if your hardware 1950 * So for example, you should clear @FIF_CONTROL, if your hardware
1951 * always filters control frames. If your hardware always passes 1951 * always filters control frames. If your hardware always passes
1952 * control frames to the kernel and is incapable of filtering them, 1952 * control frames to the kernel and is incapable of filtering them,
1953 * you do _not_ clear the @FIF_CONTROL flag. 1953 * you do _not_ clear the @FIF_CONTROL flag.
1954 * This rule applies to all other FIF flags as well. 1954 * This rule applies to all other FIF flags as well.
1955 */ 1955 */
1956 1956
1957 /** 1957 /**
1958 * DOC: AP support for powersaving clients 1958 * DOC: AP support for powersaving clients
1959 * 1959 *
1960 * In order to implement AP and P2P GO modes, mac80211 has support for 1960 * In order to implement AP and P2P GO modes, mac80211 has support for
1961 * client powersaving, both "legacy" PS (PS-Poll/null data) and uAPSD. 1961 * client powersaving, both "legacy" PS (PS-Poll/null data) and uAPSD.
1962 * There currently is no support for sAPSD. 1962 * There currently is no support for sAPSD.
1963 * 1963 *
1964 * There is one assumption that mac80211 makes, namely that a client 1964 * There is one assumption that mac80211 makes, namely that a client
1965 * will not poll with PS-Poll and trigger with uAPSD at the same time. 1965 * will not poll with PS-Poll and trigger with uAPSD at the same time.
1966 * Both are supported, and both can be used by the same client, but 1966 * Both are supported, and both can be used by the same client, but
1967 * they can't be used concurrently by the same client. This simplifies 1967 * they can't be used concurrently by the same client. This simplifies
1968 * the driver code. 1968 * the driver code.
1969 * 1969 *
1970 * The first thing to keep in mind is that there is a flag for complete 1970 * The first thing to keep in mind is that there is a flag for complete
1971 * driver implementation: %IEEE80211_HW_AP_LINK_PS. If this flag is set, 1971 * driver implementation: %IEEE80211_HW_AP_LINK_PS. If this flag is set,
1972 * mac80211 expects the driver to handle most of the state machine for 1972 * mac80211 expects the driver to handle most of the state machine for
1973 * powersaving clients and will ignore the PM bit in incoming frames. 1973 * powersaving clients and will ignore the PM bit in incoming frames.
1974 * Drivers then use ieee80211_sta_ps_transition() to inform mac80211 of 1974 * Drivers then use ieee80211_sta_ps_transition() to inform mac80211 of
1975 * stations' powersave transitions. In this mode, mac80211 also doesn't 1975 * stations' powersave transitions. In this mode, mac80211 also doesn't
1976 * handle PS-Poll/uAPSD. 1976 * handle PS-Poll/uAPSD.
1977 * 1977 *
1978 * In the mode without %IEEE80211_HW_AP_LINK_PS, mac80211 will check the 1978 * In the mode without %IEEE80211_HW_AP_LINK_PS, mac80211 will check the
1979 * PM bit in incoming frames for client powersave transitions. When a 1979 * PM bit in incoming frames for client powersave transitions. When a
1980 * station goes to sleep, we will stop transmitting to it. There is, 1980 * station goes to sleep, we will stop transmitting to it. There is,
1981 * however, a race condition: a station might go to sleep while there is 1981 * however, a race condition: a station might go to sleep while there is
1982 * data buffered on hardware queues. If the device has support for this 1982 * data buffered on hardware queues. If the device has support for this
1983 * it will reject frames, and the driver should give the frames back to 1983 * it will reject frames, and the driver should give the frames back to
1984 * mac80211 with the %IEEE80211_TX_STAT_TX_FILTERED flag set which will 1984 * mac80211 with the %IEEE80211_TX_STAT_TX_FILTERED flag set which will
1985 * cause mac80211 to retry the frame when the station wakes up. The 1985 * cause mac80211 to retry the frame when the station wakes up. The
1986 * driver is also notified of powersave transitions by calling its 1986 * driver is also notified of powersave transitions by calling its
1987 * @sta_notify callback. 1987 * @sta_notify callback.
1988 * 1988 *
1989 * When the station is asleep, it has three choices: it can wake up, 1989 * When the station is asleep, it has three choices: it can wake up,
1990 * it can PS-Poll, or it can possibly start a uAPSD service period. 1990 * it can PS-Poll, or it can possibly start a uAPSD service period.
1991 * Waking up is implemented by simply transmitting all buffered (and 1991 * Waking up is implemented by simply transmitting all buffered (and
1992 * filtered) frames to the station. This is the easiest case. When 1992 * filtered) frames to the station. This is the easiest case. When
1993 * the station sends a PS-Poll or a uAPSD trigger frame, mac80211 1993 * the station sends a PS-Poll or a uAPSD trigger frame, mac80211
1994 * will inform the driver of this with the @allow_buffered_frames 1994 * will inform the driver of this with the @allow_buffered_frames
1995 * callback; this callback is optional. mac80211 will then transmit 1995 * callback; this callback is optional. mac80211 will then transmit
1996 * the frames as usual and set the %IEEE80211_TX_CTL_NO_PS_BUFFER 1996 * the frames as usual and set the %IEEE80211_TX_CTL_NO_PS_BUFFER
1997 * on each frame. The last frame in the service period (or the only 1997 * on each frame. The last frame in the service period (or the only
1998 * response to a PS-Poll) also has %IEEE80211_TX_STATUS_EOSP set to 1998 * response to a PS-Poll) also has %IEEE80211_TX_STATUS_EOSP set to
1999 * indicate that it ends the service period; as this frame must have 1999 * indicate that it ends the service period; as this frame must have
2000 * TX status report it also sets %IEEE80211_TX_CTL_REQ_TX_STATUS. 2000 * TX status report it also sets %IEEE80211_TX_CTL_REQ_TX_STATUS.
2001 * When TX status is reported for this frame, the service period is 2001 * When TX status is reported for this frame, the service period is
2002 * marked has having ended and a new one can be started by the peer. 2002 * marked has having ended and a new one can be started by the peer.
2003 * 2003 *
2004 * Additionally, non-bufferable MMPDUs can also be transmitted by 2004 * Additionally, non-bufferable MMPDUs can also be transmitted by
2005 * mac80211 with the %IEEE80211_TX_CTL_NO_PS_BUFFER set in them. 2005 * mac80211 with the %IEEE80211_TX_CTL_NO_PS_BUFFER set in them.
2006 * 2006 *
2007 * Another race condition can happen on some devices like iwlwifi 2007 * Another race condition can happen on some devices like iwlwifi
2008 * when there are frames queued for the station and it wakes up 2008 * when there are frames queued for the station and it wakes up
2009 * or polls; the frames that are already queued could end up being 2009 * or polls; the frames that are already queued could end up being
2010 * transmitted first instead, causing reordering and/or wrong 2010 * transmitted first instead, causing reordering and/or wrong
2011 * processing of the EOSP. The cause is that allowing frames to be 2011 * processing of the EOSP. The cause is that allowing frames to be
2012 * transmitted to a certain station is out-of-band communication to 2012 * transmitted to a certain station is out-of-band communication to
2013 * the device. To allow this problem to be solved, the driver can 2013 * the device. To allow this problem to be solved, the driver can
2014 * call ieee80211_sta_block_awake() if frames are buffered when it 2014 * call ieee80211_sta_block_awake() if frames are buffered when it
2015 * is notified that the station went to sleep. When all these frames 2015 * is notified that the station went to sleep. When all these frames
2016 * have been filtered (see above), it must call the function again 2016 * have been filtered (see above), it must call the function again
2017 * to indicate that the station is no longer blocked. 2017 * to indicate that the station is no longer blocked.
2018 * 2018 *
2019 * If the driver buffers frames in the driver for aggregation in any 2019 * If the driver buffers frames in the driver for aggregation in any
2020 * way, it must use the ieee80211_sta_set_buffered() call when it is 2020 * way, it must use the ieee80211_sta_set_buffered() call when it is
2021 * notified of the station going to sleep to inform mac80211 of any 2021 * notified of the station going to sleep to inform mac80211 of any
2022 * TIDs that have frames buffered. Note that when a station wakes up 2022 * TIDs that have frames buffered. Note that when a station wakes up
2023 * this information is reset (hence the requirement to call it when 2023 * this information is reset (hence the requirement to call it when
2024 * informed of the station going to sleep). Then, when a service 2024 * informed of the station going to sleep). Then, when a service
2025 * period starts for any reason, @release_buffered_frames is called 2025 * period starts for any reason, @release_buffered_frames is called
2026 * with the number of frames to be released and which TIDs they are 2026 * with the number of frames to be released and which TIDs they are
2027 * to come from. In this case, the driver is responsible for setting 2027 * to come from. In this case, the driver is responsible for setting
2028 * the EOSP (for uAPSD) and MORE_DATA bits in the released frames, 2028 * the EOSP (for uAPSD) and MORE_DATA bits in the released frames,
2029 * to help the @more_data paramter is passed to tell the driver if 2029 * to help the @more_data paramter is passed to tell the driver if
2030 * there is more data on other TIDs -- the TIDs to release frames 2030 * there is more data on other TIDs -- the TIDs to release frames
2031 * from are ignored since mac80211 doesn't know how many frames the 2031 * from are ignored since mac80211 doesn't know how many frames the
2032 * buffers for those TIDs contain. 2032 * buffers for those TIDs contain.
2033 * 2033 *
2034 * If the driver also implement GO mode, where absence periods may 2034 * If the driver also implement GO mode, where absence periods may
2035 * shorten service periods (or abort PS-Poll responses), it must 2035 * shorten service periods (or abort PS-Poll responses), it must
2036 * filter those response frames except in the case of frames that 2036 * filter those response frames except in the case of frames that
2037 * are buffered in the driver -- those must remain buffered to avoid 2037 * are buffered in the driver -- those must remain buffered to avoid
2038 * reordering. Because it is possible that no frames are released 2038 * reordering. Because it is possible that no frames are released
2039 * in this case, the driver must call ieee80211_sta_eosp() 2039 * in this case, the driver must call ieee80211_sta_eosp()
2040 * to indicate to mac80211 that the service period ended anyway. 2040 * to indicate to mac80211 that the service period ended anyway.
2041 * 2041 *
2042 * Finally, if frames from multiple TIDs are released from mac80211 2042 * Finally, if frames from multiple TIDs are released from mac80211
2043 * but the driver might reorder them, it must clear & set the flags 2043 * but the driver might reorder them, it must clear & set the flags
2044 * appropriately (only the last frame may have %IEEE80211_TX_STATUS_EOSP) 2044 * appropriately (only the last frame may have %IEEE80211_TX_STATUS_EOSP)
2045 * and also take care of the EOSP and MORE_DATA bits in the frame. 2045 * and also take care of the EOSP and MORE_DATA bits in the frame.
2046 * The driver may also use ieee80211_sta_eosp() in this case. 2046 * The driver may also use ieee80211_sta_eosp() in this case.
2047 */ 2047 */
2048 2048
2049 /** 2049 /**
2050 * DOC: HW queue control 2050 * DOC: HW queue control
2051 * 2051 *
2052 * Before HW queue control was introduced, mac80211 only had a single static 2052 * Before HW queue control was introduced, mac80211 only had a single static
2053 * assignment of per-interface AC software queues to hardware queues. This 2053 * assignment of per-interface AC software queues to hardware queues. This
2054 * was problematic for a few reasons: 2054 * was problematic for a few reasons:
2055 * 1) off-channel transmissions might get stuck behind other frames 2055 * 1) off-channel transmissions might get stuck behind other frames
2056 * 2) multiple virtual interfaces couldn't be handled correctly 2056 * 2) multiple virtual interfaces couldn't be handled correctly
2057 * 3) after-DTIM frames could get stuck behind other frames 2057 * 3) after-DTIM frames could get stuck behind other frames
2058 * 2058 *
2059 * To solve this, hardware typically uses multiple different queues for all 2059 * To solve this, hardware typically uses multiple different queues for all
2060 * the different usages, and this needs to be propagated into mac80211 so it 2060 * the different usages, and this needs to be propagated into mac80211 so it
2061 * won't have the same problem with the software queues. 2061 * won't have the same problem with the software queues.
2062 * 2062 *
2063 * Therefore, mac80211 now offers the %IEEE80211_HW_QUEUE_CONTROL capability 2063 * Therefore, mac80211 now offers the %IEEE80211_HW_QUEUE_CONTROL capability
2064 * flag that tells it that the driver implements its own queue control. To do 2064 * flag that tells it that the driver implements its own queue control. To do
2065 * so, the driver will set up the various queues in each &struct ieee80211_vif 2065 * so, the driver will set up the various queues in each &struct ieee80211_vif
2066 * and the offchannel queue in &struct ieee80211_hw. In response, mac80211 will 2066 * and the offchannel queue in &struct ieee80211_hw. In response, mac80211 will
2067 * use those queue IDs in the hw_queue field of &struct ieee80211_tx_info and 2067 * use those queue IDs in the hw_queue field of &struct ieee80211_tx_info and
2068 * if necessary will queue the frame on the right software queue that mirrors 2068 * if necessary will queue the frame on the right software queue that mirrors
2069 * the hardware queue. 2069 * the hardware queue.
2070 * Additionally, the driver has to then use these HW queue IDs for the queue 2070 * Additionally, the driver has to then use these HW queue IDs for the queue
2071 * management functions (ieee80211_stop_queue() et al.) 2071 * management functions (ieee80211_stop_queue() et al.)
2072 * 2072 *
2073 * The driver is free to set up the queue mappings as needed, multiple virtual 2073 * The driver is free to set up the queue mappings as needed, multiple virtual
2074 * interfaces may map to the same hardware queues if needed. The setup has to 2074 * interfaces may map to the same hardware queues if needed. The setup has to
2075 * happen during add_interface or change_interface callbacks. For example, a 2075 * happen during add_interface or change_interface callbacks. For example, a
2076 * driver supporting station+station and station+AP modes might decide to have 2076 * driver supporting station+station and station+AP modes might decide to have
2077 * 10 hardware queues to handle different scenarios: 2077 * 10 hardware queues to handle different scenarios:
2078 * 2078 *
2079 * 4 AC HW queues for 1st vif: 0, 1, 2, 3 2079 * 4 AC HW queues for 1st vif: 0, 1, 2, 3
2080 * 4 AC HW queues for 2nd vif: 4, 5, 6, 7 2080 * 4 AC HW queues for 2nd vif: 4, 5, 6, 7
2081 * after-DTIM queue for AP: 8 2081 * after-DTIM queue for AP: 8
2082 * off-channel queue: 9 2082 * off-channel queue: 9
2083 * 2083 *
2084 * It would then set up the hardware like this: 2084 * It would then set up the hardware like this:
2085 * hw.offchannel_tx_hw_queue = 9 2085 * hw.offchannel_tx_hw_queue = 9
2086 * 2086 *
2087 * and the first virtual interface that is added as follows: 2087 * and the first virtual interface that is added as follows:
2088 * vif.hw_queue[IEEE80211_AC_VO] = 0 2088 * vif.hw_queue[IEEE80211_AC_VO] = 0
2089 * vif.hw_queue[IEEE80211_AC_VI] = 1 2089 * vif.hw_queue[IEEE80211_AC_VI] = 1
2090 * vif.hw_queue[IEEE80211_AC_BE] = 2 2090 * vif.hw_queue[IEEE80211_AC_BE] = 2
2091 * vif.hw_queue[IEEE80211_AC_BK] = 3 2091 * vif.hw_queue[IEEE80211_AC_BK] = 3
2092 * vif.cab_queue = 8 // if AP mode, otherwise %IEEE80211_INVAL_HW_QUEUE 2092 * vif.cab_queue = 8 // if AP mode, otherwise %IEEE80211_INVAL_HW_QUEUE
2093 * and the second virtual interface with 4-7. 2093 * and the second virtual interface with 4-7.
2094 * 2094 *
2095 * If queue 6 gets full, for example, mac80211 would only stop the second 2095 * If queue 6 gets full, for example, mac80211 would only stop the second
2096 * virtual interface's BE queue since virtual interface queues are per AC. 2096 * virtual interface's BE queue since virtual interface queues are per AC.
2097 * 2097 *
2098 * Note that the vif.cab_queue value should be set to %IEEE80211_INVAL_HW_QUEUE 2098 * Note that the vif.cab_queue value should be set to %IEEE80211_INVAL_HW_QUEUE
2099 * whenever the queue is not used (i.e. the interface is not in AP mode) if the 2099 * whenever the queue is not used (i.e. the interface is not in AP mode) if the
2100 * queue could potentially be shared since mac80211 will look at cab_queue when 2100 * queue could potentially be shared since mac80211 will look at cab_queue when
2101 * a queue is stopped/woken even if the interface is not in AP mode. 2101 * a queue is stopped/woken even if the interface is not in AP mode.
2102 */ 2102 */
2103 2103
2104 /** 2104 /**
2105 * enum ieee80211_filter_flags - hardware filter flags 2105 * enum ieee80211_filter_flags - hardware filter flags
2106 * 2106 *
2107 * These flags determine what the filter in hardware should be 2107 * These flags determine what the filter in hardware should be
2108 * programmed to let through and what should not be passed to the 2108 * programmed to let through and what should not be passed to the
2109 * stack. It is always safe to pass more frames than requested, 2109 * stack. It is always safe to pass more frames than requested,
2110 * but this has negative impact on power consumption. 2110 * but this has negative impact on power consumption.
2111 * 2111 *
2112 * @FIF_PROMISC_IN_BSS: promiscuous mode within your BSS, 2112 * @FIF_PROMISC_IN_BSS: promiscuous mode within your BSS,
2113 * think of the BSS as your network segment and then this corresponds 2113 * think of the BSS as your network segment and then this corresponds
2114 * to the regular ethernet device promiscuous mode. 2114 * to the regular ethernet device promiscuous mode.
2115 * 2115 *
2116 * @FIF_ALLMULTI: pass all multicast frames, this is used if requested 2116 * @FIF_ALLMULTI: pass all multicast frames, this is used if requested
2117 * by the user or if the hardware is not capable of filtering by 2117 * by the user or if the hardware is not capable of filtering by
2118 * multicast address. 2118 * multicast address.
2119 * 2119 *
2120 * @FIF_FCSFAIL: pass frames with failed FCS (but you need to set the 2120 * @FIF_FCSFAIL: pass frames with failed FCS (but you need to set the
2121 * %RX_FLAG_FAILED_FCS_CRC for them) 2121 * %RX_FLAG_FAILED_FCS_CRC for them)
2122 * 2122 *
2123 * @FIF_PLCPFAIL: pass frames with failed PLCP CRC (but you need to set 2123 * @FIF_PLCPFAIL: pass frames with failed PLCP CRC (but you need to set
2124 * the %RX_FLAG_FAILED_PLCP_CRC for them 2124 * the %RX_FLAG_FAILED_PLCP_CRC for them
2125 * 2125 *
2126 * @FIF_BCN_PRBRESP_PROMISC: This flag is set during scanning to indicate 2126 * @FIF_BCN_PRBRESP_PROMISC: This flag is set during scanning to indicate
2127 * to the hardware that it should not filter beacons or probe responses 2127 * to the hardware that it should not filter beacons or probe responses
2128 * by BSSID. Filtering them can greatly reduce the amount of processing 2128 * by BSSID. Filtering them can greatly reduce the amount of processing
2129 * mac80211 needs to do and the amount of CPU wakeups, so you should 2129 * mac80211 needs to do and the amount of CPU wakeups, so you should
2130 * honour this flag if possible. 2130 * honour this flag if possible.
2131 * 2131 *
2132 * @FIF_CONTROL: pass control frames (except for PS Poll), if PROMISC_IN_BSS 2132 * @FIF_CONTROL: pass control frames (except for PS Poll), if PROMISC_IN_BSS
2133 * is not set then only those addressed to this station. 2133 * is not set then only those addressed to this station.
2134 * 2134 *
2135 * @FIF_OTHER_BSS: pass frames destined to other BSSes 2135 * @FIF_OTHER_BSS: pass frames destined to other BSSes
2136 * 2136 *
2137 * @FIF_PSPOLL: pass PS Poll frames, if PROMISC_IN_BSS is not set then only 2137 * @FIF_PSPOLL: pass PS Poll frames, if PROMISC_IN_BSS is not set then only
2138 * those addressed to this station. 2138 * those addressed to this station.
2139 * 2139 *
2140 * @FIF_PROBE_REQ: pass probe request frames 2140 * @FIF_PROBE_REQ: pass probe request frames
2141 */ 2141 */
2142 enum ieee80211_filter_flags { 2142 enum ieee80211_filter_flags {
2143 FIF_PROMISC_IN_BSS = 1<<0, 2143 FIF_PROMISC_IN_BSS = 1<<0,
2144 FIF_ALLMULTI = 1<<1, 2144 FIF_ALLMULTI = 1<<1,
2145 FIF_FCSFAIL = 1<<2, 2145 FIF_FCSFAIL = 1<<2,
2146 FIF_PLCPFAIL = 1<<3, 2146 FIF_PLCPFAIL = 1<<3,
2147 FIF_BCN_PRBRESP_PROMISC = 1<<4, 2147 FIF_BCN_PRBRESP_PROMISC = 1<<4,
2148 FIF_CONTROL = 1<<5, 2148 FIF_CONTROL = 1<<5,
2149 FIF_OTHER_BSS = 1<<6, 2149 FIF_OTHER_BSS = 1<<6,
2150 FIF_PSPOLL = 1<<7, 2150 FIF_PSPOLL = 1<<7,
2151 FIF_PROBE_REQ = 1<<8, 2151 FIF_PROBE_REQ = 1<<8,
2152 }; 2152 };
2153 2153
2154 /** 2154 /**
2155 * enum ieee80211_ampdu_mlme_action - A-MPDU actions 2155 * enum ieee80211_ampdu_mlme_action - A-MPDU actions
2156 * 2156 *
2157 * These flags are used with the ampdu_action() callback in 2157 * These flags are used with the ampdu_action() callback in
2158 * &struct ieee80211_ops to indicate which action is needed. 2158 * &struct ieee80211_ops to indicate which action is needed.
2159 * 2159 *
2160 * Note that drivers MUST be able to deal with a TX aggregation 2160 * Note that drivers MUST be able to deal with a TX aggregation
2161 * session being stopped even before they OK'ed starting it by 2161 * session being stopped even before they OK'ed starting it by
2162 * calling ieee80211_start_tx_ba_cb_irqsafe, because the peer 2162 * calling ieee80211_start_tx_ba_cb_irqsafe, because the peer
2163 * might receive the addBA frame and send a delBA right away! 2163 * might receive the addBA frame and send a delBA right away!
2164 * 2164 *
2165 * @IEEE80211_AMPDU_RX_START: start RX aggregation 2165 * @IEEE80211_AMPDU_RX_START: start RX aggregation
2166 * @IEEE80211_AMPDU_RX_STOP: stop RX aggregation 2166 * @IEEE80211_AMPDU_RX_STOP: stop RX aggregation
2167 * @IEEE80211_AMPDU_TX_START: start TX aggregation 2167 * @IEEE80211_AMPDU_TX_START: start TX aggregation
2168 * @IEEE80211_AMPDU_TX_OPERATIONAL: TX aggregation has become operational 2168 * @IEEE80211_AMPDU_TX_OPERATIONAL: TX aggregation has become operational
2169 * @IEEE80211_AMPDU_TX_STOP_CONT: stop TX aggregation but continue transmitting 2169 * @IEEE80211_AMPDU_TX_STOP_CONT: stop TX aggregation but continue transmitting
2170 * queued packets, now unaggregated. After all packets are transmitted the 2170 * queued packets, now unaggregated. After all packets are transmitted the
2171 * driver has to call ieee80211_stop_tx_ba_cb_irqsafe(). 2171 * driver has to call ieee80211_stop_tx_ba_cb_irqsafe().
2172 * @IEEE80211_AMPDU_TX_STOP_FLUSH: stop TX aggregation and flush all packets, 2172 * @IEEE80211_AMPDU_TX_STOP_FLUSH: stop TX aggregation and flush all packets,
2173 * called when the station is removed. There's no need or reason to call 2173 * called when the station is removed. There's no need or reason to call
2174 * ieee80211_stop_tx_ba_cb_irqsafe() in this case as mac80211 assumes the 2174 * ieee80211_stop_tx_ba_cb_irqsafe() in this case as mac80211 assumes the
2175 * session is gone and removes the station. 2175 * session is gone and removes the station.
2176 * @IEEE80211_AMPDU_TX_STOP_FLUSH_CONT: called when TX aggregation is stopped 2176 * @IEEE80211_AMPDU_TX_STOP_FLUSH_CONT: called when TX aggregation is stopped
2177 * but the driver hasn't called ieee80211_stop_tx_ba_cb_irqsafe() yet and 2177 * but the driver hasn't called ieee80211_stop_tx_ba_cb_irqsafe() yet and
2178 * now the connection is dropped and the station will be removed. Drivers 2178 * now the connection is dropped and the station will be removed. Drivers
2179 * should clean up and drop remaining packets when this is called. 2179 * should clean up and drop remaining packets when this is called.
2180 */ 2180 */
2181 enum ieee80211_ampdu_mlme_action { 2181 enum ieee80211_ampdu_mlme_action {
2182 IEEE80211_AMPDU_RX_START, 2182 IEEE80211_AMPDU_RX_START,
2183 IEEE80211_AMPDU_RX_STOP, 2183 IEEE80211_AMPDU_RX_STOP,
2184 IEEE80211_AMPDU_TX_START, 2184 IEEE80211_AMPDU_TX_START,
2185 IEEE80211_AMPDU_TX_STOP_CONT, 2185 IEEE80211_AMPDU_TX_STOP_CONT,
2186 IEEE80211_AMPDU_TX_STOP_FLUSH, 2186 IEEE80211_AMPDU_TX_STOP_FLUSH,
2187 IEEE80211_AMPDU_TX_STOP_FLUSH_CONT, 2187 IEEE80211_AMPDU_TX_STOP_FLUSH_CONT,
2188 IEEE80211_AMPDU_TX_OPERATIONAL, 2188 IEEE80211_AMPDU_TX_OPERATIONAL,
2189 }; 2189 };
2190 2190
2191 /** 2191 /**
2192 * enum ieee80211_frame_release_type - frame release reason 2192 * enum ieee80211_frame_release_type - frame release reason
2193 * @IEEE80211_FRAME_RELEASE_PSPOLL: frame released for PS-Poll 2193 * @IEEE80211_FRAME_RELEASE_PSPOLL: frame released for PS-Poll
2194 * @IEEE80211_FRAME_RELEASE_UAPSD: frame(s) released due to 2194 * @IEEE80211_FRAME_RELEASE_UAPSD: frame(s) released due to
2195 * frame received on trigger-enabled AC 2195 * frame received on trigger-enabled AC
2196 */ 2196 */
2197 enum ieee80211_frame_release_type { 2197 enum ieee80211_frame_release_type {
2198 IEEE80211_FRAME_RELEASE_PSPOLL, 2198 IEEE80211_FRAME_RELEASE_PSPOLL,
2199 IEEE80211_FRAME_RELEASE_UAPSD, 2199 IEEE80211_FRAME_RELEASE_UAPSD,
2200 }; 2200 };
2201 2201
2202 /** 2202 /**
2203 * enum ieee80211_rate_control_changed - flags to indicate what changed 2203 * enum ieee80211_rate_control_changed - flags to indicate what changed
2204 * 2204 *
2205 * @IEEE80211_RC_BW_CHANGED: The bandwidth that can be used to transmit 2205 * @IEEE80211_RC_BW_CHANGED: The bandwidth that can be used to transmit
2206 * to this station changed. The actual bandwidth is in the station 2206 * to this station changed. The actual bandwidth is in the station
2207 * information -- for HT20/40 the IEEE80211_HT_CAP_SUP_WIDTH_20_40 2207 * information -- for HT20/40 the IEEE80211_HT_CAP_SUP_WIDTH_20_40
2208 * flag changes, for HT and VHT the bandwidth field changes. 2208 * flag changes, for HT and VHT the bandwidth field changes.
2209 * @IEEE80211_RC_SMPS_CHANGED: The SMPS state of the station changed. 2209 * @IEEE80211_RC_SMPS_CHANGED: The SMPS state of the station changed.
2210 * @IEEE80211_RC_SUPP_RATES_CHANGED: The supported rate set of this peer 2210 * @IEEE80211_RC_SUPP_RATES_CHANGED: The supported rate set of this peer
2211 * changed (in IBSS mode) due to discovering more information about 2211 * changed (in IBSS mode) due to discovering more information about
2212 * the peer. 2212 * the peer.
2213 * @IEEE80211_RC_NSS_CHANGED: N_SS (number of spatial streams) was changed 2213 * @IEEE80211_RC_NSS_CHANGED: N_SS (number of spatial streams) was changed
2214 * by the peer 2214 * by the peer
2215 */ 2215 */
2216 enum ieee80211_rate_control_changed { 2216 enum ieee80211_rate_control_changed {
2217 IEEE80211_RC_BW_CHANGED = BIT(0), 2217 IEEE80211_RC_BW_CHANGED = BIT(0),
2218 IEEE80211_RC_SMPS_CHANGED = BIT(1), 2218 IEEE80211_RC_SMPS_CHANGED = BIT(1),
2219 IEEE80211_RC_SUPP_RATES_CHANGED = BIT(2), 2219 IEEE80211_RC_SUPP_RATES_CHANGED = BIT(2),
2220 IEEE80211_RC_NSS_CHANGED = BIT(3), 2220 IEEE80211_RC_NSS_CHANGED = BIT(3),
2221 }; 2221 };
2222 2222
2223 /** 2223 /**
2224 * enum ieee80211_roc_type - remain on channel type 2224 * enum ieee80211_roc_type - remain on channel type
2225 * 2225 *
2226 * With the support for multi channel contexts and multi channel operations, 2226 * With the support for multi channel contexts and multi channel operations,
2227 * remain on channel operations might be limited/deferred/aborted by other 2227 * remain on channel operations might be limited/deferred/aborted by other
2228 * flows/operations which have higher priority (and vise versa). 2228 * flows/operations which have higher priority (and vise versa).
2229 * Specifying the ROC type can be used by devices to prioritize the ROC 2229 * Specifying the ROC type can be used by devices to prioritize the ROC
2230 * operations compared to other operations/flows. 2230 * operations compared to other operations/flows.
2231 * 2231 *
2232 * @IEEE80211_ROC_TYPE_NORMAL: There are no special requirements for this ROC. 2232 * @IEEE80211_ROC_TYPE_NORMAL: There are no special requirements for this ROC.
2233 * @IEEE80211_ROC_TYPE_MGMT_TX: The remain on channel request is required 2233 * @IEEE80211_ROC_TYPE_MGMT_TX: The remain on channel request is required
2234 * for sending managment frames offchannel. 2234 * for sending managment frames offchannel.
2235 */ 2235 */
2236 enum ieee80211_roc_type { 2236 enum ieee80211_roc_type {
2237 IEEE80211_ROC_TYPE_NORMAL = 0, 2237 IEEE80211_ROC_TYPE_NORMAL = 0,
2238 IEEE80211_ROC_TYPE_MGMT_TX, 2238 IEEE80211_ROC_TYPE_MGMT_TX,
2239 }; 2239 };
2240 2240
2241 /** 2241 /**
2242 * struct ieee80211_ops - callbacks from mac80211 to the driver 2242 * struct ieee80211_ops - callbacks from mac80211 to the driver
2243 * 2243 *
2244 * This structure contains various callbacks that the driver may 2244 * This structure contains various callbacks that the driver may
2245 * handle or, in some cases, must handle, for example to configure 2245 * handle or, in some cases, must handle, for example to configure
2246 * the hardware to a new channel or to transmit a frame. 2246 * the hardware to a new channel or to transmit a frame.
2247 * 2247 *
2248 * @tx: Handler that 802.11 module calls for each transmitted frame. 2248 * @tx: Handler that 802.11 module calls for each transmitted frame.
2249 * skb contains the buffer starting from the IEEE 802.11 header. 2249 * skb contains the buffer starting from the IEEE 802.11 header.
2250 * The low-level driver should send the frame out based on 2250 * The low-level driver should send the frame out based on
2251 * configuration in the TX control data. This handler should, 2251 * configuration in the TX control data. This handler should,
2252 * preferably, never fail and stop queues appropriately. 2252 * preferably, never fail and stop queues appropriately.
2253 * Must be atomic. 2253 * Must be atomic.
2254 * 2254 *
2255 * @start: Called before the first netdevice attached to the hardware 2255 * @start: Called before the first netdevice attached to the hardware
2256 * is enabled. This should turn on the hardware and must turn on 2256 * is enabled. This should turn on the hardware and must turn on
2257 * frame reception (for possibly enabled monitor interfaces.) 2257 * frame reception (for possibly enabled monitor interfaces.)
2258 * Returns negative error codes, these may be seen in userspace, 2258 * Returns negative error codes, these may be seen in userspace,
2259 * or zero. 2259 * or zero.
2260 * When the device is started it should not have a MAC address 2260 * When the device is started it should not have a MAC address
2261 * to avoid acknowledging frames before a non-monitor device 2261 * to avoid acknowledging frames before a non-monitor device
2262 * is added. 2262 * is added.
2263 * Must be implemented and can sleep. 2263 * Must be implemented and can sleep.
2264 * 2264 *
2265 * @stop: Called after last netdevice attached to the hardware 2265 * @stop: Called after last netdevice attached to the hardware
2266 * is disabled. This should turn off the hardware (at least 2266 * is disabled. This should turn off the hardware (at least
2267 * it must turn off frame reception.) 2267 * it must turn off frame reception.)
2268 * May be called right after add_interface if that rejects 2268 * May be called right after add_interface if that rejects
2269 * an interface. If you added any work onto the mac80211 workqueue 2269 * an interface. If you added any work onto the mac80211 workqueue
2270 * you should ensure to cancel it on this callback. 2270 * you should ensure to cancel it on this callback.
2271 * Must be implemented and can sleep. 2271 * Must be implemented and can sleep.
2272 * 2272 *
2273 * @suspend: Suspend the device; mac80211 itself will quiesce before and 2273 * @suspend: Suspend the device; mac80211 itself will quiesce before and
2274 * stop transmitting and doing any other configuration, and then 2274 * stop transmitting and doing any other configuration, and then
2275 * ask the device to suspend. This is only invoked when WoWLAN is 2275 * ask the device to suspend. This is only invoked when WoWLAN is
2276 * configured, otherwise the device is deconfigured completely and 2276 * configured, otherwise the device is deconfigured completely and
2277 * reconfigured at resume time. 2277 * reconfigured at resume time.
2278 * The driver may also impose special conditions under which it 2278 * The driver may also impose special conditions under which it
2279 * wants to use the "normal" suspend (deconfigure), say if it only 2279 * wants to use the "normal" suspend (deconfigure), say if it only
2280 * supports WoWLAN when the device is associated. In this case, it 2280 * supports WoWLAN when the device is associated. In this case, it
2281 * must return 1 from this function. 2281 * must return 1 from this function.
2282 * 2282 *
2283 * @resume: If WoWLAN was configured, this indicates that mac80211 is 2283 * @resume: If WoWLAN was configured, this indicates that mac80211 is
2284 * now resuming its operation, after this the device must be fully 2284 * now resuming its operation, after this the device must be fully
2285 * functional again. If this returns an error, the only way out is 2285 * functional again. If this returns an error, the only way out is
2286 * to also unregister the device. If it returns 1, then mac80211 2286 * to also unregister the device. If it returns 1, then mac80211
2287 * will also go through the regular complete restart on resume. 2287 * will also go through the regular complete restart on resume.
2288 * 2288 *
2289 * @set_wakeup: Enable or disable wakeup when WoWLAN configuration is 2289 * @set_wakeup: Enable or disable wakeup when WoWLAN configuration is
2290 * modified. The reason is that device_set_wakeup_enable() is 2290 * modified. The reason is that device_set_wakeup_enable() is
2291 * supposed to be called when the configuration changes, not only 2291 * supposed to be called when the configuration changes, not only
2292 * in suspend(). 2292 * in suspend().
2293 * 2293 *
2294 * @add_interface: Called when a netdevice attached to the hardware is 2294 * @add_interface: Called when a netdevice attached to the hardware is
2295 * enabled. Because it is not called for monitor mode devices, @start 2295 * enabled. Because it is not called for monitor mode devices, @start
2296 * and @stop must be implemented. 2296 * and @stop must be implemented.
2297 * The driver should perform any initialization it needs before 2297 * The driver should perform any initialization it needs before
2298 * the device can be enabled. The initial configuration for the 2298 * the device can be enabled. The initial configuration for the
2299 * interface is given in the conf parameter. 2299 * interface is given in the conf parameter.
2300 * The callback may refuse to add an interface by returning a 2300 * The callback may refuse to add an interface by returning a
2301 * negative error code (which will be seen in userspace.) 2301 * negative error code (which will be seen in userspace.)
2302 * Must be implemented and can sleep. 2302 * Must be implemented and can sleep.
2303 * 2303 *
2304 * @change_interface: Called when a netdevice changes type. This callback 2304 * @change_interface: Called when a netdevice changes type. This callback
2305 * is optional, but only if it is supported can interface types be 2305 * is optional, but only if it is supported can interface types be
2306 * switched while the interface is UP. The callback may sleep. 2306 * switched while the interface is UP. The callback may sleep.
2307 * Note that while an interface is being switched, it will not be 2307 * Note that while an interface is being switched, it will not be
2308 * found by the interface iteration callbacks. 2308 * found by the interface iteration callbacks.
2309 * 2309 *
2310 * @remove_interface: Notifies a driver that an interface is going down. 2310 * @remove_interface: Notifies a driver that an interface is going down.
2311 * The @stop callback is called after this if it is the last interface 2311 * The @stop callback is called after this if it is the last interface
2312 * and no monitor interfaces are present. 2312 * and no monitor interfaces are present.
2313 * When all interfaces are removed, the MAC address in the hardware 2313 * When all interfaces are removed, the MAC address in the hardware
2314 * must be cleared so the device no longer acknowledges packets, 2314 * must be cleared so the device no longer acknowledges packets,
2315 * the mac_addr member of the conf structure is, however, set to the 2315 * the mac_addr member of the conf structure is, however, set to the
2316 * MAC address of the device going away. 2316 * MAC address of the device going away.
2317 * Hence, this callback must be implemented. It can sleep. 2317 * Hence, this callback must be implemented. It can sleep.
2318 * 2318 *
2319 * @config: Handler for configuration requests. IEEE 802.11 code calls this 2319 * @config: Handler for configuration requests. IEEE 802.11 code calls this
2320 * function to change hardware configuration, e.g., channel. 2320 * function to change hardware configuration, e.g., channel.
2321 * This function should never fail but returns a negative error code 2321 * This function should never fail but returns a negative error code
2322 * if it does. The callback can sleep. 2322 * if it does. The callback can sleep.
2323 * 2323 *
2324 * @bss_info_changed: Handler for configuration requests related to BSS 2324 * @bss_info_changed: Handler for configuration requests related to BSS
2325 * parameters that may vary during BSS's lifespan, and may affect low 2325 * parameters that may vary during BSS's lifespan, and may affect low
2326 * level driver (e.g. assoc/disassoc status, erp parameters). 2326 * level driver (e.g. assoc/disassoc status, erp parameters).
2327 * This function should not be used if no BSS has been set, unless 2327 * This function should not be used if no BSS has been set, unless
2328 * for association indication. The @changed parameter indicates which 2328 * for association indication. The @changed parameter indicates which
2329 * of the bss parameters has changed when a call is made. The callback 2329 * of the bss parameters has changed when a call is made. The callback
2330 * can sleep. 2330 * can sleep.
2331 * 2331 *
2332 * @prepare_multicast: Prepare for multicast filter configuration. 2332 * @prepare_multicast: Prepare for multicast filter configuration.
2333 * This callback is optional, and its return value is passed 2333 * This callback is optional, and its return value is passed
2334 * to configure_filter(). This callback must be atomic. 2334 * to configure_filter(). This callback must be atomic.
2335 * 2335 *
2336 * @configure_filter: Configure the device's RX filter. 2336 * @configure_filter: Configure the device's RX filter.
2337 * See the section "Frame filtering" for more information. 2337 * See the section "Frame filtering" for more information.
2338 * This callback must be implemented and can sleep. 2338 * This callback must be implemented and can sleep.
2339 * 2339 *
2340 * @set_multicast_list: Configure the device's interface specific RX multicast 2340 * @set_multicast_list: Configure the device's interface specific RX multicast
2341 * filter. This callback is optional. This callback must be atomic. 2341 * filter. This callback is optional. This callback must be atomic.
2342 * 2342 *
2343 * @set_tim: Set TIM bit. mac80211 calls this function when a TIM bit 2343 * @set_tim: Set TIM bit. mac80211 calls this function when a TIM bit
2344 * must be set or cleared for a given STA. Must be atomic. 2344 * must be set or cleared for a given STA. Must be atomic.
2345 * 2345 *
2346 * @set_key: See the section "Hardware crypto acceleration" 2346 * @set_key: See the section "Hardware crypto acceleration"
2347 * This callback is only called between add_interface and 2347 * This callback is only called between add_interface and
2348 * remove_interface calls, i.e. while the given virtual interface 2348 * remove_interface calls, i.e. while the given virtual interface
2349 * is enabled. 2349 * is enabled.
2350 * Returns a negative error code if the key can't be added. 2350 * Returns a negative error code if the key can't be added.
2351 * The callback can sleep. 2351 * The callback can sleep.
2352 * 2352 *
2353 * @update_tkip_key: See the section "Hardware crypto acceleration" 2353 * @update_tkip_key: See the section "Hardware crypto acceleration"
2354 * This callback will be called in the context of Rx. Called for drivers 2354 * This callback will be called in the context of Rx. Called for drivers
2355 * which set IEEE80211_KEY_FLAG_TKIP_REQ_RX_P1_KEY. 2355 * which set IEEE80211_KEY_FLAG_TKIP_REQ_RX_P1_KEY.
2356 * The callback must be atomic. 2356 * The callback must be atomic.
2357 * 2357 *
2358 * @set_rekey_data: If the device supports GTK rekeying, for example while the 2358 * @set_rekey_data: If the device supports GTK rekeying, for example while the
2359 * host is suspended, it can assign this callback to retrieve the data 2359 * host is suspended, it can assign this callback to retrieve the data
2360 * necessary to do GTK rekeying, this is the KEK, KCK and replay counter. 2360 * necessary to do GTK rekeying, this is the KEK, KCK and replay counter.
2361 * After rekeying was done it should (for example during resume) notify 2361 * After rekeying was done it should (for example during resume) notify
2362 * userspace of the new replay counter using ieee80211_gtk_rekey_notify(). 2362 * userspace of the new replay counter using ieee80211_gtk_rekey_notify().
2363 * 2363 *
2364 * @set_default_unicast_key: Set the default (unicast) key index, useful for 2364 * @set_default_unicast_key: Set the default (unicast) key index, useful for
2365 * WEP when the device sends data packets autonomously, e.g. for ARP 2365 * WEP when the device sends data packets autonomously, e.g. for ARP
2366 * offloading. The index can be 0-3, or -1 for unsetting it. 2366 * offloading. The index can be 0-3, or -1 for unsetting it.
2367 * 2367 *
2368 * @hw_scan: Ask the hardware to service the scan request, no need to start 2368 * @hw_scan: Ask the hardware to service the scan request, no need to start
2369 * the scan state machine in stack. The scan must honour the channel 2369 * the scan state machine in stack. The scan must honour the channel
2370 * configuration done by the regulatory agent in the wiphy's 2370 * configuration done by the regulatory agent in the wiphy's
2371 * registered bands. The hardware (or the driver) needs to make sure 2371 * registered bands. The hardware (or the driver) needs to make sure
2372 * that power save is disabled. 2372 * that power save is disabled.
2373 * The @req ie/ie_len members are rewritten by mac80211 to contain the 2373 * The @req ie/ie_len members are rewritten by mac80211 to contain the
2374 * entire IEs after the SSID, so that drivers need not look at these 2374 * entire IEs after the SSID, so that drivers need not look at these
2375 * at all but just send them after the SSID -- mac80211 includes the 2375 * at all but just send them after the SSID -- mac80211 includes the
2376 * (extended) supported rates and HT information (where applicable). 2376 * (extended) supported rates and HT information (where applicable).
2377 * When the scan finishes, ieee80211_scan_completed() must be called; 2377 * When the scan finishes, ieee80211_scan_completed() must be called;
2378 * note that it also must be called when the scan cannot finish due to 2378 * note that it also must be called when the scan cannot finish due to
2379 * any error unless this callback returned a negative error code. 2379 * any error unless this callback returned a negative error code.
2380 * The callback can sleep. 2380 * The callback can sleep.
2381 * 2381 *
2382 * @cancel_hw_scan: Ask the low-level tp cancel the active hw scan. 2382 * @cancel_hw_scan: Ask the low-level tp cancel the active hw scan.
2383 * The driver should ask the hardware to cancel the scan (if possible), 2383 * The driver should ask the hardware to cancel the scan (if possible),
2384 * but the scan will be completed only after the driver will call 2384 * but the scan will be completed only after the driver will call
2385 * ieee80211_scan_completed(). 2385 * ieee80211_scan_completed().
2386 * This callback is needed for wowlan, to prevent enqueueing a new 2386 * This callback is needed for wowlan, to prevent enqueueing a new
2387 * scan_work after the low-level driver was already suspended. 2387 * scan_work after the low-level driver was already suspended.
2388 * The callback can sleep. 2388 * The callback can sleep.
2389 * 2389 *
2390 * @sched_scan_start: Ask the hardware to start scanning repeatedly at 2390 * @sched_scan_start: Ask the hardware to start scanning repeatedly at
2391 * specific intervals. The driver must call the 2391 * specific intervals. The driver must call the
2392 * ieee80211_sched_scan_results() function whenever it finds results. 2392 * ieee80211_sched_scan_results() function whenever it finds results.
2393 * This process will continue until sched_scan_stop is called. 2393 * This process will continue until sched_scan_stop is called.
2394 * 2394 *
2395 * @sched_scan_stop: Tell the hardware to stop an ongoing scheduled scan. 2395 * @sched_scan_stop: Tell the hardware to stop an ongoing scheduled scan.
2396 * 2396 *
2397 * @sw_scan_start: Notifier function that is called just before a software scan 2397 * @sw_scan_start: Notifier function that is called just before a software scan
2398 * is started. Can be NULL, if the driver doesn't need this notification. 2398 * is started. Can be NULL, if the driver doesn't need this notification.
2399 * The callback can sleep. 2399 * The callback can sleep.
2400 * 2400 *
2401 * @sw_scan_complete: Notifier function that is called just after a 2401 * @sw_scan_complete: Notifier function that is called just after a
2402 * software scan finished. Can be NULL, if the driver doesn't need 2402 * software scan finished. Can be NULL, if the driver doesn't need
2403 * this notification. 2403 * this notification.
2404 * The callback can sleep. 2404 * The callback can sleep.
2405 * 2405 *
2406 * @get_stats: Return low-level statistics. 2406 * @get_stats: Return low-level statistics.
2407 * Returns zero if statistics are available. 2407 * Returns zero if statistics are available.
2408 * The callback can sleep. 2408 * The callback can sleep.
2409 * 2409 *
2410 * @get_tkip_seq: If your device implements TKIP encryption in hardware this 2410 * @get_tkip_seq: If your device implements TKIP encryption in hardware this
2411 * callback should be provided to read the TKIP transmit IVs (both IV32 2411 * callback should be provided to read the TKIP transmit IVs (both IV32
2412 * and IV16) for the given key from hardware. 2412 * and IV16) for the given key from hardware.
2413 * The callback must be atomic. 2413 * The callback must be atomic.
2414 * 2414 *
2415 * @set_frag_threshold: Configuration of fragmentation threshold. Assign this 2415 * @set_frag_threshold: Configuration of fragmentation threshold. Assign this
2416 * if the device does fragmentation by itself; if this callback is 2416 * if the device does fragmentation by itself; if this callback is
2417 * implemented then the stack will not do fragmentation. 2417 * implemented then the stack will not do fragmentation.
2418 * The callback can sleep. 2418 * The callback can sleep.
2419 * 2419 *
2420 * @set_rts_threshold: Configuration of RTS threshold (if device needs it) 2420 * @set_rts_threshold: Configuration of RTS threshold (if device needs it)
2421 * The callback can sleep. 2421 * The callback can sleep.
2422 * 2422 *
2423 * @sta_add: Notifies low level driver about addition of an associated station, 2423 * @sta_add: Notifies low level driver about addition of an associated station,
2424 * AP, IBSS/WDS/mesh peer etc. This callback can sleep. 2424 * AP, IBSS/WDS/mesh peer etc. This callback can sleep.
2425 * 2425 *
2426 * @sta_remove: Notifies low level driver about removal of an associated 2426 * @sta_remove: Notifies low level driver about removal of an associated
2427 * station, AP, IBSS/WDS/mesh peer etc. This callback can sleep. 2427 * station, AP, IBSS/WDS/mesh peer etc. This callback can sleep.
2428 * 2428 *
2429 * @sta_add_debugfs: Drivers can use this callback to add debugfs files 2429 * @sta_add_debugfs: Drivers can use this callback to add debugfs files
2430 * when a station is added to mac80211's station list. This callback 2430 * when a station is added to mac80211's station list. This callback
2431 * and @sta_remove_debugfs should be within a CONFIG_MAC80211_DEBUGFS 2431 * and @sta_remove_debugfs should be within a CONFIG_MAC80211_DEBUGFS
2432 * conditional. This callback can sleep. 2432 * conditional. This callback can sleep.
2433 * 2433 *
2434 * @sta_remove_debugfs: Remove the debugfs files which were added using 2434 * @sta_remove_debugfs: Remove the debugfs files which were added using
2435 * @sta_add_debugfs. This callback can sleep. 2435 * @sta_add_debugfs. This callback can sleep.
2436 * 2436 *
2437 * @sta_notify: Notifies low level driver about power state transition of an 2437 * @sta_notify: Notifies low level driver about power state transition of an
2438 * associated station, AP, IBSS/WDS/mesh peer etc. For a VIF operating 2438 * associated station, AP, IBSS/WDS/mesh peer etc. For a VIF operating
2439 * in AP mode, this callback will not be called when the flag 2439 * in AP mode, this callback will not be called when the flag
2440 * %IEEE80211_HW_AP_LINK_PS is set. Must be atomic. 2440 * %IEEE80211_HW_AP_LINK_PS is set. Must be atomic.
2441 * 2441 *
2442 * @sta_state: Notifies low level driver about state transition of a 2442 * @sta_state: Notifies low level driver about state transition of a
2443 * station (which can be the AP, a client, IBSS/WDS/mesh peer etc.) 2443 * station (which can be the AP, a client, IBSS/WDS/mesh peer etc.)
2444 * This callback is mutually exclusive with @sta_add/@sta_remove. 2444 * This callback is mutually exclusive with @sta_add/@sta_remove.
2445 * It must not fail for down transitions but may fail for transitions 2445 * It must not fail for down transitions but may fail for transitions
2446 * up the list of states. 2446 * up the list of states.
2447 * The callback can sleep. 2447 * The callback can sleep.
2448 * 2448 *
2449 * @sta_rc_update: Notifies the driver of changes to the bitrates that can be 2449 * @sta_rc_update: Notifies the driver of changes to the bitrates that can be
2450 * used to transmit to the station. The changes are advertised with bits 2450 * used to transmit to the station. The changes are advertised with bits
2451 * from &enum ieee80211_rate_control_changed and the values are reflected 2451 * from &enum ieee80211_rate_control_changed and the values are reflected
2452 * in the station data. This callback should only be used when the driver 2452 * in the station data. This callback should only be used when the driver
2453 * uses hardware rate control (%IEEE80211_HW_HAS_RATE_CONTROL) since 2453 * uses hardware rate control (%IEEE80211_HW_HAS_RATE_CONTROL) since
2454 * otherwise the rate control algorithm is notified directly. 2454 * otherwise the rate control algorithm is notified directly.
2455 * Must be atomic. 2455 * Must be atomic.
2456 * 2456 *
2457 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max), 2457 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
2458 * bursting) for a hardware TX queue. 2458 * bursting) for a hardware TX queue.
2459 * Returns a negative error code on failure. 2459 * Returns a negative error code on failure.
2460 * The callback can sleep. 2460 * The callback can sleep.
2461 * 2461 *
2462 * @get_tsf: Get the current TSF timer value from firmware/hardware. Currently, 2462 * @get_tsf: Get the current TSF timer value from firmware/hardware. Currently,
2463 * this is only used for IBSS mode BSSID merging and debugging. Is not a 2463 * this is only used for IBSS mode BSSID merging and debugging. Is not a
2464 * required function. 2464 * required function.
2465 * The callback can sleep. 2465 * The callback can sleep.
2466 * 2466 *
2467 * @set_tsf: Set the TSF timer to the specified value in the firmware/hardware. 2467 * @set_tsf: Set the TSF timer to the specified value in the firmware/hardware.
2468 * Currently, this is only used for IBSS mode debugging. Is not a 2468 * Currently, this is only used for IBSS mode debugging. Is not a
2469 * required function. 2469 * required function.
2470 * The callback can sleep. 2470 * The callback can sleep.
2471 * 2471 *
2472 * @reset_tsf: Reset the TSF timer and allow firmware/hardware to synchronize 2472 * @reset_tsf: Reset the TSF timer and allow firmware/hardware to synchronize
2473 * with other STAs in the IBSS. This is only used in IBSS mode. This 2473 * with other STAs in the IBSS. This is only used in IBSS mode. This
2474 * function is optional if the firmware/hardware takes full care of 2474 * function is optional if the firmware/hardware takes full care of
2475 * TSF synchronization. 2475 * TSF synchronization.
2476 * The callback can sleep. 2476 * The callback can sleep.
2477 * 2477 *
2478 * @tx_last_beacon: Determine whether the last IBSS beacon was sent by us. 2478 * @tx_last_beacon: Determine whether the last IBSS beacon was sent by us.
2479 * This is needed only for IBSS mode and the result of this function is 2479 * This is needed only for IBSS mode and the result of this function is
2480 * used to determine whether to reply to Probe Requests. 2480 * used to determine whether to reply to Probe Requests.
2481 * Returns non-zero if this device sent the last beacon. 2481 * Returns non-zero if this device sent the last beacon.
2482 * The callback can sleep. 2482 * The callback can sleep.
2483 * 2483 *
2484 * @ampdu_action: Perform a certain A-MPDU action 2484 * @ampdu_action: Perform a certain A-MPDU action
2485 * The RA/TID combination determines the destination and TID we want 2485 * The RA/TID combination determines the destination and TID we want
2486 * the ampdu action to be performed for. The action is defined through 2486 * the ampdu action to be performed for. The action is defined through
2487 * ieee80211_ampdu_mlme_action. Starting sequence number (@ssn) 2487 * ieee80211_ampdu_mlme_action. Starting sequence number (@ssn)
2488 * is the first frame we expect to perform the action on. Notice 2488 * is the first frame we expect to perform the action on. Notice
2489 * that TX/RX_STOP can pass NULL for this parameter. 2489 * that TX/RX_STOP can pass NULL for this parameter.
2490 * The @buf_size parameter is only valid when the action is set to 2490 * The @buf_size parameter is only valid when the action is set to
2491 * %IEEE80211_AMPDU_TX_OPERATIONAL and indicates the peer's reorder 2491 * %IEEE80211_AMPDU_TX_OPERATIONAL and indicates the peer's reorder
2492 * buffer size (number of subframes) for this session -- the driver 2492 * buffer size (number of subframes) for this session -- the driver
2493 * may neither send aggregates containing more subframes than this 2493 * may neither send aggregates containing more subframes than this
2494 * nor send aggregates in a way that lost frames would exceed the 2494 * nor send aggregates in a way that lost frames would exceed the
2495 * buffer size. If just limiting the aggregate size, this would be 2495 * buffer size. If just limiting the aggregate size, this would be
2496 * possible with a buf_size of 8: 2496 * possible with a buf_size of 8:
2497 * - TX: 1.....7 2497 * - TX: 1.....7
2498 * - RX: 2....7 (lost frame #1) 2498 * - RX: 2....7 (lost frame #1)
2499 * - TX: 8..1... 2499 * - TX: 8..1...
2500 * which is invalid since #1 was now re-transmitted well past the 2500 * which is invalid since #1 was now re-transmitted well past the
2501 * buffer size of 8. Correct ways to retransmit #1 would be: 2501 * buffer size of 8. Correct ways to retransmit #1 would be:
2502 * - TX: 1 or 18 or 81 2502 * - TX: 1 or 18 or 81
2503 * Even "189" would be wrong since 1 could be lost again. 2503 * Even "189" would be wrong since 1 could be lost again.
2504 * 2504 *
2505 * Returns a negative error code on failure. 2505 * Returns a negative error code on failure.
2506 * The callback can sleep. 2506 * The callback can sleep.
2507 * 2507 *
2508 * @get_survey: Return per-channel survey information 2508 * @get_survey: Return per-channel survey information
2509 * 2509 *
2510 * @rfkill_poll: Poll rfkill hardware state. If you need this, you also 2510 * @rfkill_poll: Poll rfkill hardware state. If you need this, you also
2511 * need to set wiphy->rfkill_poll to %true before registration, 2511 * need to set wiphy->rfkill_poll to %true before registration,
2512 * and need to call wiphy_rfkill_set_hw_state() in the callback. 2512 * and need to call wiphy_rfkill_set_hw_state() in the callback.
2513 * The callback can sleep. 2513 * The callback can sleep.
2514 * 2514 *
2515 * @set_coverage_class: Set slot time for given coverage class as specified 2515 * @set_coverage_class: Set slot time for given coverage class as specified
2516 * in IEEE 802.11-2007 section 17.3.8.6 and modify ACK timeout 2516 * in IEEE 802.11-2007 section 17.3.8.6 and modify ACK timeout
2517 * accordingly. This callback is not required and may sleep. 2517 * accordingly. This callback is not required and may sleep.
2518 * 2518 *
2519 * @testmode_cmd: Implement a cfg80211 test mode command. The passed @vif may 2519 * @testmode_cmd: Implement a cfg80211 test mode command. The passed @vif may
2520 * be %NULL. The callback can sleep. 2520 * be %NULL. The callback can sleep.
2521 * @testmode_dump: Implement a cfg80211 test mode dump. The callback can sleep. 2521 * @testmode_dump: Implement a cfg80211 test mode dump. The callback can sleep.
2522 * 2522 *
2523 * @flush: Flush all pending frames from the hardware queue, making sure 2523 * @flush: Flush all pending frames from the hardware queue, making sure
2524 * that the hardware queues are empty. The @queues parameter is a bitmap 2524 * that the hardware queues are empty. The @queues parameter is a bitmap
2525 * of queues to flush, which is useful if different virtual interfaces 2525 * of queues to flush, which is useful if different virtual interfaces
2526 * use different hardware queues; it may also indicate all queues. 2526 * use different hardware queues; it may also indicate all queues.
2527 * If the parameter @drop is set to %true, pending frames may be dropped. 2527 * If the parameter @drop is set to %true, pending frames may be dropped.
2528 * The callback can sleep. 2528 * The callback can sleep.
2529 * 2529 *
2530 * @channel_switch: Drivers that need (or want) to offload the channel 2530 * @channel_switch: Drivers that need (or want) to offload the channel
2531 * switch operation for CSAs received from the AP may implement this 2531 * switch operation for CSAs received from the AP may implement this
2532 * callback. They must then call ieee80211_chswitch_done() to indicate 2532 * callback. They must then call ieee80211_chswitch_done() to indicate
2533 * completion of the channel switch. 2533 * completion of the channel switch.
2534 * 2534 *
2535 * @napi_poll: Poll Rx queue for incoming data frames. 2535 * @napi_poll: Poll Rx queue for incoming data frames.
2536 * 2536 *
2537 * @set_antenna: Set antenna configuration (tx_ant, rx_ant) on the device. 2537 * @set_antenna: Set antenna configuration (tx_ant, rx_ant) on the device.
2538 * Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may 2538 * Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may
2539 * reject TX/RX mask combinations they cannot support by returning -EINVAL 2539 * reject TX/RX mask combinations they cannot support by returning -EINVAL
2540 * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX). 2540 * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX).
2541 * 2541 *
2542 * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant). 2542 * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant).
2543 * 2543 *
2544 * @remain_on_channel: Starts an off-channel period on the given channel, must 2544 * @remain_on_channel: Starts an off-channel period on the given channel, must
2545 * call back to ieee80211_ready_on_channel() when on that channel. Note 2545 * call back to ieee80211_ready_on_channel() when on that channel. Note
2546 * that normal channel traffic is not stopped as this is intended for hw 2546 * that normal channel traffic is not stopped as this is intended for hw
2547 * offload. Frames to transmit on the off-channel channel are transmitted 2547 * offload. Frames to transmit on the off-channel channel are transmitted
2548 * normally except for the %IEEE80211_TX_CTL_TX_OFFCHAN flag. When the 2548 * normally except for the %IEEE80211_TX_CTL_TX_OFFCHAN flag. When the
2549 * duration (which will always be non-zero) expires, the driver must call 2549 * duration (which will always be non-zero) expires, the driver must call
2550 * ieee80211_remain_on_channel_expired(). 2550 * ieee80211_remain_on_channel_expired().
2551 * Note that this callback may be called while the device is in IDLE and 2551 * Note that this callback may be called while the device is in IDLE and
2552 * must be accepted in this case. 2552 * must be accepted in this case.
2553 * This callback may sleep. 2553 * This callback may sleep.
2554 * @cancel_remain_on_channel: Requests that an ongoing off-channel period is 2554 * @cancel_remain_on_channel: Requests that an ongoing off-channel period is
2555 * aborted before it expires. This callback may sleep. 2555 * aborted before it expires. This callback may sleep.
2556 * 2556 *
2557 * @set_ringparam: Set tx and rx ring sizes. 2557 * @set_ringparam: Set tx and rx ring sizes.
2558 * 2558 *
2559 * @get_ringparam: Get tx and rx ring current and maximum sizes. 2559 * @get_ringparam: Get tx and rx ring current and maximum sizes.
2560 * 2560 *
2561 * @tx_frames_pending: Check if there is any pending frame in the hardware 2561 * @tx_frames_pending: Check if there is any pending frame in the hardware
2562 * queues before entering power save. 2562 * queues before entering power save.
2563 * 2563 *
2564 * @set_bitrate_mask: Set a mask of rates to be used for rate control selection 2564 * @set_bitrate_mask: Set a mask of rates to be used for rate control selection
2565 * when transmitting a frame. Currently only legacy rates are handled. 2565 * when transmitting a frame. Currently only legacy rates are handled.
2566 * The callback can sleep. 2566 * The callback can sleep.
2567 * @rssi_callback: Notify driver when the average RSSI goes above/below 2567 * @rssi_callback: Notify driver when the average RSSI goes above/below
2568 * thresholds that were registered previously. The callback can sleep. 2568 * thresholds that were registered previously. The callback can sleep.
2569 * 2569 *
2570 * @release_buffered_frames: Release buffered frames according to the given 2570 * @release_buffered_frames: Release buffered frames according to the given
2571 * parameters. In the case where the driver buffers some frames for 2571 * parameters. In the case where the driver buffers some frames for
2572 * sleeping stations mac80211 will use this callback to tell the driver 2572 * sleeping stations mac80211 will use this callback to tell the driver
2573 * to release some frames, either for PS-poll or uAPSD. 2573 * to release some frames, either for PS-poll or uAPSD.
2574 * Note that if the @more_data paramter is %false the driver must check 2574 * Note that if the @more_data paramter is %false the driver must check
2575 * if there are more frames on the given TIDs, and if there are more than 2575 * if there are more frames on the given TIDs, and if there are more than
2576 * the frames being released then it must still set the more-data bit in 2576 * the frames being released then it must still set the more-data bit in
2577 * the frame. If the @more_data parameter is %true, then of course the 2577 * the frame. If the @more_data parameter is %true, then of course the
2578 * more-data bit must always be set. 2578 * more-data bit must always be set.
2579 * The @tids parameter tells the driver which TIDs to release frames 2579 * The @tids parameter tells the driver which TIDs to release frames
2580 * from, for PS-poll it will always have only a single bit set. 2580 * from, for PS-poll it will always have only a single bit set.
2581 * In the case this is used for a PS-poll initiated release, the 2581 * In the case this is used for a PS-poll initiated release, the
2582 * @num_frames parameter will always be 1 so code can be shared. In 2582 * @num_frames parameter will always be 1 so code can be shared. In
2583 * this case the driver must also set %IEEE80211_TX_STATUS_EOSP flag 2583 * this case the driver must also set %IEEE80211_TX_STATUS_EOSP flag
2584 * on the TX status (and must report TX status) so that the PS-poll 2584 * on the TX status (and must report TX status) so that the PS-poll
2585 * period is properly ended. This is used to avoid sending multiple 2585 * period is properly ended. This is used to avoid sending multiple
2586 * responses for a retried PS-poll frame. 2586 * responses for a retried PS-poll frame.
2587 * In the case this is used for uAPSD, the @num_frames parameter may be 2587 * In the case this is used for uAPSD, the @num_frames parameter may be
2588 * bigger than one, but the driver may send fewer frames (it must send 2588 * bigger than one, but the driver may send fewer frames (it must send
2589 * at least one, however). In this case it is also responsible for 2589 * at least one, however). In this case it is also responsible for
2590 * setting the EOSP flag in the QoS header of the frames. Also, when the 2590 * setting the EOSP flag in the QoS header of the frames. Also, when the
2591 * service period ends, the driver must set %IEEE80211_TX_STATUS_EOSP 2591 * service period ends, the driver must set %IEEE80211_TX_STATUS_EOSP
2592 * on the last frame in the SP. Alternatively, it may call the function 2592 * on the last frame in the SP. Alternatively, it may call the function
2593 * ieee80211_sta_eosp() to inform mac80211 of the end of the SP. 2593 * ieee80211_sta_eosp() to inform mac80211 of the end of the SP.
2594 * This callback must be atomic. 2594 * This callback must be atomic.
2595 * @allow_buffered_frames: Prepare device to allow the given number of frames 2595 * @allow_buffered_frames: Prepare device to allow the given number of frames
2596 * to go out to the given station. The frames will be sent by mac80211 2596 * to go out to the given station. The frames will be sent by mac80211
2597 * via the usual TX path after this call. The TX information for frames 2597 * via the usual TX path after this call. The TX information for frames
2598 * released will also have the %IEEE80211_TX_CTL_NO_PS_BUFFER flag set 2598 * released will also have the %IEEE80211_TX_CTL_NO_PS_BUFFER flag set
2599 * and the last one will also have %IEEE80211_TX_STATUS_EOSP set. In case 2599 * and the last one will also have %IEEE80211_TX_STATUS_EOSP set. In case
2600 * frames from multiple TIDs are released and the driver might reorder 2600 * frames from multiple TIDs are released and the driver might reorder
2601 * them between the TIDs, it must set the %IEEE80211_TX_STATUS_EOSP flag 2601 * them between the TIDs, it must set the %IEEE80211_TX_STATUS_EOSP flag
2602 * on the last frame and clear it on all others and also handle the EOSP 2602 * on the last frame and clear it on all others and also handle the EOSP
2603 * bit in the QoS header correctly. Alternatively, it can also call the 2603 * bit in the QoS header correctly. Alternatively, it can also call the
2604 * ieee80211_sta_eosp() function. 2604 * ieee80211_sta_eosp() function.
2605 * The @tids parameter is a bitmap and tells the driver which TIDs the 2605 * The @tids parameter is a bitmap and tells the driver which TIDs the
2606 * frames will be on; it will at most have two bits set. 2606 * frames will be on; it will at most have two bits set.
2607 * This callback must be atomic. 2607 * This callback must be atomic.
2608 * 2608 *
2609 * @get_et_sset_count: Ethtool API to get string-set count. 2609 * @get_et_sset_count: Ethtool API to get string-set count.
2610 * 2610 *
2611 * @get_et_stats: Ethtool API to get a set of u64 stats. 2611 * @get_et_stats: Ethtool API to get a set of u64 stats.
2612 * 2612 *
2613 * @get_et_strings: Ethtool API to get a set of strings to describe stats 2613 * @get_et_strings: Ethtool API to get a set of strings to describe stats
2614 * and perhaps other supported types of ethtool data-sets. 2614 * and perhaps other supported types of ethtool data-sets.
2615 * 2615 *
2616 * @get_rssi: Get current signal strength in dBm, the function is optional 2616 * @get_rssi: Get current signal strength in dBm, the function is optional
2617 * and can sleep. 2617 * and can sleep.
2618 * 2618 *
2619 * @mgd_prepare_tx: Prepare for transmitting a management frame for association 2619 * @mgd_prepare_tx: Prepare for transmitting a management frame for association
2620 * before associated. In multi-channel scenarios, a virtual interface is 2620 * before associated. In multi-channel scenarios, a virtual interface is
2621 * bound to a channel before it is associated, but as it isn't associated 2621 * bound to a channel before it is associated, but as it isn't associated
2622 * yet it need not necessarily be given airtime, in particular since any 2622 * yet it need not necessarily be given airtime, in particular since any
2623 * transmission to a P2P GO needs to be synchronized against the GO's 2623 * transmission to a P2P GO needs to be synchronized against the GO's
2624 * powersave state. mac80211 will call this function before transmitting a 2624 * powersave state. mac80211 will call this function before transmitting a
2625 * management frame prior to having successfully associated to allow the 2625 * management frame prior to having successfully associated to allow the
2626 * driver to give it channel time for the transmission, to get a response 2626 * driver to give it channel time for the transmission, to get a response
2627 * and to be able to synchronize with the GO. 2627 * and to be able to synchronize with the GO.
2628 * The callback will be called before each transmission and upon return 2628 * The callback will be called before each transmission and upon return
2629 * mac80211 will transmit the frame right away. 2629 * mac80211 will transmit the frame right away.
2630 * The callback is optional and can (should!) sleep. 2630 * The callback is optional and can (should!) sleep.
2631 * 2631 *
2632 * @add_chanctx: Notifies device driver about new channel context creation. 2632 * @add_chanctx: Notifies device driver about new channel context creation.
2633 * @remove_chanctx: Notifies device driver about channel context destruction. 2633 * @remove_chanctx: Notifies device driver about channel context destruction.
2634 * @change_chanctx: Notifies device driver about channel context changes that 2634 * @change_chanctx: Notifies device driver about channel context changes that
2635 * may happen when combining different virtual interfaces on the same 2635 * may happen when combining different virtual interfaces on the same
2636 * channel context with different settings 2636 * channel context with different settings
2637 * @assign_vif_chanctx: Notifies device driver about channel context being bound 2637 * @assign_vif_chanctx: Notifies device driver about channel context being bound
2638 * to vif. Possible use is for hw queue remapping. 2638 * to vif. Possible use is for hw queue remapping.
2639 * @unassign_vif_chanctx: Notifies device driver about channel context being 2639 * @unassign_vif_chanctx: Notifies device driver about channel context being
2640 * unbound from vif. 2640 * unbound from vif.
2641 * @start_ap: Start operation on the AP interface, this is called after all the 2641 * @start_ap: Start operation on the AP interface, this is called after all the
2642 * information in bss_conf is set and beacon can be retrieved. A channel 2642 * information in bss_conf is set and beacon can be retrieved. A channel
2643 * context is bound before this is called. Note that if the driver uses 2643 * context is bound before this is called. Note that if the driver uses
2644 * software scan or ROC, this (and @stop_ap) isn't called when the AP is 2644 * software scan or ROC, this (and @stop_ap) isn't called when the AP is
2645 * just "paused" for scanning/ROC, which is indicated by the beacon being 2645 * just "paused" for scanning/ROC, which is indicated by the beacon being
2646 * disabled/enabled via @bss_info_changed. 2646 * disabled/enabled via @bss_info_changed.
2647 * @stop_ap: Stop operation on the AP interface. 2647 * @stop_ap: Stop operation on the AP interface.
2648 * 2648 *
2649 * @restart_complete: Called after a call to ieee80211_restart_hw(), when the 2649 * @restart_complete: Called after a call to ieee80211_restart_hw(), when the
2650 * reconfiguration has completed. This can help the driver implement the 2650 * reconfiguration has completed. This can help the driver implement the
2651 * reconfiguration step. Also called when reconfiguring because the 2651 * reconfiguration step. Also called when reconfiguring because the
2652 * driver's resume function returned 1, as this is just like an "inline" 2652 * driver's resume function returned 1, as this is just like an "inline"
2653 * hardware restart. This callback may sleep. 2653 * hardware restart. This callback may sleep.
2654 * 2654 *
2655 * @ipv6_addr_change: IPv6 address assignment on the given interface changed. 2655 * @ipv6_addr_change: IPv6 address assignment on the given interface changed.
2656 * Currently, this is only called for managed or P2P client interfaces. 2656 * Currently, this is only called for managed or P2P client interfaces.
2657 * This callback is optional; it must not sleep. 2657 * This callback is optional; it must not sleep.
2658 * 2658 *
2659 * @channel_switch_beacon: Starts a channel switch to a new channel. 2659 * @channel_switch_beacon: Starts a channel switch to a new channel.
2660 * Beacons are modified to include CSA or ECSA IEs before calling this 2660 * Beacons are modified to include CSA or ECSA IEs before calling this
2661 * function. The corresponding count fields in these IEs must be 2661 * function. The corresponding count fields in these IEs must be
2662 * decremented, and when they reach zero the driver must call 2662 * decremented, and when they reach zero the driver must call
2663 * ieee80211_csa_finish(). Drivers which use ieee80211_beacon_get() 2663 * ieee80211_csa_finish(). Drivers which use ieee80211_beacon_get()
2664 * get the csa counter decremented by mac80211, but must check if it is 2664 * get the csa counter decremented by mac80211, but must check if it is
2665 * zero using ieee80211_csa_is_complete() after the beacon has been 2665 * zero using ieee80211_csa_is_complete() after the beacon has been
2666 * transmitted and then call ieee80211_csa_finish(). 2666 * transmitted and then call ieee80211_csa_finish().
2667 * 2667 *
2668 */ 2668 */
2669 struct ieee80211_ops { 2669 struct ieee80211_ops {
2670 void (*tx)(struct ieee80211_hw *hw, 2670 void (*tx)(struct ieee80211_hw *hw,
2671 struct ieee80211_tx_control *control, 2671 struct ieee80211_tx_control *control,
2672 struct sk_buff *skb); 2672 struct sk_buff *skb);
2673 int (*start)(struct ieee80211_hw *hw); 2673 int (*start)(struct ieee80211_hw *hw);
2674 void (*stop)(struct ieee80211_hw *hw); 2674 void (*stop)(struct ieee80211_hw *hw);
2675 #ifdef CONFIG_PM 2675 #ifdef CONFIG_PM
2676 int (*suspend)(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan); 2676 int (*suspend)(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan);
2677 int (*resume)(struct ieee80211_hw *hw); 2677 int (*resume)(struct ieee80211_hw *hw);
2678 void (*set_wakeup)(struct ieee80211_hw *hw, bool enabled); 2678 void (*set_wakeup)(struct ieee80211_hw *hw, bool enabled);
2679 #endif 2679 #endif
2680 int (*add_interface)(struct ieee80211_hw *hw, 2680 int (*add_interface)(struct ieee80211_hw *hw,
2681 struct ieee80211_vif *vif); 2681 struct ieee80211_vif *vif);
2682 int (*change_interface)(struct ieee80211_hw *hw, 2682 int (*change_interface)(struct ieee80211_hw *hw,
2683 struct ieee80211_vif *vif, 2683 struct ieee80211_vif *vif,
2684 enum nl80211_iftype new_type, bool p2p); 2684 enum nl80211_iftype new_type, bool p2p);
2685 void (*remove_interface)(struct ieee80211_hw *hw, 2685 void (*remove_interface)(struct ieee80211_hw *hw,
2686 struct ieee80211_vif *vif); 2686 struct ieee80211_vif *vif);
2687 int (*config)(struct ieee80211_hw *hw, u32 changed); 2687 int (*config)(struct ieee80211_hw *hw, u32 changed);
2688 void (*bss_info_changed)(struct ieee80211_hw *hw, 2688 void (*bss_info_changed)(struct ieee80211_hw *hw,
2689 struct ieee80211_vif *vif, 2689 struct ieee80211_vif *vif,
2690 struct ieee80211_bss_conf *info, 2690 struct ieee80211_bss_conf *info,
2691 u32 changed); 2691 u32 changed);
2692 2692
2693 int (*start_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); 2693 int (*start_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
2694 void (*stop_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); 2694 void (*stop_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
2695 2695
2696 u64 (*prepare_multicast)(struct ieee80211_hw *hw, 2696 u64 (*prepare_multicast)(struct ieee80211_hw *hw,
2697 struct netdev_hw_addr_list *mc_list); 2697 struct netdev_hw_addr_list *mc_list);
2698 void (*configure_filter)(struct ieee80211_hw *hw, 2698 void (*configure_filter)(struct ieee80211_hw *hw,
2699 unsigned int changed_flags, 2699 unsigned int changed_flags,
2700 unsigned int *total_flags, 2700 unsigned int *total_flags,
2701 u64 multicast); 2701 u64 multicast);
2702 void (*set_multicast_list)(struct ieee80211_hw *hw, 2702 void (*set_multicast_list)(struct ieee80211_hw *hw,
2703 struct ieee80211_vif *vif, bool allmulti, 2703 struct ieee80211_vif *vif, bool allmulti,
2704 struct netdev_hw_addr_list *mc_list); 2704 struct netdev_hw_addr_list *mc_list);
2705 2705
2706 int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta, 2706 int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
2707 bool set); 2707 bool set);
2708 int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd, 2708 int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd,
2709 struct ieee80211_vif *vif, struct ieee80211_sta *sta, 2709 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
2710 struct ieee80211_key_conf *key); 2710 struct ieee80211_key_conf *key);
2711 void (*update_tkip_key)(struct ieee80211_hw *hw, 2711 void (*update_tkip_key)(struct ieee80211_hw *hw,
2712 struct ieee80211_vif *vif, 2712 struct ieee80211_vif *vif,
2713 struct ieee80211_key_conf *conf, 2713 struct ieee80211_key_conf *conf,
2714 struct ieee80211_sta *sta, 2714 struct ieee80211_sta *sta,
2715 u32 iv32, u16 *phase1key); 2715 u32 iv32, u16 *phase1key);
2716 void (*set_rekey_data)(struct ieee80211_hw *hw, 2716 void (*set_rekey_data)(struct ieee80211_hw *hw,
2717 struct ieee80211_vif *vif, 2717 struct ieee80211_vif *vif,
2718 struct cfg80211_gtk_rekey_data *data); 2718 struct cfg80211_gtk_rekey_data *data);
2719 void (*set_default_unicast_key)(struct ieee80211_hw *hw, 2719 void (*set_default_unicast_key)(struct ieee80211_hw *hw,
2720 struct ieee80211_vif *vif, int idx); 2720 struct ieee80211_vif *vif, int idx);
2721 int (*hw_scan)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 2721 int (*hw_scan)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2722 struct cfg80211_scan_request *req); 2722 struct cfg80211_scan_request *req);
2723 void (*cancel_hw_scan)(struct ieee80211_hw *hw, 2723 void (*cancel_hw_scan)(struct ieee80211_hw *hw,
2724 struct ieee80211_vif *vif); 2724 struct ieee80211_vif *vif);
2725 int (*sched_scan_start)(struct ieee80211_hw *hw, 2725 int (*sched_scan_start)(struct ieee80211_hw *hw,
2726 struct ieee80211_vif *vif, 2726 struct ieee80211_vif *vif,
2727 struct cfg80211_sched_scan_request *req, 2727 struct cfg80211_sched_scan_request *req,
2728 struct ieee80211_sched_scan_ies *ies); 2728 struct ieee80211_sched_scan_ies *ies);
2729 void (*sched_scan_stop)(struct ieee80211_hw *hw, 2729 void (*sched_scan_stop)(struct ieee80211_hw *hw,
2730 struct ieee80211_vif *vif); 2730 struct ieee80211_vif *vif);
2731 void (*sw_scan_start)(struct ieee80211_hw *hw); 2731 void (*sw_scan_start)(struct ieee80211_hw *hw);
2732 void (*sw_scan_complete)(struct ieee80211_hw *hw); 2732 void (*sw_scan_complete)(struct ieee80211_hw *hw);
2733 int (*get_stats)(struct ieee80211_hw *hw, 2733 int (*get_stats)(struct ieee80211_hw *hw,
2734 struct ieee80211_low_level_stats *stats); 2734 struct ieee80211_low_level_stats *stats);
2735 void (*get_tkip_seq)(struct ieee80211_hw *hw, u8 hw_key_idx, 2735 void (*get_tkip_seq)(struct ieee80211_hw *hw, u8 hw_key_idx,
2736 u32 *iv32, u16 *iv16); 2736 u32 *iv32, u16 *iv16);
2737 int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value); 2737 int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value);
2738 int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value); 2738 int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value);
2739 int (*sta_add)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 2739 int (*sta_add)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2740 struct ieee80211_sta *sta); 2740 struct ieee80211_sta *sta);
2741 int (*sta_remove)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 2741 int (*sta_remove)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2742 struct ieee80211_sta *sta); 2742 struct ieee80211_sta *sta);
2743 #ifdef CONFIG_MAC80211_DEBUGFS 2743 #ifdef CONFIG_MAC80211_DEBUGFS
2744 void (*sta_add_debugfs)(struct ieee80211_hw *hw, 2744 void (*sta_add_debugfs)(struct ieee80211_hw *hw,
2745 struct ieee80211_vif *vif, 2745 struct ieee80211_vif *vif,
2746 struct ieee80211_sta *sta, 2746 struct ieee80211_sta *sta,
2747 struct dentry *dir); 2747 struct dentry *dir);
2748 void (*sta_remove_debugfs)(struct ieee80211_hw *hw, 2748 void (*sta_remove_debugfs)(struct ieee80211_hw *hw,
2749 struct ieee80211_vif *vif, 2749 struct ieee80211_vif *vif,
2750 struct ieee80211_sta *sta, 2750 struct ieee80211_sta *sta,
2751 struct dentry *dir); 2751 struct dentry *dir);
2752 #endif 2752 #endif
2753 void (*sta_notify)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 2753 void (*sta_notify)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2754 enum sta_notify_cmd, struct ieee80211_sta *sta); 2754 enum sta_notify_cmd, struct ieee80211_sta *sta);
2755 int (*sta_state)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 2755 int (*sta_state)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2756 struct ieee80211_sta *sta, 2756 struct ieee80211_sta *sta,
2757 enum ieee80211_sta_state old_state, 2757 enum ieee80211_sta_state old_state,
2758 enum ieee80211_sta_state new_state); 2758 enum ieee80211_sta_state new_state);
2759 void (*sta_rc_update)(struct ieee80211_hw *hw, 2759 void (*sta_rc_update)(struct ieee80211_hw *hw,
2760 struct ieee80211_vif *vif, 2760 struct ieee80211_vif *vif,
2761 struct ieee80211_sta *sta, 2761 struct ieee80211_sta *sta,
2762 u32 changed); 2762 u32 changed);
2763 int (*conf_tx)(struct ieee80211_hw *hw, 2763 int (*conf_tx)(struct ieee80211_hw *hw,
2764 struct ieee80211_vif *vif, u16 ac, 2764 struct ieee80211_vif *vif, u16 ac,
2765 const struct ieee80211_tx_queue_params *params); 2765 const struct ieee80211_tx_queue_params *params);
2766 u64 (*get_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); 2766 u64 (*get_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
2767 void (*set_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 2767 void (*set_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2768 u64 tsf); 2768 u64 tsf);
2769 void (*reset_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); 2769 void (*reset_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
2770 int (*tx_last_beacon)(struct ieee80211_hw *hw); 2770 int (*tx_last_beacon)(struct ieee80211_hw *hw);
2771 int (*ampdu_action)(struct ieee80211_hw *hw, 2771 int (*ampdu_action)(struct ieee80211_hw *hw,
2772 struct ieee80211_vif *vif, 2772 struct ieee80211_vif *vif,
2773 enum ieee80211_ampdu_mlme_action action, 2773 enum ieee80211_ampdu_mlme_action action,
2774 struct ieee80211_sta *sta, u16 tid, u16 *ssn, 2774 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
2775 u8 buf_size); 2775 u8 buf_size);
2776 int (*get_survey)(struct ieee80211_hw *hw, int idx, 2776 int (*get_survey)(struct ieee80211_hw *hw, int idx,
2777 struct survey_info *survey); 2777 struct survey_info *survey);
2778 void (*rfkill_poll)(struct ieee80211_hw *hw); 2778 void (*rfkill_poll)(struct ieee80211_hw *hw);
2779 void (*set_coverage_class)(struct ieee80211_hw *hw, u8 coverage_class); 2779 void (*set_coverage_class)(struct ieee80211_hw *hw, u8 coverage_class);
2780 #ifdef CONFIG_NL80211_TESTMODE 2780 #ifdef CONFIG_NL80211_TESTMODE
2781 int (*testmode_cmd)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 2781 int (*testmode_cmd)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2782 void *data, int len); 2782 void *data, int len);
2783 int (*testmode_dump)(struct ieee80211_hw *hw, struct sk_buff *skb, 2783 int (*testmode_dump)(struct ieee80211_hw *hw, struct sk_buff *skb,
2784 struct netlink_callback *cb, 2784 struct netlink_callback *cb,
2785 void *data, int len); 2785 void *data, int len);
2786 #endif 2786 #endif
2787 void (*flush)(struct ieee80211_hw *hw, u32 queues, bool drop); 2787 void (*flush)(struct ieee80211_hw *hw, u32 queues, bool drop);
2788 void (*channel_switch)(struct ieee80211_hw *hw, 2788 void (*channel_switch)(struct ieee80211_hw *hw,
2789 struct ieee80211_channel_switch *ch_switch); 2789 struct ieee80211_channel_switch *ch_switch);
2790 int (*napi_poll)(struct ieee80211_hw *hw, int budget); 2790 int (*napi_poll)(struct ieee80211_hw *hw, int budget);
2791 int (*set_antenna)(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant); 2791 int (*set_antenna)(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant);
2792 int (*get_antenna)(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant); 2792 int (*get_antenna)(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant);
2793 2793
2794 int (*remain_on_channel)(struct ieee80211_hw *hw, 2794 int (*remain_on_channel)(struct ieee80211_hw *hw,
2795 struct ieee80211_vif *vif, 2795 struct ieee80211_vif *vif,
2796 struct ieee80211_channel *chan, 2796 struct ieee80211_channel *chan,
2797 int duration, 2797 int duration,
2798 enum ieee80211_roc_type type); 2798 enum ieee80211_roc_type type);
2799 int (*cancel_remain_on_channel)(struct ieee80211_hw *hw); 2799 int (*cancel_remain_on_channel)(struct ieee80211_hw *hw);
2800 int (*set_ringparam)(struct ieee80211_hw *hw, u32 tx, u32 rx); 2800 int (*set_ringparam)(struct ieee80211_hw *hw, u32 tx, u32 rx);
2801 void (*get_ringparam)(struct ieee80211_hw *hw, 2801 void (*get_ringparam)(struct ieee80211_hw *hw,
2802 u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max); 2802 u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);
2803 bool (*tx_frames_pending)(struct ieee80211_hw *hw); 2803 bool (*tx_frames_pending)(struct ieee80211_hw *hw);
2804 int (*set_bitrate_mask)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 2804 int (*set_bitrate_mask)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2805 const struct cfg80211_bitrate_mask *mask); 2805 const struct cfg80211_bitrate_mask *mask);
2806 void (*rssi_callback)(struct ieee80211_hw *hw, 2806 void (*rssi_callback)(struct ieee80211_hw *hw,
2807 struct ieee80211_vif *vif, 2807 struct ieee80211_vif *vif,
2808 enum ieee80211_rssi_event rssi_event); 2808 enum ieee80211_rssi_event rssi_event);
2809 2809
2810 void (*allow_buffered_frames)(struct ieee80211_hw *hw, 2810 void (*allow_buffered_frames)(struct ieee80211_hw *hw,
2811 struct ieee80211_sta *sta, 2811 struct ieee80211_sta *sta,
2812 u16 tids, int num_frames, 2812 u16 tids, int num_frames,
2813 enum ieee80211_frame_release_type reason, 2813 enum ieee80211_frame_release_type reason,
2814 bool more_data); 2814 bool more_data);
2815 void (*release_buffered_frames)(struct ieee80211_hw *hw, 2815 void (*release_buffered_frames)(struct ieee80211_hw *hw,
2816 struct ieee80211_sta *sta, 2816 struct ieee80211_sta *sta,
2817 u16 tids, int num_frames, 2817 u16 tids, int num_frames,
2818 enum ieee80211_frame_release_type reason, 2818 enum ieee80211_frame_release_type reason,
2819 bool more_data); 2819 bool more_data);
2820 2820
2821 int (*get_et_sset_count)(struct ieee80211_hw *hw, 2821 int (*get_et_sset_count)(struct ieee80211_hw *hw,
2822 struct ieee80211_vif *vif, int sset); 2822 struct ieee80211_vif *vif, int sset);
2823 void (*get_et_stats)(struct ieee80211_hw *hw, 2823 void (*get_et_stats)(struct ieee80211_hw *hw,
2824 struct ieee80211_vif *vif, 2824 struct ieee80211_vif *vif,
2825 struct ethtool_stats *stats, u64 *data); 2825 struct ethtool_stats *stats, u64 *data);
2826 void (*get_et_strings)(struct ieee80211_hw *hw, 2826 void (*get_et_strings)(struct ieee80211_hw *hw,
2827 struct ieee80211_vif *vif, 2827 struct ieee80211_vif *vif,
2828 u32 sset, u8 *data); 2828 u32 sset, u8 *data);
2829 int (*get_rssi)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 2829 int (*get_rssi)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2830 struct ieee80211_sta *sta, s8 *rssi_dbm); 2830 struct ieee80211_sta *sta, s8 *rssi_dbm);
2831 2831
2832 void (*mgd_prepare_tx)(struct ieee80211_hw *hw, 2832 void (*mgd_prepare_tx)(struct ieee80211_hw *hw,
2833 struct ieee80211_vif *vif); 2833 struct ieee80211_vif *vif);
2834 2834
2835 int (*add_chanctx)(struct ieee80211_hw *hw, 2835 int (*add_chanctx)(struct ieee80211_hw *hw,
2836 struct ieee80211_chanctx_conf *ctx); 2836 struct ieee80211_chanctx_conf *ctx);
2837 void (*remove_chanctx)(struct ieee80211_hw *hw, 2837 void (*remove_chanctx)(struct ieee80211_hw *hw,
2838 struct ieee80211_chanctx_conf *ctx); 2838 struct ieee80211_chanctx_conf *ctx);
2839 void (*change_chanctx)(struct ieee80211_hw *hw, 2839 void (*change_chanctx)(struct ieee80211_hw *hw,
2840 struct ieee80211_chanctx_conf *ctx, 2840 struct ieee80211_chanctx_conf *ctx,
2841 u32 changed); 2841 u32 changed);
2842 int (*assign_vif_chanctx)(struct ieee80211_hw *hw, 2842 int (*assign_vif_chanctx)(struct ieee80211_hw *hw,
2843 struct ieee80211_vif *vif, 2843 struct ieee80211_vif *vif,
2844 struct ieee80211_chanctx_conf *ctx); 2844 struct ieee80211_chanctx_conf *ctx);
2845 void (*unassign_vif_chanctx)(struct ieee80211_hw *hw, 2845 void (*unassign_vif_chanctx)(struct ieee80211_hw *hw,
2846 struct ieee80211_vif *vif, 2846 struct ieee80211_vif *vif,
2847 struct ieee80211_chanctx_conf *ctx); 2847 struct ieee80211_chanctx_conf *ctx);
2848 2848
2849 void (*restart_complete)(struct ieee80211_hw *hw); 2849 void (*restart_complete)(struct ieee80211_hw *hw);
2850 2850
2851 #if IS_ENABLED(CONFIG_IPV6) 2851 #if IS_ENABLED(CONFIG_IPV6)
2852 void (*ipv6_addr_change)(struct ieee80211_hw *hw, 2852 void (*ipv6_addr_change)(struct ieee80211_hw *hw,
2853 struct ieee80211_vif *vif, 2853 struct ieee80211_vif *vif,
2854 struct inet6_dev *idev); 2854 struct inet6_dev *idev);
2855 #endif 2855 #endif
2856 void (*channel_switch_beacon)(struct ieee80211_hw *hw, 2856 void (*channel_switch_beacon)(struct ieee80211_hw *hw,
2857 struct ieee80211_vif *vif, 2857 struct ieee80211_vif *vif,
2858 struct cfg80211_chan_def *chandef); 2858 struct cfg80211_chan_def *chandef);
2859 }; 2859 };
2860 2860
2861 /** 2861 /**
2862 * ieee80211_alloc_hw - Allocate a new hardware device 2862 * ieee80211_alloc_hw - Allocate a new hardware device
2863 * 2863 *
2864 * This must be called once for each hardware device. The returned pointer 2864 * This must be called once for each hardware device. The returned pointer
2865 * must be used to refer to this device when calling other functions. 2865 * must be used to refer to this device when calling other functions.
2866 * mac80211 allocates a private data area for the driver pointed to by 2866 * mac80211 allocates a private data area for the driver pointed to by
2867 * @priv in &struct ieee80211_hw, the size of this area is given as 2867 * @priv in &struct ieee80211_hw, the size of this area is given as
2868 * @priv_data_len. 2868 * @priv_data_len.
2869 * 2869 *
2870 * @priv_data_len: length of private data 2870 * @priv_data_len: length of private data
2871 * @ops: callbacks for this device 2871 * @ops: callbacks for this device
2872 * 2872 *
2873 * Return: A pointer to the new hardware device, or %NULL on error. 2873 * Return: A pointer to the new hardware device, or %NULL on error.
2874 */ 2874 */
2875 struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, 2875 struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
2876 const struct ieee80211_ops *ops); 2876 const struct ieee80211_ops *ops);
2877 2877
2878 /** 2878 /**
2879 * ieee80211_register_hw - Register hardware device 2879 * ieee80211_register_hw - Register hardware device
2880 * 2880 *
2881 * You must call this function before any other functions in 2881 * You must call this function before any other functions in
2882 * mac80211. Note that before a hardware can be registered, you 2882 * mac80211. Note that before a hardware can be registered, you
2883 * need to fill the contained wiphy's information. 2883 * need to fill the contained wiphy's information.
2884 * 2884 *
2885 * @hw: the device to register as returned by ieee80211_alloc_hw() 2885 * @hw: the device to register as returned by ieee80211_alloc_hw()
2886 * 2886 *
2887 * Return: 0 on success. An error code otherwise. 2887 * Return: 0 on success. An error code otherwise.
2888 */ 2888 */
2889 int ieee80211_register_hw(struct ieee80211_hw *hw); 2889 int ieee80211_register_hw(struct ieee80211_hw *hw);
2890 2890
2891 /** 2891 /**
2892 * struct ieee80211_tpt_blink - throughput blink description 2892 * struct ieee80211_tpt_blink - throughput blink description
2893 * @throughput: throughput in Kbit/sec 2893 * @throughput: throughput in Kbit/sec
2894 * @blink_time: blink time in milliseconds 2894 * @blink_time: blink time in milliseconds
2895 * (full cycle, ie. one off + one on period) 2895 * (full cycle, ie. one off + one on period)
2896 */ 2896 */
2897 struct ieee80211_tpt_blink { 2897 struct ieee80211_tpt_blink {
2898 int throughput; 2898 int throughput;
2899 int blink_time; 2899 int blink_time;
2900 }; 2900 };
2901 2901
2902 /** 2902 /**
2903 * enum ieee80211_tpt_led_trigger_flags - throughput trigger flags 2903 * enum ieee80211_tpt_led_trigger_flags - throughput trigger flags
2904 * @IEEE80211_TPT_LEDTRIG_FL_RADIO: enable blinking with radio 2904 * @IEEE80211_TPT_LEDTRIG_FL_RADIO: enable blinking with radio
2905 * @IEEE80211_TPT_LEDTRIG_FL_WORK: enable blinking when working 2905 * @IEEE80211_TPT_LEDTRIG_FL_WORK: enable blinking when working
2906 * @IEEE80211_TPT_LEDTRIG_FL_CONNECTED: enable blinking when at least one 2906 * @IEEE80211_TPT_LEDTRIG_FL_CONNECTED: enable blinking when at least one
2907 * interface is connected in some way, including being an AP 2907 * interface is connected in some way, including being an AP
2908 */ 2908 */
2909 enum ieee80211_tpt_led_trigger_flags { 2909 enum ieee80211_tpt_led_trigger_flags {
2910 IEEE80211_TPT_LEDTRIG_FL_RADIO = BIT(0), 2910 IEEE80211_TPT_LEDTRIG_FL_RADIO = BIT(0),
2911 IEEE80211_TPT_LEDTRIG_FL_WORK = BIT(1), 2911 IEEE80211_TPT_LEDTRIG_FL_WORK = BIT(1),
2912 IEEE80211_TPT_LEDTRIG_FL_CONNECTED = BIT(2), 2912 IEEE80211_TPT_LEDTRIG_FL_CONNECTED = BIT(2),
2913 }; 2913 };
2914 2914
2915 #ifdef CONFIG_MAC80211_LEDS 2915 #ifdef CONFIG_MAC80211_LEDS
2916 extern char *__ieee80211_get_tx_led_name(struct ieee80211_hw *hw); 2916 extern char *__ieee80211_get_tx_led_name(struct ieee80211_hw *hw);
2917 extern char *__ieee80211_get_rx_led_name(struct ieee80211_hw *hw); 2917 extern char *__ieee80211_get_rx_led_name(struct ieee80211_hw *hw);
2918 extern char *__ieee80211_get_assoc_led_name(struct ieee80211_hw *hw); 2918 extern char *__ieee80211_get_assoc_led_name(struct ieee80211_hw *hw);
2919 extern char *__ieee80211_get_radio_led_name(struct ieee80211_hw *hw); 2919 extern char *__ieee80211_get_radio_led_name(struct ieee80211_hw *hw);
2920 extern char *__ieee80211_create_tpt_led_trigger( 2920 extern char *__ieee80211_create_tpt_led_trigger(
2921 struct ieee80211_hw *hw, unsigned int flags, 2921 struct ieee80211_hw *hw, unsigned int flags,
2922 const struct ieee80211_tpt_blink *blink_table, 2922 const struct ieee80211_tpt_blink *blink_table,
2923 unsigned int blink_table_len); 2923 unsigned int blink_table_len);
2924 #endif 2924 #endif
2925 /** 2925 /**
2926 * ieee80211_get_tx_led_name - get name of TX LED 2926 * ieee80211_get_tx_led_name - get name of TX LED
2927 * 2927 *
2928 * mac80211 creates a transmit LED trigger for each wireless hardware 2928 * mac80211 creates a transmit LED trigger for each wireless hardware
2929 * that can be used to drive LEDs if your driver registers a LED device. 2929 * that can be used to drive LEDs if your driver registers a LED device.
2930 * This function returns the name (or %NULL if not configured for LEDs) 2930 * This function returns the name (or %NULL if not configured for LEDs)
2931 * of the trigger so you can automatically link the LED device. 2931 * of the trigger so you can automatically link the LED device.
2932 * 2932 *
2933 * @hw: the hardware to get the LED trigger name for 2933 * @hw: the hardware to get the LED trigger name for
2934 * 2934 *
2935 * Return: The name of the LED trigger. %NULL if not configured for LEDs. 2935 * Return: The name of the LED trigger. %NULL if not configured for LEDs.
2936 */ 2936 */
2937 static inline char *ieee80211_get_tx_led_name(struct ieee80211_hw *hw) 2937 static inline char *ieee80211_get_tx_led_name(struct ieee80211_hw *hw)
2938 { 2938 {
2939 #ifdef CONFIG_MAC80211_LEDS 2939 #ifdef CONFIG_MAC80211_LEDS
2940 return __ieee80211_get_tx_led_name(hw); 2940 return __ieee80211_get_tx_led_name(hw);
2941 #else 2941 #else
2942 return NULL; 2942 return NULL;
2943 #endif 2943 #endif
2944 } 2944 }
2945 2945
2946 /** 2946 /**
2947 * ieee80211_get_rx_led_name - get name of RX LED 2947 * ieee80211_get_rx_led_name - get name of RX LED
2948 * 2948 *
2949 * mac80211 creates a receive LED trigger for each wireless hardware 2949 * mac80211 creates a receive LED trigger for each wireless hardware
2950 * that can be used to drive LEDs if your driver registers a LED device. 2950 * that can be used to drive LEDs if your driver registers a LED device.
2951 * This function returns the name (or %NULL if not configured for LEDs) 2951 * This function returns the name (or %NULL if not configured for LEDs)
2952 * of the trigger so you can automatically link the LED device. 2952 * of the trigger so you can automatically link the LED device.
2953 * 2953 *
2954 * @hw: the hardware to get the LED trigger name for 2954 * @hw: the hardware to get the LED trigger name for
2955 * 2955 *
2956 * Return: The name of the LED trigger. %NULL if not configured for LEDs. 2956 * Return: The name of the LED trigger. %NULL if not configured for LEDs.
2957 */ 2957 */
2958 static inline char *ieee80211_get_rx_led_name(struct ieee80211_hw *hw) 2958 static inline char *ieee80211_get_rx_led_name(struct ieee80211_hw *hw)
2959 { 2959 {
2960 #ifdef CONFIG_MAC80211_LEDS 2960 #ifdef CONFIG_MAC80211_LEDS
2961 return __ieee80211_get_rx_led_name(hw); 2961 return __ieee80211_get_rx_led_name(hw);
2962 #else 2962 #else
2963 return NULL; 2963 return NULL;
2964 #endif 2964 #endif
2965 } 2965 }
2966 2966
2967 /** 2967 /**
2968 * ieee80211_get_assoc_led_name - get name of association LED 2968 * ieee80211_get_assoc_led_name - get name of association LED
2969 * 2969 *
2970 * mac80211 creates a association LED trigger for each wireless hardware 2970 * mac80211 creates a association LED trigger for each wireless hardware
2971 * that can be used to drive LEDs if your driver registers a LED device. 2971 * that can be used to drive LEDs if your driver registers a LED device.
2972 * This function returns the name (or %NULL if not configured for LEDs) 2972 * This function returns the name (or %NULL if not configured for LEDs)
2973 * of the trigger so you can automatically link the LED device. 2973 * of the trigger so you can automatically link the LED device.
2974 * 2974 *
2975 * @hw: the hardware to get the LED trigger name for 2975 * @hw: the hardware to get the LED trigger name for
2976 * 2976 *
2977 * Return: The name of the LED trigger. %NULL if not configured for LEDs. 2977 * Return: The name of the LED trigger. %NULL if not configured for LEDs.
2978 */ 2978 */
2979 static inline char *ieee80211_get_assoc_led_name(struct ieee80211_hw *hw) 2979 static inline char *ieee80211_get_assoc_led_name(struct ieee80211_hw *hw)
2980 { 2980 {
2981 #ifdef CONFIG_MAC80211_LEDS 2981 #ifdef CONFIG_MAC80211_LEDS
2982 return __ieee80211_get_assoc_led_name(hw); 2982 return __ieee80211_get_assoc_led_name(hw);
2983 #else 2983 #else
2984 return NULL; 2984 return NULL;
2985 #endif 2985 #endif
2986 } 2986 }
2987 2987
2988 /** 2988 /**
2989 * ieee80211_get_radio_led_name - get name of radio LED 2989 * ieee80211_get_radio_led_name - get name of radio LED
2990 * 2990 *
2991 * mac80211 creates a radio change LED trigger for each wireless hardware 2991 * mac80211 creates a radio change LED trigger for each wireless hardware
2992 * that can be used to drive LEDs if your driver registers a LED device. 2992 * that can be used to drive LEDs if your driver registers a LED device.
2993 * This function returns the name (or %NULL if not configured for LEDs) 2993 * This function returns the name (or %NULL if not configured for LEDs)
2994 * of the trigger so you can automatically link the LED device. 2994 * of the trigger so you can automatically link the LED device.
2995 * 2995 *
2996 * @hw: the hardware to get the LED trigger name for 2996 * @hw: the hardware to get the LED trigger name for
2997 * 2997 *
2998 * Return: The name of the LED trigger. %NULL if not configured for LEDs. 2998 * Return: The name of the LED trigger. %NULL if not configured for LEDs.
2999 */ 2999 */
3000 static inline char *ieee80211_get_radio_led_name(struct ieee80211_hw *hw) 3000 static inline char *ieee80211_get_radio_led_name(struct ieee80211_hw *hw)
3001 { 3001 {
3002 #ifdef CONFIG_MAC80211_LEDS 3002 #ifdef CONFIG_MAC80211_LEDS
3003 return __ieee80211_get_radio_led_name(hw); 3003 return __ieee80211_get_radio_led_name(hw);
3004 #else 3004 #else
3005 return NULL; 3005 return NULL;
3006 #endif 3006 #endif
3007 } 3007 }
3008 3008
3009 /** 3009 /**
3010 * ieee80211_create_tpt_led_trigger - create throughput LED trigger 3010 * ieee80211_create_tpt_led_trigger - create throughput LED trigger
3011 * @hw: the hardware to create the trigger for 3011 * @hw: the hardware to create the trigger for
3012 * @flags: trigger flags, see &enum ieee80211_tpt_led_trigger_flags 3012 * @flags: trigger flags, see &enum ieee80211_tpt_led_trigger_flags
3013 * @blink_table: the blink table -- needs to be ordered by throughput 3013 * @blink_table: the blink table -- needs to be ordered by throughput
3014 * @blink_table_len: size of the blink table 3014 * @blink_table_len: size of the blink table
3015 * 3015 *
3016 * Return: %NULL (in case of error, or if no LED triggers are 3016 * Return: %NULL (in case of error, or if no LED triggers are
3017 * configured) or the name of the new trigger. 3017 * configured) or the name of the new trigger.
3018 * 3018 *
3019 * Note: This function must be called before ieee80211_register_hw(). 3019 * Note: This function must be called before ieee80211_register_hw().
3020 */ 3020 */
3021 static inline char * 3021 static inline char *
3022 ieee80211_create_tpt_led_trigger(struct ieee80211_hw *hw, unsigned int flags, 3022 ieee80211_create_tpt_led_trigger(struct ieee80211_hw *hw, unsigned int flags,
3023 const struct ieee80211_tpt_blink *blink_table, 3023 const struct ieee80211_tpt_blink *blink_table,
3024 unsigned int blink_table_len) 3024 unsigned int blink_table_len)
3025 { 3025 {
3026 #ifdef CONFIG_MAC80211_LEDS 3026 #ifdef CONFIG_MAC80211_LEDS
3027 return __ieee80211_create_tpt_led_trigger(hw, flags, blink_table, 3027 return __ieee80211_create_tpt_led_trigger(hw, flags, blink_table,
3028 blink_table_len); 3028 blink_table_len);
3029 #else 3029 #else
3030 return NULL; 3030 return NULL;
3031 #endif 3031 #endif
3032 } 3032 }
3033 3033
3034 /** 3034 /**
3035 * ieee80211_unregister_hw - Unregister a hardware device 3035 * ieee80211_unregister_hw - Unregister a hardware device
3036 * 3036 *
3037 * This function instructs mac80211 to free allocated resources 3037 * This function instructs mac80211 to free allocated resources
3038 * and unregister netdevices from the networking subsystem. 3038 * and unregister netdevices from the networking subsystem.
3039 * 3039 *
3040 * @hw: the hardware to unregister 3040 * @hw: the hardware to unregister
3041 */ 3041 */
3042 void ieee80211_unregister_hw(struct ieee80211_hw *hw); 3042 void ieee80211_unregister_hw(struct ieee80211_hw *hw);
3043 3043
3044 /** 3044 /**
3045 * ieee80211_free_hw - free hardware descriptor 3045 * ieee80211_free_hw - free hardware descriptor
3046 * 3046 *
3047 * This function frees everything that was allocated, including the 3047 * This function frees everything that was allocated, including the
3048 * private data for the driver. You must call ieee80211_unregister_hw() 3048 * private data for the driver. You must call ieee80211_unregister_hw()
3049 * before calling this function. 3049 * before calling this function.
3050 * 3050 *
3051 * @hw: the hardware to free 3051 * @hw: the hardware to free
3052 */ 3052 */
3053 void ieee80211_free_hw(struct ieee80211_hw *hw); 3053 void ieee80211_free_hw(struct ieee80211_hw *hw);
3054 3054
3055 /** 3055 /**
3056 * ieee80211_restart_hw - restart hardware completely 3056 * ieee80211_restart_hw - restart hardware completely
3057 * 3057 *
3058 * Call this function when the hardware was restarted for some reason 3058 * Call this function when the hardware was restarted for some reason
3059 * (hardware error, ...) and the driver is unable to restore its state 3059 * (hardware error, ...) and the driver is unable to restore its state
3060 * by itself. mac80211 assumes that at this point the driver/hardware 3060 * by itself. mac80211 assumes that at this point the driver/hardware
3061 * is completely uninitialised and stopped, it starts the process by 3061 * is completely uninitialised and stopped, it starts the process by
3062 * calling the ->start() operation. The driver will need to reset all 3062 * calling the ->start() operation. The driver will need to reset all
3063 * internal state that it has prior to calling this function. 3063 * internal state that it has prior to calling this function.
3064 * 3064 *
3065 * @hw: the hardware to restart 3065 * @hw: the hardware to restart
3066 */ 3066 */
3067 void ieee80211_restart_hw(struct ieee80211_hw *hw); 3067 void ieee80211_restart_hw(struct ieee80211_hw *hw);
3068 3068
3069 /** ieee80211_napi_schedule - schedule NAPI poll 3069 /** ieee80211_napi_schedule - schedule NAPI poll
3070 * 3070 *
3071 * Use this function to schedule NAPI polling on a device. 3071 * Use this function to schedule NAPI polling on a device.
3072 * 3072 *
3073 * @hw: the hardware to start polling 3073 * @hw: the hardware to start polling
3074 */ 3074 */
3075 void ieee80211_napi_schedule(struct ieee80211_hw *hw); 3075 void ieee80211_napi_schedule(struct ieee80211_hw *hw);
3076 3076
3077 /** ieee80211_napi_complete - complete NAPI polling 3077 /** ieee80211_napi_complete - complete NAPI polling
3078 * 3078 *
3079 * Use this function to finish NAPI polling on a device. 3079 * Use this function to finish NAPI polling on a device.
3080 * 3080 *
3081 * @hw: the hardware to stop polling 3081 * @hw: the hardware to stop polling
3082 */ 3082 */
3083 void ieee80211_napi_complete(struct ieee80211_hw *hw); 3083 void ieee80211_napi_complete(struct ieee80211_hw *hw);
3084 3084
3085 /** 3085 /**
3086 * ieee80211_rx - receive frame 3086 * ieee80211_rx - receive frame
3087 * 3087 *
3088 * Use this function to hand received frames to mac80211. The receive 3088 * Use this function to hand received frames to mac80211. The receive
3089 * buffer in @skb must start with an IEEE 802.11 header. In case of a 3089 * buffer in @skb must start with an IEEE 802.11 header. In case of a
3090 * paged @skb is used, the driver is recommended to put the ieee80211 3090 * paged @skb is used, the driver is recommended to put the ieee80211
3091 * header of the frame on the linear part of the @skb to avoid memory 3091 * header of the frame on the linear part of the @skb to avoid memory
3092 * allocation and/or memcpy by the stack. 3092 * allocation and/or memcpy by the stack.
3093 * 3093 *
3094 * This function may not be called in IRQ context. Calls to this function 3094 * This function may not be called in IRQ context. Calls to this function
3095 * for a single hardware must be synchronized against each other. Calls to 3095 * for a single hardware must be synchronized against each other. Calls to
3096 * this function, ieee80211_rx_ni() and ieee80211_rx_irqsafe() may not be 3096 * this function, ieee80211_rx_ni() and ieee80211_rx_irqsafe() may not be
3097 * mixed for a single hardware. Must not run concurrently with 3097 * mixed for a single hardware. Must not run concurrently with
3098 * ieee80211_tx_status() or ieee80211_tx_status_ni(). 3098 * ieee80211_tx_status() or ieee80211_tx_status_ni().
3099 * 3099 *
3100 * In process context use instead ieee80211_rx_ni(). 3100 * In process context use instead ieee80211_rx_ni().
3101 * 3101 *
3102 * @hw: the hardware this frame came in on 3102 * @hw: the hardware this frame came in on
3103 * @skb: the buffer to receive, owned by mac80211 after this call 3103 * @skb: the buffer to receive, owned by mac80211 after this call
3104 */ 3104 */
3105 void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb); 3105 void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb);
3106 3106
3107 /** 3107 /**
3108 * ieee80211_rx_irqsafe - receive frame 3108 * ieee80211_rx_irqsafe - receive frame
3109 * 3109 *
3110 * Like ieee80211_rx() but can be called in IRQ context 3110 * Like ieee80211_rx() but can be called in IRQ context
3111 * (internally defers to a tasklet.) 3111 * (internally defers to a tasklet.)
3112 * 3112 *
3113 * Calls to this function, ieee80211_rx() or ieee80211_rx_ni() may not 3113 * Calls to this function, ieee80211_rx() or ieee80211_rx_ni() may not
3114 * be mixed for a single hardware.Must not run concurrently with 3114 * be mixed for a single hardware.Must not run concurrently with
3115 * ieee80211_tx_status() or ieee80211_tx_status_ni(). 3115 * ieee80211_tx_status() or ieee80211_tx_status_ni().
3116 * 3116 *
3117 * @hw: the hardware this frame came in on 3117 * @hw: the hardware this frame came in on
3118 * @skb: the buffer to receive, owned by mac80211 after this call 3118 * @skb: the buffer to receive, owned by mac80211 after this call
3119 */ 3119 */
3120 void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb); 3120 void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb);
3121 3121
3122 /** 3122 /**
3123 * ieee80211_rx_ni - receive frame (in process context) 3123 * ieee80211_rx_ni - receive frame (in process context)
3124 * 3124 *
3125 * Like ieee80211_rx() but can be called in process context 3125 * Like ieee80211_rx() but can be called in process context
3126 * (internally disables bottom halves). 3126 * (internally disables bottom halves).
3127 * 3127 *
3128 * Calls to this function, ieee80211_rx() and ieee80211_rx_irqsafe() may 3128 * Calls to this function, ieee80211_rx() and ieee80211_rx_irqsafe() may
3129 * not be mixed for a single hardware. Must not run concurrently with 3129 * not be mixed for a single hardware. Must not run concurrently with
3130 * ieee80211_tx_status() or ieee80211_tx_status_ni(). 3130 * ieee80211_tx_status() or ieee80211_tx_status_ni().
3131 * 3131 *
3132 * @hw: the hardware this frame came in on 3132 * @hw: the hardware this frame came in on
3133 * @skb: the buffer to receive, owned by mac80211 after this call 3133 * @skb: the buffer to receive, owned by mac80211 after this call
3134 */ 3134 */
3135 static inline void ieee80211_rx_ni(struct ieee80211_hw *hw, 3135 static inline void ieee80211_rx_ni(struct ieee80211_hw *hw,
3136 struct sk_buff *skb) 3136 struct sk_buff *skb)
3137 { 3137 {
3138 local_bh_disable(); 3138 local_bh_disable();
3139 ieee80211_rx(hw, skb); 3139 ieee80211_rx(hw, skb);
3140 local_bh_enable(); 3140 local_bh_enable();
3141 } 3141 }
3142 3142
3143 /** 3143 /**
3144 * ieee80211_sta_ps_transition - PS transition for connected sta 3144 * ieee80211_sta_ps_transition - PS transition for connected sta
3145 * 3145 *
3146 * When operating in AP mode with the %IEEE80211_HW_AP_LINK_PS 3146 * When operating in AP mode with the %IEEE80211_HW_AP_LINK_PS
3147 * flag set, use this function to inform mac80211 about a connected station 3147 * flag set, use this function to inform mac80211 about a connected station
3148 * entering/leaving PS mode. 3148 * entering/leaving PS mode.
3149 * 3149 *
3150 * This function may not be called in IRQ context or with softirqs enabled. 3150 * This function may not be called in IRQ context or with softirqs enabled.
3151 * 3151 *
3152 * Calls to this function for a single hardware must be synchronized against 3152 * Calls to this function for a single hardware must be synchronized against
3153 * each other. 3153 * each other.
3154 * 3154 *
3155 * @sta: currently connected sta 3155 * @sta: currently connected sta
3156 * @start: start or stop PS 3156 * @start: start or stop PS
3157 * 3157 *
3158 * Return: 0 on success. -EINVAL when the requested PS mode is already set. 3158 * Return: 0 on success. -EINVAL when the requested PS mode is already set.
3159 */ 3159 */
3160 int ieee80211_sta_ps_transition(struct ieee80211_sta *sta, bool start); 3160 int ieee80211_sta_ps_transition(struct ieee80211_sta *sta, bool start);
3161 3161
3162 /** 3162 /**
3163 * ieee80211_sta_ps_transition_ni - PS transition for connected sta 3163 * ieee80211_sta_ps_transition_ni - PS transition for connected sta
3164 * (in process context) 3164 * (in process context)
3165 * 3165 *
3166 * Like ieee80211_sta_ps_transition() but can be called in process context 3166 * Like ieee80211_sta_ps_transition() but can be called in process context
3167 * (internally disables bottom halves). Concurrent call restriction still 3167 * (internally disables bottom halves). Concurrent call restriction still
3168 * applies. 3168 * applies.
3169 * 3169 *
3170 * @sta: currently connected sta 3170 * @sta: currently connected sta
3171 * @start: start or stop PS 3171 * @start: start or stop PS
3172 * 3172 *
3173 * Return: Like ieee80211_sta_ps_transition(). 3173 * Return: Like ieee80211_sta_ps_transition().
3174 */ 3174 */
3175 static inline int ieee80211_sta_ps_transition_ni(struct ieee80211_sta *sta, 3175 static inline int ieee80211_sta_ps_transition_ni(struct ieee80211_sta *sta,
3176 bool start) 3176 bool start)
3177 { 3177 {
3178 int ret; 3178 int ret;
3179 3179
3180 local_bh_disable(); 3180 local_bh_disable();
3181 ret = ieee80211_sta_ps_transition(sta, start); 3181 ret = ieee80211_sta_ps_transition(sta, start);
3182 local_bh_enable(); 3182 local_bh_enable();
3183 3183
3184 return ret; 3184 return ret;
3185 } 3185 }
3186 3186
3187 /* 3187 /*
3188 * The TX headroom reserved by mac80211 for its own tx_status functions. 3188 * The TX headroom reserved by mac80211 for its own tx_status functions.
3189 * This is enough for the radiotap header. 3189 * This is enough for the radiotap header.
3190 */ 3190 */
3191 #define IEEE80211_TX_STATUS_HEADROOM 14 3191 #define IEEE80211_TX_STATUS_HEADROOM 14
3192 3192
3193 /** 3193 /**
3194 * ieee80211_sta_set_buffered - inform mac80211 about driver-buffered frames 3194 * ieee80211_sta_set_buffered - inform mac80211 about driver-buffered frames
3195 * @sta: &struct ieee80211_sta pointer for the sleeping station 3195 * @sta: &struct ieee80211_sta pointer for the sleeping station
3196 * @tid: the TID that has buffered frames 3196 * @tid: the TID that has buffered frames
3197 * @buffered: indicates whether or not frames are buffered for this TID 3197 * @buffered: indicates whether or not frames are buffered for this TID
3198 * 3198 *
3199 * If a driver buffers frames for a powersave station instead of passing 3199 * If a driver buffers frames for a powersave station instead of passing
3200 * them back to mac80211 for retransmission, the station may still need 3200 * them back to mac80211 for retransmission, the station may still need
3201 * to be told that there are buffered frames via the TIM bit. 3201 * to be told that there are buffered frames via the TIM bit.
3202 * 3202 *
3203 * This function informs mac80211 whether or not there are frames that are 3203 * This function informs mac80211 whether or not there are frames that are
3204 * buffered in the driver for a given TID; mac80211 can then use this data 3204 * buffered in the driver for a given TID; mac80211 can then use this data
3205 * to set the TIM bit (NOTE: This may call back into the driver's set_tim 3205 * to set the TIM bit (NOTE: This may call back into the driver's set_tim
3206 * call! Beware of the locking!) 3206 * call! Beware of the locking!)
3207 * 3207 *
3208 * If all frames are released to the station (due to PS-poll or uAPSD) 3208 * If all frames are released to the station (due to PS-poll or uAPSD)
3209 * then the driver needs to inform mac80211 that there no longer are 3209 * then the driver needs to inform mac80211 that there no longer are
3210 * frames buffered. However, when the station wakes up mac80211 assumes 3210 * frames buffered. However, when the station wakes up mac80211 assumes
3211 * that all buffered frames will be transmitted and clears this data, 3211 * that all buffered frames will be transmitted and clears this data,
3212 * drivers need to make sure they inform mac80211 about all buffered 3212 * drivers need to make sure they inform mac80211 about all buffered
3213 * frames on the sleep transition (sta_notify() with %STA_NOTIFY_SLEEP). 3213 * frames on the sleep transition (sta_notify() with %STA_NOTIFY_SLEEP).
3214 * 3214 *
3215 * Note that technically mac80211 only needs to know this per AC, not per 3215 * Note that technically mac80211 only needs to know this per AC, not per
3216 * TID, but since driver buffering will inevitably happen per TID (since 3216 * TID, but since driver buffering will inevitably happen per TID (since
3217 * it is related to aggregation) it is easier to make mac80211 map the 3217 * it is related to aggregation) it is easier to make mac80211 map the
3218 * TID to the AC as required instead of keeping track in all drivers that 3218 * TID to the AC as required instead of keeping track in all drivers that
3219 * use this API. 3219 * use this API.
3220 */ 3220 */
3221 void ieee80211_sta_set_buffered(struct ieee80211_sta *sta, 3221 void ieee80211_sta_set_buffered(struct ieee80211_sta *sta,
3222 u8 tid, bool buffered); 3222 u8 tid, bool buffered);
3223 3223
3224 /** 3224 /**
3225 * ieee80211_get_tx_rates - get the selected transmit rates for a packet 3225 * ieee80211_get_tx_rates - get the selected transmit rates for a packet
3226 * 3226 *
3227 * Call this function in a driver with per-packet rate selection support 3227 * Call this function in a driver with per-packet rate selection support
3228 * to combine the rate info in the packet tx info with the most recent 3228 * to combine the rate info in the packet tx info with the most recent
3229 * rate selection table for the station entry. 3229 * rate selection table for the station entry.
3230 * 3230 *
3231 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3231 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3232 * @sta: the receiver station to which this packet is sent. 3232 * @sta: the receiver station to which this packet is sent.
3233 * @skb: the frame to be transmitted. 3233 * @skb: the frame to be transmitted.
3234 * @dest: buffer for extracted rate/retry information 3234 * @dest: buffer for extracted rate/retry information
3235 * @max_rates: maximum number of rates to fetch 3235 * @max_rates: maximum number of rates to fetch
3236 */ 3236 */
3237 void ieee80211_get_tx_rates(struct ieee80211_vif *vif, 3237 void ieee80211_get_tx_rates(struct ieee80211_vif *vif,
3238 struct ieee80211_sta *sta, 3238 struct ieee80211_sta *sta,
3239 struct sk_buff *skb, 3239 struct sk_buff *skb,
3240 struct ieee80211_tx_rate *dest, 3240 struct ieee80211_tx_rate *dest,
3241 int max_rates); 3241 int max_rates);
3242 3242
3243 /** 3243 /**
3244 * ieee80211_tx_status - transmit status callback 3244 * ieee80211_tx_status - transmit status callback
3245 * 3245 *
3246 * Call this function for all transmitted frames after they have been 3246 * Call this function for all transmitted frames after they have been
3247 * transmitted. It is permissible to not call this function for 3247 * transmitted. It is permissible to not call this function for
3248 * multicast frames but this can affect statistics. 3248 * multicast frames but this can affect statistics.
3249 * 3249 *
3250 * This function may not be called in IRQ context. Calls to this function 3250 * This function may not be called in IRQ context. Calls to this function
3251 * for a single hardware must be synchronized against each other. Calls 3251 * for a single hardware must be synchronized against each other. Calls
3252 * to this function, ieee80211_tx_status_ni() and ieee80211_tx_status_irqsafe() 3252 * to this function, ieee80211_tx_status_ni() and ieee80211_tx_status_irqsafe()
3253 * may not be mixed for a single hardware. Must not run concurrently with 3253 * may not be mixed for a single hardware. Must not run concurrently with
3254 * ieee80211_rx() or ieee80211_rx_ni(). 3254 * ieee80211_rx() or ieee80211_rx_ni().
3255 * 3255 *
3256 * @hw: the hardware the frame was transmitted by 3256 * @hw: the hardware the frame was transmitted by
3257 * @skb: the frame that was transmitted, owned by mac80211 after this call 3257 * @skb: the frame that was transmitted, owned by mac80211 after this call
3258 */ 3258 */
3259 void ieee80211_tx_status(struct ieee80211_hw *hw, 3259 void ieee80211_tx_status(struct ieee80211_hw *hw,
3260 struct sk_buff *skb); 3260 struct sk_buff *skb);
3261 3261
3262 /** 3262 /**
3263 * ieee80211_tx_status_ni - transmit status callback (in process context) 3263 * ieee80211_tx_status_ni - transmit status callback (in process context)
3264 * 3264 *
3265 * Like ieee80211_tx_status() but can be called in process context. 3265 * Like ieee80211_tx_status() but can be called in process context.
3266 * 3266 *
3267 * Calls to this function, ieee80211_tx_status() and 3267 * Calls to this function, ieee80211_tx_status() and
3268 * ieee80211_tx_status_irqsafe() may not be mixed 3268 * ieee80211_tx_status_irqsafe() may not be mixed
3269 * for a single hardware. 3269 * for a single hardware.
3270 * 3270 *
3271 * @hw: the hardware the frame was transmitted by 3271 * @hw: the hardware the frame was transmitted by
3272 * @skb: the frame that was transmitted, owned by mac80211 after this call 3272 * @skb: the frame that was transmitted, owned by mac80211 after this call
3273 */ 3273 */
3274 static inline void ieee80211_tx_status_ni(struct ieee80211_hw *hw, 3274 static inline void ieee80211_tx_status_ni(struct ieee80211_hw *hw,
3275 struct sk_buff *skb) 3275 struct sk_buff *skb)
3276 { 3276 {
3277 local_bh_disable(); 3277 local_bh_disable();
3278 ieee80211_tx_status(hw, skb); 3278 ieee80211_tx_status(hw, skb);
3279 local_bh_enable(); 3279 local_bh_enable();
3280 } 3280 }
3281 3281
3282 /** 3282 /**
3283 * ieee80211_tx_status_irqsafe - IRQ-safe transmit status callback 3283 * ieee80211_tx_status_irqsafe - IRQ-safe transmit status callback
3284 * 3284 *
3285 * Like ieee80211_tx_status() but can be called in IRQ context 3285 * Like ieee80211_tx_status() but can be called in IRQ context
3286 * (internally defers to a tasklet.) 3286 * (internally defers to a tasklet.)
3287 * 3287 *
3288 * Calls to this function, ieee80211_tx_status() and 3288 * Calls to this function, ieee80211_tx_status() and
3289 * ieee80211_tx_status_ni() may not be mixed for a single hardware. 3289 * ieee80211_tx_status_ni() may not be mixed for a single hardware.
3290 * 3290 *
3291 * @hw: the hardware the frame was transmitted by 3291 * @hw: the hardware the frame was transmitted by
3292 * @skb: the frame that was transmitted, owned by mac80211 after this call 3292 * @skb: the frame that was transmitted, owned by mac80211 after this call
3293 */ 3293 */
3294 void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw, 3294 void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw,
3295 struct sk_buff *skb); 3295 struct sk_buff *skb);
3296 3296
3297 /** 3297 /**
3298 * ieee80211_report_low_ack - report non-responding station 3298 * ieee80211_report_low_ack - report non-responding station
3299 * 3299 *
3300 * When operating in AP-mode, call this function to report a non-responding 3300 * When operating in AP-mode, call this function to report a non-responding
3301 * connected STA. 3301 * connected STA.
3302 * 3302 *
3303 * @sta: the non-responding connected sta 3303 * @sta: the non-responding connected sta
3304 * @num_packets: number of packets sent to @sta without a response 3304 * @num_packets: number of packets sent to @sta without a response
3305 */ 3305 */
3306 void ieee80211_report_low_ack(struct ieee80211_sta *sta, u32 num_packets); 3306 void ieee80211_report_low_ack(struct ieee80211_sta *sta, u32 num_packets);
3307 3307
3308 /** 3308 /**
3309 * ieee80211_beacon_get_tim - beacon generation function 3309 * ieee80211_beacon_get_tim - beacon generation function
3310 * @hw: pointer obtained from ieee80211_alloc_hw(). 3310 * @hw: pointer obtained from ieee80211_alloc_hw().
3311 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3311 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3312 * @tim_offset: pointer to variable that will receive the TIM IE offset. 3312 * @tim_offset: pointer to variable that will receive the TIM IE offset.
3313 * Set to 0 if invalid (in non-AP modes). 3313 * Set to 0 if invalid (in non-AP modes).
3314 * @tim_length: pointer to variable that will receive the TIM IE length, 3314 * @tim_length: pointer to variable that will receive the TIM IE length,
3315 * (including the ID and length bytes!). 3315 * (including the ID and length bytes!).
3316 * Set to 0 if invalid (in non-AP modes). 3316 * Set to 0 if invalid (in non-AP modes).
3317 * 3317 *
3318 * If the driver implements beaconing modes, it must use this function to 3318 * If the driver implements beaconing modes, it must use this function to
3319 * obtain the beacon frame/template. 3319 * obtain the beacon frame/template.
3320 * 3320 *
3321 * If the beacon frames are generated by the host system (i.e., not in 3321 * If the beacon frames are generated by the host system (i.e., not in
3322 * hardware/firmware), the driver uses this function to get each beacon 3322 * hardware/firmware), the driver uses this function to get each beacon
3323 * frame from mac80211 -- it is responsible for calling this function 3323 * frame from mac80211 -- it is responsible for calling this function
3324 * before the beacon is needed (e.g. based on hardware interrupt). 3324 * before the beacon is needed (e.g. based on hardware interrupt).
3325 * 3325 *
3326 * If the beacon frames are generated by the device, then the driver 3326 * If the beacon frames are generated by the device, then the driver
3327 * must use the returned beacon as the template and change the TIM IE 3327 * must use the returned beacon as the template and change the TIM IE
3328 * according to the current DTIM parameters/TIM bitmap. 3328 * according to the current DTIM parameters/TIM bitmap.
3329 * 3329 *
3330 * The driver is responsible for freeing the returned skb. 3330 * The driver is responsible for freeing the returned skb.
3331 * 3331 *
3332 * Return: The beacon template. %NULL on error. 3332 * Return: The beacon template. %NULL on error.
3333 */ 3333 */
3334 struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw, 3334 struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
3335 struct ieee80211_vif *vif, 3335 struct ieee80211_vif *vif,
3336 u16 *tim_offset, u16 *tim_length); 3336 u16 *tim_offset, u16 *tim_length);
3337 3337
3338 /** 3338 /**
3339 * ieee80211_beacon_get - beacon generation function 3339 * ieee80211_beacon_get - beacon generation function
3340 * @hw: pointer obtained from ieee80211_alloc_hw(). 3340 * @hw: pointer obtained from ieee80211_alloc_hw().
3341 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3341 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3342 * 3342 *
3343 * See ieee80211_beacon_get_tim(). 3343 * See ieee80211_beacon_get_tim().
3344 * 3344 *
3345 * Return: See ieee80211_beacon_get_tim(). 3345 * Return: See ieee80211_beacon_get_tim().
3346 */ 3346 */
3347 static inline struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw, 3347 static inline struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
3348 struct ieee80211_vif *vif) 3348 struct ieee80211_vif *vif)
3349 { 3349 {
3350 return ieee80211_beacon_get_tim(hw, vif, NULL, NULL); 3350 return ieee80211_beacon_get_tim(hw, vif, NULL, NULL);
3351 } 3351 }
3352 3352
3353 /** 3353 /**
3354 * ieee80211_csa_finish - notify mac80211 about channel switch 3354 * ieee80211_csa_finish - notify mac80211 about channel switch
3355 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3355 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3356 * 3356 *
3357 * After a channel switch announcement was scheduled and the counter in this 3357 * After a channel switch announcement was scheduled and the counter in this
3358 * announcement hit zero, this function must be called by the driver to 3358 * announcement hit zero, this function must be called by the driver to
3359 * notify mac80211 that the channel can be changed. 3359 * notify mac80211 that the channel can be changed.
3360 */ 3360 */
3361 void ieee80211_csa_finish(struct ieee80211_vif *vif); 3361 void ieee80211_csa_finish(struct ieee80211_vif *vif);
3362 3362
3363 /** 3363 /**
3364 * ieee80211_csa_is_complete - find out if counters reached zero 3364 * ieee80211_csa_is_complete - find out if counters reached zero
3365 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3365 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3366 * 3366 *
3367 * This function returns whether the channel switch counters reached zero. 3367 * This function returns whether the channel switch counters reached zero.
3368 */ 3368 */
3369 bool ieee80211_csa_is_complete(struct ieee80211_vif *vif); 3369 bool ieee80211_csa_is_complete(struct ieee80211_vif *vif);
3370 3370
3371 3371
3372 /** 3372 /**
3373 * ieee80211_proberesp_get - retrieve a Probe Response template 3373 * ieee80211_proberesp_get - retrieve a Probe Response template
3374 * @hw: pointer obtained from ieee80211_alloc_hw(). 3374 * @hw: pointer obtained from ieee80211_alloc_hw().
3375 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3375 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3376 * 3376 *
3377 * Creates a Probe Response template which can, for example, be uploaded to 3377 * Creates a Probe Response template which can, for example, be uploaded to
3378 * hardware. The destination address should be set by the caller. 3378 * hardware. The destination address should be set by the caller.
3379 * 3379 *
3380 * Can only be called in AP mode. 3380 * Can only be called in AP mode.
3381 * 3381 *
3382 * Return: The Probe Response template. %NULL on error. 3382 * Return: The Probe Response template. %NULL on error.
3383 */ 3383 */
3384 struct sk_buff *ieee80211_proberesp_get(struct ieee80211_hw *hw, 3384 struct sk_buff *ieee80211_proberesp_get(struct ieee80211_hw *hw,
3385 struct ieee80211_vif *vif); 3385 struct ieee80211_vif *vif);
3386 3386
3387 /** 3387 /**
3388 * ieee80211_pspoll_get - retrieve a PS Poll template 3388 * ieee80211_pspoll_get - retrieve a PS Poll template
3389 * @hw: pointer obtained from ieee80211_alloc_hw(). 3389 * @hw: pointer obtained from ieee80211_alloc_hw().
3390 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3390 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3391 * 3391 *
3392 * Creates a PS Poll a template which can, for example, uploaded to 3392 * Creates a PS Poll a template which can, for example, uploaded to
3393 * hardware. The template must be updated after association so that correct 3393 * hardware. The template must be updated after association so that correct
3394 * AID, BSSID and MAC address is used. 3394 * AID, BSSID and MAC address is used.
3395 * 3395 *
3396 * Note: Caller (or hardware) is responsible for setting the 3396 * Note: Caller (or hardware) is responsible for setting the
3397 * &IEEE80211_FCTL_PM bit. 3397 * &IEEE80211_FCTL_PM bit.
3398 * 3398 *
3399 * Return: The PS Poll template. %NULL on error. 3399 * Return: The PS Poll template. %NULL on error.
3400 */ 3400 */
3401 struct sk_buff *ieee80211_pspoll_get(struct ieee80211_hw *hw, 3401 struct sk_buff *ieee80211_pspoll_get(struct ieee80211_hw *hw,
3402 struct ieee80211_vif *vif); 3402 struct ieee80211_vif *vif);
3403 3403
3404 /** 3404 /**
3405 * ieee80211_nullfunc_get - retrieve a nullfunc template 3405 * ieee80211_nullfunc_get - retrieve a nullfunc template
3406 * @hw: pointer obtained from ieee80211_alloc_hw(). 3406 * @hw: pointer obtained from ieee80211_alloc_hw().
3407 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3407 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3408 * 3408 *
3409 * Creates a Nullfunc template which can, for example, uploaded to 3409 * Creates a Nullfunc template which can, for example, uploaded to
3410 * hardware. The template must be updated after association so that correct 3410 * hardware. The template must be updated after association so that correct
3411 * BSSID and address is used. 3411 * BSSID and address is used.
3412 * 3412 *
3413 * Note: Caller (or hardware) is responsible for setting the 3413 * Note: Caller (or hardware) is responsible for setting the
3414 * &IEEE80211_FCTL_PM bit as well as Duration and Sequence Control fields. 3414 * &IEEE80211_FCTL_PM bit as well as Duration and Sequence Control fields.
3415 * 3415 *
3416 * Return: The nullfunc template. %NULL on error. 3416 * Return: The nullfunc template. %NULL on error.
3417 */ 3417 */
3418 struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw, 3418 struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw,
3419 struct ieee80211_vif *vif); 3419 struct ieee80211_vif *vif);
3420 3420
3421 /** 3421 /**
3422 * ieee80211_probereq_get - retrieve a Probe Request template 3422 * ieee80211_probereq_get - retrieve a Probe Request template
3423 * @hw: pointer obtained from ieee80211_alloc_hw(). 3423 * @hw: pointer obtained from ieee80211_alloc_hw().
3424 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3424 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3425 * @ssid: SSID buffer 3425 * @ssid: SSID buffer
3426 * @ssid_len: length of SSID 3426 * @ssid_len: length of SSID
3427 * @tailroom: tailroom to reserve at end of SKB for IEs 3427 * @tailroom: tailroom to reserve at end of SKB for IEs
3428 * 3428 *
3429 * Creates a Probe Request template which can, for example, be uploaded to 3429 * Creates a Probe Request template which can, for example, be uploaded to
3430 * hardware. 3430 * hardware.
3431 * 3431 *
3432 * Return: The Probe Request template. %NULL on error. 3432 * Return: The Probe Request template. %NULL on error.
3433 */ 3433 */
3434 struct sk_buff *ieee80211_probereq_get(struct ieee80211_hw *hw, 3434 struct sk_buff *ieee80211_probereq_get(struct ieee80211_hw *hw,
3435 struct ieee80211_vif *vif, 3435 struct ieee80211_vif *vif,
3436 const u8 *ssid, size_t ssid_len, 3436 const u8 *ssid, size_t ssid_len,
3437 size_t tailroom); 3437 size_t tailroom);
3438 3438
3439 /** 3439 /**
3440 * ieee80211_rts_get - RTS frame generation function 3440 * ieee80211_rts_get - RTS frame generation function
3441 * @hw: pointer obtained from ieee80211_alloc_hw(). 3441 * @hw: pointer obtained from ieee80211_alloc_hw().
3442 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3442 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3443 * @frame: pointer to the frame that is going to be protected by the RTS. 3443 * @frame: pointer to the frame that is going to be protected by the RTS.
3444 * @frame_len: the frame length (in octets). 3444 * @frame_len: the frame length (in octets).
3445 * @frame_txctl: &struct ieee80211_tx_info of the frame. 3445 * @frame_txctl: &struct ieee80211_tx_info of the frame.
3446 * @rts: The buffer where to store the RTS frame. 3446 * @rts: The buffer where to store the RTS frame.
3447 * 3447 *
3448 * If the RTS frames are generated by the host system (i.e., not in 3448 * If the RTS frames are generated by the host system (i.e., not in
3449 * hardware/firmware), the low-level driver uses this function to receive 3449 * hardware/firmware), the low-level driver uses this function to receive
3450 * the next RTS frame from the 802.11 code. The low-level is responsible 3450 * the next RTS frame from the 802.11 code. The low-level is responsible
3451 * for calling this function before and RTS frame is needed. 3451 * for calling this function before and RTS frame is needed.
3452 */ 3452 */
3453 void ieee80211_rts_get(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 3453 void ieee80211_rts_get(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
3454 const void *frame, size_t frame_len, 3454 const void *frame, size_t frame_len,
3455 const struct ieee80211_tx_info *frame_txctl, 3455 const struct ieee80211_tx_info *frame_txctl,
3456 struct ieee80211_rts *rts); 3456 struct ieee80211_rts *rts);
3457 3457
3458 /** 3458 /**
3459 * ieee80211_rts_duration - Get the duration field for an RTS frame 3459 * ieee80211_rts_duration - Get the duration field for an RTS frame
3460 * @hw: pointer obtained from ieee80211_alloc_hw(). 3460 * @hw: pointer obtained from ieee80211_alloc_hw().
3461 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3461 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3462 * @frame_len: the length of the frame that is going to be protected by the RTS. 3462 * @frame_len: the length of the frame that is going to be protected by the RTS.
3463 * @frame_txctl: &struct ieee80211_tx_info of the frame. 3463 * @frame_txctl: &struct ieee80211_tx_info of the frame.
3464 * 3464 *
3465 * If the RTS is generated in firmware, but the host system must provide 3465 * If the RTS is generated in firmware, but the host system must provide
3466 * the duration field, the low-level driver uses this function to receive 3466 * the duration field, the low-level driver uses this function to receive
3467 * the duration field value in little-endian byteorder. 3467 * the duration field value in little-endian byteorder.
3468 * 3468 *
3469 * Return: The duration. 3469 * Return: The duration.
3470 */ 3470 */
3471 __le16 ieee80211_rts_duration(struct ieee80211_hw *hw, 3471 __le16 ieee80211_rts_duration(struct ieee80211_hw *hw,
3472 struct ieee80211_vif *vif, size_t frame_len, 3472 struct ieee80211_vif *vif, size_t frame_len,
3473 const struct ieee80211_tx_info *frame_txctl); 3473 const struct ieee80211_tx_info *frame_txctl);
3474 3474
3475 /** 3475 /**
3476 * ieee80211_ctstoself_get - CTS-to-self frame generation function 3476 * ieee80211_ctstoself_get - CTS-to-self frame generation function
3477 * @hw: pointer obtained from ieee80211_alloc_hw(). 3477 * @hw: pointer obtained from ieee80211_alloc_hw().
3478 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3478 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3479 * @frame: pointer to the frame that is going to be protected by the CTS-to-self. 3479 * @frame: pointer to the frame that is going to be protected by the CTS-to-self.
3480 * @frame_len: the frame length (in octets). 3480 * @frame_len: the frame length (in octets).
3481 * @frame_txctl: &struct ieee80211_tx_info of the frame. 3481 * @frame_txctl: &struct ieee80211_tx_info of the frame.
3482 * @cts: The buffer where to store the CTS-to-self frame. 3482 * @cts: The buffer where to store the CTS-to-self frame.
3483 * 3483 *
3484 * If the CTS-to-self frames are generated by the host system (i.e., not in 3484 * If the CTS-to-self frames are generated by the host system (i.e., not in
3485 * hardware/firmware), the low-level driver uses this function to receive 3485 * hardware/firmware), the low-level driver uses this function to receive
3486 * the next CTS-to-self frame from the 802.11 code. The low-level is responsible 3486 * the next CTS-to-self frame from the 802.11 code. The low-level is responsible
3487 * for calling this function before and CTS-to-self frame is needed. 3487 * for calling this function before and CTS-to-self frame is needed.
3488 */ 3488 */
3489 void ieee80211_ctstoself_get(struct ieee80211_hw *hw, 3489 void ieee80211_ctstoself_get(struct ieee80211_hw *hw,
3490 struct ieee80211_vif *vif, 3490 struct ieee80211_vif *vif,
3491 const void *frame, size_t frame_len, 3491 const void *frame, size_t frame_len,
3492 const struct ieee80211_tx_info *frame_txctl, 3492 const struct ieee80211_tx_info *frame_txctl,
3493 struct ieee80211_cts *cts); 3493 struct ieee80211_cts *cts);
3494 3494
3495 /** 3495 /**
3496 * ieee80211_ctstoself_duration - Get the duration field for a CTS-to-self frame 3496 * ieee80211_ctstoself_duration - Get the duration field for a CTS-to-self frame
3497 * @hw: pointer obtained from ieee80211_alloc_hw(). 3497 * @hw: pointer obtained from ieee80211_alloc_hw().
3498 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3498 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3499 * @frame_len: the length of the frame that is going to be protected by the CTS-to-self. 3499 * @frame_len: the length of the frame that is going to be protected by the CTS-to-self.
3500 * @frame_txctl: &struct ieee80211_tx_info of the frame. 3500 * @frame_txctl: &struct ieee80211_tx_info of the frame.
3501 * 3501 *
3502 * If the CTS-to-self is generated in firmware, but the host system must provide 3502 * If the CTS-to-self is generated in firmware, but the host system must provide
3503 * the duration field, the low-level driver uses this function to receive 3503 * the duration field, the low-level driver uses this function to receive
3504 * the duration field value in little-endian byteorder. 3504 * the duration field value in little-endian byteorder.
3505 * 3505 *
3506 * Return: The duration. 3506 * Return: The duration.
3507 */ 3507 */
3508 __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw, 3508 __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
3509 struct ieee80211_vif *vif, 3509 struct ieee80211_vif *vif,
3510 size_t frame_len, 3510 size_t frame_len,
3511 const struct ieee80211_tx_info *frame_txctl); 3511 const struct ieee80211_tx_info *frame_txctl);
3512 3512
3513 /** 3513 /**
3514 * ieee80211_generic_frame_duration - Calculate the duration field for a frame 3514 * ieee80211_generic_frame_duration - Calculate the duration field for a frame
3515 * @hw: pointer obtained from ieee80211_alloc_hw(). 3515 * @hw: pointer obtained from ieee80211_alloc_hw().
3516 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3516 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3517 * @band: the band to calculate the frame duration on 3517 * @band: the band to calculate the frame duration on
3518 * @frame_len: the length of the frame. 3518 * @frame_len: the length of the frame.
3519 * @rate: the rate at which the frame is going to be transmitted. 3519 * @rate: the rate at which the frame is going to be transmitted.
3520 * 3520 *
3521 * Calculate the duration field of some generic frame, given its 3521 * Calculate the duration field of some generic frame, given its
3522 * length and transmission rate (in 100kbps). 3522 * length and transmission rate (in 100kbps).
3523 * 3523 *
3524 * Return: The duration. 3524 * Return: The duration.
3525 */ 3525 */
3526 __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw, 3526 __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw,
3527 struct ieee80211_vif *vif, 3527 struct ieee80211_vif *vif,
3528 enum ieee80211_band band, 3528 enum ieee80211_band band,
3529 size_t frame_len, 3529 size_t frame_len,
3530 struct ieee80211_rate *rate); 3530 struct ieee80211_rate *rate);
3531 3531
3532 /** 3532 /**
3533 * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames 3533 * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames
3534 * @hw: pointer as obtained from ieee80211_alloc_hw(). 3534 * @hw: pointer as obtained from ieee80211_alloc_hw().
3535 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3535 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3536 * 3536 *
3537 * Function for accessing buffered broadcast and multicast frames. If 3537 * Function for accessing buffered broadcast and multicast frames. If
3538 * hardware/firmware does not implement buffering of broadcast/multicast 3538 * hardware/firmware does not implement buffering of broadcast/multicast
3539 * frames when power saving is used, 802.11 code buffers them in the host 3539 * frames when power saving is used, 802.11 code buffers them in the host
3540 * memory. The low-level driver uses this function to fetch next buffered 3540 * memory. The low-level driver uses this function to fetch next buffered
3541 * frame. In most cases, this is used when generating beacon frame. 3541 * frame. In most cases, this is used when generating beacon frame.
3542 * 3542 *
3543 * Return: A pointer to the next buffered skb or NULL if no more buffered 3543 * Return: A pointer to the next buffered skb or NULL if no more buffered
3544 * frames are available. 3544 * frames are available.
3545 * 3545 *
3546 * Note: buffered frames are returned only after DTIM beacon frame was 3546 * Note: buffered frames are returned only after DTIM beacon frame was
3547 * generated with ieee80211_beacon_get() and the low-level driver must thus 3547 * generated with ieee80211_beacon_get() and the low-level driver must thus
3548 * call ieee80211_beacon_get() first. ieee80211_get_buffered_bc() returns 3548 * call ieee80211_beacon_get() first. ieee80211_get_buffered_bc() returns
3549 * NULL if the previous generated beacon was not DTIM, so the low-level driver 3549 * NULL if the previous generated beacon was not DTIM, so the low-level driver
3550 * does not need to check for DTIM beacons separately and should be able to 3550 * does not need to check for DTIM beacons separately and should be able to
3551 * use common code for all beacons. 3551 * use common code for all beacons.
3552 */ 3552 */
3553 struct sk_buff * 3553 struct sk_buff *
3554 ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif); 3554 ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
3555 3555
3556 /** 3556 /**
3557 * ieee80211_get_tkip_p1k_iv - get a TKIP phase 1 key for IV32 3557 * ieee80211_get_tkip_p1k_iv - get a TKIP phase 1 key for IV32
3558 * 3558 *
3559 * This function returns the TKIP phase 1 key for the given IV32. 3559 * This function returns the TKIP phase 1 key for the given IV32.
3560 * 3560 *
3561 * @keyconf: the parameter passed with the set key 3561 * @keyconf: the parameter passed with the set key
3562 * @iv32: IV32 to get the P1K for 3562 * @iv32: IV32 to get the P1K for
3563 * @p1k: a buffer to which the key will be written, as 5 u16 values 3563 * @p1k: a buffer to which the key will be written, as 5 u16 values
3564 */ 3564 */
3565 void ieee80211_get_tkip_p1k_iv(struct ieee80211_key_conf *keyconf, 3565 void ieee80211_get_tkip_p1k_iv(struct ieee80211_key_conf *keyconf,
3566 u32 iv32, u16 *p1k); 3566 u32 iv32, u16 *p1k);
3567 3567
3568 /** 3568 /**
3569 * ieee80211_get_tkip_p1k - get a TKIP phase 1 key 3569 * ieee80211_get_tkip_p1k - get a TKIP phase 1 key
3570 * 3570 *
3571 * This function returns the TKIP phase 1 key for the IV32 taken 3571 * This function returns the TKIP phase 1 key for the IV32 taken
3572 * from the given packet. 3572 * from the given packet.
3573 * 3573 *
3574 * @keyconf: the parameter passed with the set key 3574 * @keyconf: the parameter passed with the set key
3575 * @skb: the packet to take the IV32 value from that will be encrypted 3575 * @skb: the packet to take the IV32 value from that will be encrypted
3576 * with this P1K 3576 * with this P1K
3577 * @p1k: a buffer to which the key will be written, as 5 u16 values 3577 * @p1k: a buffer to which the key will be written, as 5 u16 values
3578 */ 3578 */
3579 static inline void ieee80211_get_tkip_p1k(struct ieee80211_key_conf *keyconf, 3579 static inline void ieee80211_get_tkip_p1k(struct ieee80211_key_conf *keyconf,
3580 struct sk_buff *skb, u16 *p1k) 3580 struct sk_buff *skb, u16 *p1k)
3581 { 3581 {
3582 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; 3582 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
3583 const u8 *data = (u8 *)hdr + ieee80211_hdrlen(hdr->frame_control); 3583 const u8 *data = (u8 *)hdr + ieee80211_hdrlen(hdr->frame_control);
3584 u32 iv32 = get_unaligned_le32(&data[4]); 3584 u32 iv32 = get_unaligned_le32(&data[4]);
3585 3585
3586 ieee80211_get_tkip_p1k_iv(keyconf, iv32, p1k); 3586 ieee80211_get_tkip_p1k_iv(keyconf, iv32, p1k);
3587 } 3587 }
3588 3588
3589 /** 3589 /**
3590 * ieee80211_get_tkip_rx_p1k - get a TKIP phase 1 key for RX 3590 * ieee80211_get_tkip_rx_p1k - get a TKIP phase 1 key for RX
3591 * 3591 *
3592 * This function returns the TKIP phase 1 key for the given IV32 3592 * This function returns the TKIP phase 1 key for the given IV32
3593 * and transmitter address. 3593 * and transmitter address.
3594 * 3594 *
3595 * @keyconf: the parameter passed with the set key 3595 * @keyconf: the parameter passed with the set key
3596 * @ta: TA that will be used with the key 3596 * @ta: TA that will be used with the key
3597 * @iv32: IV32 to get the P1K for 3597 * @iv32: IV32 to get the P1K for
3598 * @p1k: a buffer to which the key will be written, as 5 u16 values 3598 * @p1k: a buffer to which the key will be written, as 5 u16 values
3599 */ 3599 */
3600 void ieee80211_get_tkip_rx_p1k(struct ieee80211_key_conf *keyconf, 3600 void ieee80211_get_tkip_rx_p1k(struct ieee80211_key_conf *keyconf,
3601 const u8 *ta, u32 iv32, u16 *p1k); 3601 const u8 *ta, u32 iv32, u16 *p1k);
3602 3602
3603 /** 3603 /**
3604 * ieee80211_get_tkip_p2k - get a TKIP phase 2 key 3604 * ieee80211_get_tkip_p2k - get a TKIP phase 2 key
3605 * 3605 *
3606 * This function computes the TKIP RC4 key for the IV values 3606 * This function computes the TKIP RC4 key for the IV values
3607 * in the packet. 3607 * in the packet.
3608 * 3608 *
3609 * @keyconf: the parameter passed with the set key 3609 * @keyconf: the parameter passed with the set key
3610 * @skb: the packet to take the IV32/IV16 values from that will be 3610 * @skb: the packet to take the IV32/IV16 values from that will be
3611 * encrypted with this key 3611 * encrypted with this key
3612 * @p2k: a buffer to which the key will be written, 16 bytes 3612 * @p2k: a buffer to which the key will be written, 16 bytes
3613 */ 3613 */
3614 void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf, 3614 void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf,
3615 struct sk_buff *skb, u8 *p2k); 3615 struct sk_buff *skb, u8 *p2k);
3616 3616
3617 /** 3617 /**
3618 * ieee80211_aes_cmac_calculate_k1_k2 - calculate the AES-CMAC sub keys 3618 * ieee80211_aes_cmac_calculate_k1_k2 - calculate the AES-CMAC sub keys
3619 * 3619 *
3620 * This function computes the two AES-CMAC sub-keys, based on the 3620 * This function computes the two AES-CMAC sub-keys, based on the
3621 * previously installed master key. 3621 * previously installed master key.
3622 * 3622 *
3623 * @keyconf: the parameter passed with the set key 3623 * @keyconf: the parameter passed with the set key
3624 * @k1: a buffer to be filled with the 1st sub-key 3624 * @k1: a buffer to be filled with the 1st sub-key
3625 * @k2: a buffer to be filled with the 2nd sub-key 3625 * @k2: a buffer to be filled with the 2nd sub-key
3626 */ 3626 */
3627 void ieee80211_aes_cmac_calculate_k1_k2(struct ieee80211_key_conf *keyconf, 3627 void ieee80211_aes_cmac_calculate_k1_k2(struct ieee80211_key_conf *keyconf,
3628 u8 *k1, u8 *k2); 3628 u8 *k1, u8 *k2);
3629 3629
3630 /** 3630 /**
3631 * struct ieee80211_key_seq - key sequence counter 3631 * struct ieee80211_key_seq - key sequence counter
3632 * 3632 *
3633 * @tkip: TKIP data, containing IV32 and IV16 in host byte order 3633 * @tkip: TKIP data, containing IV32 and IV16 in host byte order
3634 * @ccmp: PN data, most significant byte first (big endian, 3634 * @ccmp: PN data, most significant byte first (big endian,
3635 * reverse order than in packet) 3635 * reverse order than in packet)
3636 * @aes_cmac: PN data, most significant byte first (big endian, 3636 * @aes_cmac: PN data, most significant byte first (big endian,
3637 * reverse order than in packet) 3637 * reverse order than in packet)
3638 */ 3638 */
3639 struct ieee80211_key_seq { 3639 struct ieee80211_key_seq {
3640 union { 3640 union {
3641 struct { 3641 struct {
3642 u32 iv32; 3642 u32 iv32;
3643 u16 iv16; 3643 u16 iv16;
3644 } tkip; 3644 } tkip;
3645 struct { 3645 struct {
3646 u8 pn[6]; 3646 u8 pn[6];
3647 } ccmp; 3647 } ccmp;
3648 struct { 3648 struct {
3649 u8 pn[6]; 3649 u8 pn[6];
3650 } aes_cmac; 3650 } aes_cmac;
3651 }; 3651 };
3652 }; 3652 };
3653 3653
3654 /** 3654 /**
3655 * ieee80211_get_key_tx_seq - get key TX sequence counter 3655 * ieee80211_get_key_tx_seq - get key TX sequence counter
3656 * 3656 *
3657 * @keyconf: the parameter passed with the set key 3657 * @keyconf: the parameter passed with the set key
3658 * @seq: buffer to receive the sequence data 3658 * @seq: buffer to receive the sequence data
3659 * 3659 *
3660 * This function allows a driver to retrieve the current TX IV/PN 3660 * This function allows a driver to retrieve the current TX IV/PN
3661 * for the given key. It must not be called if IV generation is 3661 * for the given key. It must not be called if IV generation is
3662 * offloaded to the device. 3662 * offloaded to the device.
3663 * 3663 *
3664 * Note that this function may only be called when no TX processing 3664 * Note that this function may only be called when no TX processing
3665 * can be done concurrently, for example when queues are stopped 3665 * can be done concurrently, for example when queues are stopped
3666 * and the stop has been synchronized. 3666 * and the stop has been synchronized.
3667 */ 3667 */
3668 void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf, 3668 void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf,
3669 struct ieee80211_key_seq *seq); 3669 struct ieee80211_key_seq *seq);
3670 3670
3671 /** 3671 /**
3672 * ieee80211_get_key_rx_seq - get key RX sequence counter 3672 * ieee80211_get_key_rx_seq - get key RX sequence counter
3673 * 3673 *
3674 * @keyconf: the parameter passed with the set key 3674 * @keyconf: the parameter passed with the set key
3675 * @tid: The TID, or -1 for the management frame value (CCMP only); 3675 * @tid: The TID, or -1 for the management frame value (CCMP only);
3676 * the value on TID 0 is also used for non-QoS frames. For 3676 * the value on TID 0 is also used for non-QoS frames. For
3677 * CMAC, only TID 0 is valid. 3677 * CMAC, only TID 0 is valid.
3678 * @seq: buffer to receive the sequence data 3678 * @seq: buffer to receive the sequence data
3679 * 3679 *
3680 * This function allows a driver to retrieve the current RX IV/PNs 3680 * This function allows a driver to retrieve the current RX IV/PNs
3681 * for the given key. It must not be called if IV checking is done 3681 * for the given key. It must not be called if IV checking is done
3682 * by the device and not by mac80211. 3682 * by the device and not by mac80211.
3683 * 3683 *
3684 * Note that this function may only be called when no RX processing 3684 * Note that this function may only be called when no RX processing
3685 * can be done concurrently. 3685 * can be done concurrently.
3686 */ 3686 */
3687 void ieee80211_get_key_rx_seq(struct ieee80211_key_conf *keyconf, 3687 void ieee80211_get_key_rx_seq(struct ieee80211_key_conf *keyconf,
3688 int tid, struct ieee80211_key_seq *seq); 3688 int tid, struct ieee80211_key_seq *seq);
3689 3689
3690 /** 3690 /**
3691 * ieee80211_set_key_tx_seq - set key TX sequence counter
3692 *
3693 * @keyconf: the parameter passed with the set key
3694 * @seq: new sequence data
3695 *
3696 * This function allows a driver to set the current TX IV/PNs for the
3697 * given key. This is useful when resuming from WoWLAN sleep and the
3698 * device may have transmitted frames using the PTK, e.g. replies to
3699 * ARP requests.
3700 *
3701 * Note that this function may only be called when no TX processing
3702 * can be done concurrently.
3703 */
3704 void ieee80211_set_key_tx_seq(struct ieee80211_key_conf *keyconf,
3705 struct ieee80211_key_seq *seq);
3706
3707 /**
3708 * ieee80211_set_key_rx_seq - set key RX sequence counter
3709 *
3710 * @keyconf: the parameter passed with the set key
3711 * @tid: The TID, or -1 for the management frame value (CCMP only);
3712 * the value on TID 0 is also used for non-QoS frames. For
3713 * CMAC, only TID 0 is valid.
3714 * @seq: new sequence data
3715 *
3716 * This function allows a driver to set the current RX IV/PNs for the
3717 * given key. This is useful when resuming from WoWLAN sleep and GTK
3718 * rekey may have been done while suspended. It should not be called
3719 * if IV checking is done by the device and not by mac80211.
3720 *
3721 * Note that this function may only be called when no RX processing
3722 * can be done concurrently.
3723 */
3724 void ieee80211_set_key_rx_seq(struct ieee80211_key_conf *keyconf,
3725 int tid, struct ieee80211_key_seq *seq);
3726
3727 /**
3728 * ieee80211_remove_key - remove the given key
3729 * @keyconf: the parameter passed with the set key
3730 *
3731 * Remove the given key. If the key was uploaded to the hardware at the
3732 * time this function is called, it is not deleted in the hardware but
3733 * instead assumed to have been removed already.
3734 *
3735 * Note that due to locking considerations this function can (currently)
3736 * only be called during key iteration (ieee80211_iter_keys().)
3737 */
3738 void ieee80211_remove_key(struct ieee80211_key_conf *keyconf);
3739
3740 /**
3741 * ieee80211_gtk_rekey_add - add a GTK key from rekeying during WoWLAN
3742 * @vif: the virtual interface to add the key on
3743 * @keyconf: new key data
3744 *
3745 * When GTK rekeying was done while the system was suspended, (a) new
3746 * key(s) will be available. These will be needed by mac80211 for proper
3747 * RX processing, so this function allows setting them.
3748 *
3749 * The function returns the newly allocated key structure, which will
3750 * have similar contents to the passed key configuration but point to
3751 * mac80211-owned memory. In case of errors, the function returns an
3752 * ERR_PTR(), use IS_ERR() etc.
3753 *
3754 * Note that this function assumes the key isn't added to hardware
3755 * acceleration, so no TX will be done with the key. Since it's a GTK
3756 * on managed (station) networks, this is true anyway. If the driver
3757 * calls this function from the resume callback and subsequently uses
3758 * the return code 1 to reconfigure the device, this key will be part
3759 * of the reconfiguration.
3760 *
3761 * Note that the driver should also call ieee80211_set_key_rx_seq()
3762 * for the new key for each TID to set up sequence counters properly.
3763 *
3764 * IMPORTANT: If this replaces a key that is present in the hardware,
3765 * then it will attempt to remove it during this call. In many cases
3766 * this isn't what you want, so call ieee80211_remove_key() first for
3767 * the key that's being replaced.
3768 */
3769 struct ieee80211_key_conf *
3770 ieee80211_gtk_rekey_add(struct ieee80211_vif *vif,
3771 struct ieee80211_key_conf *keyconf);
3772
3773 /**
3691 * ieee80211_gtk_rekey_notify - notify userspace supplicant of rekeying 3774 * ieee80211_gtk_rekey_notify - notify userspace supplicant of rekeying
3692 * @vif: virtual interface the rekeying was done on 3775 * @vif: virtual interface the rekeying was done on
3693 * @bssid: The BSSID of the AP, for checking association 3776 * @bssid: The BSSID of the AP, for checking association
3694 * @replay_ctr: the new replay counter after GTK rekeying 3777 * @replay_ctr: the new replay counter after GTK rekeying
3695 * @gfp: allocation flags 3778 * @gfp: allocation flags
3696 */ 3779 */
3697 void ieee80211_gtk_rekey_notify(struct ieee80211_vif *vif, const u8 *bssid, 3780 void ieee80211_gtk_rekey_notify(struct ieee80211_vif *vif, const u8 *bssid,
3698 const u8 *replay_ctr, gfp_t gfp); 3781 const u8 *replay_ctr, gfp_t gfp);
3699 3782
3700 /** 3783 /**
3701 * ieee80211_wake_queue - wake specific queue 3784 * ieee80211_wake_queue - wake specific queue
3702 * @hw: pointer as obtained from ieee80211_alloc_hw(). 3785 * @hw: pointer as obtained from ieee80211_alloc_hw().
3703 * @queue: queue number (counted from zero). 3786 * @queue: queue number (counted from zero).
3704 * 3787 *
3705 * Drivers should use this function instead of netif_wake_queue. 3788 * Drivers should use this function instead of netif_wake_queue.
3706 */ 3789 */
3707 void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue); 3790 void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue);
3708 3791
3709 /** 3792 /**
3710 * ieee80211_stop_queue - stop specific queue 3793 * ieee80211_stop_queue - stop specific queue
3711 * @hw: pointer as obtained from ieee80211_alloc_hw(). 3794 * @hw: pointer as obtained from ieee80211_alloc_hw().
3712 * @queue: queue number (counted from zero). 3795 * @queue: queue number (counted from zero).
3713 * 3796 *
3714 * Drivers should use this function instead of netif_stop_queue. 3797 * Drivers should use this function instead of netif_stop_queue.
3715 */ 3798 */
3716 void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue); 3799 void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue);
3717 3800
3718 /** 3801 /**
3719 * ieee80211_queue_stopped - test status of the queue 3802 * ieee80211_queue_stopped - test status of the queue
3720 * @hw: pointer as obtained from ieee80211_alloc_hw(). 3803 * @hw: pointer as obtained from ieee80211_alloc_hw().
3721 * @queue: queue number (counted from zero). 3804 * @queue: queue number (counted from zero).
3722 * 3805 *
3723 * Drivers should use this function instead of netif_stop_queue. 3806 * Drivers should use this function instead of netif_stop_queue.
3724 * 3807 *
3725 * Return: %true if the queue is stopped. %false otherwise. 3808 * Return: %true if the queue is stopped. %false otherwise.
3726 */ 3809 */
3727 3810
3728 int ieee80211_queue_stopped(struct ieee80211_hw *hw, int queue); 3811 int ieee80211_queue_stopped(struct ieee80211_hw *hw, int queue);
3729 3812
3730 /** 3813 /**
3731 * ieee80211_stop_queues - stop all queues 3814 * ieee80211_stop_queues - stop all queues
3732 * @hw: pointer as obtained from ieee80211_alloc_hw(). 3815 * @hw: pointer as obtained from ieee80211_alloc_hw().
3733 * 3816 *
3734 * Drivers should use this function instead of netif_stop_queue. 3817 * Drivers should use this function instead of netif_stop_queue.
3735 */ 3818 */
3736 void ieee80211_stop_queues(struct ieee80211_hw *hw); 3819 void ieee80211_stop_queues(struct ieee80211_hw *hw);
3737 3820
3738 /** 3821 /**
3739 * ieee80211_wake_queues - wake all queues 3822 * ieee80211_wake_queues - wake all queues
3740 * @hw: pointer as obtained from ieee80211_alloc_hw(). 3823 * @hw: pointer as obtained from ieee80211_alloc_hw().
3741 * 3824 *
3742 * Drivers should use this function instead of netif_wake_queue. 3825 * Drivers should use this function instead of netif_wake_queue.
3743 */ 3826 */
3744 void ieee80211_wake_queues(struct ieee80211_hw *hw); 3827 void ieee80211_wake_queues(struct ieee80211_hw *hw);
3745 3828
3746 /** 3829 /**
3747 * ieee80211_scan_completed - completed hardware scan 3830 * ieee80211_scan_completed - completed hardware scan
3748 * 3831 *
3749 * When hardware scan offload is used (i.e. the hw_scan() callback is 3832 * When hardware scan offload is used (i.e. the hw_scan() callback is
3750 * assigned) this function needs to be called by the driver to notify 3833 * assigned) this function needs to be called by the driver to notify
3751 * mac80211 that the scan finished. This function can be called from 3834 * mac80211 that the scan finished. This function can be called from
3752 * any context, including hardirq context. 3835 * any context, including hardirq context.
3753 * 3836 *
3754 * @hw: the hardware that finished the scan 3837 * @hw: the hardware that finished the scan
3755 * @aborted: set to true if scan was aborted 3838 * @aborted: set to true if scan was aborted
3756 */ 3839 */
3757 void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted); 3840 void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted);
3758 3841
3759 /** 3842 /**
3760 * ieee80211_sched_scan_results - got results from scheduled scan 3843 * ieee80211_sched_scan_results - got results from scheduled scan
3761 * 3844 *
3762 * When a scheduled scan is running, this function needs to be called by the 3845 * When a scheduled scan is running, this function needs to be called by the
3763 * driver whenever there are new scan results available. 3846 * driver whenever there are new scan results available.
3764 * 3847 *
3765 * @hw: the hardware that is performing scheduled scans 3848 * @hw: the hardware that is performing scheduled scans
3766 */ 3849 */
3767 void ieee80211_sched_scan_results(struct ieee80211_hw *hw); 3850 void ieee80211_sched_scan_results(struct ieee80211_hw *hw);
3768 3851
3769 /** 3852 /**
3770 * ieee80211_sched_scan_stopped - inform that the scheduled scan has stopped 3853 * ieee80211_sched_scan_stopped - inform that the scheduled scan has stopped
3771 * 3854 *
3772 * When a scheduled scan is running, this function can be called by 3855 * When a scheduled scan is running, this function can be called by
3773 * the driver if it needs to stop the scan to perform another task. 3856 * the driver if it needs to stop the scan to perform another task.
3774 * Usual scenarios are drivers that cannot continue the scheduled scan 3857 * Usual scenarios are drivers that cannot continue the scheduled scan
3775 * while associating, for instance. 3858 * while associating, for instance.
3776 * 3859 *
3777 * @hw: the hardware that is performing scheduled scans 3860 * @hw: the hardware that is performing scheduled scans
3778 */ 3861 */
3779 void ieee80211_sched_scan_stopped(struct ieee80211_hw *hw); 3862 void ieee80211_sched_scan_stopped(struct ieee80211_hw *hw);
3780 3863
3781 /** 3864 /**
3782 * enum ieee80211_interface_iteration_flags - interface iteration flags 3865 * enum ieee80211_interface_iteration_flags - interface iteration flags
3783 * @IEEE80211_IFACE_ITER_NORMAL: Iterate over all interfaces that have 3866 * @IEEE80211_IFACE_ITER_NORMAL: Iterate over all interfaces that have
3784 * been added to the driver; However, note that during hardware 3867 * been added to the driver; However, note that during hardware
3785 * reconfiguration (after restart_hw) it will iterate over a new 3868 * reconfiguration (after restart_hw) it will iterate over a new
3786 * interface and over all the existing interfaces even if they 3869 * interface and over all the existing interfaces even if they
3787 * haven't been re-added to the driver yet. 3870 * haven't been re-added to the driver yet.
3788 * @IEEE80211_IFACE_ITER_RESUME_ALL: During resume, iterate over all 3871 * @IEEE80211_IFACE_ITER_RESUME_ALL: During resume, iterate over all
3789 * interfaces, even if they haven't been re-added to the driver yet. 3872 * interfaces, even if they haven't been re-added to the driver yet.
3790 */ 3873 */
3791 enum ieee80211_interface_iteration_flags { 3874 enum ieee80211_interface_iteration_flags {
3792 IEEE80211_IFACE_ITER_NORMAL = 0, 3875 IEEE80211_IFACE_ITER_NORMAL = 0,
3793 IEEE80211_IFACE_ITER_RESUME_ALL = BIT(0), 3876 IEEE80211_IFACE_ITER_RESUME_ALL = BIT(0),
3794 }; 3877 };
3795 3878
3796 /** 3879 /**
3797 * ieee80211_iterate_active_interfaces - iterate active interfaces 3880 * ieee80211_iterate_active_interfaces - iterate active interfaces
3798 * 3881 *
3799 * This function iterates over the interfaces associated with a given 3882 * This function iterates over the interfaces associated with a given
3800 * hardware that are currently active and calls the callback for them. 3883 * hardware that are currently active and calls the callback for them.
3801 * This function allows the iterator function to sleep, when the iterator 3884 * This function allows the iterator function to sleep, when the iterator
3802 * function is atomic @ieee80211_iterate_active_interfaces_atomic can 3885 * function is atomic @ieee80211_iterate_active_interfaces_atomic can
3803 * be used. 3886 * be used.
3804 * Does not iterate over a new interface during add_interface(). 3887 * Does not iterate over a new interface during add_interface().
3805 * 3888 *
3806 * @hw: the hardware struct of which the interfaces should be iterated over 3889 * @hw: the hardware struct of which the interfaces should be iterated over
3807 * @iter_flags: iteration flags, see &enum ieee80211_interface_iteration_flags 3890 * @iter_flags: iteration flags, see &enum ieee80211_interface_iteration_flags
3808 * @iterator: the iterator function to call 3891 * @iterator: the iterator function to call
3809 * @data: first argument of the iterator function 3892 * @data: first argument of the iterator function
3810 */ 3893 */
3811 void ieee80211_iterate_active_interfaces(struct ieee80211_hw *hw, 3894 void ieee80211_iterate_active_interfaces(struct ieee80211_hw *hw,
3812 u32 iter_flags, 3895 u32 iter_flags,
3813 void (*iterator)(void *data, u8 *mac, 3896 void (*iterator)(void *data, u8 *mac,
3814 struct ieee80211_vif *vif), 3897 struct ieee80211_vif *vif),
3815 void *data); 3898 void *data);
3816 3899
3817 /** 3900 /**
3818 * ieee80211_iterate_active_interfaces_atomic - iterate active interfaces 3901 * ieee80211_iterate_active_interfaces_atomic - iterate active interfaces
3819 * 3902 *
3820 * This function iterates over the interfaces associated with a given 3903 * This function iterates over the interfaces associated with a given
3821 * hardware that are currently active and calls the callback for them. 3904 * hardware that are currently active and calls the callback for them.
3822 * This function requires the iterator callback function to be atomic, 3905 * This function requires the iterator callback function to be atomic,
3823 * if that is not desired, use @ieee80211_iterate_active_interfaces instead. 3906 * if that is not desired, use @ieee80211_iterate_active_interfaces instead.
3824 * Does not iterate over a new interface during add_interface(). 3907 * Does not iterate over a new interface during add_interface().
3825 * 3908 *
3826 * @hw: the hardware struct of which the interfaces should be iterated over 3909 * @hw: the hardware struct of which the interfaces should be iterated over
3827 * @iter_flags: iteration flags, see &enum ieee80211_interface_iteration_flags 3910 * @iter_flags: iteration flags, see &enum ieee80211_interface_iteration_flags
3828 * @iterator: the iterator function to call, cannot sleep 3911 * @iterator: the iterator function to call, cannot sleep
3829 * @data: first argument of the iterator function 3912 * @data: first argument of the iterator function
3830 */ 3913 */
3831 void ieee80211_iterate_active_interfaces_atomic(struct ieee80211_hw *hw, 3914 void ieee80211_iterate_active_interfaces_atomic(struct ieee80211_hw *hw,
3832 u32 iter_flags, 3915 u32 iter_flags,
3833 void (*iterator)(void *data, 3916 void (*iterator)(void *data,
3834 u8 *mac, 3917 u8 *mac,
3835 struct ieee80211_vif *vif), 3918 struct ieee80211_vif *vif),
3836 void *data); 3919 void *data);
3837 3920
3838 /** 3921 /**
3839 * ieee80211_queue_work - add work onto the mac80211 workqueue 3922 * ieee80211_queue_work - add work onto the mac80211 workqueue
3840 * 3923 *
3841 * Drivers and mac80211 use this to add work onto the mac80211 workqueue. 3924 * Drivers and mac80211 use this to add work onto the mac80211 workqueue.
3842 * This helper ensures drivers are not queueing work when they should not be. 3925 * This helper ensures drivers are not queueing work when they should not be.
3843 * 3926 *
3844 * @hw: the hardware struct for the interface we are adding work for 3927 * @hw: the hardware struct for the interface we are adding work for
3845 * @work: the work we want to add onto the mac80211 workqueue 3928 * @work: the work we want to add onto the mac80211 workqueue
3846 */ 3929 */
3847 void ieee80211_queue_work(struct ieee80211_hw *hw, struct work_struct *work); 3930 void ieee80211_queue_work(struct ieee80211_hw *hw, struct work_struct *work);
3848 3931
3849 /** 3932 /**
3850 * ieee80211_queue_delayed_work - add work onto the mac80211 workqueue 3933 * ieee80211_queue_delayed_work - add work onto the mac80211 workqueue
3851 * 3934 *
3852 * Drivers and mac80211 use this to queue delayed work onto the mac80211 3935 * Drivers and mac80211 use this to queue delayed work onto the mac80211
3853 * workqueue. 3936 * workqueue.
3854 * 3937 *
3855 * @hw: the hardware struct for the interface we are adding work for 3938 * @hw: the hardware struct for the interface we are adding work for
3856 * @dwork: delayable work to queue onto the mac80211 workqueue 3939 * @dwork: delayable work to queue onto the mac80211 workqueue
3857 * @delay: number of jiffies to wait before queueing 3940 * @delay: number of jiffies to wait before queueing
3858 */ 3941 */
3859 void ieee80211_queue_delayed_work(struct ieee80211_hw *hw, 3942 void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
3860 struct delayed_work *dwork, 3943 struct delayed_work *dwork,
3861 unsigned long delay); 3944 unsigned long delay);
3862 3945
3863 /** 3946 /**
3864 * ieee80211_start_tx_ba_session - Start a tx Block Ack session. 3947 * ieee80211_start_tx_ba_session - Start a tx Block Ack session.
3865 * @sta: the station for which to start a BA session 3948 * @sta: the station for which to start a BA session
3866 * @tid: the TID to BA on. 3949 * @tid: the TID to BA on.
3867 * @timeout: session timeout value (in TUs) 3950 * @timeout: session timeout value (in TUs)
3868 * 3951 *
3869 * Return: success if addBA request was sent, failure otherwise 3952 * Return: success if addBA request was sent, failure otherwise
3870 * 3953 *
3871 * Although mac80211/low level driver/user space application can estimate 3954 * Although mac80211/low level driver/user space application can estimate
3872 * the need to start aggregation on a certain RA/TID, the session level 3955 * the need to start aggregation on a certain RA/TID, the session level
3873 * will be managed by the mac80211. 3956 * will be managed by the mac80211.
3874 */ 3957 */
3875 int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid, 3958 int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid,
3876 u16 timeout); 3959 u16 timeout);
3877 3960
3878 /** 3961 /**
3879 * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate. 3962 * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate.
3880 * @vif: &struct ieee80211_vif pointer from the add_interface callback 3963 * @vif: &struct ieee80211_vif pointer from the add_interface callback
3881 * @ra: receiver address of the BA session recipient. 3964 * @ra: receiver address of the BA session recipient.
3882 * @tid: the TID to BA on. 3965 * @tid: the TID to BA on.
3883 * 3966 *
3884 * This function must be called by low level driver once it has 3967 * This function must be called by low level driver once it has
3885 * finished with preparations for the BA session. It can be called 3968 * finished with preparations for the BA session. It can be called
3886 * from any context. 3969 * from any context.
3887 */ 3970 */
3888 void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, 3971 void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
3889 u16 tid); 3972 u16 tid);
3890 3973
3891 /** 3974 /**
3892 * ieee80211_stop_tx_ba_session - Stop a Block Ack session. 3975 * ieee80211_stop_tx_ba_session - Stop a Block Ack session.
3893 * @sta: the station whose BA session to stop 3976 * @sta: the station whose BA session to stop
3894 * @tid: the TID to stop BA. 3977 * @tid: the TID to stop BA.
3895 * 3978 *
3896 * Return: negative error if the TID is invalid, or no aggregation active 3979 * Return: negative error if the TID is invalid, or no aggregation active
3897 * 3980 *
3898 * Although mac80211/low level driver/user space application can estimate 3981 * Although mac80211/low level driver/user space application can estimate
3899 * the need to stop aggregation on a certain RA/TID, the session level 3982 * the need to stop aggregation on a certain RA/TID, the session level
3900 * will be managed by the mac80211. 3983 * will be managed by the mac80211.
3901 */ 3984 */
3902 int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid); 3985 int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid);
3903 3986
3904 /** 3987 /**
3905 * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate. 3988 * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate.
3906 * @vif: &struct ieee80211_vif pointer from the add_interface callback 3989 * @vif: &struct ieee80211_vif pointer from the add_interface callback
3907 * @ra: receiver address of the BA session recipient. 3990 * @ra: receiver address of the BA session recipient.
3908 * @tid: the desired TID to BA on. 3991 * @tid: the desired TID to BA on.
3909 * 3992 *
3910 * This function must be called by low level driver once it has 3993 * This function must be called by low level driver once it has
3911 * finished with preparations for the BA session tear down. It 3994 * finished with preparations for the BA session tear down. It
3912 * can be called from any context. 3995 * can be called from any context.
3913 */ 3996 */
3914 void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, 3997 void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
3915 u16 tid); 3998 u16 tid);
3916 3999
3917 /** 4000 /**
3918 * ieee80211_find_sta - find a station 4001 * ieee80211_find_sta - find a station
3919 * 4002 *
3920 * @vif: virtual interface to look for station on 4003 * @vif: virtual interface to look for station on
3921 * @addr: station's address 4004 * @addr: station's address
3922 * 4005 *
3923 * Return: The station, if found. %NULL otherwise. 4006 * Return: The station, if found. %NULL otherwise.
3924 * 4007 *
3925 * Note: This function must be called under RCU lock and the 4008 * Note: This function must be called under RCU lock and the
3926 * resulting pointer is only valid under RCU lock as well. 4009 * resulting pointer is only valid under RCU lock as well.
3927 */ 4010 */
3928 struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif, 4011 struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif,
3929 const u8 *addr); 4012 const u8 *addr);
3930 4013
3931 /** 4014 /**
3932 * ieee80211_find_sta_by_ifaddr - find a station on hardware 4015 * ieee80211_find_sta_by_ifaddr - find a station on hardware
3933 * 4016 *
3934 * @hw: pointer as obtained from ieee80211_alloc_hw() 4017 * @hw: pointer as obtained from ieee80211_alloc_hw()
3935 * @addr: remote station's address 4018 * @addr: remote station's address
3936 * @localaddr: local address (vif->sdata->vif.addr). Use NULL for 'any'. 4019 * @localaddr: local address (vif->sdata->vif.addr). Use NULL for 'any'.
3937 * 4020 *
3938 * Return: The station, if found. %NULL otherwise. 4021 * Return: The station, if found. %NULL otherwise.
3939 * 4022 *
3940 * Note: This function must be called under RCU lock and the 4023 * Note: This function must be called under RCU lock and the
3941 * resulting pointer is only valid under RCU lock as well. 4024 * resulting pointer is only valid under RCU lock as well.
3942 * 4025 *
3943 * NOTE: You may pass NULL for localaddr, but then you will just get 4026 * NOTE: You may pass NULL for localaddr, but then you will just get
3944 * the first STA that matches the remote address 'addr'. 4027 * the first STA that matches the remote address 'addr'.
3945 * We can have multiple STA associated with multiple 4028 * We can have multiple STA associated with multiple
3946 * logical stations (e.g. consider a station connecting to another 4029 * logical stations (e.g. consider a station connecting to another
3947 * BSSID on the same AP hardware without disconnecting first). 4030 * BSSID on the same AP hardware without disconnecting first).
3948 * In this case, the result of this method with localaddr NULL 4031 * In this case, the result of this method with localaddr NULL
3949 * is not reliable. 4032 * is not reliable.
3950 * 4033 *
3951 * DO NOT USE THIS FUNCTION with localaddr NULL if at all possible. 4034 * DO NOT USE THIS FUNCTION with localaddr NULL if at all possible.
3952 */ 4035 */
3953 struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw, 4036 struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw,
3954 const u8 *addr, 4037 const u8 *addr,
3955 const u8 *localaddr); 4038 const u8 *localaddr);
3956 4039
3957 /** 4040 /**
3958 * ieee80211_sta_block_awake - block station from waking up 4041 * ieee80211_sta_block_awake - block station from waking up
3959 * @hw: the hardware 4042 * @hw: the hardware
3960 * @pubsta: the station 4043 * @pubsta: the station
3961 * @block: whether to block or unblock 4044 * @block: whether to block or unblock
3962 * 4045 *
3963 * Some devices require that all frames that are on the queues 4046 * Some devices require that all frames that are on the queues
3964 * for a specific station that went to sleep are flushed before 4047 * for a specific station that went to sleep are flushed before
3965 * a poll response or frames after the station woke up can be 4048 * a poll response or frames after the station woke up can be
3966 * delivered to that it. Note that such frames must be rejected 4049 * delivered to that it. Note that such frames must be rejected
3967 * by the driver as filtered, with the appropriate status flag. 4050 * by the driver as filtered, with the appropriate status flag.
3968 * 4051 *
3969 * This function allows implementing this mode in a race-free 4052 * This function allows implementing this mode in a race-free
3970 * manner. 4053 * manner.
3971 * 4054 *
3972 * To do this, a driver must keep track of the number of frames 4055 * To do this, a driver must keep track of the number of frames
3973 * still enqueued for a specific station. If this number is not 4056 * still enqueued for a specific station. If this number is not
3974 * zero when the station goes to sleep, the driver must call 4057 * zero when the station goes to sleep, the driver must call
3975 * this function to force mac80211 to consider the station to 4058 * this function to force mac80211 to consider the station to
3976 * be asleep regardless of the station's actual state. Once the 4059 * be asleep regardless of the station's actual state. Once the
3977 * number of outstanding frames reaches zero, the driver must 4060 * number of outstanding frames reaches zero, the driver must
3978 * call this function again to unblock the station. That will 4061 * call this function again to unblock the station. That will
3979 * cause mac80211 to be able to send ps-poll responses, and if 4062 * cause mac80211 to be able to send ps-poll responses, and if
3980 * the station queried in the meantime then frames will also 4063 * the station queried in the meantime then frames will also
3981 * be sent out as a result of this. Additionally, the driver 4064 * be sent out as a result of this. Additionally, the driver
3982 * will be notified that the station woke up some time after 4065 * will be notified that the station woke up some time after
3983 * it is unblocked, regardless of whether the station actually 4066 * it is unblocked, regardless of whether the station actually
3984 * woke up while blocked or not. 4067 * woke up while blocked or not.
3985 */ 4068 */
3986 void ieee80211_sta_block_awake(struct ieee80211_hw *hw, 4069 void ieee80211_sta_block_awake(struct ieee80211_hw *hw,
3987 struct ieee80211_sta *pubsta, bool block); 4070 struct ieee80211_sta *pubsta, bool block);
3988 4071
3989 /** 4072 /**
3990 * ieee80211_sta_eosp - notify mac80211 about end of SP 4073 * ieee80211_sta_eosp - notify mac80211 about end of SP
3991 * @pubsta: the station 4074 * @pubsta: the station
3992 * 4075 *
3993 * When a device transmits frames in a way that it can't tell 4076 * When a device transmits frames in a way that it can't tell
3994 * mac80211 in the TX status about the EOSP, it must clear the 4077 * mac80211 in the TX status about the EOSP, it must clear the
3995 * %IEEE80211_TX_STATUS_EOSP bit and call this function instead. 4078 * %IEEE80211_TX_STATUS_EOSP bit and call this function instead.
3996 * This applies for PS-Poll as well as uAPSD. 4079 * This applies for PS-Poll as well as uAPSD.
3997 * 4080 *
3998 * Note that just like with _tx_status() and _rx() drivers must 4081 * Note that just like with _tx_status() and _rx() drivers must
3999 * not mix calls to irqsafe/non-irqsafe versions, this function 4082 * not mix calls to irqsafe/non-irqsafe versions, this function
4000 * must not be mixed with those either. Use the all irqsafe, or 4083 * must not be mixed with those either. Use the all irqsafe, or
4001 * all non-irqsafe, don't mix! 4084 * all non-irqsafe, don't mix!
4002 * 4085 *
4003 * NB: the _irqsafe version of this function doesn't exist, no 4086 * NB: the _irqsafe version of this function doesn't exist, no
4004 * driver needs it right now. Don't call this function if 4087 * driver needs it right now. Don't call this function if
4005 * you'd need the _irqsafe version, look at the git history 4088 * you'd need the _irqsafe version, look at the git history
4006 * and restore the _irqsafe version! 4089 * and restore the _irqsafe version!
4007 */ 4090 */
4008 void ieee80211_sta_eosp(struct ieee80211_sta *pubsta); 4091 void ieee80211_sta_eosp(struct ieee80211_sta *pubsta);
4009 4092
4010 /** 4093 /**
4011 * ieee80211_iter_keys - iterate keys programmed into the device 4094 * ieee80211_iter_keys - iterate keys programmed into the device
4012 * @hw: pointer obtained from ieee80211_alloc_hw() 4095 * @hw: pointer obtained from ieee80211_alloc_hw()
4013 * @vif: virtual interface to iterate, may be %NULL for all 4096 * @vif: virtual interface to iterate, may be %NULL for all
4014 * @iter: iterator function that will be called for each key 4097 * @iter: iterator function that will be called for each key
4015 * @iter_data: custom data to pass to the iterator function 4098 * @iter_data: custom data to pass to the iterator function
4016 * 4099 *
4017 * This function can be used to iterate all the keys known to 4100 * This function can be used to iterate all the keys known to
4018 * mac80211, even those that weren't previously programmed into 4101 * mac80211, even those that weren't previously programmed into
4019 * the device. This is intended for use in WoWLAN if the device 4102 * the device. This is intended for use in WoWLAN if the device
4020 * needs reprogramming of the keys during suspend. Note that due 4103 * needs reprogramming of the keys during suspend. Note that due
4021 * to locking reasons, it is also only safe to call this at few 4104 * to locking reasons, it is also only safe to call this at few
4022 * spots since it must hold the RTNL and be able to sleep. 4105 * spots since it must hold the RTNL and be able to sleep.
4023 * 4106 *
4024 * The order in which the keys are iterated matches the order 4107 * The order in which the keys are iterated matches the order
4025 * in which they were originally installed and handed to the 4108 * in which they were originally installed and handed to the
4026 * set_key callback. 4109 * set_key callback.
4027 */ 4110 */
4028 void ieee80211_iter_keys(struct ieee80211_hw *hw, 4111 void ieee80211_iter_keys(struct ieee80211_hw *hw,
4029 struct ieee80211_vif *vif, 4112 struct ieee80211_vif *vif,
4030 void (*iter)(struct ieee80211_hw *hw, 4113 void (*iter)(struct ieee80211_hw *hw,
4031 struct ieee80211_vif *vif, 4114 struct ieee80211_vif *vif,
4032 struct ieee80211_sta *sta, 4115 struct ieee80211_sta *sta,
4033 struct ieee80211_key_conf *key, 4116 struct ieee80211_key_conf *key,
4034 void *data), 4117 void *data),
4035 void *iter_data); 4118 void *iter_data);
4036 4119
4037 /** 4120 /**
4038 * ieee80211_iter_chan_contexts_atomic - iterate channel contexts 4121 * ieee80211_iter_chan_contexts_atomic - iterate channel contexts
4039 * @hw: pointre obtained from ieee80211_alloc_hw(). 4122 * @hw: pointre obtained from ieee80211_alloc_hw().
4040 * @iter: iterator function 4123 * @iter: iterator function
4041 * @iter_data: data passed to iterator function 4124 * @iter_data: data passed to iterator function
4042 * 4125 *
4043 * Iterate all active channel contexts. This function is atomic and 4126 * Iterate all active channel contexts. This function is atomic and
4044 * doesn't acquire any locks internally that might be held in other 4127 * doesn't acquire any locks internally that might be held in other
4045 * places while calling into the driver. 4128 * places while calling into the driver.
4046 * 4129 *
4047 * The iterator will not find a context that's being added (during 4130 * The iterator will not find a context that's being added (during
4048 * the driver callback to add it) but will find it while it's being 4131 * the driver callback to add it) but will find it while it's being
4049 * removed. 4132 * removed.
4050 * 4133 *
4051 * Note that during hardware restart, all contexts that existed 4134 * Note that during hardware restart, all contexts that existed
4052 * before the restart are considered already present so will be 4135 * before the restart are considered already present so will be
4053 * found while iterating, whether they've been re-added already 4136 * found while iterating, whether they've been re-added already
4054 * or not. 4137 * or not.
4055 */ 4138 */
4056 void ieee80211_iter_chan_contexts_atomic( 4139 void ieee80211_iter_chan_contexts_atomic(
4057 struct ieee80211_hw *hw, 4140 struct ieee80211_hw *hw,
4058 void (*iter)(struct ieee80211_hw *hw, 4141 void (*iter)(struct ieee80211_hw *hw,
4059 struct ieee80211_chanctx_conf *chanctx_conf, 4142 struct ieee80211_chanctx_conf *chanctx_conf,
4060 void *data), 4143 void *data),
4061 void *iter_data); 4144 void *iter_data);
4062 4145
4063 /** 4146 /**
4064 * ieee80211_ap_probereq_get - retrieve a Probe Request template 4147 * ieee80211_ap_probereq_get - retrieve a Probe Request template
4065 * @hw: pointer obtained from ieee80211_alloc_hw(). 4148 * @hw: pointer obtained from ieee80211_alloc_hw().
4066 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 4149 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4067 * 4150 *
4068 * Creates a Probe Request template which can, for example, be uploaded to 4151 * Creates a Probe Request template which can, for example, be uploaded to
4069 * hardware. The template is filled with bssid, ssid and supported rate 4152 * hardware. The template is filled with bssid, ssid and supported rate
4070 * information. This function must only be called from within the 4153 * information. This function must only be called from within the
4071 * .bss_info_changed callback function and only in managed mode. The function 4154 * .bss_info_changed callback function and only in managed mode. The function
4072 * is only useful when the interface is associated, otherwise it will return 4155 * is only useful when the interface is associated, otherwise it will return
4073 * %NULL. 4156 * %NULL.
4074 * 4157 *
4075 * Return: The Probe Request template. %NULL on error. 4158 * Return: The Probe Request template. %NULL on error.
4076 */ 4159 */
4077 struct sk_buff *ieee80211_ap_probereq_get(struct ieee80211_hw *hw, 4160 struct sk_buff *ieee80211_ap_probereq_get(struct ieee80211_hw *hw,
4078 struct ieee80211_vif *vif); 4161 struct ieee80211_vif *vif);
4079 4162
4080 /** 4163 /**
4081 * ieee80211_beacon_loss - inform hardware does not receive beacons 4164 * ieee80211_beacon_loss - inform hardware does not receive beacons
4082 * 4165 *
4083 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 4166 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4084 * 4167 *
4085 * When beacon filtering is enabled with %IEEE80211_VIF_BEACON_FILTER and 4168 * When beacon filtering is enabled with %IEEE80211_VIF_BEACON_FILTER and
4086 * %IEEE80211_CONF_PS is set, the driver needs to inform whenever the 4169 * %IEEE80211_CONF_PS is set, the driver needs to inform whenever the
4087 * hardware is not receiving beacons with this function. 4170 * hardware is not receiving beacons with this function.
4088 */ 4171 */
4089 void ieee80211_beacon_loss(struct ieee80211_vif *vif); 4172 void ieee80211_beacon_loss(struct ieee80211_vif *vif);
4090 4173
4091 /** 4174 /**
4092 * ieee80211_connection_loss - inform hardware has lost connection to the AP 4175 * ieee80211_connection_loss - inform hardware has lost connection to the AP
4093 * 4176 *
4094 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 4177 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4095 * 4178 *
4096 * When beacon filtering is enabled with %IEEE80211_VIF_BEACON_FILTER, and 4179 * When beacon filtering is enabled with %IEEE80211_VIF_BEACON_FILTER, and
4097 * %IEEE80211_CONF_PS and %IEEE80211_HW_CONNECTION_MONITOR are set, the driver 4180 * %IEEE80211_CONF_PS and %IEEE80211_HW_CONNECTION_MONITOR are set, the driver
4098 * needs to inform if the connection to the AP has been lost. 4181 * needs to inform if the connection to the AP has been lost.
4099 * The function may also be called if the connection needs to be terminated 4182 * The function may also be called if the connection needs to be terminated
4100 * for some other reason, even if %IEEE80211_HW_CONNECTION_MONITOR isn't set. 4183 * for some other reason, even if %IEEE80211_HW_CONNECTION_MONITOR isn't set.
4101 * 4184 *
4102 * This function will cause immediate change to disassociated state, 4185 * This function will cause immediate change to disassociated state,
4103 * without connection recovery attempts. 4186 * without connection recovery attempts.
4104 */ 4187 */
4105 void ieee80211_connection_loss(struct ieee80211_vif *vif); 4188 void ieee80211_connection_loss(struct ieee80211_vif *vif);
4106 4189
4107 /** 4190 /**
4108 * ieee80211_resume_disconnect - disconnect from AP after resume 4191 * ieee80211_resume_disconnect - disconnect from AP after resume
4109 * 4192 *
4110 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 4193 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4111 * 4194 *
4112 * Instructs mac80211 to disconnect from the AP after resume. 4195 * Instructs mac80211 to disconnect from the AP after resume.
4113 * Drivers can use this after WoWLAN if they know that the 4196 * Drivers can use this after WoWLAN if they know that the
4114 * connection cannot be kept up, for example because keys were 4197 * connection cannot be kept up, for example because keys were
4115 * used while the device was asleep but the replay counters or 4198 * used while the device was asleep but the replay counters or
4116 * similar cannot be retrieved from the device during resume. 4199 * similar cannot be retrieved from the device during resume.
4117 * 4200 *
4118 * Note that due to implementation issues, if the driver uses 4201 * Note that due to implementation issues, if the driver uses
4119 * the reconfiguration functionality during resume the interface 4202 * the reconfiguration functionality during resume the interface
4120 * will still be added as associated first during resume and then 4203 * will still be added as associated first during resume and then
4121 * disconnect normally later. 4204 * disconnect normally later.
4122 * 4205 *
4123 * This function can only be called from the resume callback and 4206 * This function can only be called from the resume callback and
4124 * the driver must not be holding any of its own locks while it 4207 * the driver must not be holding any of its own locks while it
4125 * calls this function, or at least not any locks it needs in the 4208 * calls this function, or at least not any locks it needs in the
4126 * key configuration paths (if it supports HW crypto). 4209 * key configuration paths (if it supports HW crypto).
4127 */ 4210 */
4128 void ieee80211_resume_disconnect(struct ieee80211_vif *vif); 4211 void ieee80211_resume_disconnect(struct ieee80211_vif *vif);
4129 4212
4130 /** 4213 /**
4131 * ieee80211_cqm_rssi_notify - inform a configured connection quality monitoring 4214 * ieee80211_cqm_rssi_notify - inform a configured connection quality monitoring
4132 * rssi threshold triggered 4215 * rssi threshold triggered
4133 * 4216 *
4134 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 4217 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4135 * @rssi_event: the RSSI trigger event type 4218 * @rssi_event: the RSSI trigger event type
4136 * @gfp: context flags 4219 * @gfp: context flags
4137 * 4220 *
4138 * When the %IEEE80211_VIF_SUPPORTS_CQM_RSSI is set, and a connection quality 4221 * When the %IEEE80211_VIF_SUPPORTS_CQM_RSSI is set, and a connection quality
4139 * monitoring is configured with an rssi threshold, the driver will inform 4222 * monitoring is configured with an rssi threshold, the driver will inform
4140 * whenever the rssi level reaches the threshold. 4223 * whenever the rssi level reaches the threshold.
4141 */ 4224 */
4142 void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif, 4225 void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif,
4143 enum nl80211_cqm_rssi_threshold_event rssi_event, 4226 enum nl80211_cqm_rssi_threshold_event rssi_event,
4144 gfp_t gfp); 4227 gfp_t gfp);
4145 4228
4146 /** 4229 /**
4147 * ieee80211_radar_detected - inform that a radar was detected 4230 * ieee80211_radar_detected - inform that a radar was detected
4148 * 4231 *
4149 * @hw: pointer as obtained from ieee80211_alloc_hw() 4232 * @hw: pointer as obtained from ieee80211_alloc_hw()
4150 */ 4233 */
4151 void ieee80211_radar_detected(struct ieee80211_hw *hw); 4234 void ieee80211_radar_detected(struct ieee80211_hw *hw);
4152 4235
4153 /** 4236 /**
4154 * ieee80211_chswitch_done - Complete channel switch process 4237 * ieee80211_chswitch_done - Complete channel switch process
4155 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 4238 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4156 * @success: make the channel switch successful or not 4239 * @success: make the channel switch successful or not
4157 * 4240 *
4158 * Complete the channel switch post-process: set the new operational channel 4241 * Complete the channel switch post-process: set the new operational channel
4159 * and wake up the suspended queues. 4242 * and wake up the suspended queues.
4160 */ 4243 */
4161 void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success); 4244 void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success);
4162 4245
4163 /** 4246 /**
4164 * ieee80211_request_smps - request SM PS transition 4247 * ieee80211_request_smps - request SM PS transition
4165 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 4248 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4166 * @smps_mode: new SM PS mode 4249 * @smps_mode: new SM PS mode
4167 * 4250 *
4168 * This allows the driver to request an SM PS transition in managed 4251 * This allows the driver to request an SM PS transition in managed
4169 * mode. This is useful when the driver has more information than 4252 * mode. This is useful when the driver has more information than
4170 * the stack about possible interference, for example by bluetooth. 4253 * the stack about possible interference, for example by bluetooth.
4171 */ 4254 */
4172 void ieee80211_request_smps(struct ieee80211_vif *vif, 4255 void ieee80211_request_smps(struct ieee80211_vif *vif,
4173 enum ieee80211_smps_mode smps_mode); 4256 enum ieee80211_smps_mode smps_mode);
4174 4257
4175 /** 4258 /**
4176 * ieee80211_ready_on_channel - notification of remain-on-channel start 4259 * ieee80211_ready_on_channel - notification of remain-on-channel start
4177 * @hw: pointer as obtained from ieee80211_alloc_hw() 4260 * @hw: pointer as obtained from ieee80211_alloc_hw()
4178 */ 4261 */
4179 void ieee80211_ready_on_channel(struct ieee80211_hw *hw); 4262 void ieee80211_ready_on_channel(struct ieee80211_hw *hw);
4180 4263
4181 /** 4264 /**
4182 * ieee80211_remain_on_channel_expired - remain_on_channel duration expired 4265 * ieee80211_remain_on_channel_expired - remain_on_channel duration expired
4183 * @hw: pointer as obtained from ieee80211_alloc_hw() 4266 * @hw: pointer as obtained from ieee80211_alloc_hw()
4184 */ 4267 */
4185 void ieee80211_remain_on_channel_expired(struct ieee80211_hw *hw); 4268 void ieee80211_remain_on_channel_expired(struct ieee80211_hw *hw);
4186 4269
4187 /** 4270 /**
4188 * ieee80211_stop_rx_ba_session - callback to stop existing BA sessions 4271 * ieee80211_stop_rx_ba_session - callback to stop existing BA sessions
4189 * 4272 *
4190 * in order not to harm the system performance and user experience, the device 4273 * in order not to harm the system performance and user experience, the device
4191 * may request not to allow any rx ba session and tear down existing rx ba 4274 * may request not to allow any rx ba session and tear down existing rx ba
4192 * sessions based on system constraints such as periodic BT activity that needs 4275 * sessions based on system constraints such as periodic BT activity that needs
4193 * to limit wlan activity (eg.sco or a2dp)." 4276 * to limit wlan activity (eg.sco or a2dp)."
4194 * in such cases, the intention is to limit the duration of the rx ppdu and 4277 * in such cases, the intention is to limit the duration of the rx ppdu and
4195 * therefore prevent the peer device to use a-mpdu aggregation. 4278 * therefore prevent the peer device to use a-mpdu aggregation.
4196 * 4279 *
4197 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 4280 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4198 * @ba_rx_bitmap: Bit map of open rx ba per tid 4281 * @ba_rx_bitmap: Bit map of open rx ba per tid
4199 * @addr: & to bssid mac address 4282 * @addr: & to bssid mac address
4200 */ 4283 */
4201 void ieee80211_stop_rx_ba_session(struct ieee80211_vif *vif, u16 ba_rx_bitmap, 4284 void ieee80211_stop_rx_ba_session(struct ieee80211_vif *vif, u16 ba_rx_bitmap,
4202 const u8 *addr); 4285 const u8 *addr);
4203 4286
4204 /** 4287 /**
4205 * ieee80211_send_bar - send a BlockAckReq frame 4288 * ieee80211_send_bar - send a BlockAckReq frame
4206 * 4289 *
4207 * can be used to flush pending frames from the peer's aggregation reorder 4290 * can be used to flush pending frames from the peer's aggregation reorder
4208 * buffer. 4291 * buffer.
4209 * 4292 *
4210 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 4293 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4211 * @ra: the peer's destination address 4294 * @ra: the peer's destination address
4212 * @tid: the TID of the aggregation session 4295 * @tid: the TID of the aggregation session
4213 * @ssn: the new starting sequence number for the receiver 4296 * @ssn: the new starting sequence number for the receiver
4214 */ 4297 */
4215 void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn); 4298 void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn);
4216 4299
4217 /* Rate control API */ 4300 /* Rate control API */
4218 4301
4219 /** 4302 /**
4220 * struct ieee80211_tx_rate_control - rate control information for/from RC algo 4303 * struct ieee80211_tx_rate_control - rate control information for/from RC algo
4221 * 4304 *
4222 * @hw: The hardware the algorithm is invoked for. 4305 * @hw: The hardware the algorithm is invoked for.
4223 * @sband: The band this frame is being transmitted on. 4306 * @sband: The band this frame is being transmitted on.
4224 * @bss_conf: the current BSS configuration 4307 * @bss_conf: the current BSS configuration
4225 * @skb: the skb that will be transmitted, the control information in it needs 4308 * @skb: the skb that will be transmitted, the control information in it needs
4226 * to be filled in 4309 * to be filled in
4227 * @reported_rate: The rate control algorithm can fill this in to indicate 4310 * @reported_rate: The rate control algorithm can fill this in to indicate
4228 * which rate should be reported to userspace as the current rate and 4311 * which rate should be reported to userspace as the current rate and
4229 * used for rate calculations in the mesh network. 4312 * used for rate calculations in the mesh network.
4230 * @rts: whether RTS will be used for this frame because it is longer than the 4313 * @rts: whether RTS will be used for this frame because it is longer than the
4231 * RTS threshold 4314 * RTS threshold
4232 * @short_preamble: whether mac80211 will request short-preamble transmission 4315 * @short_preamble: whether mac80211 will request short-preamble transmission
4233 * if the selected rate supports it 4316 * if the selected rate supports it
4234 * @max_rate_idx: user-requested maximum (legacy) rate 4317 * @max_rate_idx: user-requested maximum (legacy) rate
4235 * (deprecated; this will be removed once drivers get updated to use 4318 * (deprecated; this will be removed once drivers get updated to use
4236 * rate_idx_mask) 4319 * rate_idx_mask)
4237 * @rate_idx_mask: user-requested (legacy) rate mask 4320 * @rate_idx_mask: user-requested (legacy) rate mask
4238 * @rate_idx_mcs_mask: user-requested MCS rate mask (NULL if not in use) 4321 * @rate_idx_mcs_mask: user-requested MCS rate mask (NULL if not in use)
4239 * @bss: whether this frame is sent out in AP or IBSS mode 4322 * @bss: whether this frame is sent out in AP or IBSS mode
4240 */ 4323 */
4241 struct ieee80211_tx_rate_control { 4324 struct ieee80211_tx_rate_control {
4242 struct ieee80211_hw *hw; 4325 struct ieee80211_hw *hw;
4243 struct ieee80211_supported_band *sband; 4326 struct ieee80211_supported_band *sband;
4244 struct ieee80211_bss_conf *bss_conf; 4327 struct ieee80211_bss_conf *bss_conf;
4245 struct sk_buff *skb; 4328 struct sk_buff *skb;
4246 struct ieee80211_tx_rate reported_rate; 4329 struct ieee80211_tx_rate reported_rate;
4247 bool rts, short_preamble; 4330 bool rts, short_preamble;
4248 u8 max_rate_idx; 4331 u8 max_rate_idx;
4249 u32 rate_idx_mask; 4332 u32 rate_idx_mask;
4250 u8 *rate_idx_mcs_mask; 4333 u8 *rate_idx_mcs_mask;
4251 bool bss; 4334 bool bss;
4252 }; 4335 };
4253 4336
4254 struct rate_control_ops { 4337 struct rate_control_ops {
4255 struct module *module; 4338 struct module *module;
4256 const char *name; 4339 const char *name;
4257 void *(*alloc)(struct ieee80211_hw *hw, struct dentry *debugfsdir); 4340 void *(*alloc)(struct ieee80211_hw *hw, struct dentry *debugfsdir);
4258 void (*free)(void *priv); 4341 void (*free)(void *priv);
4259 4342
4260 void *(*alloc_sta)(void *priv, struct ieee80211_sta *sta, gfp_t gfp); 4343 void *(*alloc_sta)(void *priv, struct ieee80211_sta *sta, gfp_t gfp);
4261 void (*rate_init)(void *priv, struct ieee80211_supported_band *sband, 4344 void (*rate_init)(void *priv, struct ieee80211_supported_band *sband,
4262 struct cfg80211_chan_def *chandef, 4345 struct cfg80211_chan_def *chandef,
4263 struct ieee80211_sta *sta, void *priv_sta); 4346 struct ieee80211_sta *sta, void *priv_sta);
4264 void (*rate_update)(void *priv, struct ieee80211_supported_band *sband, 4347 void (*rate_update)(void *priv, struct ieee80211_supported_band *sband,
4265 struct cfg80211_chan_def *chandef, 4348 struct cfg80211_chan_def *chandef,
4266 struct ieee80211_sta *sta, void *priv_sta, 4349 struct ieee80211_sta *sta, void *priv_sta,
4267 u32 changed); 4350 u32 changed);
4268 void (*free_sta)(void *priv, struct ieee80211_sta *sta, 4351 void (*free_sta)(void *priv, struct ieee80211_sta *sta,
4269 void *priv_sta); 4352 void *priv_sta);
4270 4353
4271 void (*tx_status)(void *priv, struct ieee80211_supported_band *sband, 4354 void (*tx_status)(void *priv, struct ieee80211_supported_band *sband,
4272 struct ieee80211_sta *sta, void *priv_sta, 4355 struct ieee80211_sta *sta, void *priv_sta,
4273 struct sk_buff *skb); 4356 struct sk_buff *skb);
4274 void (*get_rate)(void *priv, struct ieee80211_sta *sta, void *priv_sta, 4357 void (*get_rate)(void *priv, struct ieee80211_sta *sta, void *priv_sta,
4275 struct ieee80211_tx_rate_control *txrc); 4358 struct ieee80211_tx_rate_control *txrc);
4276 4359
4277 void (*add_sta_debugfs)(void *priv, void *priv_sta, 4360 void (*add_sta_debugfs)(void *priv, void *priv_sta,
4278 struct dentry *dir); 4361 struct dentry *dir);
4279 void (*remove_sta_debugfs)(void *priv, void *priv_sta); 4362 void (*remove_sta_debugfs)(void *priv, void *priv_sta);
4280 }; 4363 };
4281 4364
4282 static inline int rate_supported(struct ieee80211_sta *sta, 4365 static inline int rate_supported(struct ieee80211_sta *sta,
4283 enum ieee80211_band band, 4366 enum ieee80211_band band,
4284 int index) 4367 int index)
4285 { 4368 {
4286 return (sta == NULL || sta->supp_rates[band] & BIT(index)); 4369 return (sta == NULL || sta->supp_rates[band] & BIT(index));
4287 } 4370 }
4288 4371
4289 /** 4372 /**
4290 * rate_control_send_low - helper for drivers for management/no-ack frames 4373 * rate_control_send_low - helper for drivers for management/no-ack frames
4291 * 4374 *
4292 * Rate control algorithms that agree to use the lowest rate to 4375 * Rate control algorithms that agree to use the lowest rate to
4293 * send management frames and NO_ACK data with the respective hw 4376 * send management frames and NO_ACK data with the respective hw
4294 * retries should use this in the beginning of their mac80211 get_rate 4377 * retries should use this in the beginning of their mac80211 get_rate
4295 * callback. If true is returned the rate control can simply return. 4378 * callback. If true is returned the rate control can simply return.
4296 * If false is returned we guarantee that sta and sta and priv_sta is 4379 * If false is returned we guarantee that sta and sta and priv_sta is
4297 * not null. 4380 * not null.
4298 * 4381 *
4299 * Rate control algorithms wishing to do more intelligent selection of 4382 * Rate control algorithms wishing to do more intelligent selection of
4300 * rate for multicast/broadcast frames may choose to not use this. 4383 * rate for multicast/broadcast frames may choose to not use this.
4301 * 4384 *
4302 * @sta: &struct ieee80211_sta pointer to the target destination. Note 4385 * @sta: &struct ieee80211_sta pointer to the target destination. Note
4303 * that this may be null. 4386 * that this may be null.
4304 * @priv_sta: private rate control structure. This may be null. 4387 * @priv_sta: private rate control structure. This may be null.
4305 * @txrc: rate control information we sholud populate for mac80211. 4388 * @txrc: rate control information we sholud populate for mac80211.
4306 */ 4389 */
4307 bool rate_control_send_low(struct ieee80211_sta *sta, 4390 bool rate_control_send_low(struct ieee80211_sta *sta,
4308 void *priv_sta, 4391 void *priv_sta,
4309 struct ieee80211_tx_rate_control *txrc); 4392 struct ieee80211_tx_rate_control *txrc);
4310 4393
4311 4394
4312 static inline s8 4395 static inline s8
4313 rate_lowest_index(struct ieee80211_supported_band *sband, 4396 rate_lowest_index(struct ieee80211_supported_band *sband,
4314 struct ieee80211_sta *sta) 4397 struct ieee80211_sta *sta)
4315 { 4398 {
4316 int i; 4399 int i;
4317 4400
4318 for (i = 0; i < sband->n_bitrates; i++) 4401 for (i = 0; i < sband->n_bitrates; i++)
4319 if (rate_supported(sta, sband->band, i)) 4402 if (rate_supported(sta, sband->band, i))
4320 return i; 4403 return i;
4321 4404
4322 /* warn when we cannot find a rate. */ 4405 /* warn when we cannot find a rate. */
4323 WARN_ON_ONCE(1); 4406 WARN_ON_ONCE(1);
4324 4407
4325 /* and return 0 (the lowest index) */ 4408 /* and return 0 (the lowest index) */
4326 return 0; 4409 return 0;
4327 } 4410 }
4328 4411
4329 static inline 4412 static inline
4330 bool rate_usable_index_exists(struct ieee80211_supported_band *sband, 4413 bool rate_usable_index_exists(struct ieee80211_supported_band *sband,
4331 struct ieee80211_sta *sta) 4414 struct ieee80211_sta *sta)
4332 { 4415 {
4333 unsigned int i; 4416 unsigned int i;
4334 4417
4335 for (i = 0; i < sband->n_bitrates; i++) 4418 for (i = 0; i < sband->n_bitrates; i++)
4336 if (rate_supported(sta, sband->band, i)) 4419 if (rate_supported(sta, sband->band, i))
4337 return true; 4420 return true;
4338 return false; 4421 return false;
4339 } 4422 }
4340 4423
4341 /** 4424 /**
4342 * rate_control_set_rates - pass the sta rate selection to mac80211/driver 4425 * rate_control_set_rates - pass the sta rate selection to mac80211/driver
4343 * 4426 *
4344 * When not doing a rate control probe to test rates, rate control should pass 4427 * When not doing a rate control probe to test rates, rate control should pass
4345 * its rate selection to mac80211. If the driver supports receiving a station 4428 * its rate selection to mac80211. If the driver supports receiving a station
4346 * rate table, it will use it to ensure that frames are always sent based on 4429 * rate table, it will use it to ensure that frames are always sent based on
4347 * the most recent rate control module decision. 4430 * the most recent rate control module decision.
4348 * 4431 *
4349 * @hw: pointer as obtained from ieee80211_alloc_hw() 4432 * @hw: pointer as obtained from ieee80211_alloc_hw()
4350 * @pubsta: &struct ieee80211_sta pointer to the target destination. 4433 * @pubsta: &struct ieee80211_sta pointer to the target destination.
4351 * @rates: new tx rate set to be used for this station. 4434 * @rates: new tx rate set to be used for this station.
4352 */ 4435 */
4353 int rate_control_set_rates(struct ieee80211_hw *hw, 4436 int rate_control_set_rates(struct ieee80211_hw *hw,
4354 struct ieee80211_sta *pubsta, 4437 struct ieee80211_sta *pubsta,
4355 struct ieee80211_sta_rates *rates); 4438 struct ieee80211_sta_rates *rates);
4356 4439
4357 int ieee80211_rate_control_register(struct rate_control_ops *ops); 4440 int ieee80211_rate_control_register(struct rate_control_ops *ops);
4358 void ieee80211_rate_control_unregister(struct rate_control_ops *ops); 4441 void ieee80211_rate_control_unregister(struct rate_control_ops *ops);
4359 4442
4360 static inline bool 4443 static inline bool
4361 conf_is_ht20(struct ieee80211_conf *conf) 4444 conf_is_ht20(struct ieee80211_conf *conf)
4362 { 4445 {
4363 return conf->chandef.width == NL80211_CHAN_WIDTH_20; 4446 return conf->chandef.width == NL80211_CHAN_WIDTH_20;
4364 } 4447 }
4365 4448
4366 static inline bool 4449 static inline bool
4367 conf_is_ht40_minus(struct ieee80211_conf *conf) 4450 conf_is_ht40_minus(struct ieee80211_conf *conf)
4368 { 4451 {
4369 return conf->chandef.width == NL80211_CHAN_WIDTH_40 && 4452 return conf->chandef.width == NL80211_CHAN_WIDTH_40 &&
4370 conf->chandef.center_freq1 < conf->chandef.chan->center_freq; 4453 conf->chandef.center_freq1 < conf->chandef.chan->center_freq;
4371 } 4454 }
4372 4455
4373 static inline bool 4456 static inline bool
4374 conf_is_ht40_plus(struct ieee80211_conf *conf) 4457 conf_is_ht40_plus(struct ieee80211_conf *conf)
4375 { 4458 {
4376 return conf->chandef.width == NL80211_CHAN_WIDTH_40 && 4459 return conf->chandef.width == NL80211_CHAN_WIDTH_40 &&
4377 conf->chandef.center_freq1 > conf->chandef.chan->center_freq; 4460 conf->chandef.center_freq1 > conf->chandef.chan->center_freq;
4378 } 4461 }
4379 4462
4380 static inline bool 4463 static inline bool
4381 conf_is_ht40(struct ieee80211_conf *conf) 4464 conf_is_ht40(struct ieee80211_conf *conf)
4382 { 4465 {
4383 return conf->chandef.width == NL80211_CHAN_WIDTH_40; 4466 return conf->chandef.width == NL80211_CHAN_WIDTH_40;
4384 } 4467 }
4385 4468
4386 static inline bool 4469 static inline bool
4387 conf_is_ht(struct ieee80211_conf *conf) 4470 conf_is_ht(struct ieee80211_conf *conf)
4388 { 4471 {
4389 return conf->chandef.width != NL80211_CHAN_WIDTH_20_NOHT; 4472 return conf->chandef.width != NL80211_CHAN_WIDTH_20_NOHT;
4390 } 4473 }
4391 4474
4392 static inline enum nl80211_iftype 4475 static inline enum nl80211_iftype
4393 ieee80211_iftype_p2p(enum nl80211_iftype type, bool p2p) 4476 ieee80211_iftype_p2p(enum nl80211_iftype type, bool p2p)
4394 { 4477 {
4395 if (p2p) { 4478 if (p2p) {
4396 switch (type) { 4479 switch (type) {
4397 case NL80211_IFTYPE_STATION: 4480 case NL80211_IFTYPE_STATION:
4398 return NL80211_IFTYPE_P2P_CLIENT; 4481 return NL80211_IFTYPE_P2P_CLIENT;
4399 case NL80211_IFTYPE_AP: 4482 case NL80211_IFTYPE_AP:
4400 return NL80211_IFTYPE_P2P_GO; 4483 return NL80211_IFTYPE_P2P_GO;
4401 default: 4484 default:
4402 break; 4485 break;
4403 } 4486 }
4404 } 4487 }
4405 return type; 4488 return type;
4406 } 4489 }
4407 4490
4408 static inline enum nl80211_iftype 4491 static inline enum nl80211_iftype
4409 ieee80211_vif_type_p2p(struct ieee80211_vif *vif) 4492 ieee80211_vif_type_p2p(struct ieee80211_vif *vif)
4410 { 4493 {
4411 return ieee80211_iftype_p2p(vif->type, vif->p2p); 4494 return ieee80211_iftype_p2p(vif->type, vif->p2p);
4412 } 4495 }
4413 4496
4414 void ieee80211_enable_rssi_reports(struct ieee80211_vif *vif, 4497 void ieee80211_enable_rssi_reports(struct ieee80211_vif *vif,
4415 int rssi_min_thold, 4498 int rssi_min_thold,
4416 int rssi_max_thold); 4499 int rssi_max_thold);
4417 4500
4418 void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif); 4501 void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif);
4419 4502
4420 /** 4503 /**
4421 * ieee80211_ave_rssi - report the average RSSI for the specified interface 4504 * ieee80211_ave_rssi - report the average RSSI for the specified interface
4422 * 4505 *
4423 * @vif: the specified virtual interface 4506 * @vif: the specified virtual interface
4424 * 4507 *
4425 * Note: This function assumes that the given vif is valid. 4508 * Note: This function assumes that the given vif is valid.
4426 * 4509 *
4427 * Return: The average RSSI value for the requested interface, or 0 if not 4510 * Return: The average RSSI value for the requested interface, or 0 if not
4428 * applicable. 4511 * applicable.
4429 */ 4512 */
4430 int ieee80211_ave_rssi(struct ieee80211_vif *vif); 4513 int ieee80211_ave_rssi(struct ieee80211_vif *vif);
4431 4514
4432 /** 4515 /**
4433 * ieee80211_report_wowlan_wakeup - report WoWLAN wakeup 4516 * ieee80211_report_wowlan_wakeup - report WoWLAN wakeup
4434 * @vif: virtual interface 4517 * @vif: virtual interface
4435 * @wakeup: wakeup reason(s) 4518 * @wakeup: wakeup reason(s)
4436 * @gfp: allocation flags 4519 * @gfp: allocation flags
4437 * 4520 *
4438 * See cfg80211_report_wowlan_wakeup(). 4521 * See cfg80211_report_wowlan_wakeup().
4439 */ 4522 */
4440 void ieee80211_report_wowlan_wakeup(struct ieee80211_vif *vif, 4523 void ieee80211_report_wowlan_wakeup(struct ieee80211_vif *vif,
4441 struct cfg80211_wowlan_wakeup *wakeup, 4524 struct cfg80211_wowlan_wakeup *wakeup,
4442 gfp_t gfp); 4525 gfp_t gfp);
4443 4526
4444 #endif /* MAC80211_H */ 4527 #endif /* MAC80211_H */
4445 4528
1 /* 1 /*
2 * Copyright 2002-2005, Instant802 Networks, Inc. 2 * Copyright 2002-2005, Instant802 Networks, Inc.
3 * Copyright 2005-2006, Devicescape Software, Inc. 3 * Copyright 2005-2006, Devicescape Software, Inc.
4 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 4 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
5 * Copyright 2007-2008 Johannes Berg <johannes@sipsolutions.net> 5 * Copyright 2007-2008 Johannes Berg <johannes@sipsolutions.net>
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 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 8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation. 9 * published by the Free Software Foundation.
10 */ 10 */
11 11
12 #include <linux/if_ether.h> 12 #include <linux/if_ether.h>
13 #include <linux/etherdevice.h> 13 #include <linux/etherdevice.h>
14 #include <linux/list.h> 14 #include <linux/list.h>
15 #include <linux/rcupdate.h> 15 #include <linux/rcupdate.h>
16 #include <linux/rtnetlink.h> 16 #include <linux/rtnetlink.h>
17 #include <linux/slab.h> 17 #include <linux/slab.h>
18 #include <linux/export.h> 18 #include <linux/export.h>
19 #include <net/mac80211.h> 19 #include <net/mac80211.h>
20 #include <asm/unaligned.h> 20 #include <asm/unaligned.h>
21 #include "ieee80211_i.h" 21 #include "ieee80211_i.h"
22 #include "driver-ops.h" 22 #include "driver-ops.h"
23 #include "debugfs_key.h" 23 #include "debugfs_key.h"
24 #include "aes_ccm.h" 24 #include "aes_ccm.h"
25 #include "aes_cmac.h" 25 #include "aes_cmac.h"
26 26
27 27
28 /** 28 /**
29 * DOC: Key handling basics 29 * DOC: Key handling basics
30 * 30 *
31 * Key handling in mac80211 is done based on per-interface (sub_if_data) 31 * Key handling in mac80211 is done based on per-interface (sub_if_data)
32 * keys and per-station keys. Since each station belongs to an interface, 32 * keys and per-station keys. Since each station belongs to an interface,
33 * each station key also belongs to that interface. 33 * each station key also belongs to that interface.
34 * 34 *
35 * Hardware acceleration is done on a best-effort basis for algorithms 35 * Hardware acceleration is done on a best-effort basis for algorithms
36 * that are implemented in software, for each key the hardware is asked 36 * that are implemented in software, for each key the hardware is asked
37 * to enable that key for offloading but if it cannot do that the key is 37 * to enable that key for offloading but if it cannot do that the key is
38 * simply kept for software encryption (unless it is for an algorithm 38 * simply kept for software encryption (unless it is for an algorithm
39 * that isn't implemented in software). 39 * that isn't implemented in software).
40 * There is currently no way of knowing whether a key is handled in SW 40 * There is currently no way of knowing whether a key is handled in SW
41 * or HW except by looking into debugfs. 41 * or HW except by looking into debugfs.
42 * 42 *
43 * All key management is internally protected by a mutex. Within all 43 * All key management is internally protected by a mutex. Within all
44 * other parts of mac80211, key references are, just as STA structure 44 * other parts of mac80211, key references are, just as STA structure
45 * references, protected by RCU. Note, however, that some things are 45 * references, protected by RCU. Note, however, that some things are
46 * unprotected, namely the key->sta dereferences within the hardware 46 * unprotected, namely the key->sta dereferences within the hardware
47 * acceleration functions. This means that sta_info_destroy() must 47 * acceleration functions. This means that sta_info_destroy() must
48 * remove the key which waits for an RCU grace period. 48 * remove the key which waits for an RCU grace period.
49 */ 49 */
50 50
51 static const u8 bcast_addr[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; 51 static const u8 bcast_addr[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
52 52
53 static void assert_key_lock(struct ieee80211_local *local) 53 static void assert_key_lock(struct ieee80211_local *local)
54 { 54 {
55 lockdep_assert_held(&local->key_mtx); 55 lockdep_assert_held(&local->key_mtx);
56 } 56 }
57 57
58 static void increment_tailroom_need_count(struct ieee80211_sub_if_data *sdata) 58 static void increment_tailroom_need_count(struct ieee80211_sub_if_data *sdata)
59 { 59 {
60 /* 60 /*
61 * When this count is zero, SKB resizing for allocating tailroom 61 * When this count is zero, SKB resizing for allocating tailroom
62 * for IV or MMIC is skipped. But, this check has created two race 62 * for IV or MMIC is skipped. But, this check has created two race
63 * cases in xmit path while transiting from zero count to one: 63 * cases in xmit path while transiting from zero count to one:
64 * 64 *
65 * 1. SKB resize was skipped because no key was added but just before 65 * 1. SKB resize was skipped because no key was added but just before
66 * the xmit key is added and SW encryption kicks off. 66 * the xmit key is added and SW encryption kicks off.
67 * 67 *
68 * 2. SKB resize was skipped because all the keys were hw planted but 68 * 2. SKB resize was skipped because all the keys were hw planted but
69 * just before xmit one of the key is deleted and SW encryption kicks 69 * just before xmit one of the key is deleted and SW encryption kicks
70 * off. 70 * off.
71 * 71 *
72 * In both the above case SW encryption will find not enough space for 72 * In both the above case SW encryption will find not enough space for
73 * tailroom and exits with WARN_ON. (See WARN_ONs at wpa.c) 73 * tailroom and exits with WARN_ON. (See WARN_ONs at wpa.c)
74 * 74 *
75 * Solution has been explained at 75 * Solution has been explained at
76 * http://mid.gmane.org/1308590980.4322.19.camel@jlt3.sipsolutions.net 76 * http://mid.gmane.org/1308590980.4322.19.camel@jlt3.sipsolutions.net
77 */ 77 */
78 78
79 if (!sdata->crypto_tx_tailroom_needed_cnt++) { 79 if (!sdata->crypto_tx_tailroom_needed_cnt++) {
80 /* 80 /*
81 * Flush all XMIT packets currently using HW encryption or no 81 * Flush all XMIT packets currently using HW encryption or no
82 * encryption at all if the count transition is from 0 -> 1. 82 * encryption at all if the count transition is from 0 -> 1.
83 */ 83 */
84 synchronize_net(); 84 synchronize_net();
85 } 85 }
86 } 86 }
87 87
88 static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key) 88 static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key)
89 { 89 {
90 struct ieee80211_sub_if_data *sdata; 90 struct ieee80211_sub_if_data *sdata;
91 struct sta_info *sta; 91 struct sta_info *sta;
92 int ret; 92 int ret;
93 93
94 might_sleep(); 94 might_sleep();
95 95
96 if (key->flags & KEY_FLAG_TAINTED)
97 return -EINVAL;
98
96 if (!key->local->ops->set_key) 99 if (!key->local->ops->set_key)
97 goto out_unsupported; 100 goto out_unsupported;
98 101
99 assert_key_lock(key->local); 102 assert_key_lock(key->local);
100 103
101 sta = key->sta; 104 sta = key->sta;
102 105
103 /* 106 /*
104 * If this is a per-STA GTK, check if it 107 * If this is a per-STA GTK, check if it
105 * is supported; if not, return. 108 * is supported; if not, return.
106 */ 109 */
107 if (sta && !(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE) && 110 if (sta && !(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE) &&
108 !(key->local->hw.flags & IEEE80211_HW_SUPPORTS_PER_STA_GTK)) 111 !(key->local->hw.flags & IEEE80211_HW_SUPPORTS_PER_STA_GTK))
109 goto out_unsupported; 112 goto out_unsupported;
110 113
111 if (sta && !sta->uploaded) 114 if (sta && !sta->uploaded)
112 goto out_unsupported; 115 goto out_unsupported;
113 116
114 sdata = key->sdata; 117 sdata = key->sdata;
115 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { 118 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
116 /* 119 /*
117 * The driver doesn't know anything about VLAN interfaces. 120 * The driver doesn't know anything about VLAN interfaces.
118 * Hence, don't send GTKs for VLAN interfaces to the driver. 121 * Hence, don't send GTKs for VLAN interfaces to the driver.
119 */ 122 */
120 if (!(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE)) 123 if (!(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE))
121 goto out_unsupported; 124 goto out_unsupported;
122 } 125 }
123 126
124 ret = drv_set_key(key->local, SET_KEY, sdata, 127 ret = drv_set_key(key->local, SET_KEY, sdata,
125 sta ? &sta->sta : NULL, &key->conf); 128 sta ? &sta->sta : NULL, &key->conf);
126 129
127 if (!ret) { 130 if (!ret) {
128 key->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE; 131 key->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE;
129 132
130 if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) || 133 if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) ||
131 (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) || 134 (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) ||
132 (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE))) 135 (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)))
133 sdata->crypto_tx_tailroom_needed_cnt--; 136 sdata->crypto_tx_tailroom_needed_cnt--;
134 137
135 WARN_ON((key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE) && 138 WARN_ON((key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE) &&
136 (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)); 139 (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV));
137 140
138 return 0; 141 return 0;
139 } 142 }
140 143
141 if (ret != -ENOSPC && ret != -EOPNOTSUPP) 144 if (ret != -ENOSPC && ret != -EOPNOTSUPP)
142 sdata_err(sdata, 145 sdata_err(sdata,
143 "failed to set key (%d, %pM) to hardware (%d)\n", 146 "failed to set key (%d, %pM) to hardware (%d)\n",
144 key->conf.keyidx, 147 key->conf.keyidx,
145 sta ? sta->sta.addr : bcast_addr, ret); 148 sta ? sta->sta.addr : bcast_addr, ret);
146 149
147 out_unsupported: 150 out_unsupported:
148 switch (key->conf.cipher) { 151 switch (key->conf.cipher) {
149 case WLAN_CIPHER_SUITE_WEP40: 152 case WLAN_CIPHER_SUITE_WEP40:
150 case WLAN_CIPHER_SUITE_WEP104: 153 case WLAN_CIPHER_SUITE_WEP104:
151 case WLAN_CIPHER_SUITE_TKIP: 154 case WLAN_CIPHER_SUITE_TKIP:
152 case WLAN_CIPHER_SUITE_CCMP: 155 case WLAN_CIPHER_SUITE_CCMP:
153 case WLAN_CIPHER_SUITE_AES_CMAC: 156 case WLAN_CIPHER_SUITE_AES_CMAC:
154 /* all of these we can do in software */ 157 /* all of these we can do in software */
155 return 0; 158 return 0;
156 default: 159 default:
157 return -EINVAL; 160 return -EINVAL;
158 } 161 }
159 } 162 }
160 163
161 static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key) 164 static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key)
162 { 165 {
163 struct ieee80211_sub_if_data *sdata; 166 struct ieee80211_sub_if_data *sdata;
164 struct sta_info *sta; 167 struct sta_info *sta;
165 int ret; 168 int ret;
166 169
167 might_sleep(); 170 might_sleep();
168 171
169 if (!key || !key->local->ops->set_key) 172 if (!key || !key->local->ops->set_key)
170 return; 173 return;
171 174
172 assert_key_lock(key->local); 175 assert_key_lock(key->local);
173 176
174 if (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)) 177 if (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
175 return; 178 return;
176 179
177 sta = key->sta; 180 sta = key->sta;
178 sdata = key->sdata; 181 sdata = key->sdata;
179 182
180 if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) || 183 if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) ||
181 (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) || 184 (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) ||
182 (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE))) 185 (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)))
183 increment_tailroom_need_count(sdata); 186 increment_tailroom_need_count(sdata);
184 187
185 ret = drv_set_key(key->local, DISABLE_KEY, sdata, 188 ret = drv_set_key(key->local, DISABLE_KEY, sdata,
186 sta ? &sta->sta : NULL, &key->conf); 189 sta ? &sta->sta : NULL, &key->conf);
187 190
188 if (ret) 191 if (ret)
189 sdata_err(sdata, 192 sdata_err(sdata,
190 "failed to remove key (%d, %pM) from hardware (%d)\n", 193 "failed to remove key (%d, %pM) from hardware (%d)\n",
191 key->conf.keyidx, 194 key->conf.keyidx,
192 sta ? sta->sta.addr : bcast_addr, ret); 195 sta ? sta->sta.addr : bcast_addr, ret);
193 196
194 key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE; 197 key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
195 } 198 }
196 199
197 static void __ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, 200 static void __ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata,
198 int idx, bool uni, bool multi) 201 int idx, bool uni, bool multi)
199 { 202 {
200 struct ieee80211_key *key = NULL; 203 struct ieee80211_key *key = NULL;
201 204
202 assert_key_lock(sdata->local); 205 assert_key_lock(sdata->local);
203 206
204 if (idx >= 0 && idx < NUM_DEFAULT_KEYS) 207 if (idx >= 0 && idx < NUM_DEFAULT_KEYS)
205 key = key_mtx_dereference(sdata->local, sdata->keys[idx]); 208 key = key_mtx_dereference(sdata->local, sdata->keys[idx]);
206 209
207 if (uni) { 210 if (uni) {
208 rcu_assign_pointer(sdata->default_unicast_key, key); 211 rcu_assign_pointer(sdata->default_unicast_key, key);
209 drv_set_default_unicast_key(sdata->local, sdata, idx); 212 drv_set_default_unicast_key(sdata->local, sdata, idx);
210 } 213 }
211 214
212 if (multi) 215 if (multi)
213 rcu_assign_pointer(sdata->default_multicast_key, key); 216 rcu_assign_pointer(sdata->default_multicast_key, key);
214 217
215 ieee80211_debugfs_key_update_default(sdata); 218 ieee80211_debugfs_key_update_default(sdata);
216 } 219 }
217 220
218 void ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, int idx, 221 void ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, int idx,
219 bool uni, bool multi) 222 bool uni, bool multi)
220 { 223 {
221 mutex_lock(&sdata->local->key_mtx); 224 mutex_lock(&sdata->local->key_mtx);
222 __ieee80211_set_default_key(sdata, idx, uni, multi); 225 __ieee80211_set_default_key(sdata, idx, uni, multi);
223 mutex_unlock(&sdata->local->key_mtx); 226 mutex_unlock(&sdata->local->key_mtx);
224 } 227 }
225 228
226 static void 229 static void
227 __ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata, int idx) 230 __ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata, int idx)
228 { 231 {
229 struct ieee80211_key *key = NULL; 232 struct ieee80211_key *key = NULL;
230 233
231 assert_key_lock(sdata->local); 234 assert_key_lock(sdata->local);
232 235
233 if (idx >= NUM_DEFAULT_KEYS && 236 if (idx >= NUM_DEFAULT_KEYS &&
234 idx < NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS) 237 idx < NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS)
235 key = key_mtx_dereference(sdata->local, sdata->keys[idx]); 238 key = key_mtx_dereference(sdata->local, sdata->keys[idx]);
236 239
237 rcu_assign_pointer(sdata->default_mgmt_key, key); 240 rcu_assign_pointer(sdata->default_mgmt_key, key);
238 241
239 ieee80211_debugfs_key_update_default(sdata); 242 ieee80211_debugfs_key_update_default(sdata);
240 } 243 }
241 244
242 void ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata, 245 void ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata,
243 int idx) 246 int idx)
244 { 247 {
245 mutex_lock(&sdata->local->key_mtx); 248 mutex_lock(&sdata->local->key_mtx);
246 __ieee80211_set_default_mgmt_key(sdata, idx); 249 __ieee80211_set_default_mgmt_key(sdata, idx);
247 mutex_unlock(&sdata->local->key_mtx); 250 mutex_unlock(&sdata->local->key_mtx);
248 } 251 }
249 252
250 253
251 static void ieee80211_key_replace(struct ieee80211_sub_if_data *sdata, 254 static void ieee80211_key_replace(struct ieee80211_sub_if_data *sdata,
252 struct sta_info *sta, 255 struct sta_info *sta,
253 bool pairwise, 256 bool pairwise,
254 struct ieee80211_key *old, 257 struct ieee80211_key *old,
255 struct ieee80211_key *new) 258 struct ieee80211_key *new)
256 { 259 {
257 int idx; 260 int idx;
258 bool defunikey, defmultikey, defmgmtkey; 261 bool defunikey, defmultikey, defmgmtkey;
259 262
260 if (new) 263 if (new)
261 list_add_tail(&new->list, &sdata->key_list); 264 list_add_tail(&new->list, &sdata->key_list);
262 265
263 if (sta && pairwise) { 266 if (sta && pairwise) {
264 rcu_assign_pointer(sta->ptk, new); 267 rcu_assign_pointer(sta->ptk, new);
265 } else if (sta) { 268 } else if (sta) {
266 if (old) 269 if (old)
267 idx = old->conf.keyidx; 270 idx = old->conf.keyidx;
268 else 271 else
269 idx = new->conf.keyidx; 272 idx = new->conf.keyidx;
270 rcu_assign_pointer(sta->gtk[idx], new); 273 rcu_assign_pointer(sta->gtk[idx], new);
271 } else { 274 } else {
272 WARN_ON(new && old && new->conf.keyidx != old->conf.keyidx); 275 WARN_ON(new && old && new->conf.keyidx != old->conf.keyidx);
273 276
274 if (old) 277 if (old)
275 idx = old->conf.keyidx; 278 idx = old->conf.keyidx;
276 else 279 else
277 idx = new->conf.keyidx; 280 idx = new->conf.keyidx;
278 281
279 defunikey = old && 282 defunikey = old &&
280 old == key_mtx_dereference(sdata->local, 283 old == key_mtx_dereference(sdata->local,
281 sdata->default_unicast_key); 284 sdata->default_unicast_key);
282 defmultikey = old && 285 defmultikey = old &&
283 old == key_mtx_dereference(sdata->local, 286 old == key_mtx_dereference(sdata->local,
284 sdata->default_multicast_key); 287 sdata->default_multicast_key);
285 defmgmtkey = old && 288 defmgmtkey = old &&
286 old == key_mtx_dereference(sdata->local, 289 old == key_mtx_dereference(sdata->local,
287 sdata->default_mgmt_key); 290 sdata->default_mgmt_key);
288 291
289 if (defunikey && !new) 292 if (defunikey && !new)
290 __ieee80211_set_default_key(sdata, -1, true, false); 293 __ieee80211_set_default_key(sdata, -1, true, false);
291 if (defmultikey && !new) 294 if (defmultikey && !new)
292 __ieee80211_set_default_key(sdata, -1, false, true); 295 __ieee80211_set_default_key(sdata, -1, false, true);
293 if (defmgmtkey && !new) 296 if (defmgmtkey && !new)
294 __ieee80211_set_default_mgmt_key(sdata, -1); 297 __ieee80211_set_default_mgmt_key(sdata, -1);
295 298
296 rcu_assign_pointer(sdata->keys[idx], new); 299 rcu_assign_pointer(sdata->keys[idx], new);
297 if (defunikey && new) 300 if (defunikey && new)
298 __ieee80211_set_default_key(sdata, new->conf.keyidx, 301 __ieee80211_set_default_key(sdata, new->conf.keyidx,
299 true, false); 302 true, false);
300 if (defmultikey && new) 303 if (defmultikey && new)
301 __ieee80211_set_default_key(sdata, new->conf.keyidx, 304 __ieee80211_set_default_key(sdata, new->conf.keyidx,
302 false, true); 305 false, true);
303 if (defmgmtkey && new) 306 if (defmgmtkey && new)
304 __ieee80211_set_default_mgmt_key(sdata, 307 __ieee80211_set_default_mgmt_key(sdata,
305 new->conf.keyidx); 308 new->conf.keyidx);
306 } 309 }
307 310
308 if (old) 311 if (old)
309 list_del(&old->list); 312 list_del(&old->list);
310 } 313 }
311 314
312 struct ieee80211_key *ieee80211_key_alloc(u32 cipher, int idx, size_t key_len, 315 struct ieee80211_key *ieee80211_key_alloc(u32 cipher, int idx, size_t key_len,
313 const u8 *key_data, 316 const u8 *key_data,
314 size_t seq_len, const u8 *seq) 317 size_t seq_len, const u8 *seq)
315 { 318 {
316 struct ieee80211_key *key; 319 struct ieee80211_key *key;
317 int i, j, err; 320 int i, j, err;
318 321
319 BUG_ON(idx < 0 || idx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS); 322 BUG_ON(idx < 0 || idx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS);
320 323
321 key = kzalloc(sizeof(struct ieee80211_key) + key_len, GFP_KERNEL); 324 key = kzalloc(sizeof(struct ieee80211_key) + key_len, GFP_KERNEL);
322 if (!key) 325 if (!key)
323 return ERR_PTR(-ENOMEM); 326 return ERR_PTR(-ENOMEM);
324 327
325 /* 328 /*
326 * Default to software encryption; we'll later upload the 329 * Default to software encryption; we'll later upload the
327 * key to the hardware if possible. 330 * key to the hardware if possible.
328 */ 331 */
329 key->conf.flags = 0; 332 key->conf.flags = 0;
330 key->flags = 0; 333 key->flags = 0;
331 334
332 key->conf.cipher = cipher; 335 key->conf.cipher = cipher;
333 key->conf.keyidx = idx; 336 key->conf.keyidx = idx;
334 key->conf.keylen = key_len; 337 key->conf.keylen = key_len;
335 switch (cipher) { 338 switch (cipher) {
336 case WLAN_CIPHER_SUITE_WEP40: 339 case WLAN_CIPHER_SUITE_WEP40:
337 case WLAN_CIPHER_SUITE_WEP104: 340 case WLAN_CIPHER_SUITE_WEP104:
338 key->conf.iv_len = IEEE80211_WEP_IV_LEN; 341 key->conf.iv_len = IEEE80211_WEP_IV_LEN;
339 key->conf.icv_len = IEEE80211_WEP_ICV_LEN; 342 key->conf.icv_len = IEEE80211_WEP_ICV_LEN;
340 break; 343 break;
341 case WLAN_CIPHER_SUITE_TKIP: 344 case WLAN_CIPHER_SUITE_TKIP:
342 key->conf.iv_len = IEEE80211_TKIP_IV_LEN; 345 key->conf.iv_len = IEEE80211_TKIP_IV_LEN;
343 key->conf.icv_len = IEEE80211_TKIP_ICV_LEN; 346 key->conf.icv_len = IEEE80211_TKIP_ICV_LEN;
344 if (seq) { 347 if (seq) {
345 for (i = 0; i < IEEE80211_NUM_TIDS; i++) { 348 for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
346 key->u.tkip.rx[i].iv32 = 349 key->u.tkip.rx[i].iv32 =
347 get_unaligned_le32(&seq[2]); 350 get_unaligned_le32(&seq[2]);
348 key->u.tkip.rx[i].iv16 = 351 key->u.tkip.rx[i].iv16 =
349 get_unaligned_le16(seq); 352 get_unaligned_le16(seq);
350 } 353 }
351 } 354 }
352 spin_lock_init(&key->u.tkip.txlock); 355 spin_lock_init(&key->u.tkip.txlock);
353 break; 356 break;
354 case WLAN_CIPHER_SUITE_CCMP: 357 case WLAN_CIPHER_SUITE_CCMP:
355 key->conf.iv_len = IEEE80211_CCMP_HDR_LEN; 358 key->conf.iv_len = IEEE80211_CCMP_HDR_LEN;
356 key->conf.icv_len = IEEE80211_CCMP_MIC_LEN; 359 key->conf.icv_len = IEEE80211_CCMP_MIC_LEN;
357 if (seq) { 360 if (seq) {
358 for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++) 361 for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++)
359 for (j = 0; j < IEEE80211_CCMP_PN_LEN; j++) 362 for (j = 0; j < IEEE80211_CCMP_PN_LEN; j++)
360 key->u.ccmp.rx_pn[i][j] = 363 key->u.ccmp.rx_pn[i][j] =
361 seq[IEEE80211_CCMP_PN_LEN - j - 1]; 364 seq[IEEE80211_CCMP_PN_LEN - j - 1];
362 } 365 }
363 /* 366 /*
364 * Initialize AES key state here as an optimization so that 367 * Initialize AES key state here as an optimization so that
365 * it does not need to be initialized for every packet. 368 * it does not need to be initialized for every packet.
366 */ 369 */
367 key->u.ccmp.tfm = ieee80211_aes_key_setup_encrypt(key_data); 370 key->u.ccmp.tfm = ieee80211_aes_key_setup_encrypt(key_data);
368 if (IS_ERR(key->u.ccmp.tfm)) { 371 if (IS_ERR(key->u.ccmp.tfm)) {
369 err = PTR_ERR(key->u.ccmp.tfm); 372 err = PTR_ERR(key->u.ccmp.tfm);
370 kfree(key); 373 kfree(key);
371 return ERR_PTR(err); 374 return ERR_PTR(err);
372 } 375 }
373 break; 376 break;
374 case WLAN_CIPHER_SUITE_AES_CMAC: 377 case WLAN_CIPHER_SUITE_AES_CMAC:
375 key->conf.iv_len = 0; 378 key->conf.iv_len = 0;
376 key->conf.icv_len = sizeof(struct ieee80211_mmie); 379 key->conf.icv_len = sizeof(struct ieee80211_mmie);
377 if (seq) 380 if (seq)
378 for (j = 0; j < IEEE80211_CMAC_PN_LEN; j++) 381 for (j = 0; j < IEEE80211_CMAC_PN_LEN; j++)
379 key->u.aes_cmac.rx_pn[j] = 382 key->u.aes_cmac.rx_pn[j] =
380 seq[IEEE80211_CMAC_PN_LEN - j - 1]; 383 seq[IEEE80211_CMAC_PN_LEN - j - 1];
381 /* 384 /*
382 * Initialize AES key state here as an optimization so that 385 * Initialize AES key state here as an optimization so that
383 * it does not need to be initialized for every packet. 386 * it does not need to be initialized for every packet.
384 */ 387 */
385 key->u.aes_cmac.tfm = 388 key->u.aes_cmac.tfm =
386 ieee80211_aes_cmac_key_setup(key_data); 389 ieee80211_aes_cmac_key_setup(key_data);
387 if (IS_ERR(key->u.aes_cmac.tfm)) { 390 if (IS_ERR(key->u.aes_cmac.tfm)) {
388 err = PTR_ERR(key->u.aes_cmac.tfm); 391 err = PTR_ERR(key->u.aes_cmac.tfm);
389 kfree(key); 392 kfree(key);
390 return ERR_PTR(err); 393 return ERR_PTR(err);
391 } 394 }
392 break; 395 break;
393 } 396 }
394 memcpy(key->conf.key, key_data, key_len); 397 memcpy(key->conf.key, key_data, key_len);
395 INIT_LIST_HEAD(&key->list); 398 INIT_LIST_HEAD(&key->list);
396 399
397 return key; 400 return key;
398 } 401 }
399 402
400 static void ieee80211_key_free_common(struct ieee80211_key *key) 403 static void ieee80211_key_free_common(struct ieee80211_key *key)
401 { 404 {
402 if (key->conf.cipher == WLAN_CIPHER_SUITE_CCMP) 405 if (key->conf.cipher == WLAN_CIPHER_SUITE_CCMP)
403 ieee80211_aes_key_free(key->u.ccmp.tfm); 406 ieee80211_aes_key_free(key->u.ccmp.tfm);
404 if (key->conf.cipher == WLAN_CIPHER_SUITE_AES_CMAC) 407 if (key->conf.cipher == WLAN_CIPHER_SUITE_AES_CMAC)
405 ieee80211_aes_cmac_key_free(key->u.aes_cmac.tfm); 408 ieee80211_aes_cmac_key_free(key->u.aes_cmac.tfm);
406 kfree(key); 409 kfree(key);
407 } 410 }
408 411
409 static void __ieee80211_key_destroy(struct ieee80211_key *key, 412 static void __ieee80211_key_destroy(struct ieee80211_key *key,
410 bool delay_tailroom) 413 bool delay_tailroom)
411 { 414 {
412 if (key->local) 415 if (key->local)
413 ieee80211_key_disable_hw_accel(key); 416 ieee80211_key_disable_hw_accel(key);
414 417
415 if (key->local) { 418 if (key->local) {
416 struct ieee80211_sub_if_data *sdata = key->sdata; 419 struct ieee80211_sub_if_data *sdata = key->sdata;
417 420
418 ieee80211_debugfs_key_remove(key); 421 ieee80211_debugfs_key_remove(key);
419 422
420 if (delay_tailroom) { 423 if (delay_tailroom) {
421 /* see ieee80211_delayed_tailroom_dec */ 424 /* see ieee80211_delayed_tailroom_dec */
422 sdata->crypto_tx_tailroom_pending_dec++; 425 sdata->crypto_tx_tailroom_pending_dec++;
423 schedule_delayed_work(&sdata->dec_tailroom_needed_wk, 426 schedule_delayed_work(&sdata->dec_tailroom_needed_wk,
424 HZ/2); 427 HZ/2);
425 } else { 428 } else {
426 sdata->crypto_tx_tailroom_needed_cnt--; 429 sdata->crypto_tx_tailroom_needed_cnt--;
427 } 430 }
428 } 431 }
429 432
430 ieee80211_key_free_common(key); 433 ieee80211_key_free_common(key);
431 } 434 }
432 435
433 static void ieee80211_key_destroy(struct ieee80211_key *key, 436 static void ieee80211_key_destroy(struct ieee80211_key *key,
434 bool delay_tailroom) 437 bool delay_tailroom)
435 { 438 {
436 if (!key) 439 if (!key)
437 return; 440 return;
438 441
439 /* 442 /*
440 * Synchronize so the TX path can no longer be using 443 * Synchronize so the TX path can no longer be using
441 * this key before we free/remove it. 444 * this key before we free/remove it.
442 */ 445 */
443 synchronize_net(); 446 synchronize_net();
444 447
445 __ieee80211_key_destroy(key, delay_tailroom); 448 __ieee80211_key_destroy(key, delay_tailroom);
446 } 449 }
447 450
448 void ieee80211_key_free_unused(struct ieee80211_key *key) 451 void ieee80211_key_free_unused(struct ieee80211_key *key)
449 { 452 {
450 WARN_ON(key->sdata || key->local); 453 WARN_ON(key->sdata || key->local);
451 ieee80211_key_free_common(key); 454 ieee80211_key_free_common(key);
452 } 455 }
453 456
454 int ieee80211_key_link(struct ieee80211_key *key, 457 int ieee80211_key_link(struct ieee80211_key *key,
455 struct ieee80211_sub_if_data *sdata, 458 struct ieee80211_sub_if_data *sdata,
456 struct sta_info *sta) 459 struct sta_info *sta)
457 { 460 {
461 struct ieee80211_local *local = sdata->local;
458 struct ieee80211_key *old_key; 462 struct ieee80211_key *old_key;
459 int idx, ret; 463 int idx, ret;
460 bool pairwise; 464 bool pairwise;
461 465
462 BUG_ON(!sdata); 466 BUG_ON(!sdata);
463 BUG_ON(!key); 467 BUG_ON(!key);
464 468
465 pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE; 469 pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE;
466 idx = key->conf.keyidx; 470 idx = key->conf.keyidx;
467 key->local = sdata->local; 471 key->local = sdata->local;
468 key->sdata = sdata; 472 key->sdata = sdata;
469 key->sta = sta; 473 key->sta = sta;
470 474
471 mutex_lock(&sdata->local->key_mtx); 475 mutex_lock(&sdata->local->key_mtx);
472 476
473 if (sta && pairwise) 477 if (sta && pairwise)
474 old_key = key_mtx_dereference(sdata->local, sta->ptk); 478 old_key = key_mtx_dereference(sdata->local, sta->ptk);
475 else if (sta) 479 else if (sta)
476 old_key = key_mtx_dereference(sdata->local, sta->gtk[idx]); 480 old_key = key_mtx_dereference(sdata->local, sta->gtk[idx]);
477 else 481 else
478 old_key = key_mtx_dereference(sdata->local, sdata->keys[idx]); 482 old_key = key_mtx_dereference(sdata->local, sdata->keys[idx]);
479 483
480 increment_tailroom_need_count(sdata); 484 increment_tailroom_need_count(sdata);
481 485
482 ieee80211_key_replace(sdata, sta, pairwise, old_key, key); 486 ieee80211_key_replace(sdata, sta, pairwise, old_key, key);
483 ieee80211_key_destroy(old_key, true); 487 ieee80211_key_destroy(old_key, true);
484 488
485 ieee80211_debugfs_key_add(key); 489 ieee80211_debugfs_key_add(key);
486 490
487 ret = ieee80211_key_enable_hw_accel(key); 491 if (!local->wowlan) {
492 ret = ieee80211_key_enable_hw_accel(key);
493 if (ret)
494 ieee80211_key_free(key, true);
495 } else {
496 ret = 0;
497 }
488 498
489 if (ret)
490 ieee80211_key_free(key, true);
491
492 mutex_unlock(&sdata->local->key_mtx); 499 mutex_unlock(&sdata->local->key_mtx);
493 500
494 return ret; 501 return ret;
495 } 502 }
496 503
497 void ieee80211_key_free(struct ieee80211_key *key, bool delay_tailroom) 504 void ieee80211_key_free(struct ieee80211_key *key, bool delay_tailroom)
498 { 505 {
499 if (!key) 506 if (!key)
500 return; 507 return;
501 508
502 /* 509 /*
503 * Replace key with nothingness if it was ever used. 510 * Replace key with nothingness if it was ever used.
504 */ 511 */
505 if (key->sdata) 512 if (key->sdata)
506 ieee80211_key_replace(key->sdata, key->sta, 513 ieee80211_key_replace(key->sdata, key->sta,
507 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE, 514 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
508 key, NULL); 515 key, NULL);
509 ieee80211_key_destroy(key, delay_tailroom); 516 ieee80211_key_destroy(key, delay_tailroom);
510 } 517 }
511 518
512 void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata) 519 void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata)
513 { 520 {
514 struct ieee80211_key *key; 521 struct ieee80211_key *key;
515 522
516 ASSERT_RTNL(); 523 ASSERT_RTNL();
517 524
518 if (WARN_ON(!ieee80211_sdata_running(sdata))) 525 if (WARN_ON(!ieee80211_sdata_running(sdata)))
519 return; 526 return;
520 527
521 mutex_lock(&sdata->local->key_mtx); 528 mutex_lock(&sdata->local->key_mtx);
522 529
523 sdata->crypto_tx_tailroom_needed_cnt = 0; 530 sdata->crypto_tx_tailroom_needed_cnt = 0;
524 531
525 list_for_each_entry(key, &sdata->key_list, list) { 532 list_for_each_entry(key, &sdata->key_list, list) {
526 increment_tailroom_need_count(sdata); 533 increment_tailroom_need_count(sdata);
527 ieee80211_key_enable_hw_accel(key); 534 ieee80211_key_enable_hw_accel(key);
528 } 535 }
529 536
530 mutex_unlock(&sdata->local->key_mtx); 537 mutex_unlock(&sdata->local->key_mtx);
531 } 538 }
532 539
533 void ieee80211_iter_keys(struct ieee80211_hw *hw, 540 void ieee80211_iter_keys(struct ieee80211_hw *hw,
534 struct ieee80211_vif *vif, 541 struct ieee80211_vif *vif,
535 void (*iter)(struct ieee80211_hw *hw, 542 void (*iter)(struct ieee80211_hw *hw,
536 struct ieee80211_vif *vif, 543 struct ieee80211_vif *vif,
537 struct ieee80211_sta *sta, 544 struct ieee80211_sta *sta,
538 struct ieee80211_key_conf *key, 545 struct ieee80211_key_conf *key,
539 void *data), 546 void *data),
540 void *iter_data) 547 void *iter_data)
541 { 548 {
542 struct ieee80211_local *local = hw_to_local(hw); 549 struct ieee80211_local *local = hw_to_local(hw);
543 struct ieee80211_key *key; 550 struct ieee80211_key *key, *tmp;
544 struct ieee80211_sub_if_data *sdata; 551 struct ieee80211_sub_if_data *sdata;
545 552
546 ASSERT_RTNL(); 553 ASSERT_RTNL();
547 554
548 mutex_lock(&local->key_mtx); 555 mutex_lock(&local->key_mtx);
549 if (vif) { 556 if (vif) {
550 sdata = vif_to_sdata(vif); 557 sdata = vif_to_sdata(vif);
551 list_for_each_entry(key, &sdata->key_list, list) 558 list_for_each_entry_safe(key, tmp, &sdata->key_list, list)
552 iter(hw, &sdata->vif, 559 iter(hw, &sdata->vif,
553 key->sta ? &key->sta->sta : NULL, 560 key->sta ? &key->sta->sta : NULL,
554 &key->conf, iter_data); 561 &key->conf, iter_data);
555 } else { 562 } else {
556 list_for_each_entry(sdata, &local->interfaces, list) 563 list_for_each_entry(sdata, &local->interfaces, list)
557 list_for_each_entry(key, &sdata->key_list, list) 564 list_for_each_entry_safe(key, tmp,
565 &sdata->key_list, list)
558 iter(hw, &sdata->vif, 566 iter(hw, &sdata->vif,
559 key->sta ? &key->sta->sta : NULL, 567 key->sta ? &key->sta->sta : NULL,
560 &key->conf, iter_data); 568 &key->conf, iter_data);
561 } 569 }
562 mutex_unlock(&local->key_mtx); 570 mutex_unlock(&local->key_mtx);
563 } 571 }
564 EXPORT_SYMBOL(ieee80211_iter_keys); 572 EXPORT_SYMBOL(ieee80211_iter_keys);
565 573
566 void ieee80211_free_keys(struct ieee80211_sub_if_data *sdata) 574 void ieee80211_free_keys(struct ieee80211_sub_if_data *sdata)
567 { 575 {
568 struct ieee80211_key *key, *tmp; 576 struct ieee80211_key *key, *tmp;
569 LIST_HEAD(keys); 577 LIST_HEAD(keys);
570 578
571 cancel_delayed_work_sync(&sdata->dec_tailroom_needed_wk); 579 cancel_delayed_work_sync(&sdata->dec_tailroom_needed_wk);
572 580
573 mutex_lock(&sdata->local->key_mtx); 581 mutex_lock(&sdata->local->key_mtx);
574 582
575 sdata->crypto_tx_tailroom_needed_cnt -= 583 sdata->crypto_tx_tailroom_needed_cnt -=
576 sdata->crypto_tx_tailroom_pending_dec; 584 sdata->crypto_tx_tailroom_pending_dec;
577 sdata->crypto_tx_tailroom_pending_dec = 0; 585 sdata->crypto_tx_tailroom_pending_dec = 0;
578 586
579 ieee80211_debugfs_key_remove_mgmt_default(sdata); 587 ieee80211_debugfs_key_remove_mgmt_default(sdata);
580 588
581 list_for_each_entry_safe(key, tmp, &sdata->key_list, list) { 589 list_for_each_entry_safe(key, tmp, &sdata->key_list, list) {
582 ieee80211_key_replace(key->sdata, key->sta, 590 ieee80211_key_replace(key->sdata, key->sta,
583 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE, 591 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
584 key, NULL); 592 key, NULL);
585 list_add_tail(&key->list, &keys); 593 list_add_tail(&key->list, &keys);
586 } 594 }
587 595
588 ieee80211_debugfs_key_update_default(sdata); 596 ieee80211_debugfs_key_update_default(sdata);
589 597
590 if (!list_empty(&keys)) { 598 if (!list_empty(&keys)) {
591 synchronize_net(); 599 synchronize_net();
592 list_for_each_entry_safe(key, tmp, &keys, list) 600 list_for_each_entry_safe(key, tmp, &keys, list)
593 __ieee80211_key_destroy(key, false); 601 __ieee80211_key_destroy(key, false);
594 } 602 }
595 603
596 WARN_ON_ONCE(sdata->crypto_tx_tailroom_needed_cnt || 604 WARN_ON_ONCE(sdata->crypto_tx_tailroom_needed_cnt ||
597 sdata->crypto_tx_tailroom_pending_dec); 605 sdata->crypto_tx_tailroom_pending_dec);
598 606
599 mutex_unlock(&sdata->local->key_mtx); 607 mutex_unlock(&sdata->local->key_mtx);
600 } 608 }
601 609
602 void ieee80211_free_sta_keys(struct ieee80211_local *local, 610 void ieee80211_free_sta_keys(struct ieee80211_local *local,
603 struct sta_info *sta) 611 struct sta_info *sta)
604 { 612 {
605 struct ieee80211_key *key, *tmp; 613 struct ieee80211_key *key, *tmp;
606 LIST_HEAD(keys); 614 LIST_HEAD(keys);
607 int i; 615 int i;
608 616
609 mutex_lock(&local->key_mtx); 617 mutex_lock(&local->key_mtx);
610 for (i = 0; i < NUM_DEFAULT_KEYS; i++) { 618 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
611 key = key_mtx_dereference(local, sta->gtk[i]); 619 key = key_mtx_dereference(local, sta->gtk[i]);
612 if (!key) 620 if (!key)
613 continue; 621 continue;
614 ieee80211_key_replace(key->sdata, key->sta, 622 ieee80211_key_replace(key->sdata, key->sta,
615 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE, 623 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
616 key, NULL); 624 key, NULL);
617 list_add(&key->list, &keys); 625 list_add(&key->list, &keys);
618 } 626 }
619 627
620 key = key_mtx_dereference(local, sta->ptk); 628 key = key_mtx_dereference(local, sta->ptk);
621 if (key) { 629 if (key) {
622 ieee80211_key_replace(key->sdata, key->sta, 630 ieee80211_key_replace(key->sdata, key->sta,
623 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE, 631 key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
624 key, NULL); 632 key, NULL);
625 list_add(&key->list, &keys); 633 list_add(&key->list, &keys);
626 } 634 }
627 635
628 /* 636 /*
629 * NB: the station code relies on this being 637 * NB: the station code relies on this being
630 * done even if there aren't any keys 638 * done even if there aren't any keys
631 */ 639 */
632 synchronize_net(); 640 synchronize_net();
633 641
634 list_for_each_entry_safe(key, tmp, &keys, list) 642 list_for_each_entry_safe(key, tmp, &keys, list)
635 __ieee80211_key_destroy(key, true); 643 __ieee80211_key_destroy(key, true);
636 644
637 mutex_unlock(&local->key_mtx); 645 mutex_unlock(&local->key_mtx);
638 } 646 }
639 647
640 void ieee80211_delayed_tailroom_dec(struct work_struct *wk) 648 void ieee80211_delayed_tailroom_dec(struct work_struct *wk)
641 { 649 {
642 struct ieee80211_sub_if_data *sdata; 650 struct ieee80211_sub_if_data *sdata;
643 651
644 sdata = container_of(wk, struct ieee80211_sub_if_data, 652 sdata = container_of(wk, struct ieee80211_sub_if_data,
645 dec_tailroom_needed_wk.work); 653 dec_tailroom_needed_wk.work);
646 654
647 /* 655 /*
648 * The reason for the delayed tailroom needed decrementing is to 656 * The reason for the delayed tailroom needed decrementing is to
649 * make roaming faster: during roaming, all keys are first deleted 657 * make roaming faster: during roaming, all keys are first deleted
650 * and then new keys are installed. The first new key causes the 658 * and then new keys are installed. The first new key causes the
651 * crypto_tx_tailroom_needed_cnt to go from 0 to 1, which invokes 659 * crypto_tx_tailroom_needed_cnt to go from 0 to 1, which invokes
652 * the cost of synchronize_net() (which can be slow). Avoid this 660 * the cost of synchronize_net() (which can be slow). Avoid this
653 * by deferring the crypto_tx_tailroom_needed_cnt decrementing on 661 * by deferring the crypto_tx_tailroom_needed_cnt decrementing on
654 * key removal for a while, so if we roam the value is larger than 662 * key removal for a while, so if we roam the value is larger than
655 * zero and no 0->1 transition happens. 663 * zero and no 0->1 transition happens.
656 * 664 *
657 * The cost is that if the AP switching was from an AP with keys 665 * The cost is that if the AP switching was from an AP with keys
658 * to one without, we still allocate tailroom while it would no 666 * to one without, we still allocate tailroom while it would no
659 * longer be needed. However, in the typical (fast) roaming case 667 * longer be needed. However, in the typical (fast) roaming case
660 * within an ESS this usually won't happen. 668 * within an ESS this usually won't happen.
661 */ 669 */
662 670
663 mutex_lock(&sdata->local->key_mtx); 671 mutex_lock(&sdata->local->key_mtx);
664 sdata->crypto_tx_tailroom_needed_cnt -= 672 sdata->crypto_tx_tailroom_needed_cnt -=
665 sdata->crypto_tx_tailroom_pending_dec; 673 sdata->crypto_tx_tailroom_pending_dec;
666 sdata->crypto_tx_tailroom_pending_dec = 0; 674 sdata->crypto_tx_tailroom_pending_dec = 0;
667 mutex_unlock(&sdata->local->key_mtx); 675 mutex_unlock(&sdata->local->key_mtx);
668 } 676 }
669 677
670 void ieee80211_gtk_rekey_notify(struct ieee80211_vif *vif, const u8 *bssid, 678 void ieee80211_gtk_rekey_notify(struct ieee80211_vif *vif, const u8 *bssid,
671 const u8 *replay_ctr, gfp_t gfp) 679 const u8 *replay_ctr, gfp_t gfp)
672 { 680 {
673 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); 681 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
674 682
675 trace_api_gtk_rekey_notify(sdata, bssid, replay_ctr); 683 trace_api_gtk_rekey_notify(sdata, bssid, replay_ctr);
676 684
677 cfg80211_gtk_rekey_notify(sdata->dev, bssid, replay_ctr, gfp); 685 cfg80211_gtk_rekey_notify(sdata->dev, bssid, replay_ctr, gfp);
678 } 686 }
679 EXPORT_SYMBOL_GPL(ieee80211_gtk_rekey_notify); 687 EXPORT_SYMBOL_GPL(ieee80211_gtk_rekey_notify);
680 688
681 void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf, 689 void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf,
682 struct ieee80211_key_seq *seq) 690 struct ieee80211_key_seq *seq)
683 { 691 {
684 struct ieee80211_key *key; 692 struct ieee80211_key *key;
685 u64 pn64; 693 u64 pn64;
686 694
687 if (WARN_ON(!(keyconf->flags & IEEE80211_KEY_FLAG_GENERATE_IV))) 695 if (WARN_ON(!(keyconf->flags & IEEE80211_KEY_FLAG_GENERATE_IV)))
688 return; 696 return;
689 697
690 key = container_of(keyconf, struct ieee80211_key, conf); 698 key = container_of(keyconf, struct ieee80211_key, conf);
691 699
692 switch (key->conf.cipher) { 700 switch (key->conf.cipher) {
693 case WLAN_CIPHER_SUITE_TKIP: 701 case WLAN_CIPHER_SUITE_TKIP:
694 seq->tkip.iv32 = key->u.tkip.tx.iv32; 702 seq->tkip.iv32 = key->u.tkip.tx.iv32;
695 seq->tkip.iv16 = key->u.tkip.tx.iv16; 703 seq->tkip.iv16 = key->u.tkip.tx.iv16;
696 break; 704 break;
697 case WLAN_CIPHER_SUITE_CCMP: 705 case WLAN_CIPHER_SUITE_CCMP:
698 pn64 = atomic64_read(&key->u.ccmp.tx_pn); 706 pn64 = atomic64_read(&key->u.ccmp.tx_pn);
699 seq->ccmp.pn[5] = pn64; 707 seq->ccmp.pn[5] = pn64;
700 seq->ccmp.pn[4] = pn64 >> 8; 708 seq->ccmp.pn[4] = pn64 >> 8;
701 seq->ccmp.pn[3] = pn64 >> 16; 709 seq->ccmp.pn[3] = pn64 >> 16;
702 seq->ccmp.pn[2] = pn64 >> 24; 710 seq->ccmp.pn[2] = pn64 >> 24;
703 seq->ccmp.pn[1] = pn64 >> 32; 711 seq->ccmp.pn[1] = pn64 >> 32;
704 seq->ccmp.pn[0] = pn64 >> 40; 712 seq->ccmp.pn[0] = pn64 >> 40;
705 break; 713 break;
706 case WLAN_CIPHER_SUITE_AES_CMAC: 714 case WLAN_CIPHER_SUITE_AES_CMAC:
707 pn64 = atomic64_read(&key->u.aes_cmac.tx_pn); 715 pn64 = atomic64_read(&key->u.aes_cmac.tx_pn);
708 seq->ccmp.pn[5] = pn64; 716 seq->ccmp.pn[5] = pn64;
709 seq->ccmp.pn[4] = pn64 >> 8; 717 seq->ccmp.pn[4] = pn64 >> 8;
710 seq->ccmp.pn[3] = pn64 >> 16; 718 seq->ccmp.pn[3] = pn64 >> 16;
711 seq->ccmp.pn[2] = pn64 >> 24; 719 seq->ccmp.pn[2] = pn64 >> 24;
712 seq->ccmp.pn[1] = pn64 >> 32; 720 seq->ccmp.pn[1] = pn64 >> 32;
713 seq->ccmp.pn[0] = pn64 >> 40; 721 seq->ccmp.pn[0] = pn64 >> 40;
714 break; 722 break;
715 default: 723 default:
716 WARN_ON(1); 724 WARN_ON(1);
717 } 725 }
718 } 726 }
719 EXPORT_SYMBOL(ieee80211_get_key_tx_seq); 727 EXPORT_SYMBOL(ieee80211_get_key_tx_seq);
720 728
721 void ieee80211_get_key_rx_seq(struct ieee80211_key_conf *keyconf, 729 void ieee80211_get_key_rx_seq(struct ieee80211_key_conf *keyconf,
722 int tid, struct ieee80211_key_seq *seq) 730 int tid, struct ieee80211_key_seq *seq)
723 { 731 {
724 struct ieee80211_key *key; 732 struct ieee80211_key *key;
725 const u8 *pn; 733 const u8 *pn;
726 734
727 key = container_of(keyconf, struct ieee80211_key, conf); 735 key = container_of(keyconf, struct ieee80211_key, conf);
728 736
729 switch (key->conf.cipher) { 737 switch (key->conf.cipher) {
730 case WLAN_CIPHER_SUITE_TKIP: 738 case WLAN_CIPHER_SUITE_TKIP:
731 if (WARN_ON(tid < 0 || tid >= IEEE80211_NUM_TIDS)) 739 if (WARN_ON(tid < 0 || tid >= IEEE80211_NUM_TIDS))
732 return; 740 return;
733 seq->tkip.iv32 = key->u.tkip.rx[tid].iv32; 741 seq->tkip.iv32 = key->u.tkip.rx[tid].iv32;
734 seq->tkip.iv16 = key->u.tkip.rx[tid].iv16; 742 seq->tkip.iv16 = key->u.tkip.rx[tid].iv16;
735 break; 743 break;
736 case WLAN_CIPHER_SUITE_CCMP: 744 case WLAN_CIPHER_SUITE_CCMP:
737 if (WARN_ON(tid < -1 || tid >= IEEE80211_NUM_TIDS)) 745 if (WARN_ON(tid < -1 || tid >= IEEE80211_NUM_TIDS))
738 return; 746 return;
739 if (tid < 0) 747 if (tid < 0)
740 pn = key->u.ccmp.rx_pn[IEEE80211_NUM_TIDS]; 748 pn = key->u.ccmp.rx_pn[IEEE80211_NUM_TIDS];
741 else 749 else
742 pn = key->u.ccmp.rx_pn[tid]; 750 pn = key->u.ccmp.rx_pn[tid];
743 memcpy(seq->ccmp.pn, pn, IEEE80211_CCMP_PN_LEN); 751 memcpy(seq->ccmp.pn, pn, IEEE80211_CCMP_PN_LEN);
744 break; 752 break;
745 case WLAN_CIPHER_SUITE_AES_CMAC: 753 case WLAN_CIPHER_SUITE_AES_CMAC:
746 if (WARN_ON(tid != 0)) 754 if (WARN_ON(tid != 0))
747 return; 755 return;
748 pn = key->u.aes_cmac.rx_pn; 756 pn = key->u.aes_cmac.rx_pn;
749 memcpy(seq->aes_cmac.pn, pn, IEEE80211_CMAC_PN_LEN); 757 memcpy(seq->aes_cmac.pn, pn, IEEE80211_CMAC_PN_LEN);
750 break; 758 break;
751 } 759 }
752 } 760 }
753 EXPORT_SYMBOL(ieee80211_get_key_rx_seq); 761 EXPORT_SYMBOL(ieee80211_get_key_rx_seq);
762
763 void ieee80211_set_key_tx_seq(struct ieee80211_key_conf *keyconf,
764 struct ieee80211_key_seq *seq)
765 {
766 struct ieee80211_key *key;
767 u64 pn64;
768
769 key = container_of(keyconf, struct ieee80211_key, conf);
770
771 switch (key->conf.cipher) {
772 case WLAN_CIPHER_SUITE_TKIP:
773 key->u.tkip.tx.iv32 = seq->tkip.iv32;
774 key->u.tkip.tx.iv16 = seq->tkip.iv16;
775 break;
776 case WLAN_CIPHER_SUITE_CCMP:
777 pn64 = (u64)seq->ccmp.pn[5] |
778 ((u64)seq->ccmp.pn[4] << 8) |
779 ((u64)seq->ccmp.pn[3] << 16) |
780 ((u64)seq->ccmp.pn[2] << 24) |
781 ((u64)seq->ccmp.pn[1] << 32) |
782 ((u64)seq->ccmp.pn[0] << 40);
783 atomic64_set(&key->u.ccmp.tx_pn, pn64);
784 break;
785 case WLAN_CIPHER_SUITE_AES_CMAC:
786 pn64 = (u64)seq->aes_cmac.pn[5] |
787 ((u64)seq->aes_cmac.pn[4] << 8) |
788 ((u64)seq->aes_cmac.pn[3] << 16) |
789 ((u64)seq->aes_cmac.pn[2] << 24) |
790 ((u64)seq->aes_cmac.pn[1] << 32) |
791 ((u64)seq->aes_cmac.pn[0] << 40);
792 atomic64_set(&key->u.aes_cmac.tx_pn, pn64);
793 break;
794 default:
795 WARN_ON(1);
796 break;
797 }
798 }
799 EXPORT_SYMBOL_GPL(ieee80211_set_key_tx_seq);
800
801 void ieee80211_set_key_rx_seq(struct ieee80211_key_conf *keyconf,
802 int tid, struct ieee80211_key_seq *seq)
803 {
804 struct ieee80211_key *key;
805 u8 *pn;
806
807 key = container_of(keyconf, struct ieee80211_key, conf);
808
809 switch (key->conf.cipher) {
810 case WLAN_CIPHER_SUITE_TKIP:
811 if (WARN_ON(tid < 0 || tid >= IEEE80211_NUM_TIDS))
812 return;
813 key->u.tkip.rx[tid].iv32 = seq->tkip.iv32;
814 key->u.tkip.rx[tid].iv16 = seq->tkip.iv16;
815 break;
816 case WLAN_CIPHER_SUITE_CCMP:
817 if (WARN_ON(tid < -1 || tid >= IEEE80211_NUM_TIDS))
818 return;
819 if (tid < 0)
820 pn = key->u.ccmp.rx_pn[IEEE80211_NUM_TIDS];
821 else
822 pn = key->u.ccmp.rx_pn[tid];
823 memcpy(pn, seq->ccmp.pn, IEEE80211_CCMP_PN_LEN);
824 break;
825 case WLAN_CIPHER_SUITE_AES_CMAC:
826 if (WARN_ON(tid != 0))
827 return;
828 pn = key->u.aes_cmac.rx_pn;
829 memcpy(pn, seq->aes_cmac.pn, IEEE80211_CMAC_PN_LEN);
830 break;
831 default:
832 WARN_ON(1);
833 break;
834 }
835 }
836 EXPORT_SYMBOL_GPL(ieee80211_set_key_rx_seq);
837
838 void ieee80211_remove_key(struct ieee80211_key_conf *keyconf)
839 {
840 struct ieee80211_key *key;
841
842 key = container_of(keyconf, struct ieee80211_key, conf);
843
844 assert_key_lock(key->local);
845
846 /*
847 * if key was uploaded, we assume the driver will/has remove(d)
848 * it, so adjust bookkeeping accordingly
849 */
850 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) {
851 key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
852
853 if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) ||
854 (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) ||
855 (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)))
856 increment_tailroom_need_count(key->sdata);
857 }
858
859 ieee80211_key_free(key, false);
860 }
861 EXPORT_SYMBOL_GPL(ieee80211_remove_key);
862
863 struct ieee80211_key_conf *
864 ieee80211_gtk_rekey_add(struct ieee80211_vif *vif,
865 struct ieee80211_key_conf *keyconf)
866 {
867 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
868 struct ieee80211_local *local = sdata->local;
869 struct ieee80211_key *key;
870 int err;
871
872 if (WARN_ON(!local->wowlan))
873 return ERR_PTR(-EINVAL);
874
875 if (WARN_ON(vif->type != NL80211_IFTYPE_STATION))
876 return ERR_PTR(-EINVAL);
877
878 key = ieee80211_key_alloc(keyconf->cipher, keyconf->keyidx,
879 keyconf->keylen, keyconf->key,
880 0, NULL);
881 if (IS_ERR(key))
882 return ERR_PTR(PTR_ERR(key));
883
884 if (sdata->u.mgd.mfp != IEEE80211_MFP_DISABLED)
885 key->conf.flags |= IEEE80211_KEY_FLAG_RX_MGMT;
886
887 err = ieee80211_key_link(key, sdata, NULL);
888 if (err)
889 return ERR_PTR(err);
890
891 return &key->conf;
1 /* 1 /*
2 * Copyright 2002-2005, Instant802 Networks, Inc. 2 * Copyright 2002-2005, Instant802 Networks, Inc.
3 * Copyright 2005-2006, Devicescape Software, Inc. 3 * Copyright 2005-2006, Devicescape Software, Inc.
4 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 4 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
5 * Copyright 2007 Johannes Berg <johannes@sipsolutions.net> 5 * Copyright 2007 Johannes Berg <johannes@sipsolutions.net>
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 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 8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation. 9 * published by the Free Software Foundation.
10 * 10 *
11 * utilities for mac80211 11 * utilities for mac80211
12 */ 12 */
13 13
14 #include <net/mac80211.h> 14 #include <net/mac80211.h>
15 #include <linux/netdevice.h> 15 #include <linux/netdevice.h>
16 #include <linux/export.h> 16 #include <linux/export.h>
17 #include <linux/types.h> 17 #include <linux/types.h>
18 #include <linux/slab.h> 18 #include <linux/slab.h>
19 #include <linux/skbuff.h> 19 #include <linux/skbuff.h>
20 #include <linux/etherdevice.h> 20 #include <linux/etherdevice.h>
21 #include <linux/if_arp.h> 21 #include <linux/if_arp.h>
22 #include <linux/bitmap.h> 22 #include <linux/bitmap.h>
23 #include <linux/crc32.h> 23 #include <linux/crc32.h>
24 #include <net/net_namespace.h> 24 #include <net/net_namespace.h>
25 #include <net/cfg80211.h> 25 #include <net/cfg80211.h>
26 #include <net/rtnetlink.h> 26 #include <net/rtnetlink.h>
27 27
28 #include "ieee80211_i.h" 28 #include "ieee80211_i.h"
29 #include "driver-ops.h" 29 #include "driver-ops.h"
30 #include "rate.h" 30 #include "rate.h"
31 #include "mesh.h" 31 #include "mesh.h"
32 #include "wme.h" 32 #include "wme.h"
33 #include "led.h" 33 #include "led.h"
34 #include "wep.h" 34 #include "wep.h"
35 35
36 /* privid for wiphys to determine whether they belong to us or not */ 36 /* privid for wiphys to determine whether they belong to us or not */
37 void *mac80211_wiphy_privid = &mac80211_wiphy_privid; 37 void *mac80211_wiphy_privid = &mac80211_wiphy_privid;
38 38
39 struct ieee80211_hw *wiphy_to_ieee80211_hw(struct wiphy *wiphy) 39 struct ieee80211_hw *wiphy_to_ieee80211_hw(struct wiphy *wiphy)
40 { 40 {
41 struct ieee80211_local *local; 41 struct ieee80211_local *local;
42 BUG_ON(!wiphy); 42 BUG_ON(!wiphy);
43 43
44 local = wiphy_priv(wiphy); 44 local = wiphy_priv(wiphy);
45 return &local->hw; 45 return &local->hw;
46 } 46 }
47 EXPORT_SYMBOL(wiphy_to_ieee80211_hw); 47 EXPORT_SYMBOL(wiphy_to_ieee80211_hw);
48 48
49 u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len, 49 u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len,
50 enum nl80211_iftype type) 50 enum nl80211_iftype type)
51 { 51 {
52 __le16 fc = hdr->frame_control; 52 __le16 fc = hdr->frame_control;
53 53
54 /* drop ACK/CTS frames and incorrect hdr len (ctrl) */ 54 /* drop ACK/CTS frames and incorrect hdr len (ctrl) */
55 if (len < 16) 55 if (len < 16)
56 return NULL; 56 return NULL;
57 57
58 if (ieee80211_is_data(fc)) { 58 if (ieee80211_is_data(fc)) {
59 if (len < 24) /* drop incorrect hdr len (data) */ 59 if (len < 24) /* drop incorrect hdr len (data) */
60 return NULL; 60 return NULL;
61 61
62 if (ieee80211_has_a4(fc)) 62 if (ieee80211_has_a4(fc))
63 return NULL; 63 return NULL;
64 if (ieee80211_has_tods(fc)) 64 if (ieee80211_has_tods(fc))
65 return hdr->addr1; 65 return hdr->addr1;
66 if (ieee80211_has_fromds(fc)) 66 if (ieee80211_has_fromds(fc))
67 return hdr->addr2; 67 return hdr->addr2;
68 68
69 return hdr->addr3; 69 return hdr->addr3;
70 } 70 }
71 71
72 if (ieee80211_is_mgmt(fc)) { 72 if (ieee80211_is_mgmt(fc)) {
73 if (len < 24) /* drop incorrect hdr len (mgmt) */ 73 if (len < 24) /* drop incorrect hdr len (mgmt) */
74 return NULL; 74 return NULL;
75 return hdr->addr3; 75 return hdr->addr3;
76 } 76 }
77 77
78 if (ieee80211_is_ctl(fc)) { 78 if (ieee80211_is_ctl(fc)) {
79 if(ieee80211_is_pspoll(fc)) 79 if(ieee80211_is_pspoll(fc))
80 return hdr->addr1; 80 return hdr->addr1;
81 81
82 if (ieee80211_is_back_req(fc)) { 82 if (ieee80211_is_back_req(fc)) {
83 switch (type) { 83 switch (type) {
84 case NL80211_IFTYPE_STATION: 84 case NL80211_IFTYPE_STATION:
85 return hdr->addr2; 85 return hdr->addr2;
86 case NL80211_IFTYPE_AP: 86 case NL80211_IFTYPE_AP:
87 case NL80211_IFTYPE_AP_VLAN: 87 case NL80211_IFTYPE_AP_VLAN:
88 return hdr->addr1; 88 return hdr->addr1;
89 default: 89 default:
90 break; /* fall through to the return */ 90 break; /* fall through to the return */
91 } 91 }
92 } 92 }
93 } 93 }
94 94
95 return NULL; 95 return NULL;
96 } 96 }
97 97
98 void ieee80211_tx_set_protected(struct ieee80211_tx_data *tx) 98 void ieee80211_tx_set_protected(struct ieee80211_tx_data *tx)
99 { 99 {
100 struct sk_buff *skb; 100 struct sk_buff *skb;
101 struct ieee80211_hdr *hdr; 101 struct ieee80211_hdr *hdr;
102 102
103 skb_queue_walk(&tx->skbs, skb) { 103 skb_queue_walk(&tx->skbs, skb) {
104 hdr = (struct ieee80211_hdr *) skb->data; 104 hdr = (struct ieee80211_hdr *) skb->data;
105 hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); 105 hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED);
106 } 106 }
107 } 107 }
108 108
109 int ieee80211_frame_duration(enum ieee80211_band band, size_t len, 109 int ieee80211_frame_duration(enum ieee80211_band band, size_t len,
110 int rate, int erp, int short_preamble, 110 int rate, int erp, int short_preamble,
111 int shift) 111 int shift)
112 { 112 {
113 int dur; 113 int dur;
114 114
115 /* calculate duration (in microseconds, rounded up to next higher 115 /* calculate duration (in microseconds, rounded up to next higher
116 * integer if it includes a fractional microsecond) to send frame of 116 * integer if it includes a fractional microsecond) to send frame of
117 * len bytes (does not include FCS) at the given rate. Duration will 117 * len bytes (does not include FCS) at the given rate. Duration will
118 * also include SIFS. 118 * also include SIFS.
119 * 119 *
120 * rate is in 100 kbps, so divident is multiplied by 10 in the 120 * rate is in 100 kbps, so divident is multiplied by 10 in the
121 * DIV_ROUND_UP() operations. 121 * DIV_ROUND_UP() operations.
122 * 122 *
123 * shift may be 2 for 5 MHz channels or 1 for 10 MHz channels, and 123 * shift may be 2 for 5 MHz channels or 1 for 10 MHz channels, and
124 * is assumed to be 0 otherwise. 124 * is assumed to be 0 otherwise.
125 */ 125 */
126 126
127 if (band == IEEE80211_BAND_5GHZ || erp) { 127 if (band == IEEE80211_BAND_5GHZ || erp) {
128 /* 128 /*
129 * OFDM: 129 * OFDM:
130 * 130 *
131 * N_DBPS = DATARATE x 4 131 * N_DBPS = DATARATE x 4
132 * N_SYM = Ceiling((16+8xLENGTH+6) / N_DBPS) 132 * N_SYM = Ceiling((16+8xLENGTH+6) / N_DBPS)
133 * (16 = SIGNAL time, 6 = tail bits) 133 * (16 = SIGNAL time, 6 = tail bits)
134 * TXTIME = T_PREAMBLE + T_SIGNAL + T_SYM x N_SYM + Signal Ext 134 * TXTIME = T_PREAMBLE + T_SIGNAL + T_SYM x N_SYM + Signal Ext
135 * 135 *
136 * T_SYM = 4 usec 136 * T_SYM = 4 usec
137 * 802.11a - 18.5.2: aSIFSTime = 16 usec 137 * 802.11a - 18.5.2: aSIFSTime = 16 usec
138 * 802.11g - 19.8.4: aSIFSTime = 10 usec + 138 * 802.11g - 19.8.4: aSIFSTime = 10 usec +
139 * signal ext = 6 usec 139 * signal ext = 6 usec
140 */ 140 */
141 dur = 16; /* SIFS + signal ext */ 141 dur = 16; /* SIFS + signal ext */
142 dur += 16; /* IEEE 802.11-2012 18.3.2.4: T_PREAMBLE = 16 usec */ 142 dur += 16; /* IEEE 802.11-2012 18.3.2.4: T_PREAMBLE = 16 usec */
143 dur += 4; /* IEEE 802.11-2012 18.3.2.4: T_SIGNAL = 4 usec */ 143 dur += 4; /* IEEE 802.11-2012 18.3.2.4: T_SIGNAL = 4 usec */
144 144
145 /* IEEE 802.11-2012 18.3.2.4: all values above are: 145 /* IEEE 802.11-2012 18.3.2.4: all values above are:
146 * * times 4 for 5 MHz 146 * * times 4 for 5 MHz
147 * * times 2 for 10 MHz 147 * * times 2 for 10 MHz
148 */ 148 */
149 dur *= 1 << shift; 149 dur *= 1 << shift;
150 150
151 /* rates should already consider the channel bandwidth, 151 /* rates should already consider the channel bandwidth,
152 * don't apply divisor again. 152 * don't apply divisor again.
153 */ 153 */
154 dur += 4 * DIV_ROUND_UP((16 + 8 * (len + 4) + 6) * 10, 154 dur += 4 * DIV_ROUND_UP((16 + 8 * (len + 4) + 6) * 10,
155 4 * rate); /* T_SYM x N_SYM */ 155 4 * rate); /* T_SYM x N_SYM */
156 } else { 156 } else {
157 /* 157 /*
158 * 802.11b or 802.11g with 802.11b compatibility: 158 * 802.11b or 802.11g with 802.11b compatibility:
159 * 18.3.4: TXTIME = PreambleLength + PLCPHeaderTime + 159 * 18.3.4: TXTIME = PreambleLength + PLCPHeaderTime +
160 * Ceiling(((LENGTH+PBCC)x8)/DATARATE). PBCC=0. 160 * Ceiling(((LENGTH+PBCC)x8)/DATARATE). PBCC=0.
161 * 161 *
162 * 802.11 (DS): 15.3.3, 802.11b: 18.3.4 162 * 802.11 (DS): 15.3.3, 802.11b: 18.3.4
163 * aSIFSTime = 10 usec 163 * aSIFSTime = 10 usec
164 * aPreambleLength = 144 usec or 72 usec with short preamble 164 * aPreambleLength = 144 usec or 72 usec with short preamble
165 * aPLCPHeaderLength = 48 usec or 24 usec with short preamble 165 * aPLCPHeaderLength = 48 usec or 24 usec with short preamble
166 */ 166 */
167 dur = 10; /* aSIFSTime = 10 usec */ 167 dur = 10; /* aSIFSTime = 10 usec */
168 dur += short_preamble ? (72 + 24) : (144 + 48); 168 dur += short_preamble ? (72 + 24) : (144 + 48);
169 169
170 dur += DIV_ROUND_UP(8 * (len + 4) * 10, rate); 170 dur += DIV_ROUND_UP(8 * (len + 4) * 10, rate);
171 } 171 }
172 172
173 return dur; 173 return dur;
174 } 174 }
175 175
176 /* Exported duration function for driver use */ 176 /* Exported duration function for driver use */
177 __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw, 177 __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw,
178 struct ieee80211_vif *vif, 178 struct ieee80211_vif *vif,
179 enum ieee80211_band band, 179 enum ieee80211_band band,
180 size_t frame_len, 180 size_t frame_len,
181 struct ieee80211_rate *rate) 181 struct ieee80211_rate *rate)
182 { 182 {
183 struct ieee80211_sub_if_data *sdata; 183 struct ieee80211_sub_if_data *sdata;
184 u16 dur; 184 u16 dur;
185 int erp, shift = 0; 185 int erp, shift = 0;
186 bool short_preamble = false; 186 bool short_preamble = false;
187 187
188 erp = 0; 188 erp = 0;
189 if (vif) { 189 if (vif) {
190 sdata = vif_to_sdata(vif); 190 sdata = vif_to_sdata(vif);
191 short_preamble = sdata->vif.bss_conf.use_short_preamble; 191 short_preamble = sdata->vif.bss_conf.use_short_preamble;
192 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) 192 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
193 erp = rate->flags & IEEE80211_RATE_ERP_G; 193 erp = rate->flags & IEEE80211_RATE_ERP_G;
194 shift = ieee80211_vif_get_shift(vif); 194 shift = ieee80211_vif_get_shift(vif);
195 } 195 }
196 196
197 dur = ieee80211_frame_duration(band, frame_len, rate->bitrate, erp, 197 dur = ieee80211_frame_duration(band, frame_len, rate->bitrate, erp,
198 short_preamble, shift); 198 short_preamble, shift);
199 199
200 return cpu_to_le16(dur); 200 return cpu_to_le16(dur);
201 } 201 }
202 EXPORT_SYMBOL(ieee80211_generic_frame_duration); 202 EXPORT_SYMBOL(ieee80211_generic_frame_duration);
203 203
204 __le16 ieee80211_rts_duration(struct ieee80211_hw *hw, 204 __le16 ieee80211_rts_duration(struct ieee80211_hw *hw,
205 struct ieee80211_vif *vif, size_t frame_len, 205 struct ieee80211_vif *vif, size_t frame_len,
206 const struct ieee80211_tx_info *frame_txctl) 206 const struct ieee80211_tx_info *frame_txctl)
207 { 207 {
208 struct ieee80211_local *local = hw_to_local(hw); 208 struct ieee80211_local *local = hw_to_local(hw);
209 struct ieee80211_rate *rate; 209 struct ieee80211_rate *rate;
210 struct ieee80211_sub_if_data *sdata; 210 struct ieee80211_sub_if_data *sdata;
211 bool short_preamble; 211 bool short_preamble;
212 int erp, shift = 0, bitrate; 212 int erp, shift = 0, bitrate;
213 u16 dur; 213 u16 dur;
214 struct ieee80211_supported_band *sband; 214 struct ieee80211_supported_band *sband;
215 215
216 sband = local->hw.wiphy->bands[frame_txctl->band]; 216 sband = local->hw.wiphy->bands[frame_txctl->band];
217 217
218 short_preamble = false; 218 short_preamble = false;
219 219
220 rate = &sband->bitrates[frame_txctl->control.rts_cts_rate_idx]; 220 rate = &sband->bitrates[frame_txctl->control.rts_cts_rate_idx];
221 221
222 erp = 0; 222 erp = 0;
223 if (vif) { 223 if (vif) {
224 sdata = vif_to_sdata(vif); 224 sdata = vif_to_sdata(vif);
225 short_preamble = sdata->vif.bss_conf.use_short_preamble; 225 short_preamble = sdata->vif.bss_conf.use_short_preamble;
226 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) 226 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
227 erp = rate->flags & IEEE80211_RATE_ERP_G; 227 erp = rate->flags & IEEE80211_RATE_ERP_G;
228 shift = ieee80211_vif_get_shift(vif); 228 shift = ieee80211_vif_get_shift(vif);
229 } 229 }
230 230
231 bitrate = DIV_ROUND_UP(rate->bitrate, 1 << shift); 231 bitrate = DIV_ROUND_UP(rate->bitrate, 1 << shift);
232 232
233 /* CTS duration */ 233 /* CTS duration */
234 dur = ieee80211_frame_duration(sband->band, 10, bitrate, 234 dur = ieee80211_frame_duration(sband->band, 10, bitrate,
235 erp, short_preamble, shift); 235 erp, short_preamble, shift);
236 /* Data frame duration */ 236 /* Data frame duration */
237 dur += ieee80211_frame_duration(sband->band, frame_len, bitrate, 237 dur += ieee80211_frame_duration(sband->band, frame_len, bitrate,
238 erp, short_preamble, shift); 238 erp, short_preamble, shift);
239 /* ACK duration */ 239 /* ACK duration */
240 dur += ieee80211_frame_duration(sband->band, 10, bitrate, 240 dur += ieee80211_frame_duration(sband->band, 10, bitrate,
241 erp, short_preamble, shift); 241 erp, short_preamble, shift);
242 242
243 return cpu_to_le16(dur); 243 return cpu_to_le16(dur);
244 } 244 }
245 EXPORT_SYMBOL(ieee80211_rts_duration); 245 EXPORT_SYMBOL(ieee80211_rts_duration);
246 246
247 __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw, 247 __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
248 struct ieee80211_vif *vif, 248 struct ieee80211_vif *vif,
249 size_t frame_len, 249 size_t frame_len,
250 const struct ieee80211_tx_info *frame_txctl) 250 const struct ieee80211_tx_info *frame_txctl)
251 { 251 {
252 struct ieee80211_local *local = hw_to_local(hw); 252 struct ieee80211_local *local = hw_to_local(hw);
253 struct ieee80211_rate *rate; 253 struct ieee80211_rate *rate;
254 struct ieee80211_sub_if_data *sdata; 254 struct ieee80211_sub_if_data *sdata;
255 bool short_preamble; 255 bool short_preamble;
256 int erp, shift = 0, bitrate; 256 int erp, shift = 0, bitrate;
257 u16 dur; 257 u16 dur;
258 struct ieee80211_supported_band *sband; 258 struct ieee80211_supported_band *sband;
259 259
260 sband = local->hw.wiphy->bands[frame_txctl->band]; 260 sband = local->hw.wiphy->bands[frame_txctl->band];
261 261
262 short_preamble = false; 262 short_preamble = false;
263 263
264 rate = &sband->bitrates[frame_txctl->control.rts_cts_rate_idx]; 264 rate = &sband->bitrates[frame_txctl->control.rts_cts_rate_idx];
265 erp = 0; 265 erp = 0;
266 if (vif) { 266 if (vif) {
267 sdata = vif_to_sdata(vif); 267 sdata = vif_to_sdata(vif);
268 short_preamble = sdata->vif.bss_conf.use_short_preamble; 268 short_preamble = sdata->vif.bss_conf.use_short_preamble;
269 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) 269 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
270 erp = rate->flags & IEEE80211_RATE_ERP_G; 270 erp = rate->flags & IEEE80211_RATE_ERP_G;
271 shift = ieee80211_vif_get_shift(vif); 271 shift = ieee80211_vif_get_shift(vif);
272 } 272 }
273 273
274 bitrate = DIV_ROUND_UP(rate->bitrate, 1 << shift); 274 bitrate = DIV_ROUND_UP(rate->bitrate, 1 << shift);
275 275
276 /* Data frame duration */ 276 /* Data frame duration */
277 dur = ieee80211_frame_duration(sband->band, frame_len, bitrate, 277 dur = ieee80211_frame_duration(sband->band, frame_len, bitrate,
278 erp, short_preamble, shift); 278 erp, short_preamble, shift);
279 if (!(frame_txctl->flags & IEEE80211_TX_CTL_NO_ACK)) { 279 if (!(frame_txctl->flags & IEEE80211_TX_CTL_NO_ACK)) {
280 /* ACK duration */ 280 /* ACK duration */
281 dur += ieee80211_frame_duration(sband->band, 10, bitrate, 281 dur += ieee80211_frame_duration(sband->band, 10, bitrate,
282 erp, short_preamble, shift); 282 erp, short_preamble, shift);
283 } 283 }
284 284
285 return cpu_to_le16(dur); 285 return cpu_to_le16(dur);
286 } 286 }
287 EXPORT_SYMBOL(ieee80211_ctstoself_duration); 287 EXPORT_SYMBOL(ieee80211_ctstoself_duration);
288 288
289 void ieee80211_propagate_queue_wake(struct ieee80211_local *local, int queue) 289 void ieee80211_propagate_queue_wake(struct ieee80211_local *local, int queue)
290 { 290 {
291 struct ieee80211_sub_if_data *sdata; 291 struct ieee80211_sub_if_data *sdata;
292 int n_acs = IEEE80211_NUM_ACS; 292 int n_acs = IEEE80211_NUM_ACS;
293 293
294 if (local->hw.queues < IEEE80211_NUM_ACS) 294 if (local->hw.queues < IEEE80211_NUM_ACS)
295 n_acs = 1; 295 n_acs = 1;
296 296
297 list_for_each_entry_rcu(sdata, &local->interfaces, list) { 297 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
298 int ac; 298 int ac;
299 299
300 if (!sdata->dev) 300 if (!sdata->dev)
301 continue; 301 continue;
302 302
303 if (test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) 303 if (test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state))
304 continue; 304 continue;
305 305
306 if (sdata->vif.cab_queue != IEEE80211_INVAL_HW_QUEUE && 306 if (sdata->vif.cab_queue != IEEE80211_INVAL_HW_QUEUE &&
307 local->queue_stop_reasons[sdata->vif.cab_queue] != 0) 307 local->queue_stop_reasons[sdata->vif.cab_queue] != 0)
308 continue; 308 continue;
309 309
310 for (ac = 0; ac < n_acs; ac++) { 310 for (ac = 0; ac < n_acs; ac++) {
311 int ac_queue = sdata->vif.hw_queue[ac]; 311 int ac_queue = sdata->vif.hw_queue[ac];
312 312
313 if (ac_queue == queue || 313 if (ac_queue == queue ||
314 (sdata->vif.cab_queue == queue && 314 (sdata->vif.cab_queue == queue &&
315 local->queue_stop_reasons[ac_queue] == 0 && 315 local->queue_stop_reasons[ac_queue] == 0 &&
316 skb_queue_empty(&local->pending[ac_queue]))) 316 skb_queue_empty(&local->pending[ac_queue])))
317 netif_wake_subqueue(sdata->dev, ac); 317 netif_wake_subqueue(sdata->dev, ac);
318 } 318 }
319 } 319 }
320 } 320 }
321 321
322 static void __ieee80211_wake_queue(struct ieee80211_hw *hw, int queue, 322 static void __ieee80211_wake_queue(struct ieee80211_hw *hw, int queue,
323 enum queue_stop_reason reason) 323 enum queue_stop_reason reason)
324 { 324 {
325 struct ieee80211_local *local = hw_to_local(hw); 325 struct ieee80211_local *local = hw_to_local(hw);
326 326
327 trace_wake_queue(local, queue, reason); 327 trace_wake_queue(local, queue, reason);
328 328
329 if (WARN_ON(queue >= hw->queues)) 329 if (WARN_ON(queue >= hw->queues))
330 return; 330 return;
331 331
332 if (!test_bit(reason, &local->queue_stop_reasons[queue])) 332 if (!test_bit(reason, &local->queue_stop_reasons[queue]))
333 return; 333 return;
334 334
335 __clear_bit(reason, &local->queue_stop_reasons[queue]); 335 __clear_bit(reason, &local->queue_stop_reasons[queue]);
336 336
337 if (local->queue_stop_reasons[queue] != 0) 337 if (local->queue_stop_reasons[queue] != 0)
338 /* someone still has this queue stopped */ 338 /* someone still has this queue stopped */
339 return; 339 return;
340 340
341 if (skb_queue_empty(&local->pending[queue])) { 341 if (skb_queue_empty(&local->pending[queue])) {
342 rcu_read_lock(); 342 rcu_read_lock();
343 ieee80211_propagate_queue_wake(local, queue); 343 ieee80211_propagate_queue_wake(local, queue);
344 rcu_read_unlock(); 344 rcu_read_unlock();
345 } else 345 } else
346 tasklet_schedule(&local->tx_pending_tasklet); 346 tasklet_schedule(&local->tx_pending_tasklet);
347 } 347 }
348 348
349 void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue, 349 void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue,
350 enum queue_stop_reason reason) 350 enum queue_stop_reason reason)
351 { 351 {
352 struct ieee80211_local *local = hw_to_local(hw); 352 struct ieee80211_local *local = hw_to_local(hw);
353 unsigned long flags; 353 unsigned long flags;
354 354
355 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); 355 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
356 __ieee80211_wake_queue(hw, queue, reason); 356 __ieee80211_wake_queue(hw, queue, reason);
357 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); 357 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
358 } 358 }
359 359
360 void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue) 360 void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue)
361 { 361 {
362 ieee80211_wake_queue_by_reason(hw, queue, 362 ieee80211_wake_queue_by_reason(hw, queue,
363 IEEE80211_QUEUE_STOP_REASON_DRIVER); 363 IEEE80211_QUEUE_STOP_REASON_DRIVER);
364 } 364 }
365 EXPORT_SYMBOL(ieee80211_wake_queue); 365 EXPORT_SYMBOL(ieee80211_wake_queue);
366 366
367 static void __ieee80211_stop_queue(struct ieee80211_hw *hw, int queue, 367 static void __ieee80211_stop_queue(struct ieee80211_hw *hw, int queue,
368 enum queue_stop_reason reason) 368 enum queue_stop_reason reason)
369 { 369 {
370 struct ieee80211_local *local = hw_to_local(hw); 370 struct ieee80211_local *local = hw_to_local(hw);
371 struct ieee80211_sub_if_data *sdata; 371 struct ieee80211_sub_if_data *sdata;
372 int n_acs = IEEE80211_NUM_ACS; 372 int n_acs = IEEE80211_NUM_ACS;
373 373
374 trace_stop_queue(local, queue, reason); 374 trace_stop_queue(local, queue, reason);
375 375
376 if (WARN_ON(queue >= hw->queues)) 376 if (WARN_ON(queue >= hw->queues))
377 return; 377 return;
378 378
379 if (test_bit(reason, &local->queue_stop_reasons[queue])) 379 if (test_bit(reason, &local->queue_stop_reasons[queue]))
380 return; 380 return;
381 381
382 __set_bit(reason, &local->queue_stop_reasons[queue]); 382 __set_bit(reason, &local->queue_stop_reasons[queue]);
383 383
384 if (local->hw.queues < IEEE80211_NUM_ACS) 384 if (local->hw.queues < IEEE80211_NUM_ACS)
385 n_acs = 1; 385 n_acs = 1;
386 386
387 rcu_read_lock(); 387 rcu_read_lock();
388 list_for_each_entry_rcu(sdata, &local->interfaces, list) { 388 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
389 int ac; 389 int ac;
390 390
391 if (!sdata->dev) 391 if (!sdata->dev)
392 continue; 392 continue;
393 393
394 for (ac = 0; ac < n_acs; ac++) { 394 for (ac = 0; ac < n_acs; ac++) {
395 if (sdata->vif.hw_queue[ac] == queue || 395 if (sdata->vif.hw_queue[ac] == queue ||
396 sdata->vif.cab_queue == queue) 396 sdata->vif.cab_queue == queue)
397 netif_stop_subqueue(sdata->dev, ac); 397 netif_stop_subqueue(sdata->dev, ac);
398 } 398 }
399 } 399 }
400 rcu_read_unlock(); 400 rcu_read_unlock();
401 } 401 }
402 402
403 void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue, 403 void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue,
404 enum queue_stop_reason reason) 404 enum queue_stop_reason reason)
405 { 405 {
406 struct ieee80211_local *local = hw_to_local(hw); 406 struct ieee80211_local *local = hw_to_local(hw);
407 unsigned long flags; 407 unsigned long flags;
408 408
409 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); 409 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
410 __ieee80211_stop_queue(hw, queue, reason); 410 __ieee80211_stop_queue(hw, queue, reason);
411 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); 411 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
412 } 412 }
413 413
414 void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue) 414 void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue)
415 { 415 {
416 ieee80211_stop_queue_by_reason(hw, queue, 416 ieee80211_stop_queue_by_reason(hw, queue,
417 IEEE80211_QUEUE_STOP_REASON_DRIVER); 417 IEEE80211_QUEUE_STOP_REASON_DRIVER);
418 } 418 }
419 EXPORT_SYMBOL(ieee80211_stop_queue); 419 EXPORT_SYMBOL(ieee80211_stop_queue);
420 420
421 void ieee80211_add_pending_skb(struct ieee80211_local *local, 421 void ieee80211_add_pending_skb(struct ieee80211_local *local,
422 struct sk_buff *skb) 422 struct sk_buff *skb)
423 { 423 {
424 struct ieee80211_hw *hw = &local->hw; 424 struct ieee80211_hw *hw = &local->hw;
425 unsigned long flags; 425 unsigned long flags;
426 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 426 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
427 int queue = info->hw_queue; 427 int queue = info->hw_queue;
428 428
429 if (WARN_ON(!info->control.vif)) { 429 if (WARN_ON(!info->control.vif)) {
430 ieee80211_free_txskb(&local->hw, skb); 430 ieee80211_free_txskb(&local->hw, skb);
431 return; 431 return;
432 } 432 }
433 433
434 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); 434 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
435 __ieee80211_stop_queue(hw, queue, IEEE80211_QUEUE_STOP_REASON_SKB_ADD); 435 __ieee80211_stop_queue(hw, queue, IEEE80211_QUEUE_STOP_REASON_SKB_ADD);
436 __skb_queue_tail(&local->pending[queue], skb); 436 __skb_queue_tail(&local->pending[queue], skb);
437 __ieee80211_wake_queue(hw, queue, IEEE80211_QUEUE_STOP_REASON_SKB_ADD); 437 __ieee80211_wake_queue(hw, queue, IEEE80211_QUEUE_STOP_REASON_SKB_ADD);
438 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); 438 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
439 } 439 }
440 440
441 void ieee80211_add_pending_skbs_fn(struct ieee80211_local *local, 441 void ieee80211_add_pending_skbs_fn(struct ieee80211_local *local,
442 struct sk_buff_head *skbs, 442 struct sk_buff_head *skbs,
443 void (*fn)(void *data), void *data) 443 void (*fn)(void *data), void *data)
444 { 444 {
445 struct ieee80211_hw *hw = &local->hw; 445 struct ieee80211_hw *hw = &local->hw;
446 struct sk_buff *skb; 446 struct sk_buff *skb;
447 unsigned long flags; 447 unsigned long flags;
448 int queue, i; 448 int queue, i;
449 449
450 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); 450 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
451 while ((skb = skb_dequeue(skbs))) { 451 while ((skb = skb_dequeue(skbs))) {
452 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 452 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
453 453
454 if (WARN_ON(!info->control.vif)) { 454 if (WARN_ON(!info->control.vif)) {
455 ieee80211_free_txskb(&local->hw, skb); 455 ieee80211_free_txskb(&local->hw, skb);
456 continue; 456 continue;
457 } 457 }
458 458
459 queue = info->hw_queue; 459 queue = info->hw_queue;
460 460
461 __ieee80211_stop_queue(hw, queue, 461 __ieee80211_stop_queue(hw, queue,
462 IEEE80211_QUEUE_STOP_REASON_SKB_ADD); 462 IEEE80211_QUEUE_STOP_REASON_SKB_ADD);
463 463
464 __skb_queue_tail(&local->pending[queue], skb); 464 __skb_queue_tail(&local->pending[queue], skb);
465 } 465 }
466 466
467 if (fn) 467 if (fn)
468 fn(data); 468 fn(data);
469 469
470 for (i = 0; i < hw->queues; i++) 470 for (i = 0; i < hw->queues; i++)
471 __ieee80211_wake_queue(hw, i, 471 __ieee80211_wake_queue(hw, i,
472 IEEE80211_QUEUE_STOP_REASON_SKB_ADD); 472 IEEE80211_QUEUE_STOP_REASON_SKB_ADD);
473 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); 473 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
474 } 474 }
475 475
476 void ieee80211_stop_queues_by_reason(struct ieee80211_hw *hw, 476 void ieee80211_stop_queues_by_reason(struct ieee80211_hw *hw,
477 unsigned long queues, 477 unsigned long queues,
478 enum queue_stop_reason reason) 478 enum queue_stop_reason reason)
479 { 479 {
480 struct ieee80211_local *local = hw_to_local(hw); 480 struct ieee80211_local *local = hw_to_local(hw);
481 unsigned long flags; 481 unsigned long flags;
482 int i; 482 int i;
483 483
484 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); 484 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
485 485
486 for_each_set_bit(i, &queues, hw->queues) 486 for_each_set_bit(i, &queues, hw->queues)
487 __ieee80211_stop_queue(hw, i, reason); 487 __ieee80211_stop_queue(hw, i, reason);
488 488
489 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); 489 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
490 } 490 }
491 491
492 void ieee80211_stop_queues(struct ieee80211_hw *hw) 492 void ieee80211_stop_queues(struct ieee80211_hw *hw)
493 { 493 {
494 ieee80211_stop_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP, 494 ieee80211_stop_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP,
495 IEEE80211_QUEUE_STOP_REASON_DRIVER); 495 IEEE80211_QUEUE_STOP_REASON_DRIVER);
496 } 496 }
497 EXPORT_SYMBOL(ieee80211_stop_queues); 497 EXPORT_SYMBOL(ieee80211_stop_queues);
498 498
499 int ieee80211_queue_stopped(struct ieee80211_hw *hw, int queue) 499 int ieee80211_queue_stopped(struct ieee80211_hw *hw, int queue)
500 { 500 {
501 struct ieee80211_local *local = hw_to_local(hw); 501 struct ieee80211_local *local = hw_to_local(hw);
502 unsigned long flags; 502 unsigned long flags;
503 int ret; 503 int ret;
504 504
505 if (WARN_ON(queue >= hw->queues)) 505 if (WARN_ON(queue >= hw->queues))
506 return true; 506 return true;
507 507
508 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); 508 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
509 ret = test_bit(IEEE80211_QUEUE_STOP_REASON_DRIVER, 509 ret = test_bit(IEEE80211_QUEUE_STOP_REASON_DRIVER,
510 &local->queue_stop_reasons[queue]); 510 &local->queue_stop_reasons[queue]);
511 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); 511 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
512 return ret; 512 return ret;
513 } 513 }
514 EXPORT_SYMBOL(ieee80211_queue_stopped); 514 EXPORT_SYMBOL(ieee80211_queue_stopped);
515 515
516 void ieee80211_wake_queues_by_reason(struct ieee80211_hw *hw, 516 void ieee80211_wake_queues_by_reason(struct ieee80211_hw *hw,
517 unsigned long queues, 517 unsigned long queues,
518 enum queue_stop_reason reason) 518 enum queue_stop_reason reason)
519 { 519 {
520 struct ieee80211_local *local = hw_to_local(hw); 520 struct ieee80211_local *local = hw_to_local(hw);
521 unsigned long flags; 521 unsigned long flags;
522 int i; 522 int i;
523 523
524 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); 524 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
525 525
526 for_each_set_bit(i, &queues, hw->queues) 526 for_each_set_bit(i, &queues, hw->queues)
527 __ieee80211_wake_queue(hw, i, reason); 527 __ieee80211_wake_queue(hw, i, reason);
528 528
529 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); 529 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
530 } 530 }
531 531
532 void ieee80211_wake_queues(struct ieee80211_hw *hw) 532 void ieee80211_wake_queues(struct ieee80211_hw *hw)
533 { 533 {
534 ieee80211_wake_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP, 534 ieee80211_wake_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP,
535 IEEE80211_QUEUE_STOP_REASON_DRIVER); 535 IEEE80211_QUEUE_STOP_REASON_DRIVER);
536 } 536 }
537 EXPORT_SYMBOL(ieee80211_wake_queues); 537 EXPORT_SYMBOL(ieee80211_wake_queues);
538 538
539 void ieee80211_flush_queues(struct ieee80211_local *local, 539 void ieee80211_flush_queues(struct ieee80211_local *local,
540 struct ieee80211_sub_if_data *sdata) 540 struct ieee80211_sub_if_data *sdata)
541 { 541 {
542 u32 queues; 542 u32 queues;
543 543
544 if (!local->ops->flush) 544 if (!local->ops->flush)
545 return; 545 return;
546 546
547 if (sdata && local->hw.flags & IEEE80211_HW_QUEUE_CONTROL) { 547 if (sdata && local->hw.flags & IEEE80211_HW_QUEUE_CONTROL) {
548 int ac; 548 int ac;
549 549
550 queues = 0; 550 queues = 0;
551 551
552 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) 552 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
553 queues |= BIT(sdata->vif.hw_queue[ac]); 553 queues |= BIT(sdata->vif.hw_queue[ac]);
554 if (sdata->vif.cab_queue != IEEE80211_INVAL_HW_QUEUE) 554 if (sdata->vif.cab_queue != IEEE80211_INVAL_HW_QUEUE)
555 queues |= BIT(sdata->vif.cab_queue); 555 queues |= BIT(sdata->vif.cab_queue);
556 } else { 556 } else {
557 /* all queues */ 557 /* all queues */
558 queues = BIT(local->hw.queues) - 1; 558 queues = BIT(local->hw.queues) - 1;
559 } 559 }
560 560
561 ieee80211_stop_queues_by_reason(&local->hw, IEEE80211_MAX_QUEUE_MAP, 561 ieee80211_stop_queues_by_reason(&local->hw, IEEE80211_MAX_QUEUE_MAP,
562 IEEE80211_QUEUE_STOP_REASON_FLUSH); 562 IEEE80211_QUEUE_STOP_REASON_FLUSH);
563 563
564 drv_flush(local, queues, false); 564 drv_flush(local, queues, false);
565 565
566 ieee80211_wake_queues_by_reason(&local->hw, IEEE80211_MAX_QUEUE_MAP, 566 ieee80211_wake_queues_by_reason(&local->hw, IEEE80211_MAX_QUEUE_MAP,
567 IEEE80211_QUEUE_STOP_REASON_FLUSH); 567 IEEE80211_QUEUE_STOP_REASON_FLUSH);
568 } 568 }
569 569
570 void ieee80211_iterate_active_interfaces( 570 void ieee80211_iterate_active_interfaces(
571 struct ieee80211_hw *hw, u32 iter_flags, 571 struct ieee80211_hw *hw, u32 iter_flags,
572 void (*iterator)(void *data, u8 *mac, 572 void (*iterator)(void *data, u8 *mac,
573 struct ieee80211_vif *vif), 573 struct ieee80211_vif *vif),
574 void *data) 574 void *data)
575 { 575 {
576 struct ieee80211_local *local = hw_to_local(hw); 576 struct ieee80211_local *local = hw_to_local(hw);
577 struct ieee80211_sub_if_data *sdata; 577 struct ieee80211_sub_if_data *sdata;
578 578
579 mutex_lock(&local->iflist_mtx); 579 mutex_lock(&local->iflist_mtx);
580 580
581 list_for_each_entry(sdata, &local->interfaces, list) { 581 list_for_each_entry(sdata, &local->interfaces, list) {
582 switch (sdata->vif.type) { 582 switch (sdata->vif.type) {
583 case NL80211_IFTYPE_MONITOR: 583 case NL80211_IFTYPE_MONITOR:
584 if (!(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE)) 584 if (!(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE))
585 continue; 585 continue;
586 break; 586 break;
587 case NL80211_IFTYPE_AP_VLAN: 587 case NL80211_IFTYPE_AP_VLAN:
588 continue; 588 continue;
589 default: 589 default:
590 break; 590 break;
591 } 591 }
592 if (!(iter_flags & IEEE80211_IFACE_ITER_RESUME_ALL) && 592 if (!(iter_flags & IEEE80211_IFACE_ITER_RESUME_ALL) &&
593 !(sdata->flags & IEEE80211_SDATA_IN_DRIVER)) 593 !(sdata->flags & IEEE80211_SDATA_IN_DRIVER))
594 continue; 594 continue;
595 if (ieee80211_sdata_running(sdata)) 595 if (ieee80211_sdata_running(sdata))
596 iterator(data, sdata->vif.addr, 596 iterator(data, sdata->vif.addr,
597 &sdata->vif); 597 &sdata->vif);
598 } 598 }
599 599
600 sdata = rcu_dereference_protected(local->monitor_sdata, 600 sdata = rcu_dereference_protected(local->monitor_sdata,
601 lockdep_is_held(&local->iflist_mtx)); 601 lockdep_is_held(&local->iflist_mtx));
602 if (sdata && 602 if (sdata &&
603 (iter_flags & IEEE80211_IFACE_ITER_RESUME_ALL || 603 (iter_flags & IEEE80211_IFACE_ITER_RESUME_ALL ||
604 sdata->flags & IEEE80211_SDATA_IN_DRIVER)) 604 sdata->flags & IEEE80211_SDATA_IN_DRIVER))
605 iterator(data, sdata->vif.addr, &sdata->vif); 605 iterator(data, sdata->vif.addr, &sdata->vif);
606 606
607 mutex_unlock(&local->iflist_mtx); 607 mutex_unlock(&local->iflist_mtx);
608 } 608 }
609 EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces); 609 EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces);
610 610
611 void ieee80211_iterate_active_interfaces_atomic( 611 void ieee80211_iterate_active_interfaces_atomic(
612 struct ieee80211_hw *hw, u32 iter_flags, 612 struct ieee80211_hw *hw, u32 iter_flags,
613 void (*iterator)(void *data, u8 *mac, 613 void (*iterator)(void *data, u8 *mac,
614 struct ieee80211_vif *vif), 614 struct ieee80211_vif *vif),
615 void *data) 615 void *data)
616 { 616 {
617 struct ieee80211_local *local = hw_to_local(hw); 617 struct ieee80211_local *local = hw_to_local(hw);
618 struct ieee80211_sub_if_data *sdata; 618 struct ieee80211_sub_if_data *sdata;
619 619
620 rcu_read_lock(); 620 rcu_read_lock();
621 621
622 list_for_each_entry_rcu(sdata, &local->interfaces, list) { 622 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
623 switch (sdata->vif.type) { 623 switch (sdata->vif.type) {
624 case NL80211_IFTYPE_MONITOR: 624 case NL80211_IFTYPE_MONITOR:
625 if (!(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE)) 625 if (!(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE))
626 continue; 626 continue;
627 break; 627 break;
628 case NL80211_IFTYPE_AP_VLAN: 628 case NL80211_IFTYPE_AP_VLAN:
629 continue; 629 continue;
630 default: 630 default:
631 break; 631 break;
632 } 632 }
633 if (!(iter_flags & IEEE80211_IFACE_ITER_RESUME_ALL) && 633 if (!(iter_flags & IEEE80211_IFACE_ITER_RESUME_ALL) &&
634 !(sdata->flags & IEEE80211_SDATA_IN_DRIVER)) 634 !(sdata->flags & IEEE80211_SDATA_IN_DRIVER))
635 continue; 635 continue;
636 if (ieee80211_sdata_running(sdata)) 636 if (ieee80211_sdata_running(sdata))
637 iterator(data, sdata->vif.addr, 637 iterator(data, sdata->vif.addr,
638 &sdata->vif); 638 &sdata->vif);
639 } 639 }
640 640
641 sdata = rcu_dereference(local->monitor_sdata); 641 sdata = rcu_dereference(local->monitor_sdata);
642 if (sdata && 642 if (sdata &&
643 (iter_flags & IEEE80211_IFACE_ITER_RESUME_ALL || 643 (iter_flags & IEEE80211_IFACE_ITER_RESUME_ALL ||
644 sdata->flags & IEEE80211_SDATA_IN_DRIVER)) 644 sdata->flags & IEEE80211_SDATA_IN_DRIVER))
645 iterator(data, sdata->vif.addr, &sdata->vif); 645 iterator(data, sdata->vif.addr, &sdata->vif);
646 646
647 rcu_read_unlock(); 647 rcu_read_unlock();
648 } 648 }
649 EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_atomic); 649 EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_atomic);
650 650
651 /* 651 /*
652 * Nothing should have been stuffed into the workqueue during 652 * Nothing should have been stuffed into the workqueue during
653 * the suspend->resume cycle. If this WARN is seen then there 653 * the suspend->resume cycle. If this WARN is seen then there
654 * is a bug with either the driver suspend or something in 654 * is a bug with either the driver suspend or something in
655 * mac80211 stuffing into the workqueue which we haven't yet 655 * mac80211 stuffing into the workqueue which we haven't yet
656 * cleared during mac80211's suspend cycle. 656 * cleared during mac80211's suspend cycle.
657 */ 657 */
658 static bool ieee80211_can_queue_work(struct ieee80211_local *local) 658 static bool ieee80211_can_queue_work(struct ieee80211_local *local)
659 { 659 {
660 if (WARN(local->suspended && !local->resuming, 660 if (WARN(local->suspended && !local->resuming,
661 "queueing ieee80211 work while going to suspend\n")) 661 "queueing ieee80211 work while going to suspend\n"))
662 return false; 662 return false;
663 663
664 return true; 664 return true;
665 } 665 }
666 666
667 void ieee80211_queue_work(struct ieee80211_hw *hw, struct work_struct *work) 667 void ieee80211_queue_work(struct ieee80211_hw *hw, struct work_struct *work)
668 { 668 {
669 struct ieee80211_local *local = hw_to_local(hw); 669 struct ieee80211_local *local = hw_to_local(hw);
670 670
671 if (!ieee80211_can_queue_work(local)) 671 if (!ieee80211_can_queue_work(local))
672 return; 672 return;
673 673
674 queue_work(local->workqueue, work); 674 queue_work(local->workqueue, work);
675 } 675 }
676 EXPORT_SYMBOL(ieee80211_queue_work); 676 EXPORT_SYMBOL(ieee80211_queue_work);
677 677
678 void ieee80211_queue_delayed_work(struct ieee80211_hw *hw, 678 void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
679 struct delayed_work *dwork, 679 struct delayed_work *dwork,
680 unsigned long delay) 680 unsigned long delay)
681 { 681 {
682 struct ieee80211_local *local = hw_to_local(hw); 682 struct ieee80211_local *local = hw_to_local(hw);
683 683
684 if (!ieee80211_can_queue_work(local)) 684 if (!ieee80211_can_queue_work(local))
685 return; 685 return;
686 686
687 queue_delayed_work(local->workqueue, dwork, delay); 687 queue_delayed_work(local->workqueue, dwork, delay);
688 } 688 }
689 EXPORT_SYMBOL(ieee80211_queue_delayed_work); 689 EXPORT_SYMBOL(ieee80211_queue_delayed_work);
690 690
691 u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action, 691 u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
692 struct ieee802_11_elems *elems, 692 struct ieee802_11_elems *elems,
693 u64 filter, u32 crc) 693 u64 filter, u32 crc)
694 { 694 {
695 size_t left = len; 695 size_t left = len;
696 const u8 *pos = start; 696 const u8 *pos = start;
697 bool calc_crc = filter != 0; 697 bool calc_crc = filter != 0;
698 DECLARE_BITMAP(seen_elems, 256); 698 DECLARE_BITMAP(seen_elems, 256);
699 const u8 *ie; 699 const u8 *ie;
700 700
701 bitmap_zero(seen_elems, 256); 701 bitmap_zero(seen_elems, 256);
702 memset(elems, 0, sizeof(*elems)); 702 memset(elems, 0, sizeof(*elems));
703 elems->ie_start = start; 703 elems->ie_start = start;
704 elems->total_len = len; 704 elems->total_len = len;
705 705
706 while (left >= 2) { 706 while (left >= 2) {
707 u8 id, elen; 707 u8 id, elen;
708 bool elem_parse_failed; 708 bool elem_parse_failed;
709 709
710 id = *pos++; 710 id = *pos++;
711 elen = *pos++; 711 elen = *pos++;
712 left -= 2; 712 left -= 2;
713 713
714 if (elen > left) { 714 if (elen > left) {
715 elems->parse_error = true; 715 elems->parse_error = true;
716 break; 716 break;
717 } 717 }
718 718
719 switch (id) { 719 switch (id) {
720 case WLAN_EID_SSID: 720 case WLAN_EID_SSID:
721 case WLAN_EID_SUPP_RATES: 721 case WLAN_EID_SUPP_RATES:
722 case WLAN_EID_FH_PARAMS: 722 case WLAN_EID_FH_PARAMS:
723 case WLAN_EID_DS_PARAMS: 723 case WLAN_EID_DS_PARAMS:
724 case WLAN_EID_CF_PARAMS: 724 case WLAN_EID_CF_PARAMS:
725 case WLAN_EID_TIM: 725 case WLAN_EID_TIM:
726 case WLAN_EID_IBSS_PARAMS: 726 case WLAN_EID_IBSS_PARAMS:
727 case WLAN_EID_CHALLENGE: 727 case WLAN_EID_CHALLENGE:
728 case WLAN_EID_RSN: 728 case WLAN_EID_RSN:
729 case WLAN_EID_ERP_INFO: 729 case WLAN_EID_ERP_INFO:
730 case WLAN_EID_EXT_SUPP_RATES: 730 case WLAN_EID_EXT_SUPP_RATES:
731 case WLAN_EID_HT_CAPABILITY: 731 case WLAN_EID_HT_CAPABILITY:
732 case WLAN_EID_HT_OPERATION: 732 case WLAN_EID_HT_OPERATION:
733 case WLAN_EID_VHT_CAPABILITY: 733 case WLAN_EID_VHT_CAPABILITY:
734 case WLAN_EID_VHT_OPERATION: 734 case WLAN_EID_VHT_OPERATION:
735 case WLAN_EID_MESH_ID: 735 case WLAN_EID_MESH_ID:
736 case WLAN_EID_MESH_CONFIG: 736 case WLAN_EID_MESH_CONFIG:
737 case WLAN_EID_PEER_MGMT: 737 case WLAN_EID_PEER_MGMT:
738 case WLAN_EID_PREQ: 738 case WLAN_EID_PREQ:
739 case WLAN_EID_PREP: 739 case WLAN_EID_PREP:
740 case WLAN_EID_PERR: 740 case WLAN_EID_PERR:
741 case WLAN_EID_RANN: 741 case WLAN_EID_RANN:
742 case WLAN_EID_CHANNEL_SWITCH: 742 case WLAN_EID_CHANNEL_SWITCH:
743 case WLAN_EID_EXT_CHANSWITCH_ANN: 743 case WLAN_EID_EXT_CHANSWITCH_ANN:
744 case WLAN_EID_COUNTRY: 744 case WLAN_EID_COUNTRY:
745 case WLAN_EID_PWR_CONSTRAINT: 745 case WLAN_EID_PWR_CONSTRAINT:
746 case WLAN_EID_TIMEOUT_INTERVAL: 746 case WLAN_EID_TIMEOUT_INTERVAL:
747 case WLAN_EID_SECONDARY_CHANNEL_OFFSET: 747 case WLAN_EID_SECONDARY_CHANNEL_OFFSET:
748 case WLAN_EID_WIDE_BW_CHANNEL_SWITCH: 748 case WLAN_EID_WIDE_BW_CHANNEL_SWITCH:
749 /* 749 /*
750 * not listing WLAN_EID_CHANNEL_SWITCH_WRAPPER -- it seems possible 750 * not listing WLAN_EID_CHANNEL_SWITCH_WRAPPER -- it seems possible
751 * that if the content gets bigger it might be needed more than once 751 * that if the content gets bigger it might be needed more than once
752 */ 752 */
753 if (test_bit(id, seen_elems)) { 753 if (test_bit(id, seen_elems)) {
754 elems->parse_error = true; 754 elems->parse_error = true;
755 left -= elen; 755 left -= elen;
756 pos += elen; 756 pos += elen;
757 continue; 757 continue;
758 } 758 }
759 break; 759 break;
760 } 760 }
761 761
762 if (calc_crc && id < 64 && (filter & (1ULL << id))) 762 if (calc_crc && id < 64 && (filter & (1ULL << id)))
763 crc = crc32_be(crc, pos - 2, elen + 2); 763 crc = crc32_be(crc, pos - 2, elen + 2);
764 764
765 elem_parse_failed = false; 765 elem_parse_failed = false;
766 766
767 switch (id) { 767 switch (id) {
768 case WLAN_EID_SSID: 768 case WLAN_EID_SSID:
769 elems->ssid = pos; 769 elems->ssid = pos;
770 elems->ssid_len = elen; 770 elems->ssid_len = elen;
771 break; 771 break;
772 case WLAN_EID_SUPP_RATES: 772 case WLAN_EID_SUPP_RATES:
773 elems->supp_rates = pos; 773 elems->supp_rates = pos;
774 elems->supp_rates_len = elen; 774 elems->supp_rates_len = elen;
775 break; 775 break;
776 case WLAN_EID_DS_PARAMS: 776 case WLAN_EID_DS_PARAMS:
777 if (elen >= 1) 777 if (elen >= 1)
778 elems->ds_params = pos; 778 elems->ds_params = pos;
779 else 779 else
780 elem_parse_failed = true; 780 elem_parse_failed = true;
781 break; 781 break;
782 case WLAN_EID_TIM: 782 case WLAN_EID_TIM:
783 if (elen >= sizeof(struct ieee80211_tim_ie)) { 783 if (elen >= sizeof(struct ieee80211_tim_ie)) {
784 elems->tim = (void *)pos; 784 elems->tim = (void *)pos;
785 elems->tim_len = elen; 785 elems->tim_len = elen;
786 } else 786 } else
787 elem_parse_failed = true; 787 elem_parse_failed = true;
788 break; 788 break;
789 case WLAN_EID_CHALLENGE: 789 case WLAN_EID_CHALLENGE:
790 elems->challenge = pos; 790 elems->challenge = pos;
791 elems->challenge_len = elen; 791 elems->challenge_len = elen;
792 break; 792 break;
793 case WLAN_EID_VENDOR_SPECIFIC: 793 case WLAN_EID_VENDOR_SPECIFIC:
794 if (elen >= 4 && pos[0] == 0x00 && pos[1] == 0x50 && 794 if (elen >= 4 && pos[0] == 0x00 && pos[1] == 0x50 &&
795 pos[2] == 0xf2) { 795 pos[2] == 0xf2) {
796 /* Microsoft OUI (00:50:F2) */ 796 /* Microsoft OUI (00:50:F2) */
797 797
798 if (calc_crc) 798 if (calc_crc)
799 crc = crc32_be(crc, pos - 2, elen + 2); 799 crc = crc32_be(crc, pos - 2, elen + 2);
800 800
801 if (elen >= 5 && pos[3] == 2) { 801 if (elen >= 5 && pos[3] == 2) {
802 /* OUI Type 2 - WMM IE */ 802 /* OUI Type 2 - WMM IE */
803 if (pos[4] == 0) { 803 if (pos[4] == 0) {
804 elems->wmm_info = pos; 804 elems->wmm_info = pos;
805 elems->wmm_info_len = elen; 805 elems->wmm_info_len = elen;
806 } else if (pos[4] == 1) { 806 } else if (pos[4] == 1) {
807 elems->wmm_param = pos; 807 elems->wmm_param = pos;
808 elems->wmm_param_len = elen; 808 elems->wmm_param_len = elen;
809 } 809 }
810 } 810 }
811 } 811 }
812 break; 812 break;
813 case WLAN_EID_RSN: 813 case WLAN_EID_RSN:
814 elems->rsn = pos; 814 elems->rsn = pos;
815 elems->rsn_len = elen; 815 elems->rsn_len = elen;
816 break; 816 break;
817 case WLAN_EID_ERP_INFO: 817 case WLAN_EID_ERP_INFO:
818 if (elen >= 1) 818 if (elen >= 1)
819 elems->erp_info = pos; 819 elems->erp_info = pos;
820 else 820 else
821 elem_parse_failed = true; 821 elem_parse_failed = true;
822 break; 822 break;
823 case WLAN_EID_EXT_SUPP_RATES: 823 case WLAN_EID_EXT_SUPP_RATES:
824 elems->ext_supp_rates = pos; 824 elems->ext_supp_rates = pos;
825 elems->ext_supp_rates_len = elen; 825 elems->ext_supp_rates_len = elen;
826 break; 826 break;
827 case WLAN_EID_HT_CAPABILITY: 827 case WLAN_EID_HT_CAPABILITY:
828 if (elen >= sizeof(struct ieee80211_ht_cap)) 828 if (elen >= sizeof(struct ieee80211_ht_cap))
829 elems->ht_cap_elem = (void *)pos; 829 elems->ht_cap_elem = (void *)pos;
830 else 830 else
831 elem_parse_failed = true; 831 elem_parse_failed = true;
832 break; 832 break;
833 case WLAN_EID_HT_OPERATION: 833 case WLAN_EID_HT_OPERATION:
834 if (elen >= sizeof(struct ieee80211_ht_operation)) 834 if (elen >= sizeof(struct ieee80211_ht_operation))
835 elems->ht_operation = (void *)pos; 835 elems->ht_operation = (void *)pos;
836 else 836 else
837 elem_parse_failed = true; 837 elem_parse_failed = true;
838 break; 838 break;
839 case WLAN_EID_VHT_CAPABILITY: 839 case WLAN_EID_VHT_CAPABILITY:
840 if (elen >= sizeof(struct ieee80211_vht_cap)) 840 if (elen >= sizeof(struct ieee80211_vht_cap))
841 elems->vht_cap_elem = (void *)pos; 841 elems->vht_cap_elem = (void *)pos;
842 else 842 else
843 elem_parse_failed = true; 843 elem_parse_failed = true;
844 break; 844 break;
845 case WLAN_EID_VHT_OPERATION: 845 case WLAN_EID_VHT_OPERATION:
846 if (elen >= sizeof(struct ieee80211_vht_operation)) 846 if (elen >= sizeof(struct ieee80211_vht_operation))
847 elems->vht_operation = (void *)pos; 847 elems->vht_operation = (void *)pos;
848 else 848 else
849 elem_parse_failed = true; 849 elem_parse_failed = true;
850 break; 850 break;
851 case WLAN_EID_OPMODE_NOTIF: 851 case WLAN_EID_OPMODE_NOTIF:
852 if (elen > 0) 852 if (elen > 0)
853 elems->opmode_notif = pos; 853 elems->opmode_notif = pos;
854 else 854 else
855 elem_parse_failed = true; 855 elem_parse_failed = true;
856 break; 856 break;
857 case WLAN_EID_MESH_ID: 857 case WLAN_EID_MESH_ID:
858 elems->mesh_id = pos; 858 elems->mesh_id = pos;
859 elems->mesh_id_len = elen; 859 elems->mesh_id_len = elen;
860 break; 860 break;
861 case WLAN_EID_MESH_CONFIG: 861 case WLAN_EID_MESH_CONFIG:
862 if (elen >= sizeof(struct ieee80211_meshconf_ie)) 862 if (elen >= sizeof(struct ieee80211_meshconf_ie))
863 elems->mesh_config = (void *)pos; 863 elems->mesh_config = (void *)pos;
864 else 864 else
865 elem_parse_failed = true; 865 elem_parse_failed = true;
866 break; 866 break;
867 case WLAN_EID_PEER_MGMT: 867 case WLAN_EID_PEER_MGMT:
868 elems->peering = pos; 868 elems->peering = pos;
869 elems->peering_len = elen; 869 elems->peering_len = elen;
870 break; 870 break;
871 case WLAN_EID_MESH_AWAKE_WINDOW: 871 case WLAN_EID_MESH_AWAKE_WINDOW:
872 if (elen >= 2) 872 if (elen >= 2)
873 elems->awake_window = (void *)pos; 873 elems->awake_window = (void *)pos;
874 break; 874 break;
875 case WLAN_EID_PREQ: 875 case WLAN_EID_PREQ:
876 elems->preq = pos; 876 elems->preq = pos;
877 elems->preq_len = elen; 877 elems->preq_len = elen;
878 break; 878 break;
879 case WLAN_EID_PREP: 879 case WLAN_EID_PREP:
880 elems->prep = pos; 880 elems->prep = pos;
881 elems->prep_len = elen; 881 elems->prep_len = elen;
882 break; 882 break;
883 case WLAN_EID_PERR: 883 case WLAN_EID_PERR:
884 elems->perr = pos; 884 elems->perr = pos;
885 elems->perr_len = elen; 885 elems->perr_len = elen;
886 break; 886 break;
887 case WLAN_EID_RANN: 887 case WLAN_EID_RANN:
888 if (elen >= sizeof(struct ieee80211_rann_ie)) 888 if (elen >= sizeof(struct ieee80211_rann_ie))
889 elems->rann = (void *)pos; 889 elems->rann = (void *)pos;
890 else 890 else
891 elem_parse_failed = true; 891 elem_parse_failed = true;
892 break; 892 break;
893 case WLAN_EID_CHANNEL_SWITCH: 893 case WLAN_EID_CHANNEL_SWITCH:
894 if (elen != sizeof(struct ieee80211_channel_sw_ie)) { 894 if (elen != sizeof(struct ieee80211_channel_sw_ie)) {
895 elem_parse_failed = true; 895 elem_parse_failed = true;
896 break; 896 break;
897 } 897 }
898 elems->ch_switch_ie = (void *)pos; 898 elems->ch_switch_ie = (void *)pos;
899 break; 899 break;
900 case WLAN_EID_EXT_CHANSWITCH_ANN: 900 case WLAN_EID_EXT_CHANSWITCH_ANN:
901 if (elen != sizeof(struct ieee80211_ext_chansw_ie)) { 901 if (elen != sizeof(struct ieee80211_ext_chansw_ie)) {
902 elem_parse_failed = true; 902 elem_parse_failed = true;
903 break; 903 break;
904 } 904 }
905 elems->ext_chansw_ie = (void *)pos; 905 elems->ext_chansw_ie = (void *)pos;
906 break; 906 break;
907 case WLAN_EID_SECONDARY_CHANNEL_OFFSET: 907 case WLAN_EID_SECONDARY_CHANNEL_OFFSET:
908 if (elen != sizeof(struct ieee80211_sec_chan_offs_ie)) { 908 if (elen != sizeof(struct ieee80211_sec_chan_offs_ie)) {
909 elem_parse_failed = true; 909 elem_parse_failed = true;
910 break; 910 break;
911 } 911 }
912 elems->sec_chan_offs = (void *)pos; 912 elems->sec_chan_offs = (void *)pos;
913 break; 913 break;
914 case WLAN_EID_WIDE_BW_CHANNEL_SWITCH: 914 case WLAN_EID_WIDE_BW_CHANNEL_SWITCH:
915 if (!action || 915 if (!action ||
916 elen != sizeof(*elems->wide_bw_chansw_ie)) { 916 elen != sizeof(*elems->wide_bw_chansw_ie)) {
917 elem_parse_failed = true; 917 elem_parse_failed = true;
918 break; 918 break;
919 } 919 }
920 elems->wide_bw_chansw_ie = (void *)pos; 920 elems->wide_bw_chansw_ie = (void *)pos;
921 break; 921 break;
922 case WLAN_EID_CHANNEL_SWITCH_WRAPPER: 922 case WLAN_EID_CHANNEL_SWITCH_WRAPPER:
923 if (action) { 923 if (action) {
924 elem_parse_failed = true; 924 elem_parse_failed = true;
925 break; 925 break;
926 } 926 }
927 /* 927 /*
928 * This is a bit tricky, but as we only care about 928 * This is a bit tricky, but as we only care about
929 * the wide bandwidth channel switch element, so 929 * the wide bandwidth channel switch element, so
930 * just parse it out manually. 930 * just parse it out manually.
931 */ 931 */
932 ie = cfg80211_find_ie(WLAN_EID_WIDE_BW_CHANNEL_SWITCH, 932 ie = cfg80211_find_ie(WLAN_EID_WIDE_BW_CHANNEL_SWITCH,
933 pos, elen); 933 pos, elen);
934 if (ie) { 934 if (ie) {
935 if (ie[1] == sizeof(*elems->wide_bw_chansw_ie)) 935 if (ie[1] == sizeof(*elems->wide_bw_chansw_ie))
936 elems->wide_bw_chansw_ie = 936 elems->wide_bw_chansw_ie =
937 (void *)(ie + 2); 937 (void *)(ie + 2);
938 else 938 else
939 elem_parse_failed = true; 939 elem_parse_failed = true;
940 } 940 }
941 break; 941 break;
942 case WLAN_EID_COUNTRY: 942 case WLAN_EID_COUNTRY:
943 elems->country_elem = pos; 943 elems->country_elem = pos;
944 elems->country_elem_len = elen; 944 elems->country_elem_len = elen;
945 break; 945 break;
946 case WLAN_EID_PWR_CONSTRAINT: 946 case WLAN_EID_PWR_CONSTRAINT:
947 if (elen != 1) { 947 if (elen != 1) {
948 elem_parse_failed = true; 948 elem_parse_failed = true;
949 break; 949 break;
950 } 950 }
951 elems->pwr_constr_elem = pos; 951 elems->pwr_constr_elem = pos;
952 break; 952 break;
953 case WLAN_EID_TIMEOUT_INTERVAL: 953 case WLAN_EID_TIMEOUT_INTERVAL:
954 if (elen >= sizeof(struct ieee80211_timeout_interval_ie)) 954 if (elen >= sizeof(struct ieee80211_timeout_interval_ie))
955 elems->timeout_int = (void *)pos; 955 elems->timeout_int = (void *)pos;
956 else 956 else
957 elem_parse_failed = true; 957 elem_parse_failed = true;
958 break; 958 break;
959 default: 959 default:
960 break; 960 break;
961 } 961 }
962 962
963 if (elem_parse_failed) 963 if (elem_parse_failed)
964 elems->parse_error = true; 964 elems->parse_error = true;
965 else 965 else
966 __set_bit(id, seen_elems); 966 __set_bit(id, seen_elems);
967 967
968 left -= elen; 968 left -= elen;
969 pos += elen; 969 pos += elen;
970 } 970 }
971 971
972 if (left != 0) 972 if (left != 0)
973 elems->parse_error = true; 973 elems->parse_error = true;
974 974
975 return crc; 975 return crc;
976 } 976 }
977 977
978 void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata, 978 void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata,
979 bool bss_notify) 979 bool bss_notify)
980 { 980 {
981 struct ieee80211_local *local = sdata->local; 981 struct ieee80211_local *local = sdata->local;
982 struct ieee80211_tx_queue_params qparam; 982 struct ieee80211_tx_queue_params qparam;
983 struct ieee80211_chanctx_conf *chanctx_conf; 983 struct ieee80211_chanctx_conf *chanctx_conf;
984 int ac; 984 int ac;
985 bool use_11b, enable_qos; 985 bool use_11b, enable_qos;
986 int aCWmin, aCWmax; 986 int aCWmin, aCWmax;
987 987
988 if (!local->ops->conf_tx) 988 if (!local->ops->conf_tx)
989 return; 989 return;
990 990
991 if (local->hw.queues < IEEE80211_NUM_ACS) 991 if (local->hw.queues < IEEE80211_NUM_ACS)
992 return; 992 return;
993 993
994 memset(&qparam, 0, sizeof(qparam)); 994 memset(&qparam, 0, sizeof(qparam));
995 995
996 rcu_read_lock(); 996 rcu_read_lock();
997 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); 997 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
998 use_11b = (chanctx_conf && 998 use_11b = (chanctx_conf &&
999 chanctx_conf->def.chan->band == IEEE80211_BAND_2GHZ) && 999 chanctx_conf->def.chan->band == IEEE80211_BAND_2GHZ) &&
1000 !(sdata->flags & IEEE80211_SDATA_OPERATING_GMODE); 1000 !(sdata->flags & IEEE80211_SDATA_OPERATING_GMODE);
1001 rcu_read_unlock(); 1001 rcu_read_unlock();
1002 1002
1003 /* 1003 /*
1004 * By default disable QoS in STA mode for old access points, which do 1004 * By default disable QoS in STA mode for old access points, which do
1005 * not support 802.11e. New APs will provide proper queue parameters, 1005 * not support 802.11e. New APs will provide proper queue parameters,
1006 * that we will configure later. 1006 * that we will configure later.
1007 */ 1007 */
1008 enable_qos = (sdata->vif.type != NL80211_IFTYPE_STATION); 1008 enable_qos = (sdata->vif.type != NL80211_IFTYPE_STATION);
1009 1009
1010 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) { 1010 for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
1011 /* Set defaults according to 802.11-2007 Table 7-37 */ 1011 /* Set defaults according to 802.11-2007 Table 7-37 */
1012 aCWmax = 1023; 1012 aCWmax = 1023;
1013 if (use_11b) 1013 if (use_11b)
1014 aCWmin = 31; 1014 aCWmin = 31;
1015 else 1015 else
1016 aCWmin = 15; 1016 aCWmin = 15;
1017 1017
1018 if (enable_qos) { 1018 if (enable_qos) {
1019 switch (ac) { 1019 switch (ac) {
1020 case IEEE80211_AC_BK: 1020 case IEEE80211_AC_BK:
1021 qparam.cw_max = aCWmax; 1021 qparam.cw_max = aCWmax;
1022 qparam.cw_min = aCWmin; 1022 qparam.cw_min = aCWmin;
1023 qparam.txop = 0; 1023 qparam.txop = 0;
1024 qparam.aifs = 7; 1024 qparam.aifs = 7;
1025 break; 1025 break;
1026 /* never happens but let's not leave undefined */ 1026 /* never happens but let's not leave undefined */
1027 default: 1027 default:
1028 case IEEE80211_AC_BE: 1028 case IEEE80211_AC_BE:
1029 qparam.cw_max = aCWmax; 1029 qparam.cw_max = aCWmax;
1030 qparam.cw_min = aCWmin; 1030 qparam.cw_min = aCWmin;
1031 qparam.txop = 0; 1031 qparam.txop = 0;
1032 qparam.aifs = 3; 1032 qparam.aifs = 3;
1033 break; 1033 break;
1034 case IEEE80211_AC_VI: 1034 case IEEE80211_AC_VI:
1035 qparam.cw_max = aCWmin; 1035 qparam.cw_max = aCWmin;
1036 qparam.cw_min = (aCWmin + 1) / 2 - 1; 1036 qparam.cw_min = (aCWmin + 1) / 2 - 1;
1037 if (use_11b) 1037 if (use_11b)
1038 qparam.txop = 6016/32; 1038 qparam.txop = 6016/32;
1039 else 1039 else
1040 qparam.txop = 3008/32; 1040 qparam.txop = 3008/32;
1041 qparam.aifs = 2; 1041 qparam.aifs = 2;
1042 break; 1042 break;
1043 case IEEE80211_AC_VO: 1043 case IEEE80211_AC_VO:
1044 qparam.cw_max = (aCWmin + 1) / 2 - 1; 1044 qparam.cw_max = (aCWmin + 1) / 2 - 1;
1045 qparam.cw_min = (aCWmin + 1) / 4 - 1; 1045 qparam.cw_min = (aCWmin + 1) / 4 - 1;
1046 if (use_11b) 1046 if (use_11b)
1047 qparam.txop = 3264/32; 1047 qparam.txop = 3264/32;
1048 else 1048 else
1049 qparam.txop = 1504/32; 1049 qparam.txop = 1504/32;
1050 qparam.aifs = 2; 1050 qparam.aifs = 2;
1051 break; 1051 break;
1052 } 1052 }
1053 } else { 1053 } else {
1054 /* Confiure old 802.11b/g medium access rules. */ 1054 /* Confiure old 802.11b/g medium access rules. */
1055 qparam.cw_max = aCWmax; 1055 qparam.cw_max = aCWmax;
1056 qparam.cw_min = aCWmin; 1056 qparam.cw_min = aCWmin;
1057 qparam.txop = 0; 1057 qparam.txop = 0;
1058 qparam.aifs = 2; 1058 qparam.aifs = 2;
1059 } 1059 }
1060 1060
1061 qparam.uapsd = false; 1061 qparam.uapsd = false;
1062 1062
1063 sdata->tx_conf[ac] = qparam; 1063 sdata->tx_conf[ac] = qparam;
1064 drv_conf_tx(local, sdata, ac, &qparam); 1064 drv_conf_tx(local, sdata, ac, &qparam);
1065 } 1065 }
1066 1066
1067 if (sdata->vif.type != NL80211_IFTYPE_MONITOR && 1067 if (sdata->vif.type != NL80211_IFTYPE_MONITOR &&
1068 sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE) { 1068 sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE) {
1069 sdata->vif.bss_conf.qos = enable_qos; 1069 sdata->vif.bss_conf.qos = enable_qos;
1070 if (bss_notify) 1070 if (bss_notify)
1071 ieee80211_bss_info_change_notify(sdata, 1071 ieee80211_bss_info_change_notify(sdata,
1072 BSS_CHANGED_QOS); 1072 BSS_CHANGED_QOS);
1073 } 1073 }
1074 } 1074 }
1075 1075
1076 void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, 1076 void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,
1077 u16 transaction, u16 auth_alg, u16 status, 1077 u16 transaction, u16 auth_alg, u16 status,
1078 const u8 *extra, size_t extra_len, const u8 *da, 1078 const u8 *extra, size_t extra_len, const u8 *da,
1079 const u8 *bssid, const u8 *key, u8 key_len, u8 key_idx, 1079 const u8 *bssid, const u8 *key, u8 key_len, u8 key_idx,
1080 u32 tx_flags) 1080 u32 tx_flags)
1081 { 1081 {
1082 struct ieee80211_local *local = sdata->local; 1082 struct ieee80211_local *local = sdata->local;
1083 struct sk_buff *skb; 1083 struct sk_buff *skb;
1084 struct ieee80211_mgmt *mgmt; 1084 struct ieee80211_mgmt *mgmt;
1085 int err; 1085 int err;
1086 1086
1087 skb = dev_alloc_skb(local->hw.extra_tx_headroom + 1087 skb = dev_alloc_skb(local->hw.extra_tx_headroom +
1088 sizeof(*mgmt) + 6 + extra_len); 1088 sizeof(*mgmt) + 6 + extra_len);
1089 if (!skb) 1089 if (!skb)
1090 return; 1090 return;
1091 1091
1092 skb_reserve(skb, local->hw.extra_tx_headroom); 1092 skb_reserve(skb, local->hw.extra_tx_headroom);
1093 1093
1094 mgmt = (struct ieee80211_mgmt *) skb_put(skb, 24 + 6); 1094 mgmt = (struct ieee80211_mgmt *) skb_put(skb, 24 + 6);
1095 memset(mgmt, 0, 24 + 6); 1095 memset(mgmt, 0, 24 + 6);
1096 mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | 1096 mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
1097 IEEE80211_STYPE_AUTH); 1097 IEEE80211_STYPE_AUTH);
1098 memcpy(mgmt->da, da, ETH_ALEN); 1098 memcpy(mgmt->da, da, ETH_ALEN);
1099 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); 1099 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN);
1100 memcpy(mgmt->bssid, bssid, ETH_ALEN); 1100 memcpy(mgmt->bssid, bssid, ETH_ALEN);
1101 mgmt->u.auth.auth_alg = cpu_to_le16(auth_alg); 1101 mgmt->u.auth.auth_alg = cpu_to_le16(auth_alg);
1102 mgmt->u.auth.auth_transaction = cpu_to_le16(transaction); 1102 mgmt->u.auth.auth_transaction = cpu_to_le16(transaction);
1103 mgmt->u.auth.status_code = cpu_to_le16(status); 1103 mgmt->u.auth.status_code = cpu_to_le16(status);
1104 if (extra) 1104 if (extra)
1105 memcpy(skb_put(skb, extra_len), extra, extra_len); 1105 memcpy(skb_put(skb, extra_len), extra, extra_len);
1106 1106
1107 if (auth_alg == WLAN_AUTH_SHARED_KEY && transaction == 3) { 1107 if (auth_alg == WLAN_AUTH_SHARED_KEY && transaction == 3) {
1108 mgmt->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); 1108 mgmt->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED);
1109 err = ieee80211_wep_encrypt(local, skb, key, key_len, key_idx); 1109 err = ieee80211_wep_encrypt(local, skb, key, key_len, key_idx);
1110 WARN_ON(err); 1110 WARN_ON(err);
1111 } 1111 }
1112 1112
1113 IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT | 1113 IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT |
1114 tx_flags; 1114 tx_flags;
1115 ieee80211_tx_skb(sdata, skb); 1115 ieee80211_tx_skb(sdata, skb);
1116 } 1116 }
1117 1117
1118 void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata, 1118 void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
1119 const u8 *bssid, u16 stype, u16 reason, 1119 const u8 *bssid, u16 stype, u16 reason,
1120 bool send_frame, u8 *frame_buf) 1120 bool send_frame, u8 *frame_buf)
1121 { 1121 {
1122 struct ieee80211_local *local = sdata->local; 1122 struct ieee80211_local *local = sdata->local;
1123 struct sk_buff *skb; 1123 struct sk_buff *skb;
1124 struct ieee80211_mgmt *mgmt = (void *)frame_buf; 1124 struct ieee80211_mgmt *mgmt = (void *)frame_buf;
1125 1125
1126 /* build frame */ 1126 /* build frame */
1127 mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | stype); 1127 mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | stype);
1128 mgmt->duration = 0; /* initialize only */ 1128 mgmt->duration = 0; /* initialize only */
1129 mgmt->seq_ctrl = 0; /* initialize only */ 1129 mgmt->seq_ctrl = 0; /* initialize only */
1130 memcpy(mgmt->da, bssid, ETH_ALEN); 1130 memcpy(mgmt->da, bssid, ETH_ALEN);
1131 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); 1131 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN);
1132 memcpy(mgmt->bssid, bssid, ETH_ALEN); 1132 memcpy(mgmt->bssid, bssid, ETH_ALEN);
1133 /* u.deauth.reason_code == u.disassoc.reason_code */ 1133 /* u.deauth.reason_code == u.disassoc.reason_code */
1134 mgmt->u.deauth.reason_code = cpu_to_le16(reason); 1134 mgmt->u.deauth.reason_code = cpu_to_le16(reason);
1135 1135
1136 if (send_frame) { 1136 if (send_frame) {
1137 skb = dev_alloc_skb(local->hw.extra_tx_headroom + 1137 skb = dev_alloc_skb(local->hw.extra_tx_headroom +
1138 IEEE80211_DEAUTH_FRAME_LEN); 1138 IEEE80211_DEAUTH_FRAME_LEN);
1139 if (!skb) 1139 if (!skb)
1140 return; 1140 return;
1141 1141
1142 skb_reserve(skb, local->hw.extra_tx_headroom); 1142 skb_reserve(skb, local->hw.extra_tx_headroom);
1143 1143
1144 /* copy in frame */ 1144 /* copy in frame */
1145 memcpy(skb_put(skb, IEEE80211_DEAUTH_FRAME_LEN), 1145 memcpy(skb_put(skb, IEEE80211_DEAUTH_FRAME_LEN),
1146 mgmt, IEEE80211_DEAUTH_FRAME_LEN); 1146 mgmt, IEEE80211_DEAUTH_FRAME_LEN);
1147 1147
1148 if (sdata->vif.type != NL80211_IFTYPE_STATION || 1148 if (sdata->vif.type != NL80211_IFTYPE_STATION ||
1149 !(sdata->u.mgd.flags & IEEE80211_STA_MFP_ENABLED)) 1149 !(sdata->u.mgd.flags & IEEE80211_STA_MFP_ENABLED))
1150 IEEE80211_SKB_CB(skb)->flags |= 1150 IEEE80211_SKB_CB(skb)->flags |=
1151 IEEE80211_TX_INTFL_DONT_ENCRYPT; 1151 IEEE80211_TX_INTFL_DONT_ENCRYPT;
1152 1152
1153 ieee80211_tx_skb(sdata, skb); 1153 ieee80211_tx_skb(sdata, skb);
1154 } 1154 }
1155 } 1155 }
1156 1156
1157 int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, 1157 int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
1158 size_t buffer_len, const u8 *ie, size_t ie_len, 1158 size_t buffer_len, const u8 *ie, size_t ie_len,
1159 enum ieee80211_band band, u32 rate_mask, 1159 enum ieee80211_band band, u32 rate_mask,
1160 struct cfg80211_chan_def *chandef) 1160 struct cfg80211_chan_def *chandef)
1161 { 1161 {
1162 struct ieee80211_supported_band *sband; 1162 struct ieee80211_supported_band *sband;
1163 u8 *pos = buffer, *end = buffer + buffer_len; 1163 u8 *pos = buffer, *end = buffer + buffer_len;
1164 size_t offset = 0, noffset; 1164 size_t offset = 0, noffset;
1165 int supp_rates_len, i; 1165 int supp_rates_len, i;
1166 u8 rates[32]; 1166 u8 rates[32];
1167 int num_rates; 1167 int num_rates;
1168 int ext_rates_len; 1168 int ext_rates_len;
1169 int shift; 1169 int shift;
1170 u32 rate_flags; 1170 u32 rate_flags;
1171 1171
1172 sband = local->hw.wiphy->bands[band]; 1172 sband = local->hw.wiphy->bands[band];
1173 if (WARN_ON_ONCE(!sband)) 1173 if (WARN_ON_ONCE(!sband))
1174 return 0; 1174 return 0;
1175 1175
1176 rate_flags = ieee80211_chandef_rate_flags(chandef); 1176 rate_flags = ieee80211_chandef_rate_flags(chandef);
1177 shift = ieee80211_chandef_get_shift(chandef); 1177 shift = ieee80211_chandef_get_shift(chandef);
1178 1178
1179 num_rates = 0; 1179 num_rates = 0;
1180 for (i = 0; i < sband->n_bitrates; i++) { 1180 for (i = 0; i < sband->n_bitrates; i++) {
1181 if ((BIT(i) & rate_mask) == 0) 1181 if ((BIT(i) & rate_mask) == 0)
1182 continue; /* skip rate */ 1182 continue; /* skip rate */
1183 if ((rate_flags & sband->bitrates[i].flags) != rate_flags) 1183 if ((rate_flags & sband->bitrates[i].flags) != rate_flags)
1184 continue; 1184 continue;
1185 1185
1186 rates[num_rates++] = 1186 rates[num_rates++] =
1187 (u8) DIV_ROUND_UP(sband->bitrates[i].bitrate, 1187 (u8) DIV_ROUND_UP(sband->bitrates[i].bitrate,
1188 (1 << shift) * 5); 1188 (1 << shift) * 5);
1189 } 1189 }
1190 1190
1191 supp_rates_len = min_t(int, num_rates, 8); 1191 supp_rates_len = min_t(int, num_rates, 8);
1192 1192
1193 if (end - pos < 2 + supp_rates_len) 1193 if (end - pos < 2 + supp_rates_len)
1194 goto out_err; 1194 goto out_err;
1195 *pos++ = WLAN_EID_SUPP_RATES; 1195 *pos++ = WLAN_EID_SUPP_RATES;
1196 *pos++ = supp_rates_len; 1196 *pos++ = supp_rates_len;
1197 memcpy(pos, rates, supp_rates_len); 1197 memcpy(pos, rates, supp_rates_len);
1198 pos += supp_rates_len; 1198 pos += supp_rates_len;
1199 1199
1200 /* insert "request information" if in custom IEs */ 1200 /* insert "request information" if in custom IEs */
1201 if (ie && ie_len) { 1201 if (ie && ie_len) {
1202 static const u8 before_extrates[] = { 1202 static const u8 before_extrates[] = {
1203 WLAN_EID_SSID, 1203 WLAN_EID_SSID,
1204 WLAN_EID_SUPP_RATES, 1204 WLAN_EID_SUPP_RATES,
1205 WLAN_EID_REQUEST, 1205 WLAN_EID_REQUEST,
1206 }; 1206 };
1207 noffset = ieee80211_ie_split(ie, ie_len, 1207 noffset = ieee80211_ie_split(ie, ie_len,
1208 before_extrates, 1208 before_extrates,
1209 ARRAY_SIZE(before_extrates), 1209 ARRAY_SIZE(before_extrates),
1210 offset); 1210 offset);
1211 if (end - pos < noffset - offset) 1211 if (end - pos < noffset - offset)
1212 goto out_err; 1212 goto out_err;
1213 memcpy(pos, ie + offset, noffset - offset); 1213 memcpy(pos, ie + offset, noffset - offset);
1214 pos += noffset - offset; 1214 pos += noffset - offset;
1215 offset = noffset; 1215 offset = noffset;
1216 } 1216 }
1217 1217
1218 ext_rates_len = num_rates - supp_rates_len; 1218 ext_rates_len = num_rates - supp_rates_len;
1219 if (ext_rates_len > 0) { 1219 if (ext_rates_len > 0) {
1220 if (end - pos < 2 + ext_rates_len) 1220 if (end - pos < 2 + ext_rates_len)
1221 goto out_err; 1221 goto out_err;
1222 *pos++ = WLAN_EID_EXT_SUPP_RATES; 1222 *pos++ = WLAN_EID_EXT_SUPP_RATES;
1223 *pos++ = ext_rates_len; 1223 *pos++ = ext_rates_len;
1224 memcpy(pos, rates + supp_rates_len, ext_rates_len); 1224 memcpy(pos, rates + supp_rates_len, ext_rates_len);
1225 pos += ext_rates_len; 1225 pos += ext_rates_len;
1226 } 1226 }
1227 1227
1228 if (chandef->chan && sband->band == IEEE80211_BAND_2GHZ) { 1228 if (chandef->chan && sband->band == IEEE80211_BAND_2GHZ) {
1229 if (end - pos < 3) 1229 if (end - pos < 3)
1230 goto out_err; 1230 goto out_err;
1231 *pos++ = WLAN_EID_DS_PARAMS; 1231 *pos++ = WLAN_EID_DS_PARAMS;
1232 *pos++ = 1; 1232 *pos++ = 1;
1233 *pos++ = ieee80211_frequency_to_channel( 1233 *pos++ = ieee80211_frequency_to_channel(
1234 chandef->chan->center_freq); 1234 chandef->chan->center_freq);
1235 } 1235 }
1236 1236
1237 /* insert custom IEs that go before HT */ 1237 /* insert custom IEs that go before HT */
1238 if (ie && ie_len) { 1238 if (ie && ie_len) {
1239 static const u8 before_ht[] = { 1239 static const u8 before_ht[] = {
1240 WLAN_EID_SSID, 1240 WLAN_EID_SSID,
1241 WLAN_EID_SUPP_RATES, 1241 WLAN_EID_SUPP_RATES,
1242 WLAN_EID_REQUEST, 1242 WLAN_EID_REQUEST,
1243 WLAN_EID_EXT_SUPP_RATES, 1243 WLAN_EID_EXT_SUPP_RATES,
1244 WLAN_EID_DS_PARAMS, 1244 WLAN_EID_DS_PARAMS,
1245 WLAN_EID_SUPPORTED_REGULATORY_CLASSES, 1245 WLAN_EID_SUPPORTED_REGULATORY_CLASSES,
1246 }; 1246 };
1247 noffset = ieee80211_ie_split(ie, ie_len, 1247 noffset = ieee80211_ie_split(ie, ie_len,
1248 before_ht, ARRAY_SIZE(before_ht), 1248 before_ht, ARRAY_SIZE(before_ht),
1249 offset); 1249 offset);
1250 if (end - pos < noffset - offset) 1250 if (end - pos < noffset - offset)
1251 goto out_err; 1251 goto out_err;
1252 memcpy(pos, ie + offset, noffset - offset); 1252 memcpy(pos, ie + offset, noffset - offset);
1253 pos += noffset - offset; 1253 pos += noffset - offset;
1254 offset = noffset; 1254 offset = noffset;
1255 } 1255 }
1256 1256
1257 if (sband->ht_cap.ht_supported) { 1257 if (sband->ht_cap.ht_supported) {
1258 if (end - pos < 2 + sizeof(struct ieee80211_ht_cap)) 1258 if (end - pos < 2 + sizeof(struct ieee80211_ht_cap))
1259 goto out_err; 1259 goto out_err;
1260 pos = ieee80211_ie_build_ht_cap(pos, &sband->ht_cap, 1260 pos = ieee80211_ie_build_ht_cap(pos, &sband->ht_cap,
1261 sband->ht_cap.cap); 1261 sband->ht_cap.cap);
1262 } 1262 }
1263 1263
1264 /* 1264 /*
1265 * If adding more here, adjust code in main.c 1265 * If adding more here, adjust code in main.c
1266 * that calculates local->scan_ies_len. 1266 * that calculates local->scan_ies_len.
1267 */ 1267 */
1268 1268
1269 /* add any remaining custom IEs */ 1269 /* add any remaining custom IEs */
1270 if (ie && ie_len) { 1270 if (ie && ie_len) {
1271 noffset = ie_len; 1271 noffset = ie_len;
1272 if (end - pos < noffset - offset) 1272 if (end - pos < noffset - offset)
1273 goto out_err; 1273 goto out_err;
1274 memcpy(pos, ie + offset, noffset - offset); 1274 memcpy(pos, ie + offset, noffset - offset);
1275 pos += noffset - offset; 1275 pos += noffset - offset;
1276 } 1276 }
1277 1277
1278 if (sband->vht_cap.vht_supported) { 1278 if (sband->vht_cap.vht_supported) {
1279 if (end - pos < 2 + sizeof(struct ieee80211_vht_cap)) 1279 if (end - pos < 2 + sizeof(struct ieee80211_vht_cap))
1280 goto out_err; 1280 goto out_err;
1281 pos = ieee80211_ie_build_vht_cap(pos, &sband->vht_cap, 1281 pos = ieee80211_ie_build_vht_cap(pos, &sband->vht_cap,
1282 sband->vht_cap.cap); 1282 sband->vht_cap.cap);
1283 } 1283 }
1284 1284
1285 return pos - buffer; 1285 return pos - buffer;
1286 out_err: 1286 out_err:
1287 WARN_ONCE(1, "not enough space for preq IEs\n"); 1287 WARN_ONCE(1, "not enough space for preq IEs\n");
1288 return pos - buffer; 1288 return pos - buffer;
1289 } 1289 }
1290 1290
1291 struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata, 1291 struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata,
1292 u8 *dst, u32 ratemask, 1292 u8 *dst, u32 ratemask,
1293 struct ieee80211_channel *chan, 1293 struct ieee80211_channel *chan,
1294 const u8 *ssid, size_t ssid_len, 1294 const u8 *ssid, size_t ssid_len,
1295 const u8 *ie, size_t ie_len, 1295 const u8 *ie, size_t ie_len,
1296 bool directed) 1296 bool directed)
1297 { 1297 {
1298 struct ieee80211_local *local = sdata->local; 1298 struct ieee80211_local *local = sdata->local;
1299 struct cfg80211_chan_def chandef; 1299 struct cfg80211_chan_def chandef;
1300 struct sk_buff *skb; 1300 struct sk_buff *skb;
1301 struct ieee80211_mgmt *mgmt; 1301 struct ieee80211_mgmt *mgmt;
1302 int ies_len; 1302 int ies_len;
1303 1303
1304 /* 1304 /*
1305 * Do not send DS Channel parameter for directed probe requests 1305 * Do not send DS Channel parameter for directed probe requests
1306 * in order to maximize the chance that we get a response. Some 1306 * in order to maximize the chance that we get a response. Some
1307 * badly-behaved APs don't respond when this parameter is included. 1307 * badly-behaved APs don't respond when this parameter is included.
1308 */ 1308 */
1309 chandef.width = sdata->vif.bss_conf.chandef.width; 1309 chandef.width = sdata->vif.bss_conf.chandef.width;
1310 if (directed) 1310 if (directed)
1311 chandef.chan = NULL; 1311 chandef.chan = NULL;
1312 else 1312 else
1313 chandef.chan = chan; 1313 chandef.chan = chan;
1314 1314
1315 skb = ieee80211_probereq_get(&local->hw, &sdata->vif, 1315 skb = ieee80211_probereq_get(&local->hw, &sdata->vif,
1316 ssid, ssid_len, 100 + ie_len); 1316 ssid, ssid_len, 100 + ie_len);
1317 if (!skb) 1317 if (!skb)
1318 return NULL; 1318 return NULL;
1319 1319
1320 ies_len = ieee80211_build_preq_ies(local, skb_tail_pointer(skb), 1320 ies_len = ieee80211_build_preq_ies(local, skb_tail_pointer(skb),
1321 skb_tailroom(skb), 1321 skb_tailroom(skb),
1322 ie, ie_len, chan->band, 1322 ie, ie_len, chan->band,
1323 ratemask, &chandef); 1323 ratemask, &chandef);
1324 skb_put(skb, ies_len); 1324 skb_put(skb, ies_len);
1325 1325
1326 if (dst) { 1326 if (dst) {
1327 mgmt = (struct ieee80211_mgmt *) skb->data; 1327 mgmt = (struct ieee80211_mgmt *) skb->data;
1328 memcpy(mgmt->da, dst, ETH_ALEN); 1328 memcpy(mgmt->da, dst, ETH_ALEN);
1329 memcpy(mgmt->bssid, dst, ETH_ALEN); 1329 memcpy(mgmt->bssid, dst, ETH_ALEN);
1330 } 1330 }
1331 1331
1332 IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; 1332 IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
1333 1333
1334 return skb; 1334 return skb;
1335 } 1335 }
1336 1336
1337 void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, 1337 void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst,
1338 const u8 *ssid, size_t ssid_len, 1338 const u8 *ssid, size_t ssid_len,
1339 const u8 *ie, size_t ie_len, 1339 const u8 *ie, size_t ie_len,
1340 u32 ratemask, bool directed, u32 tx_flags, 1340 u32 ratemask, bool directed, u32 tx_flags,
1341 struct ieee80211_channel *channel, bool scan) 1341 struct ieee80211_channel *channel, bool scan)
1342 { 1342 {
1343 struct sk_buff *skb; 1343 struct sk_buff *skb;
1344 1344
1345 skb = ieee80211_build_probe_req(sdata, dst, ratemask, channel, 1345 skb = ieee80211_build_probe_req(sdata, dst, ratemask, channel,
1346 ssid, ssid_len, 1346 ssid, ssid_len,
1347 ie, ie_len, directed); 1347 ie, ie_len, directed);
1348 if (skb) { 1348 if (skb) {
1349 IEEE80211_SKB_CB(skb)->flags |= tx_flags; 1349 IEEE80211_SKB_CB(skb)->flags |= tx_flags;
1350 if (scan) 1350 if (scan)
1351 ieee80211_tx_skb_tid_band(sdata, skb, 7, channel->band); 1351 ieee80211_tx_skb_tid_band(sdata, skb, 7, channel->band);
1352 else 1352 else
1353 ieee80211_tx_skb(sdata, skb); 1353 ieee80211_tx_skb(sdata, skb);
1354 } 1354 }
1355 } 1355 }
1356 1356
1357 u32 ieee80211_sta_get_rates(struct ieee80211_sub_if_data *sdata, 1357 u32 ieee80211_sta_get_rates(struct ieee80211_sub_if_data *sdata,
1358 struct ieee802_11_elems *elems, 1358 struct ieee802_11_elems *elems,
1359 enum ieee80211_band band, u32 *basic_rates) 1359 enum ieee80211_band band, u32 *basic_rates)
1360 { 1360 {
1361 struct ieee80211_supported_band *sband; 1361 struct ieee80211_supported_band *sband;
1362 struct ieee80211_rate *bitrates; 1362 struct ieee80211_rate *bitrates;
1363 size_t num_rates; 1363 size_t num_rates;
1364 u32 supp_rates, rate_flags; 1364 u32 supp_rates, rate_flags;
1365 int i, j, shift; 1365 int i, j, shift;
1366 sband = sdata->local->hw.wiphy->bands[band]; 1366 sband = sdata->local->hw.wiphy->bands[band];
1367 1367
1368 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef); 1368 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef);
1369 shift = ieee80211_vif_get_shift(&sdata->vif); 1369 shift = ieee80211_vif_get_shift(&sdata->vif);
1370 1370
1371 if (WARN_ON(!sband)) 1371 if (WARN_ON(!sband))
1372 return 1; 1372 return 1;
1373 1373
1374 bitrates = sband->bitrates; 1374 bitrates = sband->bitrates;
1375 num_rates = sband->n_bitrates; 1375 num_rates = sband->n_bitrates;
1376 supp_rates = 0; 1376 supp_rates = 0;
1377 for (i = 0; i < elems->supp_rates_len + 1377 for (i = 0; i < elems->supp_rates_len +
1378 elems->ext_supp_rates_len; i++) { 1378 elems->ext_supp_rates_len; i++) {
1379 u8 rate = 0; 1379 u8 rate = 0;
1380 int own_rate; 1380 int own_rate;
1381 bool is_basic; 1381 bool is_basic;
1382 if (i < elems->supp_rates_len) 1382 if (i < elems->supp_rates_len)
1383 rate = elems->supp_rates[i]; 1383 rate = elems->supp_rates[i];
1384 else if (elems->ext_supp_rates) 1384 else if (elems->ext_supp_rates)
1385 rate = elems->ext_supp_rates 1385 rate = elems->ext_supp_rates
1386 [i - elems->supp_rates_len]; 1386 [i - elems->supp_rates_len];
1387 own_rate = 5 * (rate & 0x7f); 1387 own_rate = 5 * (rate & 0x7f);
1388 is_basic = !!(rate & 0x80); 1388 is_basic = !!(rate & 0x80);
1389 1389
1390 if (is_basic && (rate & 0x7f) == BSS_MEMBERSHIP_SELECTOR_HT_PHY) 1390 if (is_basic && (rate & 0x7f) == BSS_MEMBERSHIP_SELECTOR_HT_PHY)
1391 continue; 1391 continue;
1392 1392
1393 for (j = 0; j < num_rates; j++) { 1393 for (j = 0; j < num_rates; j++) {
1394 int brate; 1394 int brate;
1395 if ((rate_flags & sband->bitrates[j].flags) 1395 if ((rate_flags & sband->bitrates[j].flags)
1396 != rate_flags) 1396 != rate_flags)
1397 continue; 1397 continue;
1398 1398
1399 brate = DIV_ROUND_UP(sband->bitrates[j].bitrate, 1399 brate = DIV_ROUND_UP(sband->bitrates[j].bitrate,
1400 1 << shift); 1400 1 << shift);
1401 1401
1402 if (brate == own_rate) { 1402 if (brate == own_rate) {
1403 supp_rates |= BIT(j); 1403 supp_rates |= BIT(j);
1404 if (basic_rates && is_basic) 1404 if (basic_rates && is_basic)
1405 *basic_rates |= BIT(j); 1405 *basic_rates |= BIT(j);
1406 } 1406 }
1407 } 1407 }
1408 } 1408 }
1409 return supp_rates; 1409 return supp_rates;
1410 } 1410 }
1411 1411
1412 void ieee80211_stop_device(struct ieee80211_local *local) 1412 void ieee80211_stop_device(struct ieee80211_local *local)
1413 { 1413 {
1414 ieee80211_led_radio(local, false); 1414 ieee80211_led_radio(local, false);
1415 ieee80211_mod_tpt_led_trig(local, 0, IEEE80211_TPT_LEDTRIG_FL_RADIO); 1415 ieee80211_mod_tpt_led_trig(local, 0, IEEE80211_TPT_LEDTRIG_FL_RADIO);
1416 1416
1417 cancel_work_sync(&local->reconfig_filter); 1417 cancel_work_sync(&local->reconfig_filter);
1418 1418
1419 flush_workqueue(local->workqueue); 1419 flush_workqueue(local->workqueue);
1420 drv_stop(local); 1420 drv_stop(local);
1421 } 1421 }
1422 1422
1423 static void ieee80211_assign_chanctx(struct ieee80211_local *local, 1423 static void ieee80211_assign_chanctx(struct ieee80211_local *local,
1424 struct ieee80211_sub_if_data *sdata) 1424 struct ieee80211_sub_if_data *sdata)
1425 { 1425 {
1426 struct ieee80211_chanctx_conf *conf; 1426 struct ieee80211_chanctx_conf *conf;
1427 struct ieee80211_chanctx *ctx; 1427 struct ieee80211_chanctx *ctx;
1428 1428
1429 if (!local->use_chanctx) 1429 if (!local->use_chanctx)
1430 return; 1430 return;
1431 1431
1432 mutex_lock(&local->chanctx_mtx); 1432 mutex_lock(&local->chanctx_mtx);
1433 conf = rcu_dereference_protected(sdata->vif.chanctx_conf, 1433 conf = rcu_dereference_protected(sdata->vif.chanctx_conf,
1434 lockdep_is_held(&local->chanctx_mtx)); 1434 lockdep_is_held(&local->chanctx_mtx));
1435 if (conf) { 1435 if (conf) {
1436 ctx = container_of(conf, struct ieee80211_chanctx, conf); 1436 ctx = container_of(conf, struct ieee80211_chanctx, conf);
1437 drv_assign_vif_chanctx(local, sdata, ctx); 1437 drv_assign_vif_chanctx(local, sdata, ctx);
1438 } 1438 }
1439 mutex_unlock(&local->chanctx_mtx); 1439 mutex_unlock(&local->chanctx_mtx);
1440 } 1440 }
1441 1441
1442 int ieee80211_reconfig(struct ieee80211_local *local) 1442 int ieee80211_reconfig(struct ieee80211_local *local)
1443 { 1443 {
1444 struct ieee80211_hw *hw = &local->hw; 1444 struct ieee80211_hw *hw = &local->hw;
1445 struct ieee80211_sub_if_data *sdata; 1445 struct ieee80211_sub_if_data *sdata;
1446 struct ieee80211_chanctx *ctx; 1446 struct ieee80211_chanctx *ctx;
1447 struct sta_info *sta; 1447 struct sta_info *sta;
1448 int res, i; 1448 int res, i;
1449 bool reconfig_due_to_wowlan = false; 1449 bool reconfig_due_to_wowlan = false;
1450 1450
1451 #ifdef CONFIG_PM 1451 #ifdef CONFIG_PM
1452 if (local->suspended) 1452 if (local->suspended)
1453 local->resuming = true; 1453 local->resuming = true;
1454 1454
1455 if (local->wowlan) { 1455 if (local->wowlan) {
1456 local->wowlan = false;
1457 res = drv_resume(local); 1456 res = drv_resume(local);
1457 local->wowlan = false;
1458 if (res < 0) { 1458 if (res < 0) {
1459 local->resuming = false; 1459 local->resuming = false;
1460 return res; 1460 return res;
1461 } 1461 }
1462 if (res == 0) 1462 if (res == 0)
1463 goto wake_up; 1463 goto wake_up;
1464 WARN_ON(res > 1); 1464 WARN_ON(res > 1);
1465 /* 1465 /*
1466 * res is 1, which means the driver requested 1466 * res is 1, which means the driver requested
1467 * to go through a regular reset on wakeup. 1467 * to go through a regular reset on wakeup.
1468 */ 1468 */
1469 reconfig_due_to_wowlan = true; 1469 reconfig_due_to_wowlan = true;
1470 } 1470 }
1471 #endif 1471 #endif
1472 /* everything else happens only if HW was up & running */ 1472 /* everything else happens only if HW was up & running */
1473 if (!local->open_count) 1473 if (!local->open_count)
1474 goto wake_up; 1474 goto wake_up;
1475 1475
1476 /* 1476 /*
1477 * Upon resume hardware can sometimes be goofy due to 1477 * Upon resume hardware can sometimes be goofy due to
1478 * various platform / driver / bus issues, so restarting 1478 * various platform / driver / bus issues, so restarting
1479 * the device may at times not work immediately. Propagate 1479 * the device may at times not work immediately. Propagate
1480 * the error. 1480 * the error.
1481 */ 1481 */
1482 res = drv_start(local); 1482 res = drv_start(local);
1483 if (res) { 1483 if (res) {
1484 WARN(local->suspended, "Hardware became unavailable " 1484 WARN(local->suspended, "Hardware became unavailable "
1485 "upon resume. This could be a software issue " 1485 "upon resume. This could be a software issue "
1486 "prior to suspend or a hardware issue.\n"); 1486 "prior to suspend or a hardware issue.\n");
1487 return res; 1487 return res;
1488 } 1488 }
1489 1489
1490 /* setup fragmentation threshold */ 1490 /* setup fragmentation threshold */
1491 drv_set_frag_threshold(local, hw->wiphy->frag_threshold); 1491 drv_set_frag_threshold(local, hw->wiphy->frag_threshold);
1492 1492
1493 /* setup RTS threshold */ 1493 /* setup RTS threshold */
1494 drv_set_rts_threshold(local, hw->wiphy->rts_threshold); 1494 drv_set_rts_threshold(local, hw->wiphy->rts_threshold);
1495 1495
1496 /* reset coverage class */ 1496 /* reset coverage class */
1497 drv_set_coverage_class(local, hw->wiphy->coverage_class); 1497 drv_set_coverage_class(local, hw->wiphy->coverage_class);
1498 1498
1499 ieee80211_led_radio(local, true); 1499 ieee80211_led_radio(local, true);
1500 ieee80211_mod_tpt_led_trig(local, 1500 ieee80211_mod_tpt_led_trig(local,
1501 IEEE80211_TPT_LEDTRIG_FL_RADIO, 0); 1501 IEEE80211_TPT_LEDTRIG_FL_RADIO, 0);
1502 1502
1503 /* add interfaces */ 1503 /* add interfaces */
1504 sdata = rtnl_dereference(local->monitor_sdata); 1504 sdata = rtnl_dereference(local->monitor_sdata);
1505 if (sdata) { 1505 if (sdata) {
1506 /* in HW restart it exists already */ 1506 /* in HW restart it exists already */
1507 WARN_ON(local->resuming); 1507 WARN_ON(local->resuming);
1508 res = drv_add_interface(local, sdata); 1508 res = drv_add_interface(local, sdata);
1509 if (WARN_ON(res)) { 1509 if (WARN_ON(res)) {
1510 rcu_assign_pointer(local->monitor_sdata, NULL); 1510 rcu_assign_pointer(local->monitor_sdata, NULL);
1511 synchronize_net(); 1511 synchronize_net();
1512 kfree(sdata); 1512 kfree(sdata);
1513 } 1513 }
1514 } 1514 }
1515 1515
1516 list_for_each_entry(sdata, &local->interfaces, list) { 1516 list_for_each_entry(sdata, &local->interfaces, list) {
1517 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && 1517 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
1518 sdata->vif.type != NL80211_IFTYPE_MONITOR && 1518 sdata->vif.type != NL80211_IFTYPE_MONITOR &&
1519 ieee80211_sdata_running(sdata)) 1519 ieee80211_sdata_running(sdata))
1520 res = drv_add_interface(local, sdata); 1520 res = drv_add_interface(local, sdata);
1521 } 1521 }
1522 1522
1523 /* add channel contexts */ 1523 /* add channel contexts */
1524 if (local->use_chanctx) { 1524 if (local->use_chanctx) {
1525 mutex_lock(&local->chanctx_mtx); 1525 mutex_lock(&local->chanctx_mtx);
1526 list_for_each_entry(ctx, &local->chanctx_list, list) 1526 list_for_each_entry(ctx, &local->chanctx_list, list)
1527 WARN_ON(drv_add_chanctx(local, ctx)); 1527 WARN_ON(drv_add_chanctx(local, ctx));
1528 mutex_unlock(&local->chanctx_mtx); 1528 mutex_unlock(&local->chanctx_mtx);
1529 } 1529 }
1530 1530
1531 list_for_each_entry(sdata, &local->interfaces, list) { 1531 list_for_each_entry(sdata, &local->interfaces, list) {
1532 if (!ieee80211_sdata_running(sdata)) 1532 if (!ieee80211_sdata_running(sdata))
1533 continue; 1533 continue;
1534 ieee80211_assign_chanctx(local, sdata); 1534 ieee80211_assign_chanctx(local, sdata);
1535 } 1535 }
1536 1536
1537 sdata = rtnl_dereference(local->monitor_sdata); 1537 sdata = rtnl_dereference(local->monitor_sdata);
1538 if (sdata && ieee80211_sdata_running(sdata)) 1538 if (sdata && ieee80211_sdata_running(sdata))
1539 ieee80211_assign_chanctx(local, sdata); 1539 ieee80211_assign_chanctx(local, sdata);
1540 1540
1541 /* add STAs back */ 1541 /* add STAs back */
1542 mutex_lock(&local->sta_mtx); 1542 mutex_lock(&local->sta_mtx);
1543 list_for_each_entry(sta, &local->sta_list, list) { 1543 list_for_each_entry(sta, &local->sta_list, list) {
1544 enum ieee80211_sta_state state; 1544 enum ieee80211_sta_state state;
1545 1545
1546 if (!sta->uploaded) 1546 if (!sta->uploaded)
1547 continue; 1547 continue;
1548 1548
1549 /* AP-mode stations will be added later */ 1549 /* AP-mode stations will be added later */
1550 if (sta->sdata->vif.type == NL80211_IFTYPE_AP) 1550 if (sta->sdata->vif.type == NL80211_IFTYPE_AP)
1551 continue; 1551 continue;
1552 1552
1553 for (state = IEEE80211_STA_NOTEXIST; 1553 for (state = IEEE80211_STA_NOTEXIST;
1554 state < sta->sta_state; state++) 1554 state < sta->sta_state; state++)
1555 WARN_ON(drv_sta_state(local, sta->sdata, sta, state, 1555 WARN_ON(drv_sta_state(local, sta->sdata, sta, state,
1556 state + 1)); 1556 state + 1));
1557 } 1557 }
1558 mutex_unlock(&local->sta_mtx); 1558 mutex_unlock(&local->sta_mtx);
1559 1559
1560 /* reconfigure tx conf */ 1560 /* reconfigure tx conf */
1561 if (hw->queues >= IEEE80211_NUM_ACS) { 1561 if (hw->queues >= IEEE80211_NUM_ACS) {
1562 list_for_each_entry(sdata, &local->interfaces, list) { 1562 list_for_each_entry(sdata, &local->interfaces, list) {
1563 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN || 1563 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN ||
1564 sdata->vif.type == NL80211_IFTYPE_MONITOR || 1564 sdata->vif.type == NL80211_IFTYPE_MONITOR ||
1565 !ieee80211_sdata_running(sdata)) 1565 !ieee80211_sdata_running(sdata))
1566 continue; 1566 continue;
1567 1567
1568 for (i = 0; i < IEEE80211_NUM_ACS; i++) 1568 for (i = 0; i < IEEE80211_NUM_ACS; i++)
1569 drv_conf_tx(local, sdata, i, 1569 drv_conf_tx(local, sdata, i,
1570 &sdata->tx_conf[i]); 1570 &sdata->tx_conf[i]);
1571 } 1571 }
1572 } 1572 }
1573 1573
1574 /* reconfigure hardware */ 1574 /* reconfigure hardware */
1575 ieee80211_hw_config(local, ~0); 1575 ieee80211_hw_config(local, ~0);
1576 1576
1577 ieee80211_configure_filter(local); 1577 ieee80211_configure_filter(local);
1578 1578
1579 /* Finally also reconfigure all the BSS information */ 1579 /* Finally also reconfigure all the BSS information */
1580 list_for_each_entry(sdata, &local->interfaces, list) { 1580 list_for_each_entry(sdata, &local->interfaces, list) {
1581 u32 changed; 1581 u32 changed;
1582 1582
1583 if (!ieee80211_sdata_running(sdata)) 1583 if (!ieee80211_sdata_running(sdata))
1584 continue; 1584 continue;
1585 1585
1586 /* common change flags for all interface types */ 1586 /* common change flags for all interface types */
1587 changed = BSS_CHANGED_ERP_CTS_PROT | 1587 changed = BSS_CHANGED_ERP_CTS_PROT |
1588 BSS_CHANGED_ERP_PREAMBLE | 1588 BSS_CHANGED_ERP_PREAMBLE |
1589 BSS_CHANGED_ERP_SLOT | 1589 BSS_CHANGED_ERP_SLOT |
1590 BSS_CHANGED_HT | 1590 BSS_CHANGED_HT |
1591 BSS_CHANGED_BASIC_RATES | 1591 BSS_CHANGED_BASIC_RATES |
1592 BSS_CHANGED_BEACON_INT | 1592 BSS_CHANGED_BEACON_INT |
1593 BSS_CHANGED_BSSID | 1593 BSS_CHANGED_BSSID |
1594 BSS_CHANGED_CQM | 1594 BSS_CHANGED_CQM |
1595 BSS_CHANGED_QOS | 1595 BSS_CHANGED_QOS |
1596 BSS_CHANGED_IDLE | 1596 BSS_CHANGED_IDLE |
1597 BSS_CHANGED_TXPOWER; 1597 BSS_CHANGED_TXPOWER;
1598 1598
1599 switch (sdata->vif.type) { 1599 switch (sdata->vif.type) {
1600 case NL80211_IFTYPE_STATION: 1600 case NL80211_IFTYPE_STATION:
1601 changed |= BSS_CHANGED_ASSOC | 1601 changed |= BSS_CHANGED_ASSOC |
1602 BSS_CHANGED_ARP_FILTER | 1602 BSS_CHANGED_ARP_FILTER |
1603 BSS_CHANGED_PS; 1603 BSS_CHANGED_PS;
1604 1604
1605 /* Re-send beacon info report to the driver */ 1605 /* Re-send beacon info report to the driver */
1606 if (sdata->u.mgd.have_beacon) 1606 if (sdata->u.mgd.have_beacon)
1607 changed |= BSS_CHANGED_BEACON_INFO; 1607 changed |= BSS_CHANGED_BEACON_INFO;
1608 1608
1609 sdata_lock(sdata); 1609 sdata_lock(sdata);
1610 ieee80211_bss_info_change_notify(sdata, changed); 1610 ieee80211_bss_info_change_notify(sdata, changed);
1611 sdata_unlock(sdata); 1611 sdata_unlock(sdata);
1612 break; 1612 break;
1613 case NL80211_IFTYPE_ADHOC: 1613 case NL80211_IFTYPE_ADHOC:
1614 changed |= BSS_CHANGED_IBSS; 1614 changed |= BSS_CHANGED_IBSS;
1615 /* fall through */ 1615 /* fall through */
1616 case NL80211_IFTYPE_AP: 1616 case NL80211_IFTYPE_AP:
1617 changed |= BSS_CHANGED_SSID | BSS_CHANGED_P2P_PS; 1617 changed |= BSS_CHANGED_SSID | BSS_CHANGED_P2P_PS;
1618 1618
1619 if (sdata->vif.type == NL80211_IFTYPE_AP) { 1619 if (sdata->vif.type == NL80211_IFTYPE_AP) {
1620 changed |= BSS_CHANGED_AP_PROBE_RESP; 1620 changed |= BSS_CHANGED_AP_PROBE_RESP;
1621 1621
1622 if (rcu_access_pointer(sdata->u.ap.beacon)) 1622 if (rcu_access_pointer(sdata->u.ap.beacon))
1623 drv_start_ap(local, sdata); 1623 drv_start_ap(local, sdata);
1624 } 1624 }
1625 1625
1626 /* fall through */ 1626 /* fall through */
1627 case NL80211_IFTYPE_MESH_POINT: 1627 case NL80211_IFTYPE_MESH_POINT:
1628 if (sdata->vif.bss_conf.enable_beacon) { 1628 if (sdata->vif.bss_conf.enable_beacon) {
1629 changed |= BSS_CHANGED_BEACON | 1629 changed |= BSS_CHANGED_BEACON |
1630 BSS_CHANGED_BEACON_ENABLED; 1630 BSS_CHANGED_BEACON_ENABLED;
1631 ieee80211_bss_info_change_notify(sdata, changed); 1631 ieee80211_bss_info_change_notify(sdata, changed);
1632 } 1632 }
1633 break; 1633 break;
1634 case NL80211_IFTYPE_WDS: 1634 case NL80211_IFTYPE_WDS:
1635 break; 1635 break;
1636 case NL80211_IFTYPE_AP_VLAN: 1636 case NL80211_IFTYPE_AP_VLAN:
1637 case NL80211_IFTYPE_MONITOR: 1637 case NL80211_IFTYPE_MONITOR:
1638 /* ignore virtual */ 1638 /* ignore virtual */
1639 break; 1639 break;
1640 case NL80211_IFTYPE_P2P_DEVICE: 1640 case NL80211_IFTYPE_P2P_DEVICE:
1641 changed = BSS_CHANGED_IDLE; 1641 changed = BSS_CHANGED_IDLE;
1642 break; 1642 break;
1643 case NL80211_IFTYPE_UNSPECIFIED: 1643 case NL80211_IFTYPE_UNSPECIFIED:
1644 case NUM_NL80211_IFTYPES: 1644 case NUM_NL80211_IFTYPES:
1645 case NL80211_IFTYPE_P2P_CLIENT: 1645 case NL80211_IFTYPE_P2P_CLIENT:
1646 case NL80211_IFTYPE_P2P_GO: 1646 case NL80211_IFTYPE_P2P_GO:
1647 WARN_ON(1); 1647 WARN_ON(1);
1648 break; 1648 break;
1649 } 1649 }
1650 } 1650 }
1651 1651
1652 ieee80211_recalc_ps(local, -1); 1652 ieee80211_recalc_ps(local, -1);
1653 1653
1654 /* 1654 /*
1655 * The sta might be in psm against the ap (e.g. because 1655 * The sta might be in psm against the ap (e.g. because
1656 * this was the state before a hw restart), so we 1656 * this was the state before a hw restart), so we
1657 * explicitly send a null packet in order to make sure 1657 * explicitly send a null packet in order to make sure
1658 * it'll sync against the ap (and get out of psm). 1658 * it'll sync against the ap (and get out of psm).
1659 */ 1659 */
1660 if (!(local->hw.conf.flags & IEEE80211_CONF_PS)) { 1660 if (!(local->hw.conf.flags & IEEE80211_CONF_PS)) {
1661 list_for_each_entry(sdata, &local->interfaces, list) { 1661 list_for_each_entry(sdata, &local->interfaces, list) {
1662 if (sdata->vif.type != NL80211_IFTYPE_STATION) 1662 if (sdata->vif.type != NL80211_IFTYPE_STATION)
1663 continue; 1663 continue;
1664 if (!sdata->u.mgd.associated) 1664 if (!sdata->u.mgd.associated)
1665 continue; 1665 continue;
1666 1666
1667 ieee80211_send_nullfunc(local, sdata, 0); 1667 ieee80211_send_nullfunc(local, sdata, 0);
1668 } 1668 }
1669 } 1669 }
1670 1670
1671 /* APs are now beaconing, add back stations */ 1671 /* APs are now beaconing, add back stations */
1672 mutex_lock(&local->sta_mtx); 1672 mutex_lock(&local->sta_mtx);
1673 list_for_each_entry(sta, &local->sta_list, list) { 1673 list_for_each_entry(sta, &local->sta_list, list) {
1674 enum ieee80211_sta_state state; 1674 enum ieee80211_sta_state state;
1675 1675
1676 if (!sta->uploaded) 1676 if (!sta->uploaded)
1677 continue; 1677 continue;
1678 1678
1679 if (sta->sdata->vif.type != NL80211_IFTYPE_AP) 1679 if (sta->sdata->vif.type != NL80211_IFTYPE_AP)
1680 continue; 1680 continue;
1681 1681
1682 for (state = IEEE80211_STA_NOTEXIST; 1682 for (state = IEEE80211_STA_NOTEXIST;
1683 state < sta->sta_state; state++) 1683 state < sta->sta_state; state++)
1684 WARN_ON(drv_sta_state(local, sta->sdata, sta, state, 1684 WARN_ON(drv_sta_state(local, sta->sdata, sta, state,
1685 state + 1)); 1685 state + 1));
1686 } 1686 }
1687 mutex_unlock(&local->sta_mtx); 1687 mutex_unlock(&local->sta_mtx);
1688 1688
1689 /* add back keys */ 1689 /* add back keys */
1690 list_for_each_entry(sdata, &local->interfaces, list) 1690 list_for_each_entry(sdata, &local->interfaces, list)
1691 if (ieee80211_sdata_running(sdata)) 1691 if (ieee80211_sdata_running(sdata))
1692 ieee80211_enable_keys(sdata); 1692 ieee80211_enable_keys(sdata);
1693 1693
1694 wake_up: 1694 wake_up:
1695 local->in_reconfig = false; 1695 local->in_reconfig = false;
1696 barrier(); 1696 barrier();
1697 1697
1698 if (local->monitors == local->open_count && local->monitors > 0) 1698 if (local->monitors == local->open_count && local->monitors > 0)
1699 ieee80211_add_virtual_monitor(local); 1699 ieee80211_add_virtual_monitor(local);
1700 1700
1701 /* 1701 /*
1702 * Clear the WLAN_STA_BLOCK_BA flag so new aggregation 1702 * Clear the WLAN_STA_BLOCK_BA flag so new aggregation
1703 * sessions can be established after a resume. 1703 * sessions can be established after a resume.
1704 * 1704 *
1705 * Also tear down aggregation sessions since reconfiguring 1705 * Also tear down aggregation sessions since reconfiguring
1706 * them in a hardware restart scenario is not easily done 1706 * them in a hardware restart scenario is not easily done
1707 * right now, and the hardware will have lost information 1707 * right now, and the hardware will have lost information
1708 * about the sessions, but we and the AP still think they 1708 * about the sessions, but we and the AP still think they
1709 * are active. This is really a workaround though. 1709 * are active. This is really a workaround though.
1710 */ 1710 */
1711 if (hw->flags & IEEE80211_HW_AMPDU_AGGREGATION) { 1711 if (hw->flags & IEEE80211_HW_AMPDU_AGGREGATION) {
1712 mutex_lock(&local->sta_mtx); 1712 mutex_lock(&local->sta_mtx);
1713 1713
1714 list_for_each_entry(sta, &local->sta_list, list) { 1714 list_for_each_entry(sta, &local->sta_list, list) {
1715 ieee80211_sta_tear_down_BA_sessions( 1715 ieee80211_sta_tear_down_BA_sessions(
1716 sta, AGG_STOP_LOCAL_REQUEST); 1716 sta, AGG_STOP_LOCAL_REQUEST);
1717 clear_sta_flag(sta, WLAN_STA_BLOCK_BA); 1717 clear_sta_flag(sta, WLAN_STA_BLOCK_BA);
1718 } 1718 }
1719 1719
1720 mutex_unlock(&local->sta_mtx); 1720 mutex_unlock(&local->sta_mtx);
1721 } 1721 }
1722 1722
1723 ieee80211_wake_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP, 1723 ieee80211_wake_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP,
1724 IEEE80211_QUEUE_STOP_REASON_SUSPEND); 1724 IEEE80211_QUEUE_STOP_REASON_SUSPEND);
1725 1725
1726 /* 1726 /*
1727 * If this is for hw restart things are still running. 1727 * If this is for hw restart things are still running.
1728 * We may want to change that later, however. 1728 * We may want to change that later, however.
1729 */ 1729 */
1730 if (!local->suspended || reconfig_due_to_wowlan) 1730 if (!local->suspended || reconfig_due_to_wowlan)
1731 drv_restart_complete(local); 1731 drv_restart_complete(local);
1732 1732
1733 if (!local->suspended) 1733 if (!local->suspended)
1734 return 0; 1734 return 0;
1735 1735
1736 #ifdef CONFIG_PM 1736 #ifdef CONFIG_PM
1737 /* first set suspended false, then resuming */ 1737 /* first set suspended false, then resuming */
1738 local->suspended = false; 1738 local->suspended = false;
1739 mb(); 1739 mb();
1740 local->resuming = false; 1740 local->resuming = false;
1741 1741
1742 list_for_each_entry(sdata, &local->interfaces, list) { 1742 list_for_each_entry(sdata, &local->interfaces, list) {
1743 if (!ieee80211_sdata_running(sdata)) 1743 if (!ieee80211_sdata_running(sdata))
1744 continue; 1744 continue;
1745 if (sdata->vif.type == NL80211_IFTYPE_STATION) 1745 if (sdata->vif.type == NL80211_IFTYPE_STATION)
1746 ieee80211_sta_restart(sdata); 1746 ieee80211_sta_restart(sdata);
1747 } 1747 }
1748 1748
1749 mod_timer(&local->sta_cleanup, jiffies + 1); 1749 mod_timer(&local->sta_cleanup, jiffies + 1);
1750 #else 1750 #else
1751 WARN_ON(1); 1751 WARN_ON(1);
1752 #endif 1752 #endif
1753 return 0; 1753 return 0;
1754 } 1754 }
1755 1755
1756 void ieee80211_resume_disconnect(struct ieee80211_vif *vif) 1756 void ieee80211_resume_disconnect(struct ieee80211_vif *vif)
1757 { 1757 {
1758 struct ieee80211_sub_if_data *sdata; 1758 struct ieee80211_sub_if_data *sdata;
1759 struct ieee80211_local *local; 1759 struct ieee80211_local *local;
1760 struct ieee80211_key *key; 1760 struct ieee80211_key *key;
1761 1761
1762 if (WARN_ON(!vif)) 1762 if (WARN_ON(!vif))
1763 return; 1763 return;
1764 1764
1765 sdata = vif_to_sdata(vif); 1765 sdata = vif_to_sdata(vif);
1766 local = sdata->local; 1766 local = sdata->local;
1767 1767
1768 if (WARN_ON(!local->resuming)) 1768 if (WARN_ON(!local->resuming))
1769 return; 1769 return;
1770 1770
1771 if (WARN_ON(vif->type != NL80211_IFTYPE_STATION)) 1771 if (WARN_ON(vif->type != NL80211_IFTYPE_STATION))
1772 return; 1772 return;
1773 1773
1774 sdata->flags |= IEEE80211_SDATA_DISCONNECT_RESUME; 1774 sdata->flags |= IEEE80211_SDATA_DISCONNECT_RESUME;
1775 1775
1776 mutex_lock(&local->key_mtx); 1776 mutex_lock(&local->key_mtx);
1777 list_for_each_entry(key, &sdata->key_list, list) 1777 list_for_each_entry(key, &sdata->key_list, list)
1778 key->flags |= KEY_FLAG_TAINTED; 1778 key->flags |= KEY_FLAG_TAINTED;
1779 mutex_unlock(&local->key_mtx); 1779 mutex_unlock(&local->key_mtx);
1780 } 1780 }
1781 EXPORT_SYMBOL_GPL(ieee80211_resume_disconnect); 1781 EXPORT_SYMBOL_GPL(ieee80211_resume_disconnect);
1782 1782
1783 void ieee80211_recalc_smps(struct ieee80211_sub_if_data *sdata) 1783 void ieee80211_recalc_smps(struct ieee80211_sub_if_data *sdata)
1784 { 1784 {
1785 struct ieee80211_local *local = sdata->local; 1785 struct ieee80211_local *local = sdata->local;
1786 struct ieee80211_chanctx_conf *chanctx_conf; 1786 struct ieee80211_chanctx_conf *chanctx_conf;
1787 struct ieee80211_chanctx *chanctx; 1787 struct ieee80211_chanctx *chanctx;
1788 1788
1789 mutex_lock(&local->chanctx_mtx); 1789 mutex_lock(&local->chanctx_mtx);
1790 1790
1791 chanctx_conf = rcu_dereference_protected(sdata->vif.chanctx_conf, 1791 chanctx_conf = rcu_dereference_protected(sdata->vif.chanctx_conf,
1792 lockdep_is_held(&local->chanctx_mtx)); 1792 lockdep_is_held(&local->chanctx_mtx));
1793 1793
1794 if (WARN_ON_ONCE(!chanctx_conf)) 1794 if (WARN_ON_ONCE(!chanctx_conf))
1795 goto unlock; 1795 goto unlock;
1796 1796
1797 chanctx = container_of(chanctx_conf, struct ieee80211_chanctx, conf); 1797 chanctx = container_of(chanctx_conf, struct ieee80211_chanctx, conf);
1798 ieee80211_recalc_smps_chanctx(local, chanctx); 1798 ieee80211_recalc_smps_chanctx(local, chanctx);
1799 unlock: 1799 unlock:
1800 mutex_unlock(&local->chanctx_mtx); 1800 mutex_unlock(&local->chanctx_mtx);
1801 } 1801 }
1802 1802
1803 static bool ieee80211_id_in_list(const u8 *ids, int n_ids, u8 id) 1803 static bool ieee80211_id_in_list(const u8 *ids, int n_ids, u8 id)
1804 { 1804 {
1805 int i; 1805 int i;
1806 1806
1807 for (i = 0; i < n_ids; i++) 1807 for (i = 0; i < n_ids; i++)
1808 if (ids[i] == id) 1808 if (ids[i] == id)
1809 return true; 1809 return true;
1810 return false; 1810 return false;
1811 } 1811 }
1812 1812
1813 /** 1813 /**
1814 * ieee80211_ie_split - split an IE buffer according to ordering 1814 * ieee80211_ie_split - split an IE buffer according to ordering
1815 * 1815 *
1816 * @ies: the IE buffer 1816 * @ies: the IE buffer
1817 * @ielen: the length of the IE buffer 1817 * @ielen: the length of the IE buffer
1818 * @ids: an array with element IDs that are allowed before 1818 * @ids: an array with element IDs that are allowed before
1819 * the split 1819 * the split
1820 * @n_ids: the size of the element ID array 1820 * @n_ids: the size of the element ID array
1821 * @offset: offset where to start splitting in the buffer 1821 * @offset: offset where to start splitting in the buffer
1822 * 1822 *
1823 * This function splits an IE buffer by updating the @offset 1823 * This function splits an IE buffer by updating the @offset
1824 * variable to point to the location where the buffer should be 1824 * variable to point to the location where the buffer should be
1825 * split. 1825 * split.
1826 * 1826 *
1827 * It assumes that the given IE buffer is well-formed, this 1827 * It assumes that the given IE buffer is well-formed, this
1828 * has to be guaranteed by the caller! 1828 * has to be guaranteed by the caller!
1829 * 1829 *
1830 * It also assumes that the IEs in the buffer are ordered 1830 * It also assumes that the IEs in the buffer are ordered
1831 * correctly, if not the result of using this function will not 1831 * correctly, if not the result of using this function will not
1832 * be ordered correctly either, i.e. it does no reordering. 1832 * be ordered correctly either, i.e. it does no reordering.
1833 * 1833 *
1834 * The function returns the offset where the next part of the 1834 * The function returns the offset where the next part of the
1835 * buffer starts, which may be @ielen if the entire (remainder) 1835 * buffer starts, which may be @ielen if the entire (remainder)
1836 * of the buffer should be used. 1836 * of the buffer should be used.
1837 */ 1837 */
1838 size_t ieee80211_ie_split(const u8 *ies, size_t ielen, 1838 size_t ieee80211_ie_split(const u8 *ies, size_t ielen,
1839 const u8 *ids, int n_ids, size_t offset) 1839 const u8 *ids, int n_ids, size_t offset)
1840 { 1840 {
1841 size_t pos = offset; 1841 size_t pos = offset;
1842 1842
1843 while (pos < ielen && ieee80211_id_in_list(ids, n_ids, ies[pos])) 1843 while (pos < ielen && ieee80211_id_in_list(ids, n_ids, ies[pos]))
1844 pos += 2 + ies[pos + 1]; 1844 pos += 2 + ies[pos + 1];
1845 1845
1846 return pos; 1846 return pos;
1847 } 1847 }
1848 1848
1849 size_t ieee80211_ie_split_vendor(const u8 *ies, size_t ielen, size_t offset) 1849 size_t ieee80211_ie_split_vendor(const u8 *ies, size_t ielen, size_t offset)
1850 { 1850 {
1851 size_t pos = offset; 1851 size_t pos = offset;
1852 1852
1853 while (pos < ielen && ies[pos] != WLAN_EID_VENDOR_SPECIFIC) 1853 while (pos < ielen && ies[pos] != WLAN_EID_VENDOR_SPECIFIC)
1854 pos += 2 + ies[pos + 1]; 1854 pos += 2 + ies[pos + 1];
1855 1855
1856 return pos; 1856 return pos;
1857 } 1857 }
1858 1858
1859 static void _ieee80211_enable_rssi_reports(struct ieee80211_sub_if_data *sdata, 1859 static void _ieee80211_enable_rssi_reports(struct ieee80211_sub_if_data *sdata,
1860 int rssi_min_thold, 1860 int rssi_min_thold,
1861 int rssi_max_thold) 1861 int rssi_max_thold)
1862 { 1862 {
1863 trace_api_enable_rssi_reports(sdata, rssi_min_thold, rssi_max_thold); 1863 trace_api_enable_rssi_reports(sdata, rssi_min_thold, rssi_max_thold);
1864 1864
1865 if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION)) 1865 if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION))
1866 return; 1866 return;
1867 1867
1868 /* 1868 /*
1869 * Scale up threshold values before storing it, as the RSSI averaging 1869 * Scale up threshold values before storing it, as the RSSI averaging
1870 * algorithm uses a scaled up value as well. Change this scaling 1870 * algorithm uses a scaled up value as well. Change this scaling
1871 * factor if the RSSI averaging algorithm changes. 1871 * factor if the RSSI averaging algorithm changes.
1872 */ 1872 */
1873 sdata->u.mgd.rssi_min_thold = rssi_min_thold*16; 1873 sdata->u.mgd.rssi_min_thold = rssi_min_thold*16;
1874 sdata->u.mgd.rssi_max_thold = rssi_max_thold*16; 1874 sdata->u.mgd.rssi_max_thold = rssi_max_thold*16;
1875 } 1875 }
1876 1876
1877 void ieee80211_enable_rssi_reports(struct ieee80211_vif *vif, 1877 void ieee80211_enable_rssi_reports(struct ieee80211_vif *vif,
1878 int rssi_min_thold, 1878 int rssi_min_thold,
1879 int rssi_max_thold) 1879 int rssi_max_thold)
1880 { 1880 {
1881 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); 1881 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
1882 1882
1883 WARN_ON(rssi_min_thold == rssi_max_thold || 1883 WARN_ON(rssi_min_thold == rssi_max_thold ||
1884 rssi_min_thold > rssi_max_thold); 1884 rssi_min_thold > rssi_max_thold);
1885 1885
1886 _ieee80211_enable_rssi_reports(sdata, rssi_min_thold, 1886 _ieee80211_enable_rssi_reports(sdata, rssi_min_thold,
1887 rssi_max_thold); 1887 rssi_max_thold);
1888 } 1888 }
1889 EXPORT_SYMBOL(ieee80211_enable_rssi_reports); 1889 EXPORT_SYMBOL(ieee80211_enable_rssi_reports);
1890 1890
1891 void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif) 1891 void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif)
1892 { 1892 {
1893 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); 1893 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
1894 1894
1895 _ieee80211_enable_rssi_reports(sdata, 0, 0); 1895 _ieee80211_enable_rssi_reports(sdata, 0, 0);
1896 } 1896 }
1897 EXPORT_SYMBOL(ieee80211_disable_rssi_reports); 1897 EXPORT_SYMBOL(ieee80211_disable_rssi_reports);
1898 1898
1899 u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap, 1899 u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
1900 u16 cap) 1900 u16 cap)
1901 { 1901 {
1902 __le16 tmp; 1902 __le16 tmp;
1903 1903
1904 *pos++ = WLAN_EID_HT_CAPABILITY; 1904 *pos++ = WLAN_EID_HT_CAPABILITY;
1905 *pos++ = sizeof(struct ieee80211_ht_cap); 1905 *pos++ = sizeof(struct ieee80211_ht_cap);
1906 memset(pos, 0, sizeof(struct ieee80211_ht_cap)); 1906 memset(pos, 0, sizeof(struct ieee80211_ht_cap));
1907 1907
1908 /* capability flags */ 1908 /* capability flags */
1909 tmp = cpu_to_le16(cap); 1909 tmp = cpu_to_le16(cap);
1910 memcpy(pos, &tmp, sizeof(u16)); 1910 memcpy(pos, &tmp, sizeof(u16));
1911 pos += sizeof(u16); 1911 pos += sizeof(u16);
1912 1912
1913 /* AMPDU parameters */ 1913 /* AMPDU parameters */
1914 *pos++ = ht_cap->ampdu_factor | 1914 *pos++ = ht_cap->ampdu_factor |
1915 (ht_cap->ampdu_density << 1915 (ht_cap->ampdu_density <<
1916 IEEE80211_HT_AMPDU_PARM_DENSITY_SHIFT); 1916 IEEE80211_HT_AMPDU_PARM_DENSITY_SHIFT);
1917 1917
1918 /* MCS set */ 1918 /* MCS set */
1919 memcpy(pos, &ht_cap->mcs, sizeof(ht_cap->mcs)); 1919 memcpy(pos, &ht_cap->mcs, sizeof(ht_cap->mcs));
1920 pos += sizeof(ht_cap->mcs); 1920 pos += sizeof(ht_cap->mcs);
1921 1921
1922 /* extended capabilities */ 1922 /* extended capabilities */
1923 pos += sizeof(__le16); 1923 pos += sizeof(__le16);
1924 1924
1925 /* BF capabilities */ 1925 /* BF capabilities */
1926 pos += sizeof(__le32); 1926 pos += sizeof(__le32);
1927 1927
1928 /* antenna selection */ 1928 /* antenna selection */
1929 pos += sizeof(u8); 1929 pos += sizeof(u8);
1930 1930
1931 return pos; 1931 return pos;
1932 } 1932 }
1933 1933
1934 u8 *ieee80211_ie_build_vht_cap(u8 *pos, struct ieee80211_sta_vht_cap *vht_cap, 1934 u8 *ieee80211_ie_build_vht_cap(u8 *pos, struct ieee80211_sta_vht_cap *vht_cap,
1935 u32 cap) 1935 u32 cap)
1936 { 1936 {
1937 __le32 tmp; 1937 __le32 tmp;
1938 1938
1939 *pos++ = WLAN_EID_VHT_CAPABILITY; 1939 *pos++ = WLAN_EID_VHT_CAPABILITY;
1940 *pos++ = sizeof(struct ieee80211_vht_cap); 1940 *pos++ = sizeof(struct ieee80211_vht_cap);
1941 memset(pos, 0, sizeof(struct ieee80211_vht_cap)); 1941 memset(pos, 0, sizeof(struct ieee80211_vht_cap));
1942 1942
1943 /* capability flags */ 1943 /* capability flags */
1944 tmp = cpu_to_le32(cap); 1944 tmp = cpu_to_le32(cap);
1945 memcpy(pos, &tmp, sizeof(u32)); 1945 memcpy(pos, &tmp, sizeof(u32));
1946 pos += sizeof(u32); 1946 pos += sizeof(u32);
1947 1947
1948 /* VHT MCS set */ 1948 /* VHT MCS set */
1949 memcpy(pos, &vht_cap->vht_mcs, sizeof(vht_cap->vht_mcs)); 1949 memcpy(pos, &vht_cap->vht_mcs, sizeof(vht_cap->vht_mcs));
1950 pos += sizeof(vht_cap->vht_mcs); 1950 pos += sizeof(vht_cap->vht_mcs);
1951 1951
1952 return pos; 1952 return pos;
1953 } 1953 }
1954 1954
1955 u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap, 1955 u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
1956 const struct cfg80211_chan_def *chandef, 1956 const struct cfg80211_chan_def *chandef,
1957 u16 prot_mode) 1957 u16 prot_mode)
1958 { 1958 {
1959 struct ieee80211_ht_operation *ht_oper; 1959 struct ieee80211_ht_operation *ht_oper;
1960 /* Build HT Information */ 1960 /* Build HT Information */
1961 *pos++ = WLAN_EID_HT_OPERATION; 1961 *pos++ = WLAN_EID_HT_OPERATION;
1962 *pos++ = sizeof(struct ieee80211_ht_operation); 1962 *pos++ = sizeof(struct ieee80211_ht_operation);
1963 ht_oper = (struct ieee80211_ht_operation *)pos; 1963 ht_oper = (struct ieee80211_ht_operation *)pos;
1964 ht_oper->primary_chan = ieee80211_frequency_to_channel( 1964 ht_oper->primary_chan = ieee80211_frequency_to_channel(
1965 chandef->chan->center_freq); 1965 chandef->chan->center_freq);
1966 switch (chandef->width) { 1966 switch (chandef->width) {
1967 case NL80211_CHAN_WIDTH_160: 1967 case NL80211_CHAN_WIDTH_160:
1968 case NL80211_CHAN_WIDTH_80P80: 1968 case NL80211_CHAN_WIDTH_80P80:
1969 case NL80211_CHAN_WIDTH_80: 1969 case NL80211_CHAN_WIDTH_80:
1970 case NL80211_CHAN_WIDTH_40: 1970 case NL80211_CHAN_WIDTH_40:
1971 if (chandef->center_freq1 > chandef->chan->center_freq) 1971 if (chandef->center_freq1 > chandef->chan->center_freq)
1972 ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_ABOVE; 1972 ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
1973 else 1973 else
1974 ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_BELOW; 1974 ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_BELOW;
1975 break; 1975 break;
1976 default: 1976 default:
1977 ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_NONE; 1977 ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_NONE;
1978 break; 1978 break;
1979 } 1979 }
1980 if (ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40 && 1980 if (ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40 &&
1981 chandef->width != NL80211_CHAN_WIDTH_20_NOHT && 1981 chandef->width != NL80211_CHAN_WIDTH_20_NOHT &&
1982 chandef->width != NL80211_CHAN_WIDTH_20) 1982 chandef->width != NL80211_CHAN_WIDTH_20)
1983 ht_oper->ht_param |= IEEE80211_HT_PARAM_CHAN_WIDTH_ANY; 1983 ht_oper->ht_param |= IEEE80211_HT_PARAM_CHAN_WIDTH_ANY;
1984 1984
1985 ht_oper->operation_mode = cpu_to_le16(prot_mode); 1985 ht_oper->operation_mode = cpu_to_le16(prot_mode);
1986 ht_oper->stbc_param = 0x0000; 1986 ht_oper->stbc_param = 0x0000;
1987 1987
1988 /* It seems that Basic MCS set and Supported MCS set 1988 /* It seems that Basic MCS set and Supported MCS set
1989 are identical for the first 10 bytes */ 1989 are identical for the first 10 bytes */
1990 memset(&ht_oper->basic_set, 0, 16); 1990 memset(&ht_oper->basic_set, 0, 16);
1991 memcpy(&ht_oper->basic_set, &ht_cap->mcs, 10); 1991 memcpy(&ht_oper->basic_set, &ht_cap->mcs, 10);
1992 1992
1993 return pos + sizeof(struct ieee80211_ht_operation); 1993 return pos + sizeof(struct ieee80211_ht_operation);
1994 } 1994 }
1995 1995
1996 void ieee80211_ht_oper_to_chandef(struct ieee80211_channel *control_chan, 1996 void ieee80211_ht_oper_to_chandef(struct ieee80211_channel *control_chan,
1997 const struct ieee80211_ht_operation *ht_oper, 1997 const struct ieee80211_ht_operation *ht_oper,
1998 struct cfg80211_chan_def *chandef) 1998 struct cfg80211_chan_def *chandef)
1999 { 1999 {
2000 enum nl80211_channel_type channel_type; 2000 enum nl80211_channel_type channel_type;
2001 2001
2002 if (!ht_oper) { 2002 if (!ht_oper) {
2003 cfg80211_chandef_create(chandef, control_chan, 2003 cfg80211_chandef_create(chandef, control_chan,
2004 NL80211_CHAN_NO_HT); 2004 NL80211_CHAN_NO_HT);
2005 return; 2005 return;
2006 } 2006 }
2007 2007
2008 switch (ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) { 2008 switch (ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
2009 case IEEE80211_HT_PARAM_CHA_SEC_NONE: 2009 case IEEE80211_HT_PARAM_CHA_SEC_NONE:
2010 channel_type = NL80211_CHAN_HT20; 2010 channel_type = NL80211_CHAN_HT20;
2011 break; 2011 break;
2012 case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: 2012 case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
2013 channel_type = NL80211_CHAN_HT40PLUS; 2013 channel_type = NL80211_CHAN_HT40PLUS;
2014 break; 2014 break;
2015 case IEEE80211_HT_PARAM_CHA_SEC_BELOW: 2015 case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
2016 channel_type = NL80211_CHAN_HT40MINUS; 2016 channel_type = NL80211_CHAN_HT40MINUS;
2017 break; 2017 break;
2018 default: 2018 default:
2019 channel_type = NL80211_CHAN_NO_HT; 2019 channel_type = NL80211_CHAN_NO_HT;
2020 } 2020 }
2021 2021
2022 cfg80211_chandef_create(chandef, control_chan, channel_type); 2022 cfg80211_chandef_create(chandef, control_chan, channel_type);
2023 } 2023 }
2024 2024
2025 int ieee80211_parse_bitrates(struct cfg80211_chan_def *chandef, 2025 int ieee80211_parse_bitrates(struct cfg80211_chan_def *chandef,
2026 const struct ieee80211_supported_band *sband, 2026 const struct ieee80211_supported_band *sband,
2027 const u8 *srates, int srates_len, u32 *rates) 2027 const u8 *srates, int srates_len, u32 *rates)
2028 { 2028 {
2029 u32 rate_flags = ieee80211_chandef_rate_flags(chandef); 2029 u32 rate_flags = ieee80211_chandef_rate_flags(chandef);
2030 int shift = ieee80211_chandef_get_shift(chandef); 2030 int shift = ieee80211_chandef_get_shift(chandef);
2031 struct ieee80211_rate *br; 2031 struct ieee80211_rate *br;
2032 int brate, rate, i, j, count = 0; 2032 int brate, rate, i, j, count = 0;
2033 2033
2034 *rates = 0; 2034 *rates = 0;
2035 2035
2036 for (i = 0; i < srates_len; i++) { 2036 for (i = 0; i < srates_len; i++) {
2037 rate = srates[i] & 0x7f; 2037 rate = srates[i] & 0x7f;
2038 2038
2039 for (j = 0; j < sband->n_bitrates; j++) { 2039 for (j = 0; j < sband->n_bitrates; j++) {
2040 br = &sband->bitrates[j]; 2040 br = &sband->bitrates[j];
2041 if ((rate_flags & br->flags) != rate_flags) 2041 if ((rate_flags & br->flags) != rate_flags)
2042 continue; 2042 continue;
2043 2043
2044 brate = DIV_ROUND_UP(br->bitrate, (1 << shift) * 5); 2044 brate = DIV_ROUND_UP(br->bitrate, (1 << shift) * 5);
2045 if (brate == rate) { 2045 if (brate == rate) {
2046 *rates |= BIT(j); 2046 *rates |= BIT(j);
2047 count++; 2047 count++;
2048 break; 2048 break;
2049 } 2049 }
2050 } 2050 }
2051 } 2051 }
2052 return count; 2052 return count;
2053 } 2053 }
2054 2054
2055 int ieee80211_add_srates_ie(struct ieee80211_sub_if_data *sdata, 2055 int ieee80211_add_srates_ie(struct ieee80211_sub_if_data *sdata,
2056 struct sk_buff *skb, bool need_basic, 2056 struct sk_buff *skb, bool need_basic,
2057 enum ieee80211_band band) 2057 enum ieee80211_band band)
2058 { 2058 {
2059 struct ieee80211_local *local = sdata->local; 2059 struct ieee80211_local *local = sdata->local;
2060 struct ieee80211_supported_band *sband; 2060 struct ieee80211_supported_band *sband;
2061 int rate, shift; 2061 int rate, shift;
2062 u8 i, rates, *pos; 2062 u8 i, rates, *pos;
2063 u32 basic_rates = sdata->vif.bss_conf.basic_rates; 2063 u32 basic_rates = sdata->vif.bss_conf.basic_rates;
2064 u32 rate_flags; 2064 u32 rate_flags;
2065 2065
2066 shift = ieee80211_vif_get_shift(&sdata->vif); 2066 shift = ieee80211_vif_get_shift(&sdata->vif);
2067 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef); 2067 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef);
2068 sband = local->hw.wiphy->bands[band]; 2068 sband = local->hw.wiphy->bands[band];
2069 rates = 0; 2069 rates = 0;
2070 for (i = 0; i < sband->n_bitrates; i++) { 2070 for (i = 0; i < sband->n_bitrates; i++) {
2071 if ((rate_flags & sband->bitrates[i].flags) != rate_flags) 2071 if ((rate_flags & sband->bitrates[i].flags) != rate_flags)
2072 continue; 2072 continue;
2073 rates++; 2073 rates++;
2074 } 2074 }
2075 if (rates > 8) 2075 if (rates > 8)
2076 rates = 8; 2076 rates = 8;
2077 2077
2078 if (skb_tailroom(skb) < rates + 2) 2078 if (skb_tailroom(skb) < rates + 2)
2079 return -ENOMEM; 2079 return -ENOMEM;
2080 2080
2081 pos = skb_put(skb, rates + 2); 2081 pos = skb_put(skb, rates + 2);
2082 *pos++ = WLAN_EID_SUPP_RATES; 2082 *pos++ = WLAN_EID_SUPP_RATES;
2083 *pos++ = rates; 2083 *pos++ = rates;
2084 for (i = 0; i < rates; i++) { 2084 for (i = 0; i < rates; i++) {
2085 u8 basic = 0; 2085 u8 basic = 0;
2086 if ((rate_flags & sband->bitrates[i].flags) != rate_flags) 2086 if ((rate_flags & sband->bitrates[i].flags) != rate_flags)
2087 continue; 2087 continue;
2088 2088
2089 if (need_basic && basic_rates & BIT(i)) 2089 if (need_basic && basic_rates & BIT(i))
2090 basic = 0x80; 2090 basic = 0x80;
2091 rate = sband->bitrates[i].bitrate; 2091 rate = sband->bitrates[i].bitrate;
2092 rate = DIV_ROUND_UP(sband->bitrates[i].bitrate, 2092 rate = DIV_ROUND_UP(sband->bitrates[i].bitrate,
2093 5 * (1 << shift)); 2093 5 * (1 << shift));
2094 *pos++ = basic | (u8) rate; 2094 *pos++ = basic | (u8) rate;
2095 } 2095 }
2096 2096
2097 return 0; 2097 return 0;
2098 } 2098 }
2099 2099
2100 int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata, 2100 int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata,
2101 struct sk_buff *skb, bool need_basic, 2101 struct sk_buff *skb, bool need_basic,
2102 enum ieee80211_band band) 2102 enum ieee80211_band band)
2103 { 2103 {
2104 struct ieee80211_local *local = sdata->local; 2104 struct ieee80211_local *local = sdata->local;
2105 struct ieee80211_supported_band *sband; 2105 struct ieee80211_supported_band *sband;
2106 int rate, skip, shift; 2106 int rate, skip, shift;
2107 u8 i, exrates, *pos; 2107 u8 i, exrates, *pos;
2108 u32 basic_rates = sdata->vif.bss_conf.basic_rates; 2108 u32 basic_rates = sdata->vif.bss_conf.basic_rates;
2109 u32 rate_flags; 2109 u32 rate_flags;
2110 2110
2111 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef); 2111 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef);
2112 shift = ieee80211_vif_get_shift(&sdata->vif); 2112 shift = ieee80211_vif_get_shift(&sdata->vif);
2113 2113
2114 sband = local->hw.wiphy->bands[band]; 2114 sband = local->hw.wiphy->bands[band];
2115 exrates = 0; 2115 exrates = 0;
2116 for (i = 0; i < sband->n_bitrates; i++) { 2116 for (i = 0; i < sband->n_bitrates; i++) {
2117 if ((rate_flags & sband->bitrates[i].flags) != rate_flags) 2117 if ((rate_flags & sband->bitrates[i].flags) != rate_flags)
2118 continue; 2118 continue;
2119 exrates++; 2119 exrates++;
2120 } 2120 }
2121 2121
2122 if (exrates > 8) 2122 if (exrates > 8)
2123 exrates -= 8; 2123 exrates -= 8;
2124 else 2124 else
2125 exrates = 0; 2125 exrates = 0;
2126 2126
2127 if (skb_tailroom(skb) < exrates + 2) 2127 if (skb_tailroom(skb) < exrates + 2)
2128 return -ENOMEM; 2128 return -ENOMEM;
2129 2129
2130 if (exrates) { 2130 if (exrates) {
2131 pos = skb_put(skb, exrates + 2); 2131 pos = skb_put(skb, exrates + 2);
2132 *pos++ = WLAN_EID_EXT_SUPP_RATES; 2132 *pos++ = WLAN_EID_EXT_SUPP_RATES;
2133 *pos++ = exrates; 2133 *pos++ = exrates;
2134 skip = 0; 2134 skip = 0;
2135 for (i = 8; i < sband->n_bitrates; i++) { 2135 for (i = 8; i < sband->n_bitrates; i++) {
2136 u8 basic = 0; 2136 u8 basic = 0;
2137 if ((rate_flags & sband->bitrates[i].flags) 2137 if ((rate_flags & sband->bitrates[i].flags)
2138 != rate_flags) 2138 != rate_flags)
2139 continue; 2139 continue;
2140 if (skip++ < 8) 2140 if (skip++ < 8)
2141 continue; 2141 continue;
2142 if (need_basic && basic_rates & BIT(i)) 2142 if (need_basic && basic_rates & BIT(i))
2143 basic = 0x80; 2143 basic = 0x80;
2144 rate = DIV_ROUND_UP(sband->bitrates[i].bitrate, 2144 rate = DIV_ROUND_UP(sband->bitrates[i].bitrate,
2145 5 * (1 << shift)); 2145 5 * (1 << shift));
2146 *pos++ = basic | (u8) rate; 2146 *pos++ = basic | (u8) rate;
2147 } 2147 }
2148 } 2148 }
2149 return 0; 2149 return 0;
2150 } 2150 }
2151 2151
2152 int ieee80211_ave_rssi(struct ieee80211_vif *vif) 2152 int ieee80211_ave_rssi(struct ieee80211_vif *vif)
2153 { 2153 {
2154 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); 2154 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
2155 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; 2155 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
2156 2156
2157 if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION)) { 2157 if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION)) {
2158 /* non-managed type inferfaces */ 2158 /* non-managed type inferfaces */
2159 return 0; 2159 return 0;
2160 } 2160 }
2161 return ifmgd->ave_beacon_signal / 16; 2161 return ifmgd->ave_beacon_signal / 16;
2162 } 2162 }
2163 EXPORT_SYMBOL_GPL(ieee80211_ave_rssi); 2163 EXPORT_SYMBOL_GPL(ieee80211_ave_rssi);
2164 2164
2165 u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs) 2165 u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs)
2166 { 2166 {
2167 if (!mcs) 2167 if (!mcs)
2168 return 1; 2168 return 1;
2169 2169
2170 /* TODO: consider rx_highest */ 2170 /* TODO: consider rx_highest */
2171 2171
2172 if (mcs->rx_mask[3]) 2172 if (mcs->rx_mask[3])
2173 return 4; 2173 return 4;
2174 if (mcs->rx_mask[2]) 2174 if (mcs->rx_mask[2])
2175 return 3; 2175 return 3;
2176 if (mcs->rx_mask[1]) 2176 if (mcs->rx_mask[1])
2177 return 2; 2177 return 2;
2178 return 1; 2178 return 1;
2179 } 2179 }
2180 2180
2181 /** 2181 /**
2182 * ieee80211_calculate_rx_timestamp - calculate timestamp in frame 2182 * ieee80211_calculate_rx_timestamp - calculate timestamp in frame
2183 * @local: mac80211 hw info struct 2183 * @local: mac80211 hw info struct
2184 * @status: RX status 2184 * @status: RX status
2185 * @mpdu_len: total MPDU length (including FCS) 2185 * @mpdu_len: total MPDU length (including FCS)
2186 * @mpdu_offset: offset into MPDU to calculate timestamp at 2186 * @mpdu_offset: offset into MPDU to calculate timestamp at
2187 * 2187 *
2188 * This function calculates the RX timestamp at the given MPDU offset, taking 2188 * This function calculates the RX timestamp at the given MPDU offset, taking
2189 * into account what the RX timestamp was. An offset of 0 will just normalize 2189 * into account what the RX timestamp was. An offset of 0 will just normalize
2190 * the timestamp to TSF at beginning of MPDU reception. 2190 * the timestamp to TSF at beginning of MPDU reception.
2191 */ 2191 */
2192 u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local, 2192 u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local,
2193 struct ieee80211_rx_status *status, 2193 struct ieee80211_rx_status *status,
2194 unsigned int mpdu_len, 2194 unsigned int mpdu_len,
2195 unsigned int mpdu_offset) 2195 unsigned int mpdu_offset)
2196 { 2196 {
2197 u64 ts = status->mactime; 2197 u64 ts = status->mactime;
2198 struct rate_info ri; 2198 struct rate_info ri;
2199 u16 rate; 2199 u16 rate;
2200 2200
2201 if (WARN_ON(!ieee80211_have_rx_timestamp(status))) 2201 if (WARN_ON(!ieee80211_have_rx_timestamp(status)))
2202 return 0; 2202 return 0;
2203 2203
2204 memset(&ri, 0, sizeof(ri)); 2204 memset(&ri, 0, sizeof(ri));
2205 2205
2206 /* Fill cfg80211 rate info */ 2206 /* Fill cfg80211 rate info */
2207 if (status->flag & RX_FLAG_HT) { 2207 if (status->flag & RX_FLAG_HT) {
2208 ri.mcs = status->rate_idx; 2208 ri.mcs = status->rate_idx;
2209 ri.flags |= RATE_INFO_FLAGS_MCS; 2209 ri.flags |= RATE_INFO_FLAGS_MCS;
2210 if (status->flag & RX_FLAG_40MHZ) 2210 if (status->flag & RX_FLAG_40MHZ)
2211 ri.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH; 2211 ri.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
2212 if (status->flag & RX_FLAG_SHORT_GI) 2212 if (status->flag & RX_FLAG_SHORT_GI)
2213 ri.flags |= RATE_INFO_FLAGS_SHORT_GI; 2213 ri.flags |= RATE_INFO_FLAGS_SHORT_GI;
2214 } else if (status->flag & RX_FLAG_VHT) { 2214 } else if (status->flag & RX_FLAG_VHT) {
2215 ri.flags |= RATE_INFO_FLAGS_VHT_MCS; 2215 ri.flags |= RATE_INFO_FLAGS_VHT_MCS;
2216 ri.mcs = status->rate_idx; 2216 ri.mcs = status->rate_idx;
2217 ri.nss = status->vht_nss; 2217 ri.nss = status->vht_nss;
2218 if (status->flag & RX_FLAG_40MHZ) 2218 if (status->flag & RX_FLAG_40MHZ)
2219 ri.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH; 2219 ri.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
2220 if (status->flag & RX_FLAG_80MHZ) 2220 if (status->flag & RX_FLAG_80MHZ)
2221 ri.flags |= RATE_INFO_FLAGS_80_MHZ_WIDTH; 2221 ri.flags |= RATE_INFO_FLAGS_80_MHZ_WIDTH;
2222 if (status->flag & RX_FLAG_80P80MHZ) 2222 if (status->flag & RX_FLAG_80P80MHZ)
2223 ri.flags |= RATE_INFO_FLAGS_80P80_MHZ_WIDTH; 2223 ri.flags |= RATE_INFO_FLAGS_80P80_MHZ_WIDTH;
2224 if (status->flag & RX_FLAG_160MHZ) 2224 if (status->flag & RX_FLAG_160MHZ)
2225 ri.flags |= RATE_INFO_FLAGS_160_MHZ_WIDTH; 2225 ri.flags |= RATE_INFO_FLAGS_160_MHZ_WIDTH;
2226 if (status->flag & RX_FLAG_SHORT_GI) 2226 if (status->flag & RX_FLAG_SHORT_GI)
2227 ri.flags |= RATE_INFO_FLAGS_SHORT_GI; 2227 ri.flags |= RATE_INFO_FLAGS_SHORT_GI;
2228 } else { 2228 } else {
2229 struct ieee80211_supported_band *sband; 2229 struct ieee80211_supported_band *sband;
2230 int shift = 0; 2230 int shift = 0;
2231 int bitrate; 2231 int bitrate;
2232 2232
2233 if (status->flag & RX_FLAG_10MHZ) 2233 if (status->flag & RX_FLAG_10MHZ)
2234 shift = 1; 2234 shift = 1;
2235 if (status->flag & RX_FLAG_5MHZ) 2235 if (status->flag & RX_FLAG_5MHZ)
2236 shift = 2; 2236 shift = 2;
2237 2237
2238 sband = local->hw.wiphy->bands[status->band]; 2238 sband = local->hw.wiphy->bands[status->band];
2239 bitrate = sband->bitrates[status->rate_idx].bitrate; 2239 bitrate = sband->bitrates[status->rate_idx].bitrate;
2240 ri.legacy = DIV_ROUND_UP(bitrate, (1 << shift)); 2240 ri.legacy = DIV_ROUND_UP(bitrate, (1 << shift));
2241 } 2241 }
2242 2242
2243 rate = cfg80211_calculate_bitrate(&ri); 2243 rate = cfg80211_calculate_bitrate(&ri);
2244 2244
2245 /* rewind from end of MPDU */ 2245 /* rewind from end of MPDU */
2246 if (status->flag & RX_FLAG_MACTIME_END) 2246 if (status->flag & RX_FLAG_MACTIME_END)
2247 ts -= mpdu_len * 8 * 10 / rate; 2247 ts -= mpdu_len * 8 * 10 / rate;
2248 2248
2249 ts += mpdu_offset * 8 * 10 / rate; 2249 ts += mpdu_offset * 8 * 10 / rate;
2250 2250
2251 return ts; 2251 return ts;
2252 } 2252 }
2253 2253
2254 void ieee80211_dfs_cac_cancel(struct ieee80211_local *local) 2254 void ieee80211_dfs_cac_cancel(struct ieee80211_local *local)
2255 { 2255 {
2256 struct ieee80211_sub_if_data *sdata; 2256 struct ieee80211_sub_if_data *sdata;
2257 2257
2258 mutex_lock(&local->iflist_mtx); 2258 mutex_lock(&local->iflist_mtx);
2259 list_for_each_entry(sdata, &local->interfaces, list) { 2259 list_for_each_entry(sdata, &local->interfaces, list) {
2260 cancel_delayed_work_sync(&sdata->dfs_cac_timer_work); 2260 cancel_delayed_work_sync(&sdata->dfs_cac_timer_work);
2261 2261
2262 if (sdata->wdev.cac_started) { 2262 if (sdata->wdev.cac_started) {
2263 ieee80211_vif_release_channel(sdata); 2263 ieee80211_vif_release_channel(sdata);
2264 cfg80211_cac_event(sdata->dev, 2264 cfg80211_cac_event(sdata->dev,
2265 NL80211_RADAR_CAC_ABORTED, 2265 NL80211_RADAR_CAC_ABORTED,
2266 GFP_KERNEL); 2266 GFP_KERNEL);
2267 } 2267 }
2268 } 2268 }
2269 mutex_unlock(&local->iflist_mtx); 2269 mutex_unlock(&local->iflist_mtx);
2270 } 2270 }
2271 2271
2272 void ieee80211_dfs_radar_detected_work(struct work_struct *work) 2272 void ieee80211_dfs_radar_detected_work(struct work_struct *work)
2273 { 2273 {
2274 struct ieee80211_local *local = 2274 struct ieee80211_local *local =
2275 container_of(work, struct ieee80211_local, radar_detected_work); 2275 container_of(work, struct ieee80211_local, radar_detected_work);
2276 struct cfg80211_chan_def chandef; 2276 struct cfg80211_chan_def chandef;
2277 2277
2278 ieee80211_dfs_cac_cancel(local); 2278 ieee80211_dfs_cac_cancel(local);
2279 2279
2280 if (local->use_chanctx) 2280 if (local->use_chanctx)
2281 /* currently not handled */ 2281 /* currently not handled */
2282 WARN_ON(1); 2282 WARN_ON(1);
2283 else { 2283 else {
2284 chandef = local->hw.conf.chandef; 2284 chandef = local->hw.conf.chandef;
2285 cfg80211_radar_event(local->hw.wiphy, &chandef, GFP_KERNEL); 2285 cfg80211_radar_event(local->hw.wiphy, &chandef, GFP_KERNEL);
2286 } 2286 }
2287 } 2287 }
2288 2288
2289 void ieee80211_radar_detected(struct ieee80211_hw *hw) 2289 void ieee80211_radar_detected(struct ieee80211_hw *hw)
2290 { 2290 {
2291 struct ieee80211_local *local = hw_to_local(hw); 2291 struct ieee80211_local *local = hw_to_local(hw);
2292 2292
2293 trace_api_radar_detected(local); 2293 trace_api_radar_detected(local);
2294 2294
2295 ieee80211_queue_work(hw, &local->radar_detected_work); 2295 ieee80211_queue_work(hw, &local->radar_detected_work);
2296 } 2296 }
2297 EXPORT_SYMBOL(ieee80211_radar_detected); 2297 EXPORT_SYMBOL(ieee80211_radar_detected);