block: add bio_start_io_acct_time() to control start_time
[linux-2.6-block.git] / include / net / mac80211.h
CommitLineData
d2912cb1 1/* SPDX-License-Identifier: GPL-2.0-only */
f0706e82 2/*
3017b80b
JB
3 * mac80211 <-> driver interface
4 *
f0706e82
JB
5 * Copyright 2002-2005, Devicescape Software, Inc.
6 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
026331c4 7 * Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net>
d98ad83e 8 * Copyright 2013-2014 Intel Mobile Communications GmbH
e38a017b 9 * Copyright (C) 2015 - 2017 Intel Deutschland GmbH
d8b26154 10 * Copyright (C) 2018 - 2021 Intel Corporation
f0706e82
JB
11 */
12
13#ifndef MAC80211_H
14#define MAC80211_H
15
187f1882 16#include <linux/bug.h>
f0706e82
JB
17#include <linux/kernel.h>
18#include <linux/if_ether.h>
19#include <linux/skbuff.h>
f0706e82 20#include <linux/ieee80211.h>
f0706e82 21#include <net/cfg80211.h>
5caa328e 22#include <net/codel.h>
41cbb0f5 23#include <net/ieee80211_radiotap.h>
42d98795 24#include <asm/unaligned.h>
f0706e82 25
75a5f0cc
JB
26/**
27 * DOC: Introduction
28 *
29 * mac80211 is the Linux stack for 802.11 hardware that implements
30 * only partial functionality in hard- or firmware. This document
31 * defines the interface between mac80211 and low-level hardware
32 * drivers.
33 */
34
35/**
36 * DOC: Calling mac80211 from interrupts
37 *
38 * Only ieee80211_tx_status_irqsafe() and ieee80211_rx_irqsafe() can be
f0706e82
JB
39 * called in hardware interrupt context. The low-level driver must not call any
40 * other functions in hardware interrupt context. If there is a need for such
41 * call, the low-level driver should first ACK the interrupt and perform the
2485f710
JB
42 * IEEE 802.11 code call after this, e.g. from a scheduled workqueue or even
43 * tasklet function.
44 *
45 * NOTE: If the driver opts to use the _irqsafe() functions, it may not also
6ef307bc 46 * use the non-IRQ-safe functions!
f0706e82
JB
47 */
48
75a5f0cc
JB
49/**
50 * DOC: Warning
51 *
52 * If you're reading this document and not the header file itself, it will
53 * be incomplete because not all documentation has been converted yet.
54 */
55
56/**
57 * DOC: Frame format
58 *
59 * As a general rule, when frames are passed between mac80211 and the driver,
60 * they start with the IEEE 802.11 header and include the same octets that are
61 * sent over the air except for the FCS which should be calculated by the
62 * hardware.
63 *
64 * There are, however, various exceptions to this rule for advanced features:
65 *
66 * The first exception is for hardware encryption and decryption offload
67 * where the IV/ICV may or may not be generated in hardware.
68 *
69 * Secondly, when the hardware handles fragmentation, the frame handed to
70 * the driver from mac80211 is the MSDU, not the MPDU.
f0706e82
JB
71 */
72
42935eca
LR
73/**
74 * DOC: mac80211 workqueue
75 *
76 * mac80211 provides its own workqueue for drivers and internal mac80211 use.
77 * The workqueue is a single threaded workqueue and can only be accessed by
78 * helpers for sanity checking. Drivers must ensure all work added onto the
79 * mac80211 workqueue should be cancelled on the driver stop() callback.
80 *
81 * mac80211 will flushed the workqueue upon interface removal and during
82 * suspend.
83 *
84 * All work performed on the mac80211 workqueue must not acquire the RTNL lock.
85 *
86 */
87
ba8c3d6f
FF
88/**
89 * DOC: mac80211 software tx queueing
90 *
91 * mac80211 provides an optional intermediate queueing implementation designed
92 * to allow the driver to keep hardware queues short and provide some fairness
93 * between different stations/interfaces.
94 * In this model, the driver pulls data frames from the mac80211 queue instead
95 * of letting mac80211 push them via drv_tx().
96 * Other frames (e.g. control or management) are still pushed using drv_tx().
97 *
98 * Drivers indicate that they use this model by implementing the .wake_tx_queue
99 * driver operation.
100 *
adf8ed01
JB
101 * Intermediate queues (struct ieee80211_txq) are kept per-sta per-tid, with
102 * another per-sta for non-data/non-mgmt and bufferable management frames, and
103 * a single per-vif queue for multicast data frames.
ba8c3d6f
FF
104 *
105 * The driver is expected to initialize its private per-queue data for stations
106 * and interfaces in the .add_interface and .sta_add ops.
107 *
18667600
THJ
108 * The driver can't access the queue directly. To dequeue a frame from a
109 * txq, it calls ieee80211_tx_dequeue(). Whenever mac80211 adds a new frame to a
110 * queue, it calls the .wake_tx_queue driver op.
111 *
112 * Drivers can optionally delegate responsibility for scheduling queues to
113 * mac80211, to take advantage of airtime fairness accounting. In this case, to
114 * obtain the next queue to pull frames from, the driver calls
115 * ieee80211_next_txq(). The driver is then expected to return the txq using
116 * ieee80211_return_txq().
ba8c3d6f
FF
117 *
118 * For AP powersave TIM handling, the driver only needs to indicate if it has
119 * buffered packets in the driver specific data structures by calling
120 * ieee80211_sta_set_buffered(). For frames buffered in the ieee80211_txq
121 * struct, mac80211 sets the appropriate TIM PVB bits and calls
122 * .release_buffered_frames().
123 * In that callback the driver is therefore expected to release its own
124 * buffered frames and afterwards also frames from the ieee80211_txq (obtained
125 * via the usual ieee80211_tx_dequeue).
126 */
127
313162d0
PG
128struct device;
129
e100bb64
JB
130/**
131 * enum ieee80211_max_queues - maximum number of queues
132 *
133 * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues.
445ea4e8 134 * @IEEE80211_MAX_QUEUE_MAP: bitmap with maximum queues set
e100bb64
JB
135 */
136enum ieee80211_max_queues {
3a25a8c8 137 IEEE80211_MAX_QUEUES = 16,
445ea4e8 138 IEEE80211_MAX_QUEUE_MAP = BIT(IEEE80211_MAX_QUEUES) - 1,
e100bb64
JB
139};
140
3a25a8c8
JB
141#define IEEE80211_INVAL_HW_QUEUE 0xff
142
4bce22b9
JB
143/**
144 * enum ieee80211_ac_numbers - AC numbers as used in mac80211
145 * @IEEE80211_AC_VO: voice
146 * @IEEE80211_AC_VI: video
147 * @IEEE80211_AC_BE: best effort
148 * @IEEE80211_AC_BK: background
149 */
150enum ieee80211_ac_numbers {
151 IEEE80211_AC_VO = 0,
152 IEEE80211_AC_VI = 1,
153 IEEE80211_AC_BE = 2,
154 IEEE80211_AC_BK = 3,
155};
156
6b301cdf
JB
157/**
158 * struct ieee80211_tx_queue_params - transmit queue configuration
159 *
160 * The information provided in this structure is required for QoS
3330d7be 161 * transmit queue configuration. Cf. IEEE 802.11 7.3.2.29.
6b301cdf 162 *
e37d4dff 163 * @aifs: arbitration interframe space [0..255]
f434b2d1
JB
164 * @cw_min: minimum contention window [a value of the form
165 * 2^n-1 in the range 1..32767]
6b301cdf 166 * @cw_max: maximum contention window [like @cw_min]
3330d7be 167 * @txop: maximum burst time in units of 32 usecs, 0 meaning disabled
908f8d07 168 * @acm: is mandatory admission control required for the access category
9d173fc5 169 * @uapsd: is U-APSD mode enabled for the queue
41cbb0f5
LC
170 * @mu_edca: is the MU EDCA configured
171 * @mu_edca_param_rec: MU EDCA Parameter Record for HE
6b301cdf 172 */
f0706e82 173struct ieee80211_tx_queue_params {
f434b2d1 174 u16 txop;
3330d7be
JB
175 u16 cw_min;
176 u16 cw_max;
f434b2d1 177 u8 aifs;
908f8d07 178 bool acm;
ab13315a 179 bool uapsd;
41cbb0f5
LC
180 bool mu_edca;
181 struct ieee80211_he_mu_edca_param_ac_rec mu_edca_param_rec;
f0706e82
JB
182};
183
f0706e82
JB
184struct ieee80211_low_level_stats {
185 unsigned int dot11ACKFailureCount;
186 unsigned int dot11RTSFailureCount;
187 unsigned int dot11FCSErrorCount;
188 unsigned int dot11RTSSuccessCount;
189};
190
d01a1e65
MK
191/**
192 * enum ieee80211_chanctx_change - change flag for channel context
4bf88530 193 * @IEEE80211_CHANCTX_CHANGE_WIDTH: The channel width changed
04ecd257 194 * @IEEE80211_CHANCTX_CHANGE_RX_CHAINS: The number of RX chains changed
164eb02d 195 * @IEEE80211_CHANCTX_CHANGE_RADAR: radar detection flag changed
73da7d5b
SW
196 * @IEEE80211_CHANCTX_CHANGE_CHANNEL: switched to another operating channel,
197 * this is used only with channel switching with CSA
21f659bf 198 * @IEEE80211_CHANCTX_CHANGE_MIN_WIDTH: The min required channel width changed
d01a1e65
MK
199 */
200enum ieee80211_chanctx_change {
4bf88530 201 IEEE80211_CHANCTX_CHANGE_WIDTH = BIT(0),
04ecd257 202 IEEE80211_CHANCTX_CHANGE_RX_CHAINS = BIT(1),
164eb02d 203 IEEE80211_CHANCTX_CHANGE_RADAR = BIT(2),
73da7d5b 204 IEEE80211_CHANCTX_CHANGE_CHANNEL = BIT(3),
21f659bf 205 IEEE80211_CHANCTX_CHANGE_MIN_WIDTH = BIT(4),
d01a1e65
MK
206};
207
208/**
209 * struct ieee80211_chanctx_conf - channel context that vifs may be tuned to
210 *
211 * This is the driver-visible part. The ieee80211_chanctx
212 * that contains it is visible in mac80211 only.
213 *
4bf88530 214 * @def: the channel definition
21f659bf 215 * @min_def: the minimum channel definition currently required.
04ecd257
JB
216 * @rx_chains_static: The number of RX chains that must always be
217 * active on the channel to receive MIMO transmissions
218 * @rx_chains_dynamic: The number of RX chains that must be enabled
219 * after RTS/CTS handshake to receive SMPS MIMO transmissions;
5d7fad48 220 * this will always be >= @rx_chains_static.
164eb02d 221 * @radar_enabled: whether radar detection is enabled on this channel.
d01a1e65
MK
222 * @drv_priv: data area for driver use, will always be aligned to
223 * sizeof(void *), size is determined in hw information.
224 */
225struct ieee80211_chanctx_conf {
4bf88530 226 struct cfg80211_chan_def def;
21f659bf 227 struct cfg80211_chan_def min_def;
d01a1e65 228
04ecd257
JB
229 u8 rx_chains_static, rx_chains_dynamic;
230
164eb02d
SW
231 bool radar_enabled;
232
3c23215b 233 u8 drv_priv[] __aligned(sizeof(void *));
d01a1e65
MK
234};
235
1a5f0c13
LC
236/**
237 * enum ieee80211_chanctx_switch_mode - channel context switch mode
238 * @CHANCTX_SWMODE_REASSIGN_VIF: Both old and new contexts already
239 * exist (and will continue to exist), but the virtual interface
240 * needs to be switched from one to the other.
241 * @CHANCTX_SWMODE_SWAP_CONTEXTS: The old context exists but will stop
242 * to exist with this call, the new context doesn't exist but
243 * will be active after this call, the virtual interface switches
244 * from the old to the new (note that the driver may of course
245 * implement this as an on-the-fly chandef switch of the existing
246 * hardware context, but the mac80211 pointer for the old context
247 * will cease to exist and only the new one will later be used
248 * for changes/removal.)
249 */
250enum ieee80211_chanctx_switch_mode {
251 CHANCTX_SWMODE_REASSIGN_VIF,
252 CHANCTX_SWMODE_SWAP_CONTEXTS,
253};
254
255/**
256 * struct ieee80211_vif_chanctx_switch - vif chanctx switch information
257 *
258 * This is structure is used to pass information about a vif that
259 * needs to switch from one chanctx to another. The
260 * &ieee80211_chanctx_switch_mode defines how the switch should be
261 * done.
262 *
263 * @vif: the vif that should be switched from old_ctx to new_ctx
264 * @old_ctx: the old context to which the vif was assigned
265 * @new_ctx: the new context to which the vif must be assigned
266 */
267struct ieee80211_vif_chanctx_switch {
268 struct ieee80211_vif *vif;
269 struct ieee80211_chanctx_conf *old_ctx;
270 struct ieee80211_chanctx_conf *new_ctx;
271};
272
471b3efd
JB
273/**
274 * enum ieee80211_bss_change - BSS change notification flags
275 *
276 * These flags are used with the bss_info_changed() callback
277 * to indicate which BSS parameter changed.
278 *
279 * @BSS_CHANGED_ASSOC: association status changed (associated/disassociated),
280 * also implies a change in the AID.
281 * @BSS_CHANGED_ERP_CTS_PROT: CTS protection changed
282 * @BSS_CHANGED_ERP_PREAMBLE: preamble changed
9f1ba906 283 * @BSS_CHANGED_ERP_SLOT: slot timing changed
38668c05 284 * @BSS_CHANGED_HT: 802.11n parameters changed
96dd22ac 285 * @BSS_CHANGED_BASIC_RATES: Basic rateset changed
57c4d7b4 286 * @BSS_CHANGED_BEACON_INT: Beacon interval changed
2d0ddec5
JB
287 * @BSS_CHANGED_BSSID: BSSID changed, for whatever
288 * reason (IBSS and managed mode)
289 * @BSS_CHANGED_BEACON: Beacon data changed, retrieve
290 * new beacon (beaconing modes)
291 * @BSS_CHANGED_BEACON_ENABLED: Beaconing should be
292 * enabled/disabled (beaconing modes)
a97c13c3 293 * @BSS_CHANGED_CQM: Connection quality monitor config changed
8fc214ba 294 * @BSS_CHANGED_IBSS: IBSS join status changed
68542962 295 * @BSS_CHANGED_ARP_FILTER: Hardware ARP filter address list or state changed.
4ced3f74
JB
296 * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note
297 * that it is only ever disabled for station mode.
7da7cc1d 298 * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface.
0ca54f6c 299 * @BSS_CHANGED_SSID: SSID changed for this BSS (AP and IBSS mode)
02945821 300 * @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode)
ab095877 301 * @BSS_CHANGED_PS: PS changed for this BSS (STA mode)
1ea6f9c0 302 * @BSS_CHANGED_TXPOWER: TX power setting changed for this interface
488dd7b5 303 * @BSS_CHANGED_P2P_PS: P2P powersave settings (CTWindow, opportunistic PS)
52cfa1d6 304 * changed
989c6505
AB
305 * @BSS_CHANGED_BEACON_INFO: Data from the AP's beacon became available:
306 * currently dtim_period only is under consideration.
2c9b7359
JB
307 * @BSS_CHANGED_BANDWIDTH: The bandwidth used by this interface changed,
308 * note that this is only called when it changes after the channel
309 * context had been assigned.
239281f8 310 * @BSS_CHANGED_OCB: OCB join status changed
23a1f8d4 311 * @BSS_CHANGED_MU_GROUPS: VHT MU-MIMO group id or user position changed
e38a017b
AS
312 * @BSS_CHANGED_KEEP_ALIVE: keep alive options (idle period or protected
313 * keep alive) changed.
dcbe73ca 314 * @BSS_CHANGED_MCAST_RATE: Multicast Rate setting changed for this interface
ae4a50ee 315 * @BSS_CHANGED_FTM_RESPONDER: fine timing measurement request responder
bc847970 316 * functionality changed for this BSS (AP mode).
c9d3245e 317 * @BSS_CHANGED_TWT: TWT status changed
1ced169c 318 * @BSS_CHANGED_HE_OBSS_PD: OBSS Packet Detection status changed.
dd56e902 319 * @BSS_CHANGED_HE_BSS_COLOR: BSS Color has changed
295b02c4 320 * @BSS_CHANGED_FILS_DISCOVERY: FILS discovery status changed.
632189a0
AD
321 * @BSS_CHANGED_UNSOL_BCAST_PROBE_RESP: Unsolicited broadcast probe response
322 * status changed.
dcbe73ca 323 *
471b3efd
JB
324 */
325enum ieee80211_bss_change {
326 BSS_CHANGED_ASSOC = 1<<0,
327 BSS_CHANGED_ERP_CTS_PROT = 1<<1,
328 BSS_CHANGED_ERP_PREAMBLE = 1<<2,
9f1ba906 329 BSS_CHANGED_ERP_SLOT = 1<<3,
a7ce1c94 330 BSS_CHANGED_HT = 1<<4,
96dd22ac 331 BSS_CHANGED_BASIC_RATES = 1<<5,
57c4d7b4 332 BSS_CHANGED_BEACON_INT = 1<<6,
2d0ddec5
JB
333 BSS_CHANGED_BSSID = 1<<7,
334 BSS_CHANGED_BEACON = 1<<8,
335 BSS_CHANGED_BEACON_ENABLED = 1<<9,
a97c13c3 336 BSS_CHANGED_CQM = 1<<10,
8fc214ba 337 BSS_CHANGED_IBSS = 1<<11,
68542962 338 BSS_CHANGED_ARP_FILTER = 1<<12,
4ced3f74 339 BSS_CHANGED_QOS = 1<<13,
7da7cc1d 340 BSS_CHANGED_IDLE = 1<<14,
7827493b 341 BSS_CHANGED_SSID = 1<<15,
02945821 342 BSS_CHANGED_AP_PROBE_RESP = 1<<16,
ab095877 343 BSS_CHANGED_PS = 1<<17,
1ea6f9c0 344 BSS_CHANGED_TXPOWER = 1<<18,
488dd7b5 345 BSS_CHANGED_P2P_PS = 1<<19,
989c6505 346 BSS_CHANGED_BEACON_INFO = 1<<20,
2c9b7359 347 BSS_CHANGED_BANDWIDTH = 1<<21,
239281f8 348 BSS_CHANGED_OCB = 1<<22,
23a1f8d4 349 BSS_CHANGED_MU_GROUPS = 1<<23,
e38a017b 350 BSS_CHANGED_KEEP_ALIVE = 1<<24,
dcbe73ca 351 BSS_CHANGED_MCAST_RATE = 1<<25,
bc847970 352 BSS_CHANGED_FTM_RESPONDER = 1<<26,
c9d3245e 353 BSS_CHANGED_TWT = 1<<27,
1ced169c 354 BSS_CHANGED_HE_OBSS_PD = 1<<28,
dd56e902 355 BSS_CHANGED_HE_BSS_COLOR = 1<<29,
295b02c4 356 BSS_CHANGED_FILS_DISCOVERY = 1<<30,
632189a0 357 BSS_CHANGED_UNSOL_BCAST_PROBE_RESP = 1<<31,
ac8dd506
JB
358
359 /* when adding here, make sure to change ieee80211_reconfig */
471b3efd
JB
360};
361
68542962
JO
362/*
363 * The maximum number of IPv4 addresses listed for ARP filtering. If the number
364 * of addresses for an interface increase beyond this value, hardware ARP
365 * filtering will be disabled.
366 */
367#define IEEE80211_BSS_ARP_ADDR_LIST_LEN 4
368
615f7b9b 369/**
a8182929
EG
370 * enum ieee80211_event_type - event to be notified to the low level driver
371 * @RSSI_EVENT: AP's rssi crossed the a threshold set by the driver.
a9409093 372 * @MLME_EVENT: event related to MLME
6382246e 373 * @BAR_RX_EVENT: a BAR was received
b497de63
EG
374 * @BA_FRAME_TIMEOUT: Frames were released from the reordering buffer because
375 * they timed out. This won't be called for each frame released, but only
376 * once each time the timeout triggers.
615f7b9b 377 */
a8182929
EG
378enum ieee80211_event_type {
379 RSSI_EVENT,
a9409093 380 MLME_EVENT,
6382246e 381 BAR_RX_EVENT,
b497de63 382 BA_FRAME_TIMEOUT,
a8182929
EG
383};
384
385/**
386 * enum ieee80211_rssi_event_data - relevant when event type is %RSSI_EVENT
387 * @RSSI_EVENT_HIGH: AP's rssi went below the threshold set by the driver.
388 * @RSSI_EVENT_LOW: AP's rssi went above the threshold set by the driver.
389 */
390enum ieee80211_rssi_event_data {
615f7b9b
MV
391 RSSI_EVENT_HIGH,
392 RSSI_EVENT_LOW,
393};
394
a8182929 395/**
a839e463 396 * struct ieee80211_rssi_event - data attached to an %RSSI_EVENT
a8182929
EG
397 * @data: See &enum ieee80211_rssi_event_data
398 */
399struct ieee80211_rssi_event {
400 enum ieee80211_rssi_event_data data;
401};
402
a9409093
EG
403/**
404 * enum ieee80211_mlme_event_data - relevant when event type is %MLME_EVENT
405 * @AUTH_EVENT: the MLME operation is authentication
d0d1a12f 406 * @ASSOC_EVENT: the MLME operation is association
a90faa9d
EG
407 * @DEAUTH_RX_EVENT: deauth received..
408 * @DEAUTH_TX_EVENT: deauth sent.
a9409093
EG
409 */
410enum ieee80211_mlme_event_data {
411 AUTH_EVENT,
d0d1a12f 412 ASSOC_EVENT,
a90faa9d
EG
413 DEAUTH_RX_EVENT,
414 DEAUTH_TX_EVENT,
a9409093
EG
415};
416
417/**
418 * enum ieee80211_mlme_event_status - relevant when event type is %MLME_EVENT
419 * @MLME_SUCCESS: the MLME operation completed successfully.
420 * @MLME_DENIED: the MLME operation was denied by the peer.
421 * @MLME_TIMEOUT: the MLME operation timed out.
422 */
423enum ieee80211_mlme_event_status {
424 MLME_SUCCESS,
425 MLME_DENIED,
426 MLME_TIMEOUT,
427};
428
429/**
a839e463 430 * struct ieee80211_mlme_event - data attached to an %MLME_EVENT
a9409093
EG
431 * @data: See &enum ieee80211_mlme_event_data
432 * @status: See &enum ieee80211_mlme_event_status
433 * @reason: the reason code if applicable
434 */
435struct ieee80211_mlme_event {
436 enum ieee80211_mlme_event_data data;
437 enum ieee80211_mlme_event_status status;
438 u16 reason;
439};
440
6382246e
EG
441/**
442 * struct ieee80211_ba_event - data attached for BlockAck related events
443 * @sta: pointer to the &ieee80211_sta to which this event relates
444 * @tid: the tid
b497de63 445 * @ssn: the starting sequence number (for %BAR_RX_EVENT)
6382246e
EG
446 */
447struct ieee80211_ba_event {
448 struct ieee80211_sta *sta;
449 u16 tid;
450 u16 ssn;
451};
452
a8182929
EG
453/**
454 * struct ieee80211_event - event to be sent to the driver
a839e463 455 * @type: The event itself. See &enum ieee80211_event_type.
a8182929 456 * @rssi: relevant if &type is %RSSI_EVENT
a9409093 457 * @mlme: relevant if &type is %AUTH_EVENT
b497de63 458 * @ba: relevant if &type is %BAR_RX_EVENT or %BA_FRAME_TIMEOUT
6382246e 459 * @u:union holding the fields above
a8182929
EG
460 */
461struct ieee80211_event {
462 enum ieee80211_event_type type;
463 union {
464 struct ieee80211_rssi_event rssi;
a9409093 465 struct ieee80211_mlme_event mlme;
6382246e 466 struct ieee80211_ba_event ba;
a8182929
EG
467 } u;
468};
469
23a1f8d4
SS
470/**
471 * struct ieee80211_mu_group_data - STA's VHT MU-MIMO group data
472 *
473 * This structure describes the group id data of VHT MU-MIMO
474 *
475 * @membership: 64 bits array - a bit is set if station is member of the group
476 * @position: 2 bits per group id indicating the position in the group
477 */
478struct ieee80211_mu_group_data {
479 u8 membership[WLAN_MEMBERSHIP_LEN];
480 u8 position[WLAN_USER_POSITION_LEN];
481};
482
bc847970 483/**
3453de98 484 * struct ieee80211_ftm_responder_params - FTM responder parameters
bc847970
PKC
485 *
486 * @lci: LCI subelement content
487 * @civicloc: CIVIC location subelement content
488 * @lci_len: LCI data length
489 * @civicloc_len: Civic data length
490 */
491struct ieee80211_ftm_responder_params {
492 const u8 *lci;
493 const u8 *civicloc;
494 size_t lci_len;
495 size_t civicloc_len;
496};
497
295b02c4
AD
498/**
499 * struct ieee80211_fils_discovery - FILS discovery parameters from
500 * IEEE Std 802.11ai-2016, Annex C.3 MIB detail.
501 *
502 * @min_interval: Minimum packet interval in TUs (0 - 10000)
503 * @max_interval: Maximum packet interval in TUs (0 - 10000)
504 */
505struct ieee80211_fils_discovery {
506 u32 min_interval;
507 u32 max_interval;
508};
509
471b3efd
JB
510/**
511 * struct ieee80211_bss_conf - holds the BSS's changing parameters
512 *
513 * This structure keeps information about a BSS (and an association
514 * to that BSS) that can change during the lifetime of the BSS.
515 *
41cbb0f5
LC
516 * @htc_trig_based_pkt_ext: default PE in 4us units, if BSS supports HE
517 * @multi_sta_back_32bit: supports BA bitmap of 32-bits in Multi-STA BACK
518 * @uora_exists: is the UORA element advertised by AP
519 * @ack_enabled: indicates support to receive a multi-TID that solicits either
520 * ACK, BACK or both
521 * @uora_ocw_range: UORA element's OCW Range field
522 * @frame_time_rts_th: HE duration RTS threshold, in units of 32us
523 * @he_support: does this BSS support HE
55ebd6e6
EG
524 * @twt_requester: does this BSS support TWT requester (relevant for managed
525 * mode only, set if the AP advertises TWT responder role)
a0de1ca3
JC
526 * @twt_responder: does this BSS support TWT requester (relevant for managed
527 * mode only, set if the AP advertises TWT responder role)
d46b4ab8 528 * @twt_protected: does this BSS support protected TWT frames
d8b26154 529 * @twt_broadcast: does this BSS support broadcast TWT
471b3efd 530 * @assoc: association status
8fc214ba
JB
531 * @ibss_joined: indicates whether this station is part of an IBSS
532 * or not
c13a765b 533 * @ibss_creator: indicates if a new IBSS network is being created
471b3efd
JB
534 * @aid: association ID number, valid only when @assoc is true
535 * @use_cts_prot: use CTS protection
ea1b2b45
JB
536 * @use_short_preamble: use 802.11b short preamble
537 * @use_short_slot: use short slot time (only relevant for ERP)
56007a02 538 * @dtim_period: num of beacons before the next DTIM, for beaconing,
c65dd147 539 * valid in station mode only if after the driver was notified
989c6505 540 * with the %BSS_CHANGED_BEACON_INFO flag, will be non-zero then.
8c358bcd 541 * @sync_tsf: last beacon's/probe response's TSF timestamp (could be old
ef429dad
JB
542 * as it may have been received during scanning long ago). If the
543 * HW flag %IEEE80211_HW_TIMING_BEACON_ONLY is set, then this can
544 * only come from a beacon, but might not become valid until after
545 * association when a beacon is received (which is notified with the
2ecc3905 546 * %BSS_CHANGED_DTIM flag.). See also sync_dtim_count important notice.
8c358bcd
JB
547 * @sync_device_ts: the device timestamp corresponding to the sync_tsf,
548 * the driver/device can use this to calculate synchronisation
2ecc3905 549 * (see @sync_tsf). See also sync_dtim_count important notice.
ef429dad
JB
550 * @sync_dtim_count: Only valid when %IEEE80211_HW_TIMING_BEACON_ONLY
551 * is requested, see @sync_tsf/@sync_device_ts.
2ecc3905
AB
552 * IMPORTANT: These three sync_* parameters would possibly be out of sync
553 * by the time the driver will use them. The synchronized view is currently
554 * guaranteed only in certain callbacks.
21c0cbe7 555 * @beacon_int: beacon interval
98f7dfd8 556 * @assoc_capability: capabilities taken from assoc resp
96dd22ac
JB
557 * @basic_rates: bitmap of basic rates, each bit stands for an
558 * index into the rate table configured by the driver in
559 * the current band.
817cee76 560 * @beacon_rate: associated AP's beacon TX rate
dd5b4cc7 561 * @mcast_rate: per-band multicast rate index + 1 (0: disabled)
2d0ddec5
JB
562 * @bssid: The BSSID for this BSS
563 * @enable_beacon: whether beaconing should be enabled or not
4bf88530
JB
564 * @chandef: Channel definition for this BSS -- the hardware might be
565 * configured a higher bandwidth than this BSS uses, for example.
23a1f8d4 566 * @mu_group: VHT MU-MIMO group membership data
074d46d1 567 * @ht_operation_mode: HT operation mode like in &struct ieee80211_ht_operation.
22f66895
AA
568 * This field is only valid when the channel is a wide HT/VHT channel.
569 * Note that with TDLS this can be the case (channel is HT, protection must
570 * be used from this field) even when the BSS association isn't using HT.
a97c13c3 571 * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value
e86abc68
JB
572 * implies disabled. As with the cfg80211 callback, a change here should
573 * cause an event to be sent indicating where the current value is in
574 * relation to the newly configured threshold.
2c3c5f8c
AZ
575 * @cqm_rssi_low: Connection quality monitor RSSI lower threshold, a zero value
576 * implies disabled. This is an alternative mechanism to the single
577 * threshold event and can't be enabled simultaneously with it.
578 * @cqm_rssi_high: Connection quality monitor RSSI upper threshold.
a97c13c3 579 * @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis
68542962
JO
580 * @arp_addr_list: List of IPv4 addresses for hardware ARP filtering. The
581 * may filter ARP queries targeted for other addresses than listed here.
582 * The driver must allow ARP queries targeted for all address listed here
583 * to pass through. An empty list implies no ARP queries need to pass.
0f19b41e
JB
584 * @arp_addr_cnt: Number of addresses currently on the list. Note that this
585 * may be larger than %IEEE80211_BSS_ARP_ADDR_LIST_LEN (the arp_addr_list
586 * array size), it's up to the driver what to do in that case.
4ced3f74 587 * @qos: This is a QoS-enabled BSS.
7da7cc1d
JB
588 * @idle: This interface is idle. There's also a global idle flag in the
589 * hardware config which may be more appropriate depending on what
590 * your driver/device needs to do.
ab095877
EP
591 * @ps: power-save mode (STA only). This flag is NOT affected by
592 * offchannel/dynamic_ps operations.
0ca54f6c 593 * @ssid: The SSID of the current vif. Valid in AP and IBSS mode.
7827493b
AN
594 * @ssid_len: Length of SSID given in @ssid.
595 * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode.
db6d9e9e 596 * @txpower: TX power in dBm. INT_MIN means not configured.
db82d8a9
LB
597 * @txpower_type: TX power adjustment used to control per packet Transmit
598 * Power Control (TPC) in lower driver for the current vif. In particular
599 * TPC is enabled if value passed in %txpower_type is
600 * NL80211_TX_POWER_LIMITED (allow using less than specified from
601 * userspace), whereas TPC is disabled if %txpower_type is set to
602 * NL80211_TX_POWER_FIXED (use value configured from userspace)
67baf663 603 * @p2p_noa_attr: P2P NoA attribute for P2P powersave
52cfa1d6
AB
604 * @allow_p2p_go_ps: indication for AP or P2P GO interface, whether it's allowed
605 * to use P2P PS mechanism or not. AP/P2P GO is not allowed to use P2P PS
606 * if it has associated clients without P2P PS support.
e38a017b
AS
607 * @max_idle_period: the time period during which the station can refrain from
608 * transmitting frames to its associated AP without being disassociated.
609 * In units of 1000 TUs. Zero value indicates that the AP did not include
610 * a (valid) BSS Max Idle Period Element.
611 * @protected_keep_alive: if set, indicates that the station should send an RSN
612 * protected frame to the AP to reset the idle timer at the AP for the
613 * station.
bc847970
PKC
614 * @ftm_responder: whether to enable or disable fine timing measurement FTM
615 * responder functionality.
616 * @ftmr_params: configurable lci/civic parameter when enabling FTM responder.
78ac51f8
SS
617 * @nontransmitted: this BSS is a nontransmitted BSS profile
618 * @transmitter_bssid: the address of transmitter AP
619 * @bssid_index: index inside the multiple BSSID set
620 * @bssid_indicator: 2^bssid_indicator is the maximum number of APs in set
621 * @ema_ap: AP supports enhancements of discovery and advertisement of
622 * nontransmitted BSSIDs
623 * @profile_periodicity: the least number of beacon frames need to be received
624 * in order to discover all the nontransmitted BSSIDs in the set.
70debba3
PKC
625 * @he_oper: HE operation information of the BSS (AP/Mesh) or of the AP we are
626 * connected to (STA)
1ced169c 627 * @he_obss_pd: OBSS Packet Detection parameters.
dd56e902 628 * @he_bss_color: BSS coloring settings, if BSS supports HE
295b02c4 629 * @fils_discovery: FILS discovery configuration
632189a0
AD
630 * @unsol_bcast_probe_resp_interval: Unsolicited broadcast probe response
631 * interval.
1d00ce80 632 * @s1g: BSS is S1G BSS (affects Association Request format).
ba6ff70a
RM
633 * @beacon_tx_rate: The configured beacon transmit rate that needs to be passed
634 * to driver when rate control is offloaded to firmware.
405fca8a 635 * @power_type: power type of BSS for 6 GHz
63214f02
WG
636 * @tx_pwr_env: transmit power envelope array of BSS.
637 * @tx_pwr_env_num: number of @tx_pwr_env.
638 * @pwr_reduction: power constraint of BSS.
471b3efd
JB
639 */
640struct ieee80211_bss_conf {
2d0ddec5 641 const u8 *bssid;
41cbb0f5 642 u8 htc_trig_based_pkt_ext;
41cbb0f5 643 bool uora_exists;
41cbb0f5
LC
644 u8 uora_ocw_range;
645 u16 frame_time_rts_th;
646 bool he_support;
55ebd6e6 647 bool twt_requester;
a0de1ca3 648 bool twt_responder;
d46b4ab8 649 bool twt_protected;
d8b26154 650 bool twt_broadcast;
471b3efd 651 /* association related data */
8fc214ba 652 bool assoc, ibss_joined;
c13a765b 653 bool ibss_creator;
471b3efd
JB
654 u16 aid;
655 /* erp related data */
656 bool use_cts_prot;
657 bool use_short_preamble;
9f1ba906 658 bool use_short_slot;
2d0ddec5 659 bool enable_beacon;
98f7dfd8 660 u8 dtim_period;
21c0cbe7
TW
661 u16 beacon_int;
662 u16 assoc_capability;
8c358bcd
JB
663 u64 sync_tsf;
664 u32 sync_device_ts;
ef429dad 665 u8 sync_dtim_count;
881d948c 666 u32 basic_rates;
817cee76 667 struct ieee80211_rate *beacon_rate;
57fbcce3 668 int mcast_rate[NUM_NL80211_BANDS];
9ed6bcce 669 u16 ht_operation_mode;
a97c13c3
JO
670 s32 cqm_rssi_thold;
671 u32 cqm_rssi_hyst;
2c3c5f8c
AZ
672 s32 cqm_rssi_low;
673 s32 cqm_rssi_high;
4bf88530 674 struct cfg80211_chan_def chandef;
23a1f8d4 675 struct ieee80211_mu_group_data mu_group;
68542962 676 __be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN];
0f19b41e 677 int arp_addr_cnt;
4ced3f74 678 bool qos;
7da7cc1d 679 bool idle;
ab095877 680 bool ps;
7827493b
AN
681 u8 ssid[IEEE80211_MAX_SSID_LEN];
682 size_t ssid_len;
683 bool hidden_ssid;
1ea6f9c0 684 int txpower;
db82d8a9 685 enum nl80211_tx_power_setting txpower_type;
67baf663 686 struct ieee80211_p2p_noa_attr p2p_noa_attr;
52cfa1d6 687 bool allow_p2p_go_ps;
e38a017b
AS
688 u16 max_idle_period;
689 bool protected_keep_alive;
bc847970
PKC
690 bool ftm_responder;
691 struct ieee80211_ftm_responder_params *ftmr_params;
78ac51f8
SS
692 /* Multiple BSSID data */
693 bool nontransmitted;
694 u8 transmitter_bssid[ETH_ALEN];
695 u8 bssid_index;
696 u8 bssid_indicator;
697 bool ema_ap;
698 u8 profile_periodicity;
60689de4
RM
699 struct {
700 u32 params;
701 u16 nss_set;
702 } he_oper;
1ced169c 703 struct ieee80211_he_obss_pd he_obss_pd;
dd56e902 704 struct cfg80211_he_bss_color he_bss_color;
295b02c4 705 struct ieee80211_fils_discovery fils_discovery;
632189a0 706 u32 unsol_bcast_probe_resp_interval;
1d00ce80 707 bool s1g;
ba6ff70a 708 struct cfg80211_bitrate_mask beacon_tx_rate;
405fca8a 709 enum ieee80211_ap_reg_power power_type;
63214f02
WG
710 struct ieee80211_tx_pwr_env tx_pwr_env[IEEE80211_TPE_MAX_IE_COUNT];
711 u8 tx_pwr_env_num;
712 u8 pwr_reduction;
471b3efd
JB
713};
714
11f4b1ce 715/**
af61a165 716 * enum mac80211_tx_info_flags - flags to describe transmission information/status
e039fa4a 717 *
6ef307bc 718 * These flags are used with the @flags member of &ieee80211_tx_info.
e039fa4a 719 *
7351c6bd 720 * @IEEE80211_TX_CTL_REQ_TX_STATUS: require TX status callback for this frame.
e6a9854b
JB
721 * @IEEE80211_TX_CTL_ASSIGN_SEQ: The driver has to assign a sequence
722 * number to this frame, taking care of not overwriting the fragment
723 * number and increasing the sequence number only when the
724 * IEEE80211_TX_CTL_FIRST_FRAGMENT flag is set. mac80211 will properly
725 * assign sequence numbers to QoS-data frames but cannot do so correctly
726 * for non-QoS-data and management frames because beacons need them from
727 * that counter as well and mac80211 cannot guarantee proper sequencing.
728 * If this flag is set, the driver should instruct the hardware to
729 * assign a sequence number to the frame or assign one itself. Cf. IEEE
730 * 802.11-2007 7.1.3.4.1 paragraph 3. This flag will always be set for
731 * beacons and always be clear for frames without a sequence number field.
e039fa4a 732 * @IEEE80211_TX_CTL_NO_ACK: tell the low level not to wait for an ack
e039fa4a
JB
733 * @IEEE80211_TX_CTL_CLEAR_PS_FILT: clear powersave filter for destination
734 * station
e039fa4a 735 * @IEEE80211_TX_CTL_FIRST_FRAGMENT: this is a first fragment of the frame
e039fa4a
JB
736 * @IEEE80211_TX_CTL_SEND_AFTER_DTIM: send this frame after DTIM beacon
737 * @IEEE80211_TX_CTL_AMPDU: this frame should be sent as part of an A-MPDU
e6a9854b 738 * @IEEE80211_TX_CTL_INJECTED: Frame was injected, internal to mac80211.
e039fa4a 739 * @IEEE80211_TX_STAT_TX_FILTERED: The frame was not transmitted
ab5b5342
JB
740 * because the destination STA was in powersave mode. Note that to
741 * avoid race conditions, the filter must be set by the hardware or
742 * firmware upon receiving a frame that indicates that the station
743 * went to sleep (must be done on device to filter frames already on
744 * the queue) and may only be unset after mac80211 gives the OK for
745 * that by setting the IEEE80211_TX_CTL_CLEAR_PS_FILT (see above),
746 * since only then is it guaranteed that no more frames are in the
747 * hardware queue.
e039fa4a
JB
748 * @IEEE80211_TX_STAT_ACK: Frame was acknowledged
749 * @IEEE80211_TX_STAT_AMPDU: The frame was aggregated, so status
750 * is for the whole aggregation.
429a3805
RR
751 * @IEEE80211_TX_STAT_AMPDU_NO_BACK: no block ack was returned,
752 * so consider using block ack request (BAR).
e6a9854b
JB
753 * @IEEE80211_TX_CTL_RATE_CTRL_PROBE: internal to mac80211, can be
754 * set by rate control algorithms to indicate probe rate, will
755 * be cleared for fragmented frames (except on the last fragment)
6c17b77b
SF
756 * @IEEE80211_TX_INTFL_OFFCHAN_TX_OK: Internal to mac80211. Used to indicate
757 * that a frame can be transmitted while the queues are stopped for
758 * off-channel operation.
cc20ff2c
FF
759 * @IEEE80211_TX_CTL_HW_80211_ENCAP: This frame uses hardware encapsulation
760 * (header conversion)
8f77f384
JB
761 * @IEEE80211_TX_INTFL_RETRIED: completely internal to mac80211,
762 * used to indicate that a frame was already retried due to PS
3b8d81e0
JB
763 * @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211,
764 * used to indicate frame should not be encrypted
02f2f1a9
JB
765 * @IEEE80211_TX_CTL_NO_PS_BUFFER: This frame is a response to a poll
766 * frame (PS-Poll or uAPSD) or a non-bufferable MMPDU and must
767 * be sent although the station is in powersave mode.
ad5351db
JB
768 * @IEEE80211_TX_CTL_MORE_FRAMES: More frames will be passed to the
769 * transmit function after the current frame, this can be used
770 * by drivers to kick the DMA queue only if unset or when the
771 * queue gets full.
c6fcf6bc
JB
772 * @IEEE80211_TX_INTFL_RETRANSMISSION: This frame is being retransmitted
773 * after TX status because the destination was asleep, it must not
774 * be modified again (no seqno assignment, crypto, etc.)
1672c0e3
JB
775 * @IEEE80211_TX_INTFL_MLME_CONN_TX: This frame was transmitted by the MLME
776 * code for connection establishment, this indicates that its status
777 * should kick the MLME state machine.
026331c4
JM
778 * @IEEE80211_TX_INTFL_NL80211_FRAME_TX: Frame was requested through nl80211
779 * MLME command (internal to mac80211 to figure out whether to send TX
780 * status to user space)
0a56bd0a 781 * @IEEE80211_TX_CTL_LDPC: tells the driver to use LDPC for this frame
f79d9bad
FF
782 * @IEEE80211_TX_CTL_STBC: Enables Space-Time Block Coding (STBC) for this
783 * frame and selects the maximum number of streams that it can use.
610dbc98
JB
784 * @IEEE80211_TX_CTL_TX_OFFCHAN: Marks this packet to be transmitted on
785 * the off-channel channel when a remain-on-channel offload is done
786 * in hardware -- normal packets still flow and are expected to be
787 * handled properly by the device.
681d1190
JM
788 * @IEEE80211_TX_INTFL_TKIP_MIC_FAILURE: Marks this packet to be used for TKIP
789 * testing. It will be sent out with incorrect Michael MIC key to allow
790 * TKIP countermeasures to be tested.
aad14ceb
RM
791 * @IEEE80211_TX_CTL_NO_CCK_RATE: This frame will be sent at non CCK rate.
792 * This flag is actually used for management frame especially for P2P
793 * frames not being sent at CCK rate in 2GHz band.
47086fc5
JB
794 * @IEEE80211_TX_STATUS_EOSP: This packet marks the end of service period,
795 * when its status is reported the service period ends. For frames in
796 * an SP that mac80211 transmits, it is already set; for driver frames
deeaee19
JB
797 * the driver may set this flag. It is also used to do the same for
798 * PS-Poll responses.
b6f35301
RM
799 * @IEEE80211_TX_CTL_USE_MINRATE: This frame will be sent at lowest rate.
800 * This flag is used to send nullfunc frame at minimum rate when
801 * the nullfunc is used for connection monitoring purpose.
a26eb27a
JB
802 * @IEEE80211_TX_CTL_DONTFRAG: Don't fragment this packet even if it
803 * would be fragmented by size (this is optional, only used for
804 * monitor injection).
5cf16616
SM
805 * @IEEE80211_TX_STAT_NOACK_TRANSMITTED: A frame that was marked with
806 * IEEE80211_TX_CTL_NO_ACK has been successfully transmitted without
807 * any errors (like issues specific to the driver/HW).
808 * This flag must not be set for frames that don't request no-ack
809 * behaviour with IEEE80211_TX_CTL_NO_ACK.
eb7d3066
CL
810 *
811 * Note: If you have to add new flags to the enumeration, then don't
812 * forget to update %IEEE80211_TX_TEMPORARY_FLAGS when necessary.
11f4b1ce 813 */
af61a165 814enum mac80211_tx_info_flags {
e039fa4a 815 IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0),
e6a9854b
JB
816 IEEE80211_TX_CTL_ASSIGN_SEQ = BIT(1),
817 IEEE80211_TX_CTL_NO_ACK = BIT(2),
818 IEEE80211_TX_CTL_CLEAR_PS_FILT = BIT(3),
819 IEEE80211_TX_CTL_FIRST_FRAGMENT = BIT(4),
820 IEEE80211_TX_CTL_SEND_AFTER_DTIM = BIT(5),
821 IEEE80211_TX_CTL_AMPDU = BIT(6),
822 IEEE80211_TX_CTL_INJECTED = BIT(7),
823 IEEE80211_TX_STAT_TX_FILTERED = BIT(8),
824 IEEE80211_TX_STAT_ACK = BIT(9),
825 IEEE80211_TX_STAT_AMPDU = BIT(10),
826 IEEE80211_TX_STAT_AMPDU_NO_BACK = BIT(11),
827 IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12),
6c17b77b 828 IEEE80211_TX_INTFL_OFFCHAN_TX_OK = BIT(13),
cc20ff2c 829 IEEE80211_TX_CTL_HW_80211_ENCAP = BIT(14),
8f77f384 830 IEEE80211_TX_INTFL_RETRIED = BIT(15),
3b8d81e0 831 IEEE80211_TX_INTFL_DONT_ENCRYPT = BIT(16),
02f2f1a9 832 IEEE80211_TX_CTL_NO_PS_BUFFER = BIT(17),
ad5351db 833 IEEE80211_TX_CTL_MORE_FRAMES = BIT(18),
c6fcf6bc 834 IEEE80211_TX_INTFL_RETRANSMISSION = BIT(19),
1672c0e3 835 IEEE80211_TX_INTFL_MLME_CONN_TX = BIT(20),
026331c4 836 IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21),
0a56bd0a 837 IEEE80211_TX_CTL_LDPC = BIT(22),
f79d9bad 838 IEEE80211_TX_CTL_STBC = BIT(23) | BIT(24),
21f83589 839 IEEE80211_TX_CTL_TX_OFFCHAN = BIT(25),
681d1190 840 IEEE80211_TX_INTFL_TKIP_MIC_FAILURE = BIT(26),
aad14ceb 841 IEEE80211_TX_CTL_NO_CCK_RATE = BIT(27),
47086fc5 842 IEEE80211_TX_STATUS_EOSP = BIT(28),
b6f35301 843 IEEE80211_TX_CTL_USE_MINRATE = BIT(29),
a26eb27a 844 IEEE80211_TX_CTL_DONTFRAG = BIT(30),
5cf16616 845 IEEE80211_TX_STAT_NOACK_TRANSMITTED = BIT(31),
11f4b1ce
RR
846};
847
abe37c4b
JB
848#define IEEE80211_TX_CTL_STBC_SHIFT 23
849
1821f8b3
TP
850#define IEEE80211_TX_RC_S1G_MCS IEEE80211_TX_RC_VHT_MCS
851
af61a165
JB
852/**
853 * enum mac80211_tx_control_flags - flags to describe transmit control
854 *
855 * @IEEE80211_TX_CTRL_PORT_CTRL_PROTO: this frame is a port control
856 * protocol frame (e.g. EAP)
6b127c71
SM
857 * @IEEE80211_TX_CTRL_PS_RESPONSE: This frame is a response to a poll
858 * frame (PS-Poll or uAPSD).
dfdfc2be 859 * @IEEE80211_TX_CTRL_RATE_INJECT: This frame is injected with rate information
6e0456b5 860 * @IEEE80211_TX_CTRL_AMSDU: This frame is an A-MSDU frame
bb42f2d1 861 * @IEEE80211_TX_CTRL_FAST_XMIT: This frame is going through the fast_xmit path
8828f81a 862 * @IEEE80211_TX_CTRL_SKIP_MPATH_LOOKUP: This frame skips mesh path lookup
cc20ff2c
FF
863 * @IEEE80211_TX_INTCFL_NEED_TXPROCESSING: completely internal to mac80211,
864 * used to indicate that a pending frame requires TX processing before
865 * it can be sent out.
e02281e7
MV
866 * @IEEE80211_TX_CTRL_NO_SEQNO: Do not overwrite the sequence number that
867 * has already been assigned to this frame.
30df8130
MV
868 * @IEEE80211_TX_CTRL_DONT_REORDER: This frame should not be reordered
869 * relative to other frames that have this flag set, independent
870 * of their QoS TID or other priority field values.
af61a165
JB
871 *
872 * These flags are used in tx_info->control.flags.
873 */
874enum mac80211_tx_control_flags {
875 IEEE80211_TX_CTRL_PORT_CTRL_PROTO = BIT(0),
6b127c71 876 IEEE80211_TX_CTRL_PS_RESPONSE = BIT(1),
dfdfc2be 877 IEEE80211_TX_CTRL_RATE_INJECT = BIT(2),
6e0456b5 878 IEEE80211_TX_CTRL_AMSDU = BIT(3),
bb42f2d1 879 IEEE80211_TX_CTRL_FAST_XMIT = BIT(4),
8828f81a 880 IEEE80211_TX_CTRL_SKIP_MPATH_LOOKUP = BIT(5),
cc20ff2c 881 IEEE80211_TX_INTCFL_NEED_TXPROCESSING = BIT(6),
e02281e7 882 IEEE80211_TX_CTRL_NO_SEQNO = BIT(7),
30df8130 883 IEEE80211_TX_CTRL_DONT_REORDER = BIT(8),
af61a165
JB
884};
885
eb7d3066
CL
886/*
887 * This definition is used as a mask to clear all temporary flags, which are
888 * set by the tx handlers for each transmission attempt by the mac80211 stack.
889 */
890#define IEEE80211_TX_TEMPORARY_FLAGS (IEEE80211_TX_CTL_NO_ACK | \
891 IEEE80211_TX_CTL_CLEAR_PS_FILT | IEEE80211_TX_CTL_FIRST_FRAGMENT | \
892 IEEE80211_TX_CTL_SEND_AFTER_DTIM | IEEE80211_TX_CTL_AMPDU | \
893 IEEE80211_TX_STAT_TX_FILTERED | IEEE80211_TX_STAT_ACK | \
894 IEEE80211_TX_STAT_AMPDU | IEEE80211_TX_STAT_AMPDU_NO_BACK | \
02f2f1a9 895 IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_NO_PS_BUFFER | \
eb7d3066 896 IEEE80211_TX_CTL_MORE_FRAMES | IEEE80211_TX_CTL_LDPC | \
47086fc5 897 IEEE80211_TX_CTL_STBC | IEEE80211_TX_STATUS_EOSP)
eb7d3066 898
2134e7e7
S
899/**
900 * enum mac80211_rate_control_flags - per-rate flags set by the
901 * Rate Control algorithm.
902 *
903 * These flags are set by the Rate control algorithm for each rate during tx,
904 * in the @flags member of struct ieee80211_tx_rate.
905 *
906 * @IEEE80211_TX_RC_USE_RTS_CTS: Use RTS/CTS exchange for this rate.
907 * @IEEE80211_TX_RC_USE_CTS_PROTECT: CTS-to-self protection is required.
908 * This is set if the current BSS requires ERP protection.
909 * @IEEE80211_TX_RC_USE_SHORT_PREAMBLE: Use short preamble.
910 * @IEEE80211_TX_RC_MCS: HT rate.
8bc83c24
JB
911 * @IEEE80211_TX_RC_VHT_MCS: VHT MCS rate, in this case the idx field is split
912 * into a higher 4 bits (Nss) and lower 4 bits (MCS number)
2134e7e7
S
913 * @IEEE80211_TX_RC_GREEN_FIELD: Indicates whether this rate should be used in
914 * Greenfield mode.
915 * @IEEE80211_TX_RC_40_MHZ_WIDTH: Indicates if the Channel Width should be 40 MHz.
8bc83c24
JB
916 * @IEEE80211_TX_RC_80_MHZ_WIDTH: Indicates 80 MHz transmission
917 * @IEEE80211_TX_RC_160_MHZ_WIDTH: Indicates 160 MHz transmission
918 * (80+80 isn't supported yet)
2134e7e7
S
919 * @IEEE80211_TX_RC_DUP_DATA: The frame should be transmitted on both of the
920 * adjacent 20 MHz channels, if the current channel type is
921 * NL80211_CHAN_HT40MINUS or NL80211_CHAN_HT40PLUS.
922 * @IEEE80211_TX_RC_SHORT_GI: Short Guard interval should be used for this rate.
923 */
e6a9854b
JB
924enum mac80211_rate_control_flags {
925 IEEE80211_TX_RC_USE_RTS_CTS = BIT(0),
926 IEEE80211_TX_RC_USE_CTS_PROTECT = BIT(1),
927 IEEE80211_TX_RC_USE_SHORT_PREAMBLE = BIT(2),
928
8bc83c24 929 /* rate index is an HT/VHT MCS instead of an index */
e6a9854b
JB
930 IEEE80211_TX_RC_MCS = BIT(3),
931 IEEE80211_TX_RC_GREEN_FIELD = BIT(4),
932 IEEE80211_TX_RC_40_MHZ_WIDTH = BIT(5),
933 IEEE80211_TX_RC_DUP_DATA = BIT(6),
934 IEEE80211_TX_RC_SHORT_GI = BIT(7),
8bc83c24
JB
935 IEEE80211_TX_RC_VHT_MCS = BIT(8),
936 IEEE80211_TX_RC_80_MHZ_WIDTH = BIT(9),
937 IEEE80211_TX_RC_160_MHZ_WIDTH = BIT(10),
e6a9854b
JB
938};
939
940
941/* there are 40 bytes if you don't need the rateset to be kept */
942#define IEEE80211_TX_INFO_DRIVER_DATA_SIZE 40
8318d78a 943
e6a9854b
JB
944/* if you do need the rateset, then you have less space */
945#define IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE 24
1c014420 946
e6a9854b 947/* maximum number of rate stages */
e3e1a0bc 948#define IEEE80211_TX_MAX_RATES 4
870abdf6 949
0d528d85
FF
950/* maximum number of rate table entries */
951#define IEEE80211_TX_RATE_TABLE_SIZE 4
952
870abdf6 953/**
e6a9854b 954 * struct ieee80211_tx_rate - rate selection/status
870abdf6 955 *
e6a9854b
JB
956 * @idx: rate index to attempt to send with
957 * @flags: rate control flags (&enum mac80211_rate_control_flags)
e25cf4a6 958 * @count: number of tries in this rate before going to the next rate
e6a9854b
JB
959 *
960 * A value of -1 for @idx indicates an invalid rate and, if used
961 * in an array of retry rates, that no more rates should be tried.
962 *
963 * When used for transmit status reporting, the driver should
964 * always report the rate along with the flags it used.
c555b9b3
JB
965 *
966 * &struct ieee80211_tx_info contains an array of these structs
967 * in the control information, and it will be filled by the rate
968 * control algorithm according to what should be sent. For example,
969 * if this array contains, in the format { <idx>, <count> } the
b4f7f4ad
JN
970 * information::
971 *
c555b9b3 972 * { 3, 2 }, { 2, 2 }, { 1, 4 }, { -1, 0 }, { -1, 0 }
b4f7f4ad 973 *
c555b9b3
JB
974 * then this means that the frame should be transmitted
975 * up to twice at rate 3, up to twice at rate 2, and up to four
976 * times at rate 1 if it doesn't get acknowledged. Say it gets
977 * acknowledged by the peer after the fifth attempt, the status
b4f7f4ad
JN
978 * information should then contain::
979 *
c555b9b3 980 * { 3, 2 }, { 2, 2 }, { 1, 1 }, { -1, 0 } ...
b4f7f4ad 981 *
c555b9b3
JB
982 * since it was transmitted twice at rate 3, twice at rate 2
983 * and once at rate 1 after which we received an acknowledgement.
870abdf6 984 */
e6a9854b
JB
985struct ieee80211_tx_rate {
986 s8 idx;
8bc83c24
JB
987 u16 count:5,
988 flags:11;
3f30fc15 989} __packed;
870abdf6 990
8bc83c24
JB
991#define IEEE80211_MAX_TX_RETRY 31
992
993static inline void ieee80211_rate_set_vht(struct ieee80211_tx_rate *rate,
994 u8 mcs, u8 nss)
995{
996 WARN_ON(mcs & ~0xF);
6bc8312f
KB
997 WARN_ON((nss - 1) & ~0x7);
998 rate->idx = ((nss - 1) << 4) | mcs;
8bc83c24
JB
999}
1000
1001static inline u8
1002ieee80211_rate_get_vht_mcs(const struct ieee80211_tx_rate *rate)
1003{
1004 return rate->idx & 0xF;
1005}
1006
1007static inline u8
1008ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate)
1009{
6bc8312f 1010 return (rate->idx >> 4) + 1;
8bc83c24
JB
1011}
1012
e039fa4a
JB
1013/**
1014 * struct ieee80211_tx_info - skb transmit information
1015 *
1016 * This structure is placed in skb->cb for three uses:
1017 * (1) mac80211 TX control - mac80211 tells the driver what to do
1018 * (2) driver internal use (if applicable)
1019 * (3) TX status information - driver tells mac80211 what happened
1020 *
1021 * @flags: transmit info flags, defined above
e6a9854b 1022 * @band: the band to transmit on (use for checking for races)
3a25a8c8 1023 * @hw_queue: HW queue to put the frame on, skb_get_queue_mapping() gives the AC
a729cff8 1024 * @ack_frame_id: internal frame ID for TX status, used internally
6912daed 1025 * @tx_time_est: TX time estimate in units of 4us, used internally
7d419463
JB
1026 * @control: union part for control data
1027 * @control.rates: TX rates array to try
1028 * @control.rts_cts_rate_idx: rate for RTS or CTS
1029 * @control.use_rts: use RTS
1030 * @control.use_cts_prot: use RTS/CTS
1031 * @control.short_preamble: use short preamble (CCK only)
1032 * @control.skip_table: skip externally configured rate table
1033 * @control.jiffies: timestamp for expiry on powersave clients
1034 * @control.vif: virtual interface (may be NULL)
1035 * @control.hw_key: key to encrypt with (may be NULL)
1036 * @control.flags: control flags, see &enum mac80211_tx_control_flags
1037 * @control.enqueue_time: enqueue time (for iTXQs)
1038 * @driver_rates: alias to @control.rates to reserve space
1039 * @pad: padding
1040 * @rate_driver_data: driver use area if driver needs @control.rates
1041 * @status: union part for status data
1042 * @status.rates: attempted rates
1043 * @status.ack_signal: ACK signal
1044 * @status.ampdu_ack_len: AMPDU ack length
1045 * @status.ampdu_len: AMPDU length
1046 * @status.antenna: (legacy, kept only for iwlegacy)
c74114d7
FF
1047 * @status.tx_time: airtime consumed for transmission; note this is only
1048 * used for WMM AC, not for airtime fairness
7d419463
JB
1049 * @status.is_valid_ack_signal: ACK signal is valid
1050 * @status.status_driver_data: driver use area
1051 * @ack: union part for pure ACK data
1052 * @ack.cookie: cookie for the ACK
6ef307bc 1053 * @driver_data: array of driver_data pointers
599bf6a4 1054 * @ampdu_ack_len: number of acked aggregated frames.
93d95b12 1055 * relevant only if IEEE80211_TX_STAT_AMPDU was set.
599bf6a4 1056 * @ampdu_len: number of aggregated frames.
93d95b12 1057 * relevant only if IEEE80211_TX_STAT_AMPDU was set.
e039fa4a 1058 * @ack_signal: signal strength of the ACK frame
1c014420 1059 */
e039fa4a
JB
1060struct ieee80211_tx_info {
1061 /* common information */
1062 u32 flags;
f2b18bac
JB
1063 u32 band:3,
1064 ack_frame_id:13,
1065 hw_queue:4,
1066 tx_time_est:10;
1067 /* 2 free bits */
e039fa4a
JB
1068
1069 union {
1070 struct {
e6a9854b
JB
1071 union {
1072 /* rate control */
1073 struct {
1074 struct ieee80211_tx_rate rates[
1075 IEEE80211_TX_MAX_RATES];
1076 s8 rts_cts_rate_idx;
991fec09
FF
1077 u8 use_rts:1;
1078 u8 use_cts_prot:1;
0d528d85
FF
1079 u8 short_preamble:1;
1080 u8 skip_table:1;
991fec09 1081 /* 2 bytes free */
e6a9854b
JB
1082 };
1083 /* only needed before rate control */
1084 unsigned long jiffies;
1085 };
25d834e1 1086 /* NB: vif can be NULL for injected frames */
53168215 1087 struct ieee80211_vif *vif;
e039fa4a 1088 struct ieee80211_key_conf *hw_key;
af61a165 1089 u32 flags;
53168215 1090 codel_time_t enqueue_time;
e039fa4a 1091 } control;
3b79af97
JB
1092 struct {
1093 u64 cookie;
1094 } ack;
e039fa4a 1095 struct {
e6a9854b 1096 struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES];
a0f995a5 1097 s32 ack_signal;
e3e1a0bc 1098 u8 ampdu_ack_len;
599bf6a4 1099 u8 ampdu_len;
d748b464 1100 u8 antenna;
02219b3a 1101 u16 tx_time;
a78b26ff 1102 bool is_valid_ack_signal;
02219b3a 1103 void *status_driver_data[19 / sizeof(void *)];
e039fa4a 1104 } status;
e6a9854b
JB
1105 struct {
1106 struct ieee80211_tx_rate driver_rates[
1107 IEEE80211_TX_MAX_RATES];
0d528d85
FF
1108 u8 pad[4];
1109
e6a9854b
JB
1110 void *rate_driver_data[
1111 IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE / sizeof(void *)];
1112 };
1113 void *driver_data[
1114 IEEE80211_TX_INFO_DRIVER_DATA_SIZE / sizeof(void *)];
e039fa4a 1115 };
f0706e82
JB
1116};
1117
7a89233a
THJ
1118static inline u16
1119ieee80211_info_set_tx_time_est(struct ieee80211_tx_info *info, u16 tx_time_est)
1120{
1121 /* We only have 10 bits in tx_time_est, so store airtime
1122 * in increments of 4us and clamp the maximum to 2**12-1
1123 */
1124 info->tx_time_est = min_t(u16, tx_time_est, 4095) >> 2;
1125 return info->tx_time_est << 2;
1126}
1127
1128static inline u16
1129ieee80211_info_get_tx_time_est(struct ieee80211_tx_info *info)
1130{
1131 return info->tx_time_est << 2;
1132}
1133
18fb84d9 1134/**
ae4a50ee 1135 * struct ieee80211_tx_status - extended tx status info for rate control
18fb84d9
FF
1136 *
1137 * @sta: Station that the packet was transmitted for
1138 * @info: Basic tx status information
1139 * @skb: Packet skb (can be NULL if not provided by the driver)
cbe77dde 1140 * @rate: The TX rate that was used when sending the packet
f02dff93 1141 * @free_list: list where processed skbs are stored to be free'd by the driver
18fb84d9
FF
1142 */
1143struct ieee80211_tx_status {
1144 struct ieee80211_sta *sta;
1145 struct ieee80211_tx_info *info;
1146 struct sk_buff *skb;
cbe77dde 1147 struct rate_info *rate;
f02dff93 1148 struct list_head *free_list;
18fb84d9
FF
1149};
1150
c56ef672
DS
1151/**
1152 * struct ieee80211_scan_ies - descriptors for different blocks of IEs
1153 *
633e2713
DS
1154 * This structure is used to point to different blocks of IEs in HW scan
1155 * and scheduled scan. These blocks contain the IEs passed by userspace
1156 * and the ones generated by mac80211.
c56ef672
DS
1157 *
1158 * @ies: pointers to band specific IEs.
1159 * @len: lengths of band_specific IEs.
1160 * @common_ies: IEs for all bands (especially vendor specific ones)
1161 * @common_ie_len: length of the common_ies
1162 */
1163struct ieee80211_scan_ies {
57fbcce3
JB
1164 const u8 *ies[NUM_NL80211_BANDS];
1165 size_t len[NUM_NL80211_BANDS];
c56ef672
DS
1166 const u8 *common_ies;
1167 size_t common_ie_len;
1168};
1169
1170
e039fa4a
JB
1171static inline struct ieee80211_tx_info *IEEE80211_SKB_CB(struct sk_buff *skb)
1172{
1173 return (struct ieee80211_tx_info *)skb->cb;
1174}
7ac1bd6a 1175
f1d58c25
JB
1176static inline struct ieee80211_rx_status *IEEE80211_SKB_RXCB(struct sk_buff *skb)
1177{
1178 return (struct ieee80211_rx_status *)skb->cb;
1179}
1180
e6a9854b
JB
1181/**
1182 * ieee80211_tx_info_clear_status - clear TX status
1183 *
1184 * @info: The &struct ieee80211_tx_info to be cleared.
1185 *
1186 * When the driver passes an skb back to mac80211, it must report
1187 * a number of things in TX status. This function clears everything
1188 * in the TX status but the rate control information (it does clear
1189 * the count since you need to fill that in anyway).
1190 *
1191 * NOTE: You can only use this function if you do NOT use
1192 * info->driver_data! Use info->rate_driver_data
1193 * instead if you need only the less space that allows.
1194 */
1195static inline void
1196ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
1197{
1198 int i;
1199
1200 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) !=
1201 offsetof(struct ieee80211_tx_info, control.rates));
1202 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) !=
1203 offsetof(struct ieee80211_tx_info, driver_rates));
1204 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) != 8);
1205 /* clear the rate counts */
1206 for (i = 0; i < IEEE80211_TX_MAX_RATES; i++)
1207 info->status.rates[i].count = 0;
fb5f6a0e 1208 memset_after(&info->status, 0, rates);
e6a9854b
JB
1209}
1210
7ac1bd6a
JB
1211
1212/**
1213 * enum mac80211_rx_flags - receive flags
1214 *
1215 * These flags are used with the @flag member of &struct ieee80211_rx_status.
1216 * @RX_FLAG_MMIC_ERROR: Michael MIC error was reported on this frame.
1217 * Use together with %RX_FLAG_MMIC_STRIPPED.
1218 * @RX_FLAG_DECRYPTED: This frame was decrypted in hardware.
7ac1bd6a
JB
1219 * @RX_FLAG_MMIC_STRIPPED: the Michael MIC is stripped off this frame,
1220 * verification has been done by the hardware.
cef0acd4 1221 * @RX_FLAG_IV_STRIPPED: The IV and ICV are stripped from this frame.
7ac1bd6a
JB
1222 * If this flag is set, the stack cannot do any replay detection
1223 * hence the driver or hardware will have to do that.
981d94a8
JB
1224 * @RX_FLAG_PN_VALIDATED: Currently only valid for CCMP/GCMP frames, this
1225 * flag indicates that the PN was verified for replay protection.
1226 * Note that this flag is also currently only supported when a frame
1227 * is also decrypted (ie. @RX_FLAG_DECRYPTED must be set)
84ea3a18
LB
1228 * @RX_FLAG_DUP_VALIDATED: The driver should set this flag if it did
1229 * de-duplication by itself.
72abd81b
JB
1230 * @RX_FLAG_FAILED_FCS_CRC: Set this flag if the FCS check failed on
1231 * the frame.
1232 * @RX_FLAG_FAILED_PLCP_CRC: Set this flag if the PCLP check failed on
1233 * the frame.
f4bda337 1234 * @RX_FLAG_MACTIME_START: The timestamp passed in the RX status (@mactime
6ebacbb7
JB
1235 * field) is valid and contains the time the first symbol of the MPDU
1236 * was received. This is useful in monitor mode and for proper IBSS
1237 * merging.
f4bda337
TP
1238 * @RX_FLAG_MACTIME_END: The timestamp passed in the RX status (@mactime
1239 * field) is valid and contains the time the last symbol of the MPDU
1240 * (including FCS) was received.
f4a0f0c5
JB
1241 * @RX_FLAG_MACTIME_PLCP_START: The timestamp passed in the RX status (@mactime
1242 * field) is valid and contains the time the SYNC preamble was received.
fe8431f8
FF
1243 * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present.
1244 * Valid only for data frames (mainly A-MPDU)
4c298677
JB
1245 * @RX_FLAG_AMPDU_DETAILS: A-MPDU details are known, in particular the reference
1246 * number (@ampdu_reference) must be populated and be a distinct number for
1247 * each A-MPDU
4c298677
JB
1248 * @RX_FLAG_AMPDU_LAST_KNOWN: last subframe is known, should be set on all
1249 * subframes of a single A-MPDU
1250 * @RX_FLAG_AMPDU_IS_LAST: this subframe is the last subframe of the A-MPDU
1251 * @RX_FLAG_AMPDU_DELIM_CRC_ERROR: A delimiter CRC error has been detected
1252 * on this subframe
1253 * @RX_FLAG_AMPDU_DELIM_CRC_KNOWN: The delimiter CRC field is known (the CRC
1254 * is stored in the @ampdu_delimiter_crc field)
f980ebc0
SS
1255 * @RX_FLAG_MIC_STRIPPED: The mic was stripped of this packet. Decryption was
1256 * done by the hardware
17883048
GB
1257 * @RX_FLAG_ONLY_MONITOR: Report frame only to monitor interfaces without
1258 * processing it in any regular way.
1259 * This is useful if drivers offload some frames but still want to report
1260 * them for sniffing purposes.
1261 * @RX_FLAG_SKIP_MONITOR: Process and report frame to all interfaces except
1262 * monitor interfaces.
1263 * This is useful if drivers offload some frames but still want to report
1264 * them for sniffing purposes.
0cfcefef
MK
1265 * @RX_FLAG_AMSDU_MORE: Some drivers may prefer to report separate A-MSDU
1266 * subframes instead of a one huge frame for performance reasons.
1267 * All, but the last MSDU from an A-MSDU should have this flag set. E.g.
1268 * if an A-MSDU has 3 frames, the first 2 must have the flag set, while
1269 * the 3rd (last) one must not have this flag set. The flag is used to
1270 * deal with retransmission/duplication recovery properly since A-MSDU
1271 * subframes share the same sequence number. Reported subframes can be
1272 * either regular MSDU or singly A-MSDUs. Subframes must not be
1273 * interleaved with other frames.
1f7bba79
JB
1274 * @RX_FLAG_RADIOTAP_VENDOR_DATA: This frame contains vendor-specific
1275 * radiotap data in the skb->data (before the frame) as described by
1276 * the &struct ieee80211_vendor_radiotap.
f631a77b
SS
1277 * @RX_FLAG_ALLOW_SAME_PN: Allow the same PN as same packet before.
1278 * This is used for AMSDU subframes which can have the same PN as
1279 * the first subframe.
cef0acd4
DS
1280 * @RX_FLAG_ICV_STRIPPED: The ICV is stripped from this frame. CRC checking must
1281 * be done in the hardware.
7299d6f7
JB
1282 * @RX_FLAG_AMPDU_EOF_BIT: Value of the EOF bit in the A-MPDU delimiter for this
1283 * frame
1284 * @RX_FLAG_AMPDU_EOF_BIT_KNOWN: The EOF value is known
41cbb0f5
LC
1285 * @RX_FLAG_RADIOTAP_HE: HE radiotap data is present
1286 * (&struct ieee80211_radiotap_he, mac80211 will fill in
7d419463 1287 *
41cbb0f5
LC
1288 * - DATA3_DATA_MCS
1289 * - DATA3_DATA_DCM
1290 * - DATA3_CODING
1291 * - DATA5_GI
1292 * - DATA5_DATA_BW_RU_ALLOC
1293 * - DATA6_NSTS
1294 * - DATA3_STBC
7d419463 1295 *
41cbb0f5
LC
1296 * from the RX info data, so leave those zeroed when building this data)
1297 * @RX_FLAG_RADIOTAP_HE_MU: HE MU radiotap data is present
1298 * (&struct ieee80211_radiotap_he_mu)
d1332e7b 1299 * @RX_FLAG_RADIOTAP_LSIG: L-SIG radiotap data is present
c3d1f875
ST
1300 * @RX_FLAG_NO_PSDU: use the frame only for radiotap reporting, with
1301 * the "0-length PSDU" field included there. The value for it is
1302 * in &struct ieee80211_rx_status. Note that if this value isn't
1303 * known the frame shouldn't be reported.
80a915ec
FF
1304 * @RX_FLAG_8023: the frame has an 802.3 header (decap offload performed by
1305 * hardware or driver)
7ac1bd6a
JB
1306 */
1307enum mac80211_rx_flags {
4c298677
JB
1308 RX_FLAG_MMIC_ERROR = BIT(0),
1309 RX_FLAG_DECRYPTED = BIT(1),
f4a0f0c5 1310 RX_FLAG_MACTIME_PLCP_START = BIT(2),
4c298677
JB
1311 RX_FLAG_MMIC_STRIPPED = BIT(3),
1312 RX_FLAG_IV_STRIPPED = BIT(4),
1313 RX_FLAG_FAILED_FCS_CRC = BIT(5),
1314 RX_FLAG_FAILED_PLCP_CRC = BIT(6),
f4bda337 1315 RX_FLAG_MACTIME_START = BIT(7),
7fdd69c5
JB
1316 RX_FLAG_NO_SIGNAL_VAL = BIT(8),
1317 RX_FLAG_AMPDU_DETAILS = BIT(9),
1318 RX_FLAG_PN_VALIDATED = BIT(10),
1319 RX_FLAG_DUP_VALIDATED = BIT(11),
1320 RX_FLAG_AMPDU_LAST_KNOWN = BIT(12),
1321 RX_FLAG_AMPDU_IS_LAST = BIT(13),
1322 RX_FLAG_AMPDU_DELIM_CRC_ERROR = BIT(14),
1323 RX_FLAG_AMPDU_DELIM_CRC_KNOWN = BIT(15),
1324 RX_FLAG_MACTIME_END = BIT(16),
1325 RX_FLAG_ONLY_MONITOR = BIT(17),
1326 RX_FLAG_SKIP_MONITOR = BIT(18),
1327 RX_FLAG_AMSDU_MORE = BIT(19),
1328 RX_FLAG_RADIOTAP_VENDOR_DATA = BIT(20),
1329 RX_FLAG_MIC_STRIPPED = BIT(21),
1330 RX_FLAG_ALLOW_SAME_PN = BIT(22),
1331 RX_FLAG_ICV_STRIPPED = BIT(23),
7299d6f7
JB
1332 RX_FLAG_AMPDU_EOF_BIT = BIT(24),
1333 RX_FLAG_AMPDU_EOF_BIT_KNOWN = BIT(25),
41cbb0f5
LC
1334 RX_FLAG_RADIOTAP_HE = BIT(26),
1335 RX_FLAG_RADIOTAP_HE_MU = BIT(27),
d1332e7b 1336 RX_FLAG_RADIOTAP_LSIG = BIT(28),
c3d1f875 1337 RX_FLAG_NO_PSDU = BIT(29),
80a915ec 1338 RX_FLAG_8023 = BIT(30),
7ac1bd6a
JB
1339};
1340
1b8d242a 1341/**
7fdd69c5 1342 * enum mac80211_rx_encoding_flags - MCS & bandwidth flags
1b8d242a 1343 *
7fdd69c5 1344 * @RX_ENC_FLAG_SHORTPRE: Short preamble was used for this frame
7fdd69c5
JB
1345 * @RX_ENC_FLAG_SHORT_GI: Short guard interval was used
1346 * @RX_ENC_FLAG_HT_GF: This frame was received in a HT-greenfield transmission,
1347 * if the driver fills this value it should add
1348 * %IEEE80211_RADIOTAP_MCS_HAVE_FMT
7d419463 1349 * to @hw.radiotap_mcs_details to advertise that fact.
7fdd69c5
JB
1350 * @RX_ENC_FLAG_LDPC: LDPC was used
1351 * @RX_ENC_FLAG_STBC_MASK: STBC 2 bit bitmask. 1 - Nss=1, 2 - Nss=2, 3 - Nss=3
7fdd69c5 1352 * @RX_ENC_FLAG_BF: packet was beamformed
1b8d242a 1353 */
7fdd69c5
JB
1354enum mac80211_rx_encoding_flags {
1355 RX_ENC_FLAG_SHORTPRE = BIT(0),
da6a4352
JB
1356 RX_ENC_FLAG_SHORT_GI = BIT(2),
1357 RX_ENC_FLAG_HT_GF = BIT(3),
1358 RX_ENC_FLAG_STBC_MASK = BIT(4) | BIT(5),
1359 RX_ENC_FLAG_LDPC = BIT(6),
1360 RX_ENC_FLAG_BF = BIT(7),
1b8d242a
EG
1361};
1362
da6a4352
JB
1363#define RX_ENC_FLAG_STBC_SHIFT 4
1364
1365enum mac80211_rx_encoding {
1366 RX_ENC_LEGACY = 0,
1367 RX_ENC_HT,
1368 RX_ENC_VHT,
41cbb0f5 1369 RX_ENC_HE,
da6a4352 1370};
7fdd69c5 1371
7ac1bd6a
JB
1372/**
1373 * struct ieee80211_rx_status - receive status
1374 *
1375 * The low-level driver should provide this information (the subset
1376 * supported by hardware) to the 802.11 code with each received
f1d58c25 1377 * frame, in the skb's control buffer (cb).
566bfe5a 1378 *
c132bec3
BR
1379 * @mactime: value in microseconds of the 64-bit Time Synchronization Function
1380 * (TSF) timer when the first data symbol (MPDU) arrived at the hardware.
162dd6a7
JB
1381 * @boottime_ns: CLOCK_BOOTTIME timestamp the frame was received at, this is
1382 * needed only for beacons and probe responses that update the scan cache.
8c358bcd
JB
1383 * @device_timestamp: arbitrary timestamp for the device, mac80211 doesn't use
1384 * it but can store it and pass it back to the driver for synchronisation
8318d78a 1385 * @band: the active band when this frame was received
7ac1bd6a 1386 * @freq: frequency the radio was tuned to when receiving this frame, in MHz
4352a4d7
JB
1387 * This field must be set for management frames, but isn't strictly needed
1388 * for data (other) frames - for those it only affects radiotap reporting.
3b23c184 1389 * @freq_offset: @freq has a positive offset of 500Khz.
566bfe5a
BR
1390 * @signal: signal strength when receiving this frame, either in dBm, in dB or
1391 * unspecified depending on the hardware capabilities flags
1392 * @IEEE80211_HW_SIGNAL_*
ef0621e8
FF
1393 * @chains: bitmask of receive chains for which separate signal strength
1394 * values were filled.
1395 * @chain_signal: per-chain signal strength, in dBm (unlike @signal, doesn't
1396 * support dB or unspecified units)
7ac1bd6a 1397 * @antenna: antenna used
0fb8ca45 1398 * @rate_idx: index of data rate into band's supported rates or MCS index if
5614618e 1399 * HT or VHT is used (%RX_FLAG_HT/%RX_FLAG_VHT)
8613c948 1400 * @nss: number of streams (VHT and HE only)
b4f7f4ad 1401 * @flag: %RX_FLAG_\*
da6a4352
JB
1402 * @encoding: &enum mac80211_rx_encoding
1403 * @bw: &enum rate_info_bw
7fdd69c5 1404 * @enc_flags: uses bits from &enum mac80211_rx_encoding_flags
41cbb0f5
LC
1405 * @he_ru: HE RU, from &enum nl80211_he_ru_alloc
1406 * @he_gi: HE GI, from &enum nl80211_he_gi
1407 * @he_dcm: HE DCM value
554891e6 1408 * @rx_flags: internal RX flags for mac80211
4c298677
JB
1409 * @ampdu_reference: A-MPDU reference number, must be a different value for
1410 * each A-MPDU but the same for each subframe within one A-MPDU
1411 * @ampdu_delimiter_crc: A-MPDU delimiter CRC
c3d1f875 1412 * @zero_length_psdu_type: radiotap type of the 0-length PSDU
7ac1bd6a 1413 */
f0706e82
JB
1414struct ieee80211_rx_status {
1415 u64 mactime;
162dd6a7 1416 u64 boottime_ns;
8c358bcd 1417 u32 device_timestamp;
4c298677 1418 u32 ampdu_reference;
7fdd69c5 1419 u32 flag;
3b23c184 1420 u16 freq: 13, freq_offset: 1;
da6a4352 1421 u8 enc_flags;
41cbb0f5
LC
1422 u8 encoding:2, bw:3, he_ru:3;
1423 u8 he_gi:2, he_dcm:1;
30f42292 1424 u8 rate_idx;
8613c948 1425 u8 nss;
30f42292
JB
1426 u8 rx_flags;
1427 u8 band;
1428 u8 antenna;
1429 s8 signal;
ef0621e8
FF
1430 u8 chains;
1431 s8 chain_signal[IEEE80211_MAX_CHAINS];
4c298677 1432 u8 ampdu_delimiter_crc;
c3d1f875 1433 u8 zero_length_psdu_type;
f0706e82
JB
1434};
1435
3b23c184
TP
1436static inline u32
1437ieee80211_rx_status_to_khz(struct ieee80211_rx_status *rx_status)
1438{
1439 return MHZ_TO_KHZ(rx_status->freq) +
1440 (rx_status->freq_offset ? 500 : 0);
1441}
1442
1f7bba79
JB
1443/**
1444 * struct ieee80211_vendor_radiotap - vendor radiotap data information
1445 * @present: presence bitmap for this vendor namespace
1446 * (this could be extended in the future if any vendor needs more
1447 * bits, the radiotap spec does allow for that)
1448 * @align: radiotap vendor namespace alignment. This defines the needed
1449 * alignment for the @data field below, not for the vendor namespace
1450 * description itself (which has a fixed 2-byte alignment)
1451 * Must be a power of two, and be set to at least 1!
1452 * @oui: radiotap vendor namespace OUI
1453 * @subns: radiotap vendor sub namespace
1454 * @len: radiotap vendor sub namespace skip length, if alignment is done
1455 * then that's added to this, i.e. this is only the length of the
1456 * @data field.
1457 * @pad: number of bytes of padding after the @data, this exists so that
1458 * the skb data alignment can be preserved even if the data has odd
1459 * length
1460 * @data: the actual vendor namespace data
1461 *
1462 * This struct, including the vendor data, goes into the skb->data before
1463 * the 802.11 header. It's split up in mac80211 using the align/oui/subns
1464 * data.
1465 */
1466struct ieee80211_vendor_radiotap {
1467 u32 present;
1468 u8 align;
1469 u8 oui[3];
1470 u8 subns;
1471 u8 pad;
1472 u16 len;
1473 u8 data[];
1474} __packed;
1475
6b301cdf
JB
1476/**
1477 * enum ieee80211_conf_flags - configuration flags
1478 *
1479 * Flags to define PHY configuration options
1480 *
0869aea0
JB
1481 * @IEEE80211_CONF_MONITOR: there's a monitor interface present -- use this
1482 * to determine for example whether to calculate timestamps for packets
1483 * or not, do not use instead of filter flags!
c99445b1
KV
1484 * @IEEE80211_CONF_PS: Enable 802.11 power save mode (managed mode only).
1485 * This is the power save mode defined by IEEE 802.11-2007 section 11.2,
1486 * meaning that the hardware still wakes up for beacons, is able to
1487 * transmit frames and receive the possible acknowledgment frames.
1488 * Not to be confused with hardware specific wakeup/sleep states,
1489 * driver is responsible for that. See the section "Powersave support"
1490 * for more.
5cff20e6
JB
1491 * @IEEE80211_CONF_IDLE: The device is running, but idle; if the flag is set
1492 * the driver should be prepared to handle configuration requests but
1493 * may turn the device off as much as possible. Typically, this flag will
1494 * be set when an interface is set UP but not associated or scanning, but
1495 * it can also be unset in that case when monitor interfaces are active.
45521245
FF
1496 * @IEEE80211_CONF_OFFCHANNEL: The device is currently not on its main
1497 * operating channel.
6b301cdf
JB
1498 */
1499enum ieee80211_conf_flags {
0869aea0 1500 IEEE80211_CONF_MONITOR = (1<<0),
ae5eb026 1501 IEEE80211_CONF_PS = (1<<1),
5cff20e6 1502 IEEE80211_CONF_IDLE = (1<<2),
45521245 1503 IEEE80211_CONF_OFFCHANNEL = (1<<3),
6b301cdf 1504};
f0706e82 1505
7a5158ef 1506
e8975581
JB
1507/**
1508 * enum ieee80211_conf_changed - denotes which configuration changed
1509 *
e8975581 1510 * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed
0869aea0 1511 * @IEEE80211_CONF_CHANGE_MONITOR: the monitor flag changed
e255d5eb 1512 * @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed
e8975581 1513 * @IEEE80211_CONF_CHANGE_POWER: the TX power changed
4797938c 1514 * @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed
9124b077 1515 * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed
5cff20e6 1516 * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed
0f78231b 1517 * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed
04ecd257
JB
1518 * Note that this is only valid if channel contexts are not used,
1519 * otherwise each channel context has the number of chains listed.
e8975581
JB
1520 */
1521enum ieee80211_conf_changed {
0f78231b 1522 IEEE80211_CONF_CHANGE_SMPS = BIT(1),
e8975581 1523 IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2),
0869aea0 1524 IEEE80211_CONF_CHANGE_MONITOR = BIT(3),
e8975581 1525 IEEE80211_CONF_CHANGE_PS = BIT(4),
e255d5eb
JB
1526 IEEE80211_CONF_CHANGE_POWER = BIT(5),
1527 IEEE80211_CONF_CHANGE_CHANNEL = BIT(6),
1528 IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7),
5cff20e6 1529 IEEE80211_CONF_CHANGE_IDLE = BIT(8),
e8975581
JB
1530};
1531
0f78231b
JB
1532/**
1533 * enum ieee80211_smps_mode - spatial multiplexing power save mode
1534 *
9d173fc5
KV
1535 * @IEEE80211_SMPS_AUTOMATIC: automatic
1536 * @IEEE80211_SMPS_OFF: off
1537 * @IEEE80211_SMPS_STATIC: static
1538 * @IEEE80211_SMPS_DYNAMIC: dynamic
1539 * @IEEE80211_SMPS_NUM_MODES: internal, don't use
0f78231b
JB
1540 */
1541enum ieee80211_smps_mode {
1542 IEEE80211_SMPS_AUTOMATIC,
1543 IEEE80211_SMPS_OFF,
1544 IEEE80211_SMPS_STATIC,
1545 IEEE80211_SMPS_DYNAMIC,
1546
1547 /* keep last */
1548 IEEE80211_SMPS_NUM_MODES,
1549};
1550
f0706e82
JB
1551/**
1552 * struct ieee80211_conf - configuration of the device
1553 *
1554 * This struct indicates how the driver shall configure the hardware.
1555 *
04fe2037
JB
1556 * @flags: configuration flags defined above
1557 *
ea95bba4 1558 * @listen_interval: listen interval in units of beacon interval
56007a02
JB
1559 * @ps_dtim_period: The DTIM period of the AP we're connected to, for use
1560 * in power saving. Power saving will not be enabled until a beacon
1561 * has been received and the DTIM period is known.
04fe2037
JB
1562 * @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the
1563 * powersave documentation below. This variable is valid only when
1564 * the CONF_PS flag is set.
1565 *
1ea6f9c0
JB
1566 * @power_level: requested transmit power (in dBm), backward compatibility
1567 * value only that is set to the minimum of all interfaces
04fe2037 1568 *
675a0b04 1569 * @chandef: the channel definition to tune to
164eb02d 1570 * @radar_enabled: whether radar detection is enabled
04fe2037 1571 *
9124b077 1572 * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame
ad24b0da
JB
1573 * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11,
1574 * but actually means the number of transmissions not the number of retries
9124b077 1575 * @short_frame_max_tx_count: Maximum number of transmissions for a "short"
ad24b0da
JB
1576 * frame, called "dot11ShortRetryLimit" in 802.11, but actually means the
1577 * number of transmissions not the number of retries
0f78231b
JB
1578 *
1579 * @smps_mode: spatial multiplexing powersave mode; note that
1580 * %IEEE80211_SMPS_STATIC is used when the device is not
04ecd257
JB
1581 * configured for an HT channel.
1582 * Note that this is only valid if channel contexts are not used,
1583 * otherwise each channel context has the number of chains listed.
f0706e82
JB
1584 */
1585struct ieee80211_conf {
6b301cdf 1586 u32 flags;
ff616381 1587 int power_level, dynamic_ps_timeout;
10816d40 1588
e8975581 1589 u16 listen_interval;
56007a02 1590 u8 ps_dtim_period;
e8975581 1591
9124b077
JB
1592 u8 long_frame_max_tx_count, short_frame_max_tx_count;
1593
675a0b04 1594 struct cfg80211_chan_def chandef;
164eb02d 1595 bool radar_enabled;
0f78231b 1596 enum ieee80211_smps_mode smps_mode;
f0706e82
JB
1597};
1598
5ce6e438
JB
1599/**
1600 * struct ieee80211_channel_switch - holds the channel switch data
1601 *
1602 * The information provided in this structure is required for channel switch
1603 * operation.
1604 *
1605 * @timestamp: value in microseconds of the 64-bit Time Synchronization
1606 * Function (TSF) timer when the frame containing the channel switch
1607 * announcement was received. This is simply the rx.mactime parameter
1608 * the driver passed into mac80211.
2ba45384
LC
1609 * @device_timestamp: arbitrary timestamp for the device, this is the
1610 * rx.device_timestamp parameter the driver passed to mac80211.
5ce6e438
JB
1611 * @block_tx: Indicates whether transmission must be blocked before the
1612 * scheduled channel switch, as indicated by the AP.
85220d71 1613 * @chandef: the new channel to switch to
5ce6e438 1614 * @count: the number of TBTT's until the channel switch event
ee145775
SS
1615 * @delay: maximum delay between the time the AP transmitted the last beacon in
1616 * current channel and the expected time of the first beacon in the new
1617 * channel, expressed in TU.
5ce6e438
JB
1618 */
1619struct ieee80211_channel_switch {
1620 u64 timestamp;
2ba45384 1621 u32 device_timestamp;
5ce6e438 1622 bool block_tx;
85220d71 1623 struct cfg80211_chan_def chandef;
5ce6e438 1624 u8 count;
ee145775 1625 u32 delay;
5ce6e438
JB
1626};
1627
c1288b12
JB
1628/**
1629 * enum ieee80211_vif_flags - virtual interface flags
1630 *
1631 * @IEEE80211_VIF_BEACON_FILTER: the device performs beacon filtering
1632 * on this virtual interface to avoid unnecessary CPU wakeups
ea086359
JB
1633 * @IEEE80211_VIF_SUPPORTS_CQM_RSSI: the device can do connection quality
1634 * monitoring on this virtual interface -- i.e. it can monitor
1635 * connection quality related parameters, such as the RSSI level and
1636 * provide notifications if configured trigger levels are reached.
848955cc
JB
1637 * @IEEE80211_VIF_SUPPORTS_UAPSD: The device can do U-APSD for this
1638 * interface. This flag should be set during interface addition,
1639 * but may be set/cleared as late as authentication to an AP. It is
1640 * only valid for managed/station mode interfaces.
b115b972
JD
1641 * @IEEE80211_VIF_GET_NOA_UPDATE: request to handle NOA attributes
1642 * and send P2P_PS notification to the driver if NOA changed, even
1643 * this is not pure P2P vif.
c1288b12
JB
1644 */
1645enum ieee80211_vif_flags {
1646 IEEE80211_VIF_BEACON_FILTER = BIT(0),
ea086359 1647 IEEE80211_VIF_SUPPORTS_CQM_RSSI = BIT(1),
848955cc 1648 IEEE80211_VIF_SUPPORTS_UAPSD = BIT(2),
b115b972 1649 IEEE80211_VIF_GET_NOA_UPDATE = BIT(3),
c1288b12
JB
1650};
1651
6aea26ce
FF
1652
1653/**
1654 * enum ieee80211_offload_flags - virtual interface offload flags
1655 *
1656 * @IEEE80211_OFFLOAD_ENCAP_ENABLED: tx encapsulation offload is enabled
1657 * The driver supports sending frames passed as 802.3 frames by mac80211.
1658 * It must also support sending 802.11 packets for the same interface.
1659 * @IEEE80211_OFFLOAD_ENCAP_4ADDR: support 4-address mode encapsulation offload
80a915ec
FF
1660 * @IEEE80211_OFFLOAD_DECAP_ENABLED: rx encapsulation offload is enabled
1661 * The driver supports passing received 802.11 frames as 802.3 frames to
1662 * mac80211.
6aea26ce
FF
1663 */
1664
1665enum ieee80211_offload_flags {
1666 IEEE80211_OFFLOAD_ENCAP_ENABLED = BIT(0),
1667 IEEE80211_OFFLOAD_ENCAP_4ADDR = BIT(1),
80a915ec 1668 IEEE80211_OFFLOAD_DECAP_ENABLED = BIT(2),
6aea26ce
FF
1669};
1670
32bfd35d
JB
1671/**
1672 * struct ieee80211_vif - per-interface data
1673 *
1674 * Data in this structure is continually present for driver
1675 * use during the life of a virtual interface.
1676 *
51fb61e7 1677 * @type: type of this virtual interface
bda3933a
JB
1678 * @bss_conf: BSS configuration for this interface, either our own
1679 * or the BSS we're associated to
47846c9b 1680 * @addr: address of this interface
2ca27bcf
JB
1681 * @p2p: indicates whether this AP or STA interface is a p2p
1682 * interface, i.e. a GO or p2p-sta respectively
59af6928
MK
1683 * @csa_active: marks whether a channel switch is going on. Internally it is
1684 * write-protected by sdata_lock and local->mtx so holding either is fine
1685 * for read access.
b5a33d52 1686 * @mu_mimo_owner: indicates interface owns MU-MIMO capability
c1288b12
JB
1687 * @driver_flags: flags/capabilities the driver has for this interface,
1688 * these need to be set (or cleared) when the interface is added
1689 * or, if supported by the driver, the interface type is changed
1690 * at runtime, mac80211 will never touch this field
6aea26ce
FF
1691 * @offloaad_flags: hardware offload capabilities/flags for this interface.
1692 * These are initialized by mac80211 before calling .add_interface,
1693 * .change_interface or .update_vif_offload and updated by the driver
1694 * within these ops, based on supported features or runtime change
1695 * restrictions.
3a25a8c8
JB
1696 * @hw_queue: hardware queue for each AC
1697 * @cab_queue: content-after-beacon (DTIM beacon really) queue, AP mode only
d01a1e65
MK
1698 * @chanctx_conf: The channel context this interface is assigned to, or %NULL
1699 * when it is not assigned. This pointer is RCU-protected due to the TX
1700 * path needing to access it; even though the netdev carrier will always
1701 * be off when it is %NULL there can still be races and packets could be
1702 * processed after it switches back to %NULL.
ddbfe860 1703 * @debugfs_dir: debugfs dentry, can be used by drivers to create own per
ad24b0da 1704 * interface debug files. Note that it will be NULL for the virtual
ddbfe860 1705 * monitor interface (if that is requested.)
1b09b556
AO
1706 * @probe_req_reg: probe requests should be reported to mac80211 for this
1707 * interface.
873b1cf6
JM
1708 * @rx_mcast_action_reg: multicast Action frames should be reported to mac80211
1709 * for this interface.
32bfd35d 1710 * @drv_priv: data area for driver use, will always be aligned to
b4f7f4ad 1711 * sizeof(void \*).
ba8c3d6f 1712 * @txq: the multicast data TX queue (if driver uses the TXQ abstraction)
21a5d4c3
MP
1713 * @txqs_stopped: per AC flag to indicate that intermediate TXQs are stopped,
1714 * protected by fq->lock.
7fba53eb
JB
1715 * @offload_flags: 802.3 -> 802.11 enapsulation offload flags, see
1716 * &enum ieee80211_offload_flags.
5f9404ab
JC
1717 * @color_change_active: marks whether a color change is ongoing. Internally it is
1718 * write-protected by sdata_lock and local->mtx so holding either is fine
1719 * for read access.
1720 * @color_change_color: the bss color that will be used after the change.
17196425 1721 * @mbssid_tx_vif: Pointer to the transmitting interface if MBSSID is enabled.
32bfd35d
JB
1722 */
1723struct ieee80211_vif {
05c914fe 1724 enum nl80211_iftype type;
bda3933a 1725 struct ieee80211_bss_conf bss_conf;
a3e2f4b6 1726 u8 addr[ETH_ALEN] __aligned(2);
2ca27bcf 1727 bool p2p;
73da7d5b 1728 bool csa_active;
b5a33d52 1729 bool mu_mimo_owner;
3a25a8c8
JB
1730
1731 u8 cab_queue;
1732 u8 hw_queue[IEEE80211_NUM_ACS];
1733
ba8c3d6f
FF
1734 struct ieee80211_txq *txq;
1735
d01a1e65
MK
1736 struct ieee80211_chanctx_conf __rcu *chanctx_conf;
1737
c1288b12 1738 u32 driver_flags;
6aea26ce 1739 u32 offload_flags;
3a25a8c8 1740
ddbfe860
SG
1741#ifdef CONFIG_MAC80211_DEBUGFS
1742 struct dentry *debugfs_dir;
1743#endif
1744
6cd536fe 1745 bool probe_req_reg;
873b1cf6 1746 bool rx_mcast_action_reg;
1b09b556 1747
21a5d4c3
MP
1748 bool txqs_stopped[IEEE80211_NUM_ACS];
1749
5f9404ab
JC
1750 bool color_change_active;
1751 u8 color_change_color;
1752
17196425
JC
1753 struct ieee80211_vif *mbssid_tx_vif;
1754
32bfd35d 1755 /* must be last */
3c23215b 1756 u8 drv_priv[] __aligned(sizeof(void *));
32bfd35d
JB
1757};
1758
902acc78
JB
1759static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif)
1760{
1761#ifdef CONFIG_MAC80211_MESH
05c914fe 1762 return vif->type == NL80211_IFTYPE_MESH_POINT;
902acc78
JB
1763#endif
1764 return false;
1765}
1766
ad7e718c
JB
1767/**
1768 * wdev_to_ieee80211_vif - return a vif struct from a wdev
1769 * @wdev: the wdev to get the vif for
1770 *
1771 * This can be used by mac80211 drivers with direct cfg80211 APIs
1772 * (like the vendor commands) that get a wdev.
1773 *
1774 * Note that this function may return %NULL if the given wdev isn't
1775 * associated with a vif that the driver knows about (e.g. monitor
1776 * or AP_VLAN interfaces.)
1777 */
1778struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev);
1779
dc5a1ad7
EG
1780/**
1781 * ieee80211_vif_to_wdev - return a wdev struct from a vif
1782 * @vif: the vif to get the wdev for
1783 *
1784 * This can be used by mac80211 drivers with direct cfg80211 APIs
1785 * (like the vendor commands) that needs to get the wdev for a vif.
f30386a8 1786 * This can also be useful to get the netdev associated to a vif.
dc5a1ad7
EG
1787 */
1788struct wireless_dev *ieee80211_vif_to_wdev(struct ieee80211_vif *vif);
1789
7ac1bd6a
JB
1790/**
1791 * enum ieee80211_key_flags - key flags
1792 *
1793 * These flags are used for communication about keys between the driver
1794 * and mac80211, with the @flags parameter of &struct ieee80211_key_conf.
1795 *
7ac1bd6a
JB
1796 * @IEEE80211_KEY_FLAG_GENERATE_IV: This flag should be set by the
1797 * driver to indicate that it requires IV generation for this
db12847c
IY
1798 * particular key. Setting this flag does not necessarily mean that SKBs
1799 * will have sufficient tailroom for ICV or MIC.
7ac1bd6a
JB
1800 * @IEEE80211_KEY_FLAG_GENERATE_MMIC: This flag should be set by
1801 * the driver for a TKIP key if it requires Michael MIC
1802 * generation in software.
c6adbd21
ID
1803 * @IEEE80211_KEY_FLAG_PAIRWISE: Set by mac80211, this flag indicates
1804 * that the key is pairwise rather then a shared key.
e548c49e 1805 * @IEEE80211_KEY_FLAG_SW_MGMT_TX: This flag should be set by the driver for a
00b9cfa3
JM
1806 * CCMP/GCMP key if it requires CCMP/GCMP encryption of management frames
1807 * (MFP) to be done in software.
077a9154 1808 * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver
ee70108f 1809 * if space should be prepared for the IV, but the IV
077a9154 1810 * itself should not be generated. Do not set together with
db12847c
IY
1811 * @IEEE80211_KEY_FLAG_GENERATE_IV on the same key. Setting this flag does
1812 * not necessarily mean that SKBs will have sufficient tailroom for ICV or
1813 * MIC.
e548c49e
JB
1814 * @IEEE80211_KEY_FLAG_RX_MGMT: This key will be used to decrypt received
1815 * management frames. The flag can help drivers that have a hardware
1816 * crypto implementation that doesn't deal with management frames
1817 * properly by allowing them to not upload the keys to hardware and
1818 * fall back to software crypto. Note that this flag deals only with
1819 * RX, if your crypto engine can't deal with TX you can also set the
1820 * %IEEE80211_KEY_FLAG_SW_MGMT_TX flag to encrypt such frames in SW.
17d38fa8 1821 * @IEEE80211_KEY_FLAG_GENERATE_IV_MGMT: This flag should be set by the
00b9cfa3 1822 * driver for a CCMP/GCMP key to indicate that is requires IV generation
ae4a50ee 1823 * only for management frames (MFP).
db12847c
IY
1824 * @IEEE80211_KEY_FLAG_RESERVE_TAILROOM: This flag should be set by the
1825 * driver for a key to indicate that sufficient tailroom must always
1826 * be reserved for ICV or MIC, even when HW encryption is enabled.
9de18d81
DS
1827 * @IEEE80211_KEY_FLAG_PUT_MIC_SPACE: This flag should be set by the driver for
1828 * a TKIP key if it only requires MIC space. Do not set together with
1829 * @IEEE80211_KEY_FLAG_GENERATE_MMIC on the same key.
96fc6efb 1830 * @IEEE80211_KEY_FLAG_NO_AUTO_TX: Key needs explicit Tx activation.
a0b4496a
LB
1831 * @IEEE80211_KEY_FLAG_GENERATE_MMIE: This flag should be set by the driver
1832 * for a AES_CMAC key to indicate that it requires sequence number
1833 * generation only
7848ba7d 1834 */
7ac1bd6a 1835enum ieee80211_key_flags {
17d38fa8
MK
1836 IEEE80211_KEY_FLAG_GENERATE_IV_MGMT = BIT(0),
1837 IEEE80211_KEY_FLAG_GENERATE_IV = BIT(1),
1838 IEEE80211_KEY_FLAG_GENERATE_MMIC = BIT(2),
1839 IEEE80211_KEY_FLAG_PAIRWISE = BIT(3),
1840 IEEE80211_KEY_FLAG_SW_MGMT_TX = BIT(4),
1841 IEEE80211_KEY_FLAG_PUT_IV_SPACE = BIT(5),
1842 IEEE80211_KEY_FLAG_RX_MGMT = BIT(6),
db12847c 1843 IEEE80211_KEY_FLAG_RESERVE_TAILROOM = BIT(7),
9de18d81 1844 IEEE80211_KEY_FLAG_PUT_MIC_SPACE = BIT(8),
96fc6efb 1845 IEEE80211_KEY_FLAG_NO_AUTO_TX = BIT(9),
a0b4496a 1846 IEEE80211_KEY_FLAG_GENERATE_MMIE = BIT(10),
7ac1bd6a 1847};
11a843b7 1848
7ac1bd6a
JB
1849/**
1850 * struct ieee80211_key_conf - key information
1851 *
1852 * This key information is given by mac80211 to the driver by
1853 * the set_key() callback in &struct ieee80211_ops.
1854 *
1855 * @hw_key_idx: To be set by the driver, this is the key index the driver
1856 * wants to be given when a frame is transmitted and needs to be
6a7664d4 1857 * encrypted in hardware.
97359d12 1858 * @cipher: The key's cipher suite selector.
f8079d43
EP
1859 * @tx_pn: PN used for TX keys, may be used by the driver as well if it
1860 * needs to do software PN assignment by itself (e.g. due to TSO)
7ac1bd6a
JB
1861 * @flags: key flags, see &enum ieee80211_key_flags.
1862 * @keyidx: the key index (0-3)
1863 * @keylen: key material length
ffd7891d
LR
1864 * @key: key material. For ALG_TKIP the key is encoded as a 256-bit (32 byte)
1865 * data block:
1866 * - Temporal Encryption Key (128 bits)
1867 * - Temporal Authenticator Tx MIC Key (64 bits)
1868 * - Temporal Authenticator Rx MIC Key (64 bits)
dc822b5d
JB
1869 * @icv_len: The ICV length for this key type
1870 * @iv_len: The IV length for this key type
7ac1bd6a 1871 */
f0706e82 1872struct ieee80211_key_conf {
db388a56 1873 atomic64_t tx_pn;
97359d12 1874 u32 cipher;
76708dee
FF
1875 u8 icv_len;
1876 u8 iv_len;
6a7664d4 1877 u8 hw_key_idx;
11a843b7 1878 s8 keyidx;
9de18d81 1879 u16 flags;
11a843b7 1880 u8 keylen;
3c23215b 1881 u8 key[];
f0706e82
JB
1882};
1883
a31cf1c6
JB
1884#define IEEE80211_MAX_PN_LEN 16
1885
f8079d43
EP
1886#define TKIP_PN_TO_IV16(pn) ((u16)(pn & 0xffff))
1887#define TKIP_PN_TO_IV32(pn) ((u32)((pn >> 16) & 0xffffffff))
1888
9352c19f
JB
1889/**
1890 * struct ieee80211_key_seq - key sequence counter
1891 *
1892 * @tkip: TKIP data, containing IV32 and IV16 in host byte order
1893 * @ccmp: PN data, most significant byte first (big endian,
1894 * reverse order than in packet)
1895 * @aes_cmac: PN data, most significant byte first (big endian,
1896 * reverse order than in packet)
1897 * @aes_gmac: PN data, most significant byte first (big endian,
1898 * reverse order than in packet)
1899 * @gcmp: PN data, most significant byte first (big endian,
1900 * reverse order than in packet)
a31cf1c6 1901 * @hw: data for HW-only (e.g. cipher scheme) keys
9352c19f
JB
1902 */
1903struct ieee80211_key_seq {
1904 union {
1905 struct {
1906 u32 iv32;
1907 u16 iv16;
1908 } tkip;
1909 struct {
1910 u8 pn[6];
1911 } ccmp;
1912 struct {
1913 u8 pn[6];
1914 } aes_cmac;
1915 struct {
1916 u8 pn[6];
1917 } aes_gmac;
1918 struct {
1919 u8 pn[6];
1920 } gcmp;
a31cf1c6
JB
1921 struct {
1922 u8 seq[IEEE80211_MAX_PN_LEN];
1923 u8 seq_len;
1924 } hw;
9352c19f
JB
1925 };
1926};
1927
2475b1cc
MS
1928/**
1929 * struct ieee80211_cipher_scheme - cipher scheme
1930 *
1931 * This structure contains a cipher scheme information defining
1932 * the secure packet crypto handling.
1933 *
1934 * @cipher: a cipher suite selector
1935 * @iftype: a cipher iftype bit mask indicating an allowed cipher usage
1936 * @hdr_len: a length of a security header used the cipher
1937 * @pn_len: a length of a packet number in the security header
1938 * @pn_off: an offset of pn from the beginning of the security header
1939 * @key_idx_off: an offset of key index byte in the security header
1940 * @key_idx_mask: a bit mask of key_idx bits
1941 * @key_idx_shift: a bit shift needed to get key_idx
1942 * key_idx value calculation:
1943 * (sec_header_base[key_idx_off] & key_idx_mask) >> key_idx_shift
1944 * @mic_len: a mic length in bytes
1945 */
1946struct ieee80211_cipher_scheme {
1947 u32 cipher;
1948 u16 iftype;
1949 u8 hdr_len;
1950 u8 pn_len;
1951 u8 pn_off;
1952 u8 key_idx_off;
1953 u8 key_idx_mask;
1954 u8 key_idx_shift;
1955 u8 mic_len;
1956};
1957
7ac1bd6a
JB
1958/**
1959 * enum set_key_cmd - key command
1960 *
1961 * Used with the set_key() callback in &struct ieee80211_ops, this
1962 * indicates whether a key is being removed or added.
1963 *
1964 * @SET_KEY: a key is set
1965 * @DISABLE_KEY: a key must be disabled
1966 */
ea49c359 1967enum set_key_cmd {
11a843b7 1968 SET_KEY, DISABLE_KEY,
ea49c359 1969};
f0706e82 1970
f09603a2
JB
1971/**
1972 * enum ieee80211_sta_state - station state
1973 *
1974 * @IEEE80211_STA_NOTEXIST: station doesn't exist at all,
1975 * this is a special state for add/remove transitions
1976 * @IEEE80211_STA_NONE: station exists without special state
1977 * @IEEE80211_STA_AUTH: station is authenticated
1978 * @IEEE80211_STA_ASSOC: station is associated
1979 * @IEEE80211_STA_AUTHORIZED: station is authorized (802.1X)
1980 */
1981enum ieee80211_sta_state {
1982 /* NOTE: These need to be ordered correctly! */
1983 IEEE80211_STA_NOTEXIST,
1984 IEEE80211_STA_NONE,
1985 IEEE80211_STA_AUTH,
1986 IEEE80211_STA_ASSOC,
1987 IEEE80211_STA_AUTHORIZED,
1988};
1989
e1a0c6b3
JB
1990/**
1991 * enum ieee80211_sta_rx_bandwidth - station RX bandwidth
1992 * @IEEE80211_STA_RX_BW_20: station can only receive 20 MHz
1993 * @IEEE80211_STA_RX_BW_40: station can receive up to 40 MHz
1994 * @IEEE80211_STA_RX_BW_80: station can receive up to 80 MHz
1995 * @IEEE80211_STA_RX_BW_160: station can receive up to 160 MHz
1996 * (including 80+80 MHz)
1997 *
1998 * Implementation note: 20 must be zero to be initialized
1999 * correctly, the values must be sorted.
2000 */
2001enum ieee80211_sta_rx_bandwidth {
2002 IEEE80211_STA_RX_BW_20 = 0,
2003 IEEE80211_STA_RX_BW_40,
2004 IEEE80211_STA_RX_BW_80,
2005 IEEE80211_STA_RX_BW_160,
2006};
2007
0d528d85
FF
2008/**
2009 * struct ieee80211_sta_rates - station rate selection table
2010 *
2011 * @rcu_head: RCU head used for freeing the table on update
03f831a6 2012 * @rate: transmit rates/flags to be used by default.
0d528d85
FF
2013 * Overriding entries per-packet is possible by using cb tx control.
2014 */
2015struct ieee80211_sta_rates {
2016 struct rcu_head rcu_head;
2017 struct {
2018 s8 idx;
2019 u8 count;
2020 u8 count_cts;
2021 u8 count_rts;
2022 u16 flags;
2023 } rate[IEEE80211_TX_RATE_TABLE_SIZE];
2024};
2025
ba905bf4
ARN
2026/**
2027 * struct ieee80211_sta_txpwr - station txpower configuration
2028 *
2029 * Used to configure txpower for station.
2030 *
2031 * @power: indicates the tx power, in dBm, to be used when sending data frames
2032 * to the STA.
2033 * @type: In particular if TPC %type is NL80211_TX_POWER_LIMITED then tx power
2034 * will be less than or equal to specified from userspace, whereas if TPC
2035 * %type is NL80211_TX_POWER_AUTOMATIC then it indicates default tx power.
2036 * NL80211_TX_POWER_FIXED is not a valid configuration option for
2037 * per peer TPC.
2038 */
2039struct ieee80211_sta_txpwr {
2040 s16 power;
2041 enum nl80211_tx_power_setting type;
2042};
2043
17741cdc
JB
2044/**
2045 * struct ieee80211_sta - station table entry
2046 *
2047 * A station table entry represents a station we are possibly
2048 * communicating with. Since stations are RCU-managed in
2049 * mac80211, any ieee80211_sta pointer you get access to must
2050 * either be protected by rcu_read_lock() explicitly or implicitly,
2051 * or you must take good care to not use such a pointer after a
34e89507 2052 * call to your sta_remove callback that removed it.
17741cdc
JB
2053 *
2054 * @addr: MAC address
2055 * @aid: AID we assigned to the station if we're an AP
323ce79a 2056 * @supp_rates: Bitmap of supported rates (per band)
55d942f4
JB
2057 * @ht_cap: HT capabilities of this STA; restricted to our own capabilities
2058 * @vht_cap: VHT capabilities of this STA; restricted to our own capabilities
41cbb0f5 2059 * @he_cap: HE capabilities of this STA
1bb9a8a4 2060 * @he_6ghz_capa: on 6 GHz, holds the HE 6 GHz band capabilities
480dd46b
MA
2061 * @max_rx_aggregation_subframes: maximal amount of frames in a single AMPDU
2062 * that this station is allowed to transmit to us.
2063 * Can be modified by driver.
527871d7
JB
2064 * @wme: indicates whether the STA supports QoS/WME (if local devices does,
2065 * otherwise always false)
17741cdc 2066 * @drv_priv: data area for driver use, will always be aligned to
b4f7f4ad 2067 * sizeof(void \*), size is determined in hw information.
910868db 2068 * @uapsd_queues: bitmap of queues configured for uapsd. Only valid
f438ceb8
EG
2069 * if wme is supported. The bits order is like in
2070 * IEEE80211_WMM_IE_STA_QOSINFO_AC_*.
910868db 2071 * @max_sp: max Service Period. Only valid if wme is supported.
e1a0c6b3 2072 * @bandwidth: current bandwidth the station can receive with
8921d04e
JB
2073 * @rx_nss: in HT/VHT, the maximum number of spatial streams the
2074 * station can receive at the moment, changed by operating mode
2075 * notifications and capabilities. The value is only valid after
2076 * the station moves to associated state.
af0ed69b 2077 * @smps_mode: current SMPS mode (off, static or dynamic)
03f831a6 2078 * @rates: rate control selection table
0c4972cc 2079 * @tdls: indicates whether the STA is a TDLS peer
8b94148c
AN
2080 * @tdls_initiator: indicates the STA is an initiator of the TDLS link. Only
2081 * valid if the STA is a TDLS peer in the first place.
93f0490e 2082 * @mfp: indicates whether the STA uses management frame protection or not.
506bcfa8
EG
2083 * @max_amsdu_subframes: indicates the maximal number of MSDUs in a single
2084 * A-MSDU. Taken from the Extended Capabilities element. 0 means
2085 * unlimited.
52cfa1d6 2086 * @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not.
6e0456b5 2087 * @max_rc_amsdu_len: Maximum A-MSDU size in bytes recommended by rate control.
edba6bda 2088 * @max_tid_amsdu_len: Maximum A-MSDU size in bytes for this TID
07e97338 2089 * @txpwr: the station tx power configuration
adf8ed01
JB
2090 * @txq: per-TID data TX queues (if driver uses the TXQ abstraction); note that
2091 * the last entry (%IEEE80211_NUM_TIDS) is used for non-data frames
17741cdc
JB
2092 */
2093struct ieee80211_sta {
57fbcce3 2094 u32 supp_rates[NUM_NL80211_BANDS];
17741cdc
JB
2095 u8 addr[ETH_ALEN];
2096 u16 aid;
d9fe60de 2097 struct ieee80211_sta_ht_cap ht_cap;
818255ea 2098 struct ieee80211_sta_vht_cap vht_cap;
41cbb0f5 2099 struct ieee80211_sta_he_cap he_cap;
1bb9a8a4 2100 struct ieee80211_he_6ghz_capa he_6ghz_capa;
41cbb0f5 2101 u16 max_rx_aggregation_subframes;
39df600a 2102 bool wme;
9533b4ac
EP
2103 u8 uapsd_queues;
2104 u8 max_sp;
8921d04e 2105 u8 rx_nss;
e1a0c6b3 2106 enum ieee80211_sta_rx_bandwidth bandwidth;
af0ed69b 2107 enum ieee80211_smps_mode smps_mode;
0d528d85 2108 struct ieee80211_sta_rates __rcu *rates;
0c4972cc 2109 bool tdls;
8b94148c 2110 bool tdls_initiator;
93f0490e 2111 bool mfp;
506bcfa8 2112 u8 max_amsdu_subframes;
57eeb208
JB
2113
2114 /**
2115 * @max_amsdu_len:
2116 * indicates the maximal length of an A-MSDU in bytes.
2117 * This field is always valid for packets with a VHT preamble.
2118 * For packets with a HT preamble, additional limits apply:
2119 *
2120 * * If the skb is transmitted as part of a BA agreement, the
2121 * A-MSDU maximal size is min(max_amsdu_len, 4065) bytes.
ae4a50ee 2122 * * If the skb is not part of a BA agreement, the A-MSDU maximal
57eeb208
JB
2123 * size is min(max_amsdu_len, 7935) bytes.
2124 *
2125 * Both additional HT limits must be enforced by the low level
2126 * driver. This is defined by the spec (IEEE 802.11-2012 section
2127 * 8.3.2.2 NOTE 2).
2128 */
506bcfa8 2129 u16 max_amsdu_len;
52cfa1d6 2130 bool support_p2p_ps;
6e0456b5 2131 u16 max_rc_amsdu_len;
edba6bda 2132 u16 max_tid_amsdu_len[IEEE80211_NUM_TIDS];
ba905bf4 2133 struct ieee80211_sta_txpwr txpwr;
17741cdc 2134
adf8ed01 2135 struct ieee80211_txq *txq[IEEE80211_NUM_TIDS + 1];
ba8c3d6f 2136
17741cdc 2137 /* must be last */
3c23215b 2138 u8 drv_priv[] __aligned(sizeof(void *));
17741cdc
JB
2139};
2140
478f8d2b
TW
2141/**
2142 * enum sta_notify_cmd - sta notify command
2143 *
2144 * Used with the sta_notify() callback in &struct ieee80211_ops, this
38a6cc75 2145 * indicates if an associated station made a power state transition.
478f8d2b 2146 *
4571d3bf
CL
2147 * @STA_NOTIFY_SLEEP: a station is now sleeping
2148 * @STA_NOTIFY_AWAKE: a sleeping station woke up
2149 */
89fad578 2150enum sta_notify_cmd {
4571d3bf
CL
2151 STA_NOTIFY_SLEEP, STA_NOTIFY_AWAKE,
2152};
2153
36323f81
TH
2154/**
2155 * struct ieee80211_tx_control - TX control data
2156 *
2157 * @sta: station table entry, this sta pointer may be NULL and
2158 * it is not allowed to copy the pointer, due to RCU.
2159 */
2160struct ieee80211_tx_control {
2161 struct ieee80211_sta *sta;
2162};
2163
ba8c3d6f
FF
2164/**
2165 * struct ieee80211_txq - Software intermediate tx queue
2166 *
2167 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
2168 * @sta: station table entry, %NULL for per-vif queue
adf8ed01
JB
2169 * @tid: the TID for this queue (unused for per-vif queue),
2170 * %IEEE80211_NUM_TIDS for non-data (if enabled)
ba8c3d6f 2171 * @ac: the AC for this queue
f8bdbb58 2172 * @drv_priv: driver private area, sized by hw->txq_data_size
ba8c3d6f
FF
2173 *
2174 * The driver can obtain packets from this queue by calling
2175 * ieee80211_tx_dequeue().
2176 */
2177struct ieee80211_txq {
2178 struct ieee80211_vif *vif;
2179 struct ieee80211_sta *sta;
2180 u8 tid;
2181 u8 ac;
2182
2183 /* must be last */
3c23215b 2184 u8 drv_priv[] __aligned(sizeof(void *));
ba8c3d6f
FF
2185};
2186
1bc0826c
JB
2187/**
2188 * enum ieee80211_hw_flags - hardware flags
2189 *
2190 * These flags are used to indicate hardware capabilities to
2191 * the stack. Generally, flags here should have their meaning
2192 * done in a way that the simplest hardware doesn't need setting
2193 * any particular flags. There are some exceptions to this rule,
2194 * however, so you are advised to review these flags carefully.
2195 *
af65cd96
JB
2196 * @IEEE80211_HW_HAS_RATE_CONTROL:
2197 * The hardware or firmware includes rate control, and cannot be
2198 * controlled by the stack. As such, no rate control algorithm
2199 * should be instantiated, and the TX rate reported to userspace
2200 * will be taken from the TX status instead of the rate control
2201 * algorithm.
2202 * Note that this requires that the driver implement a number of
2203 * callbacks so it has the correct information, it needs to have
2204 * the @set_rts_threshold callback and must look at the BSS config
2205 * @use_cts_prot for G/N protection, @use_short_slot for slot
2206 * timing in 2.4 GHz and @use_short_preamble for preambles for
2207 * CCK frames.
2208 *
1bc0826c
JB
2209 * @IEEE80211_HW_RX_INCLUDES_FCS:
2210 * Indicates that received frames passed to the stack include
2211 * the FCS at the end.
2212 *
2213 * @IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING:
2214 * Some wireless LAN chipsets buffer broadcast/multicast frames
2215 * for power saving stations in the hardware/firmware and others
2216 * rely on the host system for such buffering. This option is used
2217 * to configure the IEEE 802.11 upper layer to buffer broadcast and
2218 * multicast frames when there are power saving stations so that
546c80c9 2219 * the driver can fetch them with ieee80211_get_buffered_bc().
1bc0826c 2220 *
566bfe5a
BR
2221 * @IEEE80211_HW_SIGNAL_UNSPEC:
2222 * Hardware can provide signal values but we don't know its units. We
2223 * expect values between 0 and @max_signal.
2224 * If possible please provide dB or dBm instead.
2225 *
566bfe5a
BR
2226 * @IEEE80211_HW_SIGNAL_DBM:
2227 * Hardware gives signal values in dBm, decibel difference from
2228 * one milliwatt. This is the preferred method since it is standardized
2229 * between different devices. @max_signal does not need to be set.
2230 *
06ff47bc
TW
2231 * @IEEE80211_HW_SPECTRUM_MGMT:
2232 * Hardware supports spectrum management defined in 802.11h
2233 * Measurement, Channel Switch, Quieting, TPC
8b30b1fe
S
2234 *
2235 * @IEEE80211_HW_AMPDU_AGGREGATION:
2236 * Hardware supports 11n A-MPDU aggregation.
520eb820 2237 *
4be8c387
JB
2238 * @IEEE80211_HW_SUPPORTS_PS:
2239 * Hardware has power save support (i.e. can go to sleep).
2240 *
2241 * @IEEE80211_HW_PS_NULLFUNC_STACK:
2242 * Hardware requires nullfunc frame handling in stack, implies
2243 * stack support for dynamic PS.
2244 *
2245 * @IEEE80211_HW_SUPPORTS_DYNAMIC_PS:
2246 * Hardware has support for dynamic PS.
4375d083
JM
2247 *
2248 * @IEEE80211_HW_MFP_CAPABLE:
2249 * Hardware supports management frame protection (MFP, IEEE 802.11w).
04de8381 2250 *
375177bf
VN
2251 * @IEEE80211_HW_REPORTS_TX_ACK_STATUS:
2252 * Hardware can provide ack status reports of Tx frames to
2253 * the stack.
2254 *
1e4dcd01 2255 * @IEEE80211_HW_CONNECTION_MONITOR:
ad24b0da
JB
2256 * The hardware performs its own connection monitoring, including
2257 * periodic keep-alives to the AP and probing the AP on beacon loss.
a97c13c3 2258 *
c65dd147
EG
2259 * @IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC:
2260 * This device needs to get data from beacon before association (i.e.
2261 * dtim_period).
e31b8213
JB
2262 *
2263 * @IEEE80211_HW_SUPPORTS_PER_STA_GTK: The device's crypto engine supports
2264 * per-station GTKs as used by IBSS RSN or during fast transition. If
2265 * the device doesn't support per-station GTKs, but can be asked not
2266 * to decrypt group addressed frames, then IBSS RSN support is still
2267 * possible but software crypto will be used. Advertise the wiphy flag
2268 * only in that case.
d057e5a3
AN
2269 *
2270 * @IEEE80211_HW_AP_LINK_PS: When operating in AP mode the device
2271 * autonomously manages the PS status of connected stations. When
2272 * this flag is set mac80211 will not trigger PS mode for connected
2273 * stations based on the PM bit of incoming frames.
2274 * Use ieee80211_start_ps()/ieee8021_end_ps() to manually configure
2275 * the PS mode of connected stations.
edf6b784
AN
2276 *
2277 * @IEEE80211_HW_TX_AMPDU_SETUP_IN_HW: The device handles TX A-MPDU session
2278 * setup strictly in HW. mac80211 should not attempt to do this in
2279 * software.
885bd8ec 2280 *
4b6f1dd6
JB
2281 * @IEEE80211_HW_WANT_MONITOR_VIF: The driver would like to be informed of
2282 * a virtual monitor interface when monitor interfaces are the only
2283 * active interfaces.
3a25a8c8 2284 *
e27513fb
BG
2285 * @IEEE80211_HW_NO_AUTO_VIF: The driver would like for no wlanX to
2286 * be created. It is expected user-space will create vifs as
2287 * desired (and thus have them named as desired).
2288 *
fa7e1fbc
JB
2289 * @IEEE80211_HW_SW_CRYPTO_CONTROL: The driver wants to control which of the
2290 * crypto algorithms can be done in software - so don't automatically
2291 * try to fall back to it if hardware crypto fails, but do so only if
2292 * the driver returns 1. This also forces the driver to advertise its
2293 * supported cipher suites.
2294 *
17c18bf8
JB
2295 * @IEEE80211_HW_SUPPORT_FAST_XMIT: The driver/hardware supports fast-xmit,
2296 * this currently requires only the ability to calculate the duration
2297 * for frames.
2298 *
3a25a8c8
JB
2299 * @IEEE80211_HW_QUEUE_CONTROL: The driver wants to control per-interface
2300 * queue mapping in order to use different queues (not just one per AC)
2301 * for different virtual interfaces. See the doc section on HW queue
2302 * control for more details.
6d71117a 2303 *
0d528d85
FF
2304 * @IEEE80211_HW_SUPPORTS_RC_TABLE: The driver supports using a rate
2305 * selection table provided by the rate control algorithm.
2306 *
6d71117a
JB
2307 * @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any
2308 * P2P Interface. This will be honoured even if more than one interface
2309 * is supported.
ef429dad
JB
2310 *
2311 * @IEEE80211_HW_TIMING_BEACON_ONLY: Use sync timing from beacon frames
2312 * only, to allow getting TBTT of a DTIM beacon.
7578d575 2313 *
919be62b
JB
2314 * @IEEE80211_HW_SUPPORTS_HT_CCK_RATES: Hardware supports mixing HT/CCK rates
2315 * and can cope with CCK rates in an aggregation session (e.g. by not
2316 * using aggregation for such frames.)
2317 *
7578d575
AN
2318 * @IEEE80211_HW_CHANCTX_STA_CSA: Support 802.11h based channel-switch (CSA)
2319 * for a single active channel while using channel contexts. When support
2320 * is not enabled the default action is to disconnect when getting the
2321 * CSA frame.
5d52ee81 2322 *
c70f59a2
IY
2323 * @IEEE80211_HW_SUPPORTS_CLONED_SKBS: The driver will never modify the payload
2324 * or tailroom of TX skbs without copying them first.
2325 *
c526a467 2326 * @IEEE80211_HW_SINGLE_SCAN_ON_ALL_BANDS: The HW supports scanning on all bands
c56ef672 2327 * in one command, mac80211 doesn't have to run separate scans per band.
30686bf7 2328 *
b98fb44f
AN
2329 * @IEEE80211_HW_TDLS_WIDER_BW: The device/driver supports wider bandwidth
2330 * than then BSS bandwidth for a TDLS link on the base channel.
2331 *
99e7ca44
EG
2332 * @IEEE80211_HW_SUPPORTS_AMSDU_IN_AMPDU: The driver supports receiving A-MSDUs
2333 * within A-MPDU.
2334 *
35afa588
HS
2335 * @IEEE80211_HW_BEACON_TX_STATUS: The device/driver provides TX status
2336 * for sent beacons.
2337 *
31104891
JB
2338 * @IEEE80211_HW_NEEDS_UNIQUE_STA_ADDR: Hardware (or driver) requires that each
2339 * station has a unique address, i.e. each station entry can be identified
2340 * by just its MAC address; this prevents, for example, the same station
2341 * from connecting to two virtual AP interfaces at the same time.
2342 *
412a6d80
SS
2343 * @IEEE80211_HW_SUPPORTS_REORDERING_BUFFER: Hardware (or driver) manages the
2344 * reordering buffer internally, guaranteeing mac80211 receives frames in
2345 * order and does not need to manage its own reorder buffer or BA session
2346 * timeout.
2347 *
c9c5962b
JB
2348 * @IEEE80211_HW_USES_RSS: The device uses RSS and thus requires parallel RX,
2349 * which implies using per-CPU station statistics.
2350 *
6e0456b5
FF
2351 * @IEEE80211_HW_TX_AMSDU: Hardware (or driver) supports software aggregated
2352 * A-MSDU frames. Requires software tx queueing and fast-xmit support.
2353 * When not using minstrel/minstrel_ht rate control, the driver must
2354 * limit the maximum A-MSDU size based on the current tx rate by setting
2355 * max_rc_amsdu_len in struct ieee80211_sta.
2356 *
2357 * @IEEE80211_HW_TX_FRAG_LIST: Hardware (or driver) supports sending frag_list
2358 * skbs, needed for zero-copy software A-MSDU.
2359 *
e8a24cd4
RM
2360 * @IEEE80211_HW_REPORTS_LOW_ACK: The driver (or firmware) reports low ack event
2361 * by ieee80211_report_low_ack() based on its own algorithm. For such
2362 * drivers, mac80211 packet loss mechanism will not be triggered and driver
2363 * is completely depending on firmware event for station kickout.
2364 *
f3fe4e93
SS
2365 * @IEEE80211_HW_SUPPORTS_TX_FRAG: Hardware does fragmentation by itself.
2366 * The stack will not do fragmentation.
2367 * The callback for @set_frag_threshold should be set as well.
2368 *
e2fb1b83
YT
2369 * @IEEE80211_HW_SUPPORTS_TDLS_BUFFER_STA: Hardware supports buffer STA on
2370 * TDLS links.
2371 *
94ba9271
IP
2372 * @IEEE80211_HW_DEAUTH_NEED_MGD_TX_PREP: The driver requires the
2373 * mgd_prepare_tx() callback to be called before transmission of a
2374 * deauthentication frame in case the association was completed but no
2375 * beacon was heard. This is required in multi-channel scenarios, where the
2376 * virtual interface might not be given air time for the transmission of
2377 * the frame, as it is not synced with the AP/P2P GO yet, and thus the
2378 * deauthentication frame might not be transmitted.
d1361b32 2379 *
7c181f4f
BCD
2380 * @IEEE80211_HW_DOESNT_SUPPORT_QOS_NDP: The driver (or firmware) doesn't
2381 * support QoS NDP for AP probing - that's most likely a driver bug.
94ba9271 2382 *
adf8ed01
JB
2383 * @IEEE80211_HW_BUFF_MMPDU_TXQ: use the TXQ for bufferable MMPDUs, this of
2384 * course requires the driver to use TXQs to start with.
2385 *
09b4a4fa
JB
2386 * @IEEE80211_HW_SUPPORTS_VHT_EXT_NSS_BW: (Hardware) rate control supports VHT
2387 * extended NSS BW (dot11VHTExtendedNSSBWCapable). This flag will be set if
2388 * the selected rate control algorithm sets %RATE_CTRL_CAPA_VHT_EXT_NSS_BW
2389 * but if the rate control is built-in then it must be set by the driver.
2390 * See also the documentation for that flag.
2391 *
0eeb2b67
SS
2392 * @IEEE80211_HW_STA_MMPDU_TXQ: use the extra non-TID per-station TXQ for all
2393 * MMPDUs on station interfaces. This of course requires the driver to use
2394 * TXQs to start with.
2395 *
77f7ffdc
FF
2396 * @IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN: Driver does not report accurate A-MPDU
2397 * length in tx status information
2398 *
caf56338
SS
2399 * @IEEE80211_HW_SUPPORTS_MULTI_BSSID: Hardware supports multi BSSID
2400 *
2401 * @IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID: Hardware supports multi BSSID
2402 * only for HE APs. Applies if @IEEE80211_HW_SUPPORTS_MULTI_BSSID is set.
2403 *
dc3998ec
AW
2404 * @IEEE80211_HW_AMPDU_KEYBORDER_SUPPORT: The card and driver is only
2405 * aggregating MPDUs with the same keyid, allowing mac80211 to keep Tx
2406 * A-MPDU sessions active while rekeying with Extended Key ID.
2407 *
6aea26ce
FF
2408 * @IEEE80211_HW_SUPPORTS_TX_ENCAP_OFFLOAD: Hardware supports tx encapsulation
2409 * offload
2410 *
80a915ec
FF
2411 * @IEEE80211_HW_SUPPORTS_RX_DECAP_OFFLOAD: Hardware supports rx decapsulation
2412 * offload
2413 *
55f8205e
S
2414 * @IEEE80211_HW_SUPPORTS_CONC_MON_RX_DECAP: Hardware supports concurrent rx
2415 * decapsulation offload and passing raw 802.11 frames for monitor iface.
2416 * If this is supported, the driver must pass both 802.3 frames for real
2417 * usage and 802.11 frames with %RX_FLAG_ONLY_MONITOR set for monitor to
2418 * the stack.
2419 *
30686bf7 2420 * @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
1bc0826c
JB
2421 */
2422enum ieee80211_hw_flags {
30686bf7
JB
2423 IEEE80211_HW_HAS_RATE_CONTROL,
2424 IEEE80211_HW_RX_INCLUDES_FCS,
2425 IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING,
2426 IEEE80211_HW_SIGNAL_UNSPEC,
2427 IEEE80211_HW_SIGNAL_DBM,
2428 IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC,
2429 IEEE80211_HW_SPECTRUM_MGMT,
2430 IEEE80211_HW_AMPDU_AGGREGATION,
2431 IEEE80211_HW_SUPPORTS_PS,
2432 IEEE80211_HW_PS_NULLFUNC_STACK,
2433 IEEE80211_HW_SUPPORTS_DYNAMIC_PS,
2434 IEEE80211_HW_MFP_CAPABLE,
2435 IEEE80211_HW_WANT_MONITOR_VIF,
2436 IEEE80211_HW_NO_AUTO_VIF,
2437 IEEE80211_HW_SW_CRYPTO_CONTROL,
2438 IEEE80211_HW_SUPPORT_FAST_XMIT,
2439 IEEE80211_HW_REPORTS_TX_ACK_STATUS,
2440 IEEE80211_HW_CONNECTION_MONITOR,
2441 IEEE80211_HW_QUEUE_CONTROL,
2442 IEEE80211_HW_SUPPORTS_PER_STA_GTK,
2443 IEEE80211_HW_AP_LINK_PS,
2444 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW,
2445 IEEE80211_HW_SUPPORTS_RC_TABLE,
2446 IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF,
2447 IEEE80211_HW_TIMING_BEACON_ONLY,
2448 IEEE80211_HW_SUPPORTS_HT_CCK_RATES,
2449 IEEE80211_HW_CHANCTX_STA_CSA,
2450 IEEE80211_HW_SUPPORTS_CLONED_SKBS,
2451 IEEE80211_HW_SINGLE_SCAN_ON_ALL_BANDS,
b98fb44f 2452 IEEE80211_HW_TDLS_WIDER_BW,
99e7ca44 2453 IEEE80211_HW_SUPPORTS_AMSDU_IN_AMPDU,
35afa588 2454 IEEE80211_HW_BEACON_TX_STATUS,
31104891 2455 IEEE80211_HW_NEEDS_UNIQUE_STA_ADDR,
412a6d80 2456 IEEE80211_HW_SUPPORTS_REORDERING_BUFFER,
c9c5962b 2457 IEEE80211_HW_USES_RSS,
6e0456b5
FF
2458 IEEE80211_HW_TX_AMSDU,
2459 IEEE80211_HW_TX_FRAG_LIST,
e8a24cd4 2460 IEEE80211_HW_REPORTS_LOW_ACK,
f3fe4e93 2461 IEEE80211_HW_SUPPORTS_TX_FRAG,
e2fb1b83 2462 IEEE80211_HW_SUPPORTS_TDLS_BUFFER_STA,
94ba9271 2463 IEEE80211_HW_DEAUTH_NEED_MGD_TX_PREP,
7c181f4f 2464 IEEE80211_HW_DOESNT_SUPPORT_QOS_NDP,
adf8ed01 2465 IEEE80211_HW_BUFF_MMPDU_TXQ,
09b4a4fa 2466 IEEE80211_HW_SUPPORTS_VHT_EXT_NSS_BW,
0eeb2b67 2467 IEEE80211_HW_STA_MMPDU_TXQ,
77f7ffdc 2468 IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN,
caf56338
SS
2469 IEEE80211_HW_SUPPORTS_MULTI_BSSID,
2470 IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID,
dc3998ec 2471 IEEE80211_HW_AMPDU_KEYBORDER_SUPPORT,
6aea26ce 2472 IEEE80211_HW_SUPPORTS_TX_ENCAP_OFFLOAD,
80a915ec 2473 IEEE80211_HW_SUPPORTS_RX_DECAP_OFFLOAD,
55f8205e 2474 IEEE80211_HW_SUPPORTS_CONC_MON_RX_DECAP,
30686bf7
JB
2475
2476 /* keep last, obviously */
2477 NUM_IEEE80211_HW_FLAGS
1bc0826c
JB
2478};
2479
7ac1bd6a
JB
2480/**
2481 * struct ieee80211_hw - hardware information and state
75a5f0cc
JB
2482 *
2483 * This structure contains the configuration and hardware
2484 * information for an 802.11 PHY.
2485 *
2486 * @wiphy: This points to the &struct wiphy allocated for this
2487 * 802.11 PHY. You must fill in the @perm_addr and @dev
2488 * members of this structure using SET_IEEE80211_DEV()
8318d78a
JB
2489 * and SET_IEEE80211_PERM_ADDR(). Additionally, all supported
2490 * bands (with channels, bitrates) are registered here.
75a5f0cc
JB
2491 *
2492 * @conf: &struct ieee80211_conf, device configuration, don't use.
2493 *
75a5f0cc
JB
2494 * @priv: pointer to private area that was allocated for driver use
2495 * along with this structure.
2496 *
2497 * @flags: hardware flags, see &enum ieee80211_hw_flags.
2498 *
2499 * @extra_tx_headroom: headroom to reserve in each transmit skb
2500 * for use by the driver (e.g. for transmit headers.)
2501 *
70dabeb7
FF
2502 * @extra_beacon_tailroom: tailroom to reserve in each beacon tx skb.
2503 * Can be used by drivers to add extra IEs.
75a5f0cc 2504 *
566bfe5a 2505 * @max_signal: Maximum value for signal (rssi) in RX information, used
ad24b0da 2506 * only when @IEEE80211_HW_SIGNAL_UNSPEC or @IEEE80211_HW_SIGNAL_DB
75a5f0cc 2507 *
ea95bba4 2508 * @max_listen_interval: max listen interval in units of beacon interval
ad24b0da 2509 * that HW supports
ea95bba4 2510 *
75a5f0cc 2511 * @queues: number of available hardware transmit queues for
e100bb64
JB
2512 * data packets. WMM/QoS requires at least four, these
2513 * queues need to have configurable access parameters.
2514 *
830f9038
JB
2515 * @rate_control_algorithm: rate control algorithm for this hardware.
2516 * If unset (NULL), the default algorithm will be used. Must be
2517 * set before calling ieee80211_register_hw().
32bfd35d
JB
2518 *
2519 * @vif_data_size: size (in bytes) of the drv_priv data area
2520 * within &struct ieee80211_vif.
17741cdc
JB
2521 * @sta_data_size: size (in bytes) of the drv_priv data area
2522 * within &struct ieee80211_sta.
d01a1e65
MK
2523 * @chanctx_data_size: size (in bytes) of the drv_priv data area
2524 * within &struct ieee80211_chanctx_conf.
ba8c3d6f
FF
2525 * @txq_data_size: size (in bytes) of the drv_priv data area
2526 * within @struct ieee80211_txq.
870abdf6 2527 *
78be49ec
HS
2528 * @max_rates: maximum number of alternate rate retry stages the hw
2529 * can handle.
2530 * @max_report_rates: maximum number of alternate rate retry stages
2531 * the hw can report back.
e6a9854b 2532 * @max_rate_tries: maximum number of tries for each stage
4e6cbfd0 2533 *
df6ba5d8
LC
2534 * @max_rx_aggregation_subframes: maximum buffer size (number of
2535 * sub-frames) to be used for A-MPDU block ack receiver
2536 * aggregation.
2537 * This is only relevant if the device has restrictions on the
2538 * number of subframes, if it relies on mac80211 to do reordering
2539 * it shouldn't be set.
5dd36bc9
JB
2540 *
2541 * @max_tx_aggregation_subframes: maximum number of subframes in an
41cbb0f5
LC
2542 * aggregate an HT/HE device will transmit. In HT AddBA we'll
2543 * advertise a constant value of 64 as some older APs crash if
2544 * the window size is smaller (an example is LinkSys WRT120N
2545 * with FW v1.0.07 build 002 Jun 18 2012).
2546 * For AddBA to HE capable peers this value will be used.
3a25a8c8 2547 *
6e0456b5
FF
2548 * @max_tx_fragments: maximum number of tx buffers per (A)-MSDU, sum
2549 * of 1 + skb_shinfo(skb)->nr_frags for each skb in the frag_list.
2550 *
3a25a8c8
JB
2551 * @offchannel_tx_hw_queue: HW queue ID to use for offchannel TX
2552 * (if %IEEE80211_HW_QUEUE_CONTROL is set)
ac55d2fe
JB
2553 *
2554 * @radiotap_mcs_details: lists which MCS information can the HW
2555 * reports, by default it is set to _MCS, _GI and _BW but doesn't
b4f7f4ad 2556 * include _FMT. Use %IEEE80211_RADIOTAP_MCS_HAVE_\* values, only
ac55d2fe 2557 * adding _BW is supported today.
72d78728 2558 *
51648921
JB
2559 * @radiotap_vht_details: lists which VHT MCS information the HW reports,
2560 * the default is _GI | _BANDWIDTH.
b4f7f4ad 2561 * Use the %IEEE80211_RADIOTAP_VHT_KNOWN_\* values.
51648921 2562 *
41cbb0f5
LC
2563 * @radiotap_he: HE radiotap validity flags
2564 *
99ee7cae 2565 * @radiotap_timestamp: Information for the radiotap timestamp field; if the
7d419463 2566 * @units_pos member is set to a non-negative value then the timestamp
99ee7cae 2567 * field will be added and populated from the &struct ieee80211_rx_status
7d419463
JB
2568 * device_timestamp.
2569 * @radiotap_timestamp.units_pos: Must be set to a combination of a
2570 * IEEE80211_RADIOTAP_TIMESTAMP_UNIT_* and a
2571 * IEEE80211_RADIOTAP_TIMESTAMP_SPOS_* value.
2572 * @radiotap_timestamp.accuracy: If non-negative, fills the accuracy in the
2573 * radiotap field and the accuracy known flag will be set.
99ee7cae 2574 *
72d78728 2575 * @netdev_features: netdev features to be set in each netdev created
680a0dab
JB
2576 * from this HW. Note that not all features are usable with mac80211,
2577 * other features will be rejected during HW registration.
219c3867
AB
2578 *
2579 * @uapsd_queues: This bitmap is included in (re)association frame to indicate
2580 * for each access category if it is uAPSD trigger-enabled and delivery-
2581 * enabled. Use IEEE80211_WMM_IE_STA_QOSINFO_AC_* to set this bitmap.
2582 * Each bit corresponds to different AC. Value '1' in specific bit means
2583 * that corresponding AC is both trigger- and delivery-enabled. '0' means
2584 * neither enabled.
2585 *
2586 * @uapsd_max_sp_len: maximum number of total buffered frames the WMM AP may
2587 * deliver to a WMM STA during any Service Period triggered by the WMM STA.
2588 * Use IEEE80211_WMM_IE_STA_QOSINFO_SP_* for correct values.
2475b1cc
MS
2589 *
2590 * @n_cipher_schemes: a size of an array of cipher schemes definitions.
2591 * @cipher_schemes: a pointer to an array of cipher scheme definitions
2592 * supported by HW.
167e33f4
AB
2593 * @max_nan_de_entries: maximum number of NAN DE functions supported by the
2594 * device.
70e53669
WG
2595 *
2596 * @tx_sk_pacing_shift: Pacing shift to set on TCP sockets when frames from
2597 * them are encountered. The default should typically not be changed,
2598 * unless the driver has good reasons for needing more buffers.
b4809e94 2599 *
cb86880e 2600 * @weight_multiplier: Driver specific airtime weight multiplier used while
b4809e94 2601 * refilling deficit of each TXQ.
06354665
WG
2602 *
2603 * @max_mtu: the max mtu could be set.
7ac1bd6a 2604 */
f0706e82 2605struct ieee80211_hw {
f0706e82 2606 struct ieee80211_conf conf;
75a5f0cc 2607 struct wiphy *wiphy;
830f9038 2608 const char *rate_control_algorithm;
f0706e82 2609 void *priv;
30686bf7 2610 unsigned long flags[BITS_TO_LONGS(NUM_IEEE80211_HW_FLAGS)];
f0706e82 2611 unsigned int extra_tx_headroom;
70dabeb7 2612 unsigned int extra_beacon_tailroom;
32bfd35d 2613 int vif_data_size;
17741cdc 2614 int sta_data_size;
d01a1e65 2615 int chanctx_data_size;
ba8c3d6f 2616 int txq_data_size;
ea95bba4 2617 u16 queues;
ea95bba4 2618 u16 max_listen_interval;
f0706e82 2619 s8 max_signal;
e6a9854b 2620 u8 max_rates;
78be49ec 2621 u8 max_report_rates;
e6a9854b 2622 u8 max_rate_tries;
41cbb0f5
LC
2623 u16 max_rx_aggregation_subframes;
2624 u16 max_tx_aggregation_subframes;
6e0456b5 2625 u8 max_tx_fragments;
3a25a8c8 2626 u8 offchannel_tx_hw_queue;
ac55d2fe 2627 u8 radiotap_mcs_details;
51648921 2628 u16 radiotap_vht_details;
99ee7cae
JB
2629 struct {
2630 int units_pos;
2631 s16 accuracy;
2632 } radiotap_timestamp;
72d78728 2633 netdev_features_t netdev_features;
219c3867
AB
2634 u8 uapsd_queues;
2635 u8 uapsd_max_sp_len;
2475b1cc
MS
2636 u8 n_cipher_schemes;
2637 const struct ieee80211_cipher_scheme *cipher_schemes;
167e33f4 2638 u8 max_nan_de_entries;
70e53669 2639 u8 tx_sk_pacing_shift;
b4809e94 2640 u8 weight_multiplier;
06354665 2641 u32 max_mtu;
f0706e82
JB
2642};
2643
30686bf7
JB
2644static inline bool _ieee80211_hw_check(struct ieee80211_hw *hw,
2645 enum ieee80211_hw_flags flg)
2646{
2647 return test_bit(flg, hw->flags);
2648}
2649#define ieee80211_hw_check(hw, flg) _ieee80211_hw_check(hw, IEEE80211_HW_##flg)
2650
2651static inline void _ieee80211_hw_set(struct ieee80211_hw *hw,
2652 enum ieee80211_hw_flags flg)
2653{
2654 return __set_bit(flg, hw->flags);
2655}
2656#define ieee80211_hw_set(hw, flg) _ieee80211_hw_set(hw, IEEE80211_HW_##flg)
2657
c56ef672
DS
2658/**
2659 * struct ieee80211_scan_request - hw scan request
2660 *
2661 * @ies: pointers different parts of IEs (in req.ie)
2662 * @req: cfg80211 request.
2663 */
2664struct ieee80211_scan_request {
2665 struct ieee80211_scan_ies ies;
2666
2667 /* Keep last */
2668 struct cfg80211_scan_request req;
2669};
2670
8a4d32f3
AN
2671/**
2672 * struct ieee80211_tdls_ch_sw_params - TDLS channel switch parameters
2673 *
2674 * @sta: peer this TDLS channel-switch request/response came from
2675 * @chandef: channel referenced in a TDLS channel-switch request
2676 * @action_code: see &enum ieee80211_tdls_actioncode
2677 * @status: channel-switch response status
2678 * @timestamp: time at which the frame was received
2679 * @switch_time: switch-timing parameter received in the frame
2680 * @switch_timeout: switch-timing parameter received in the frame
2681 * @tmpl_skb: TDLS switch-channel response template
2682 * @ch_sw_tm_ie: offset of the channel-switch timing IE inside @tmpl_skb
2683 */
2684struct ieee80211_tdls_ch_sw_params {
2685 struct ieee80211_sta *sta;
2686 struct cfg80211_chan_def *chandef;
2687 u8 action_code;
2688 u32 status;
2689 u32 timestamp;
2690 u16 switch_time;
2691 u16 switch_timeout;
2692 struct sk_buff *tmpl_skb;
2693 u32 ch_sw_tm_ie;
2694};
2695
9a95371a
LR
2696/**
2697 * wiphy_to_ieee80211_hw - return a mac80211 driver hw struct from a wiphy
2698 *
2699 * @wiphy: the &struct wiphy which we want to query
2700 *
2701 * mac80211 drivers can use this to get to their respective
2702 * &struct ieee80211_hw. Drivers wishing to get to their own private
2703 * structure can then access it via hw->priv. Note that mac802111 drivers should
2704 * not use wiphy_priv() to try to get their private driver structure as this
2705 * is already used internally by mac80211.
0ae997dc
YB
2706 *
2707 * Return: The mac80211 driver hw struct of @wiphy.
9a95371a
LR
2708 */
2709struct ieee80211_hw *wiphy_to_ieee80211_hw(struct wiphy *wiphy);
2710
75a5f0cc
JB
2711/**
2712 * SET_IEEE80211_DEV - set device for 802.11 hardware
2713 *
2714 * @hw: the &struct ieee80211_hw to set the device for
2715 * @dev: the &struct device of this 802.11 device
2716 */
f0706e82
JB
2717static inline void SET_IEEE80211_DEV(struct ieee80211_hw *hw, struct device *dev)
2718{
2719 set_wiphy_dev(hw->wiphy, dev);
2720}
2721
75a5f0cc 2722/**
e37d4dff 2723 * SET_IEEE80211_PERM_ADDR - set the permanent MAC address for 802.11 hardware
75a5f0cc
JB
2724 *
2725 * @hw: the &struct ieee80211_hw to set the MAC address for
2726 * @addr: the address to set
2727 */
538dc904 2728static inline void SET_IEEE80211_PERM_ADDR(struct ieee80211_hw *hw, const u8 *addr)
f0706e82
JB
2729{
2730 memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN);
2731}
2732
2e92e6f2
JB
2733static inline struct ieee80211_rate *
2734ieee80211_get_tx_rate(const struct ieee80211_hw *hw,
e039fa4a 2735 const struct ieee80211_tx_info *c)
2e92e6f2 2736{
aa331df0 2737 if (WARN_ON_ONCE(c->control.rates[0].idx < 0))
2e92e6f2 2738 return NULL;
e6a9854b 2739 return &hw->wiphy->bands[c->band]->bitrates[c->control.rates[0].idx];
2e92e6f2
JB
2740}
2741
2742static inline struct ieee80211_rate *
2743ieee80211_get_rts_cts_rate(const struct ieee80211_hw *hw,
e039fa4a 2744 const struct ieee80211_tx_info *c)
2e92e6f2 2745{
e039fa4a 2746 if (c->control.rts_cts_rate_idx < 0)
2e92e6f2 2747 return NULL;
e039fa4a 2748 return &hw->wiphy->bands[c->band]->bitrates[c->control.rts_cts_rate_idx];
2e92e6f2
JB
2749}
2750
2751static inline struct ieee80211_rate *
2752ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,
870abdf6 2753 const struct ieee80211_tx_info *c, int idx)
2e92e6f2 2754{
e6a9854b 2755 if (c->control.rates[idx + 1].idx < 0)
2e92e6f2 2756 return NULL;
e6a9854b 2757 return &hw->wiphy->bands[c->band]->bitrates[c->control.rates[idx + 1].idx];
2e92e6f2
JB
2758}
2759
6096de7f
JB
2760/**
2761 * ieee80211_free_txskb - free TX skb
2762 * @hw: the hardware
2763 * @skb: the skb
2764 *
3f2aef10 2765 * Free a transmit skb. Use this function when some failure
6096de7f
JB
2766 * to transmit happened and thus status cannot be reported.
2767 */
2768void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb);
2769
75a5f0cc
JB
2770/**
2771 * DOC: Hardware crypto acceleration
2772 *
2773 * mac80211 is capable of taking advantage of many hardware
2774 * acceleration designs for encryption and decryption operations.
2775 *
2776 * The set_key() callback in the &struct ieee80211_ops for a given
2777 * device is called to enable hardware acceleration of encryption and
dc822b5d
JB
2778 * decryption. The callback takes a @sta parameter that will be NULL
2779 * for default keys or keys used for transmission only, or point to
2780 * the station information for the peer for individual keys.
75a5f0cc
JB
2781 * Multiple transmission keys with the same key index may be used when
2782 * VLANs are configured for an access point.
4150c572 2783 *
75a5f0cc
JB
2784 * When transmitting, the TX control data will use the @hw_key_idx
2785 * selected by the driver by modifying the &struct ieee80211_key_conf
2786 * pointed to by the @key parameter to the set_key() function.
2787 *
2788 * The set_key() call for the %SET_KEY command should return 0 if
2789 * the key is now in use, -%EOPNOTSUPP or -%ENOSPC if it couldn't be
2790 * added; if you return 0 then hw_key_idx must be assigned to the
2791 * hardware key index, you are free to use the full u8 range.
2792 *
fa7e1fbc
JB
2793 * Note that in the case that the @IEEE80211_HW_SW_CRYPTO_CONTROL flag is
2794 * set, mac80211 will not automatically fall back to software crypto if
2795 * enabling hardware crypto failed. The set_key() call may also return the
2796 * value 1 to permit this specific key/algorithm to be done in software.
2797 *
75a5f0cc
JB
2798 * When the cmd is %DISABLE_KEY then it must succeed.
2799 *
2800 * Note that it is permissible to not decrypt a frame even if a key
2801 * for it has been uploaded to hardware, the stack will not make any
2802 * decision based on whether a key has been uploaded or not but rather
2803 * based on the receive flags.
2804 *
2805 * The &struct ieee80211_key_conf structure pointed to by the @key
2806 * parameter is guaranteed to be valid until another call to set_key()
2807 * removes it, but it can only be used as a cookie to differentiate
2808 * keys.
9ae4fda3
EG
2809 *
2810 * In TKIP some HW need to be provided a phase 1 key, for RX decryption
2811 * acceleration (i.e. iwlwifi). Those drivers should provide update_tkip_key
2812 * handler.
2813 * The update_tkip_key() call updates the driver with the new phase 1 key.
25985edc 2814 * This happens every time the iv16 wraps around (every 65536 packets). The
9ae4fda3
EG
2815 * set_key() call will happen only once for each key (unless the AP did
2816 * rekeying), it will not include a valid phase 1 key. The valid phase 1 key is
e37d4dff 2817 * provided by update_tkip_key only. The trigger that makes mac80211 call this
9ae4fda3 2818 * handler is software decryption with wrap around of iv16.
de5fad81
YD
2819 *
2820 * The set_default_unicast_key() call updates the default WEP key index
2821 * configured to the hardware for WEP encryption type. This is required
2822 * for devices that support offload of data packets (e.g. ARP responses).
62872a9b
AW
2823 *
2824 * Mac80211 drivers should set the @NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 flag
66b239d2 2825 * when they are able to replace in-use PTK keys according to the following
62872a9b 2826 * requirements:
33092aca
AW
2827 * 1) They do not hand over frames decrypted with the old key to mac80211
2828 once the call to set_key() with command %DISABLE_KEY has been completed,
62872a9b
AW
2829 2) either drop or continue to use the old key for any outgoing frames queued
2830 at the time of the key deletion (including re-transmits),
2831 3) never send out a frame queued prior to the set_key() %SET_KEY command
33092aca
AW
2832 encrypted with the new key when also needing
2833 @IEEE80211_KEY_FLAG_GENERATE_IV and
62872a9b
AW
2834 4) never send out a frame unencrypted when it should be encrypted.
2835 Mac80211 will not queue any new frames for a deleted key to the driver.
4150c572 2836 */
75a5f0cc 2837
4be8c387
JB
2838/**
2839 * DOC: Powersave support
2840 *
2841 * mac80211 has support for various powersave implementations.
2842 *
c99445b1
KV
2843 * First, it can support hardware that handles all powersaving by itself,
2844 * such hardware should simply set the %IEEE80211_HW_SUPPORTS_PS hardware
2845 * flag. In that case, it will be told about the desired powersave mode
2846 * with the %IEEE80211_CONF_PS flag depending on the association status.
2847 * The hardware must take care of sending nullfunc frames when necessary,
2848 * i.e. when entering and leaving powersave mode. The hardware is required
2849 * to look at the AID in beacons and signal to the AP that it woke up when
2850 * it finds traffic directed to it.
2851 *
2852 * %IEEE80211_CONF_PS flag enabled means that the powersave mode defined in
2853 * IEEE 802.11-2007 section 11.2 is enabled. This is not to be confused
2854 * with hardware wakeup and sleep states. Driver is responsible for waking
2738bd68
BC
2855 * up the hardware before issuing commands to the hardware and putting it
2856 * back to sleep at appropriate times.
c99445b1
KV
2857 *
2858 * When PS is enabled, hardware needs to wakeup for beacons and receive the
2859 * buffered multicast/broadcast frames after the beacon. Also it must be
2860 * possible to send frames and receive the acknowledment frame.
4be8c387
JB
2861 *
2862 * Other hardware designs cannot send nullfunc frames by themselves and also
2863 * need software support for parsing the TIM bitmap. This is also supported
2864 * by mac80211 by combining the %IEEE80211_HW_SUPPORTS_PS and
2865 * %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still
955394c9
JB
2866 * required to pass up beacons. The hardware is still required to handle
2867 * waking up for multicast traffic; if it cannot the driver must handle that
c99445b1
KV
2868 * as best as it can, mac80211 is too slow to do that.
2869 *
2870 * Dynamic powersave is an extension to normal powersave in which the
2871 * hardware stays awake for a user-specified period of time after sending a
2872 * frame so that reply frames need not be buffered and therefore delayed to
2873 * the next wakeup. It's compromise of getting good enough latency when
2874 * there's data traffic and still saving significantly power in idle
2875 * periods.
2876 *
2738bd68 2877 * Dynamic powersave is simply supported by mac80211 enabling and disabling
c99445b1
KV
2878 * PS based on traffic. Driver needs to only set %IEEE80211_HW_SUPPORTS_PS
2879 * flag and mac80211 will handle everything automatically. Additionally,
2880 * hardware having support for the dynamic PS feature may set the
2881 * %IEEE80211_HW_SUPPORTS_DYNAMIC_PS flag to indicate that it can support
2882 * dynamic PS mode itself. The driver needs to look at the
2883 * @dynamic_ps_timeout hardware configuration value and use it that value
2884 * whenever %IEEE80211_CONF_PS is set. In this case mac80211 will disable
2885 * dynamic PS feature in stack and will just keep %IEEE80211_CONF_PS
2886 * enabled whenever user has enabled powersave.
2887 *
2888 * Driver informs U-APSD client support by enabling
848955cc 2889 * %IEEE80211_VIF_SUPPORTS_UAPSD flag. The mode is configured through the
e227867f 2890 * uapsd parameter in conf_tx() operation. Hardware needs to send the QoS
c99445b1
KV
2891 * Nullfunc frames and stay awake until the service period has ended. To
2892 * utilize U-APSD, dynamic powersave is disabled for voip AC and all frames
2893 * from that AC are transmitted with powersave enabled.
2894 *
2895 * Note: U-APSD client mode is not yet supported with
2896 * %IEEE80211_HW_PS_NULLFUNC_STACK.
4be8c387
JB
2897 */
2898
04de8381
KV
2899/**
2900 * DOC: Beacon filter support
2901 *
2902 * Some hardware have beacon filter support to reduce host cpu wakeups
42b2aa86 2903 * which will reduce system power consumption. It usually works so that
04de8381
KV
2904 * the firmware creates a checksum of the beacon but omits all constantly
2905 * changing elements (TSF, TIM etc). Whenever the checksum changes the
2906 * beacon is forwarded to the host, otherwise it will be just dropped. That
2907 * way the host will only receive beacons where some relevant information
2908 * (for example ERP protection or WMM settings) have changed.
2909 *
c1288b12
JB
2910 * Beacon filter support is advertised with the %IEEE80211_VIF_BEACON_FILTER
2911 * interface capability. The driver needs to enable beacon filter support
955394c9
JB
2912 * whenever power save is enabled, that is %IEEE80211_CONF_PS is set. When
2913 * power save is enabled, the stack will not check for beacon loss and the
2914 * driver needs to notify about loss of beacons with ieee80211_beacon_loss().
2915 *
2916 * The time (or number of beacons missed) until the firmware notifies the
2917 * driver of a beacon loss event (which in turn causes the driver to call
2918 * ieee80211_beacon_loss()) should be configurable and will be controlled
2919 * by mac80211 and the roaming algorithm in the future.
2920 *
2921 * Since there may be constantly changing information elements that nothing
2922 * in the software stack cares about, we will, in the future, have mac80211
2923 * tell the driver which information elements are interesting in the sense
2924 * that we want to see changes in them. This will include
b4f7f4ad 2925 *
955394c9
JB
2926 * - a list of information element IDs
2927 * - a list of OUIs for the vendor information element
2928 *
2929 * Ideally, the hardware would filter out any beacons without changes in the
2930 * requested elements, but if it cannot support that it may, at the expense
2931 * of some efficiency, filter out only a subset. For example, if the device
2932 * doesn't support checking for OUIs it should pass up all changes in all
2933 * vendor information elements.
2934 *
2935 * Note that change, for the sake of simplification, also includes information
2936 * elements appearing or disappearing from the beacon.
2937 *
2938 * Some hardware supports an "ignore list" instead, just make sure nothing
2939 * that was requested is on the ignore list, and include commonly changing
2940 * information element IDs in the ignore list, for example 11 (BSS load) and
2941 * the various vendor-assigned IEs with unknown contents (128, 129, 133-136,
2942 * 149, 150, 155, 156, 173, 176, 178, 179, 219); for forward compatibility
2943 * it could also include some currently unused IDs.
2944 *
2945 *
2946 * In addition to these capabilities, hardware should support notifying the
2947 * host of changes in the beacon RSSI. This is relevant to implement roaming
2948 * when no traffic is flowing (when traffic is flowing we see the RSSI of
2949 * the received data packets). This can consist in notifying the host when
2950 * the RSSI changes significantly or when it drops below or rises above
2951 * configurable thresholds. In the future these thresholds will also be
2952 * configured by mac80211 (which gets them from userspace) to implement
2953 * them as the roaming algorithm requires.
2954 *
2955 * If the hardware cannot implement this, the driver should ask it to
2956 * periodically pass beacon frames to the host so that software can do the
2957 * signal strength threshold checking.
04de8381
KV
2958 */
2959
0f78231b
JB
2960/**
2961 * DOC: Spatial multiplexing power save
2962 *
2963 * SMPS (Spatial multiplexing power save) is a mechanism to conserve
2964 * power in an 802.11n implementation. For details on the mechanism
2965 * and rationale, please refer to 802.11 (as amended by 802.11n-2009)
2966 * "11.2.3 SM power save".
2967 *
2968 * The mac80211 implementation is capable of sending action frames
2969 * to update the AP about the station's SMPS mode, and will instruct
2970 * the driver to enter the specific mode. It will also announce the
2971 * requested SMPS mode during the association handshake. Hardware
2972 * support for this feature is required, and can be indicated by
2973 * hardware flags.
2974 *
2975 * The default mode will be "automatic", which nl80211/cfg80211
2976 * defines to be dynamic SMPS in (regular) powersave, and SMPS
2977 * turned off otherwise.
2978 *
2979 * To support this feature, the driver must set the appropriate
2980 * hardware support flags, and handle the SMPS flag to the config()
2981 * operation. It will then with this mechanism be instructed to
2982 * enter the requested SMPS mode while associated to an HT AP.
2983 */
2984
75a5f0cc
JB
2985/**
2986 * DOC: Frame filtering
2987 *
2988 * mac80211 requires to see many management frames for proper
2989 * operation, and users may want to see many more frames when
2990 * in monitor mode. However, for best CPU usage and power consumption,
2991 * having as few frames as possible percolate through the stack is
2992 * desirable. Hence, the hardware should filter as much as possible.
2993 *
2994 * To achieve this, mac80211 uses filter flags (see below) to tell
2995 * the driver's configure_filter() function which frames should be
2996 * passed to mac80211 and which should be filtered out.
2997 *
3ac64bee
JB
2998 * Before configure_filter() is invoked, the prepare_multicast()
2999 * callback is invoked with the parameters @mc_count and @mc_list
3000 * for the combined multicast address list of all virtual interfaces.
3001 * It's use is optional, and it returns a u64 that is passed to
3002 * configure_filter(). Additionally, configure_filter() has the
3003 * arguments @changed_flags telling which flags were changed and
3004 * @total_flags with the new flag states.
75a5f0cc
JB
3005 *
3006 * If your device has no multicast address filters your driver will
3007 * need to check both the %FIF_ALLMULTI flag and the @mc_count
3008 * parameter to see whether multicast frames should be accepted
3009 * or dropped.
3010 *
d0f5afbe
MB
3011 * All unsupported flags in @total_flags must be cleared.
3012 * Hardware does not support a flag if it is incapable of _passing_
3013 * the frame to the stack. Otherwise the driver must ignore
3014 * the flag, but not clear it.
3015 * You must _only_ clear the flag (announce no support for the
3016 * flag to mac80211) if you are not able to pass the packet type
3017 * to the stack (so the hardware always filters it).
3018 * So for example, you should clear @FIF_CONTROL, if your hardware
3019 * always filters control frames. If your hardware always passes
3020 * control frames to the kernel and is incapable of filtering them,
3021 * you do _not_ clear the @FIF_CONTROL flag.
3022 * This rule applies to all other FIF flags as well.
4150c572 3023 */
75a5f0cc 3024
4b801bc9
JB
3025/**
3026 * DOC: AP support for powersaving clients
3027 *
3028 * In order to implement AP and P2P GO modes, mac80211 has support for
3029 * client powersaving, both "legacy" PS (PS-Poll/null data) and uAPSD.
3030 * There currently is no support for sAPSD.
3031 *
3032 * There is one assumption that mac80211 makes, namely that a client
3033 * will not poll with PS-Poll and trigger with uAPSD at the same time.
3034 * Both are supported, and both can be used by the same client, but
3035 * they can't be used concurrently by the same client. This simplifies
3036 * the driver code.
3037 *
3038 * The first thing to keep in mind is that there is a flag for complete
3039 * driver implementation: %IEEE80211_HW_AP_LINK_PS. If this flag is set,
3040 * mac80211 expects the driver to handle most of the state machine for
3041 * powersaving clients and will ignore the PM bit in incoming frames.
3042 * Drivers then use ieee80211_sta_ps_transition() to inform mac80211 of
3043 * stations' powersave transitions. In this mode, mac80211 also doesn't
3044 * handle PS-Poll/uAPSD.
3045 *
3046 * In the mode without %IEEE80211_HW_AP_LINK_PS, mac80211 will check the
3047 * PM bit in incoming frames for client powersave transitions. When a
3048 * station goes to sleep, we will stop transmitting to it. There is,
3049 * however, a race condition: a station might go to sleep while there is
3050 * data buffered on hardware queues. If the device has support for this
3051 * it will reject frames, and the driver should give the frames back to
3052 * mac80211 with the %IEEE80211_TX_STAT_TX_FILTERED flag set which will
3053 * cause mac80211 to retry the frame when the station wakes up. The
3054 * driver is also notified of powersave transitions by calling its
3055 * @sta_notify callback.
3056 *
3057 * When the station is asleep, it has three choices: it can wake up,
3058 * it can PS-Poll, or it can possibly start a uAPSD service period.
3059 * Waking up is implemented by simply transmitting all buffered (and
3060 * filtered) frames to the station. This is the easiest case. When
3061 * the station sends a PS-Poll or a uAPSD trigger frame, mac80211
3062 * will inform the driver of this with the @allow_buffered_frames
3063 * callback; this callback is optional. mac80211 will then transmit
02f2f1a9 3064 * the frames as usual and set the %IEEE80211_TX_CTL_NO_PS_BUFFER
4b801bc9
JB
3065 * on each frame. The last frame in the service period (or the only
3066 * response to a PS-Poll) also has %IEEE80211_TX_STATUS_EOSP set to
3067 * indicate that it ends the service period; as this frame must have
3068 * TX status report it also sets %IEEE80211_TX_CTL_REQ_TX_STATUS.
3069 * When TX status is reported for this frame, the service period is
3070 * marked has having ended and a new one can be started by the peer.
3071 *
02f2f1a9
JB
3072 * Additionally, non-bufferable MMPDUs can also be transmitted by
3073 * mac80211 with the %IEEE80211_TX_CTL_NO_PS_BUFFER set in them.
3074 *
4b801bc9
JB
3075 * Another race condition can happen on some devices like iwlwifi
3076 * when there are frames queued for the station and it wakes up
3077 * or polls; the frames that are already queued could end up being
3078 * transmitted first instead, causing reordering and/or wrong
3079 * processing of the EOSP. The cause is that allowing frames to be
3080 * transmitted to a certain station is out-of-band communication to
3081 * the device. To allow this problem to be solved, the driver can
3082 * call ieee80211_sta_block_awake() if frames are buffered when it
3083 * is notified that the station went to sleep. When all these frames
3084 * have been filtered (see above), it must call the function again
3085 * to indicate that the station is no longer blocked.
3086 *
3087 * If the driver buffers frames in the driver for aggregation in any
3088 * way, it must use the ieee80211_sta_set_buffered() call when it is
3089 * notified of the station going to sleep to inform mac80211 of any
3090 * TIDs that have frames buffered. Note that when a station wakes up
3091 * this information is reset (hence the requirement to call it when
3092 * informed of the station going to sleep). Then, when a service
3093 * period starts for any reason, @release_buffered_frames is called
3094 * with the number of frames to be released and which TIDs they are
3095 * to come from. In this case, the driver is responsible for setting
3096 * the EOSP (for uAPSD) and MORE_DATA bits in the released frames,
e227867f 3097 * to help the @more_data parameter is passed to tell the driver if
4b801bc9
JB
3098 * there is more data on other TIDs -- the TIDs to release frames
3099 * from are ignored since mac80211 doesn't know how many frames the
3100 * buffers for those TIDs contain.
3101 *
3102 * If the driver also implement GO mode, where absence periods may
3103 * shorten service periods (or abort PS-Poll responses), it must
3104 * filter those response frames except in the case of frames that
3105 * are buffered in the driver -- those must remain buffered to avoid
3106 * reordering. Because it is possible that no frames are released
e943789e 3107 * in this case, the driver must call ieee80211_sta_eosp()
4b801bc9
JB
3108 * to indicate to mac80211 that the service period ended anyway.
3109 *
3110 * Finally, if frames from multiple TIDs are released from mac80211
3111 * but the driver might reorder them, it must clear & set the flags
3112 * appropriately (only the last frame may have %IEEE80211_TX_STATUS_EOSP)
3113 * and also take care of the EOSP and MORE_DATA bits in the frame.
e943789e 3114 * The driver may also use ieee80211_sta_eosp() in this case.
b77cf4f8
JB
3115 *
3116 * Note that if the driver ever buffers frames other than QoS-data
3117 * frames, it must take care to never send a non-QoS-data frame as
3118 * the last frame in a service period, adding a QoS-nulldata frame
3119 * after a non-QoS-data frame if needed.
4b801bc9
JB
3120 */
3121
3a25a8c8
JB
3122/**
3123 * DOC: HW queue control
3124 *
3125 * Before HW queue control was introduced, mac80211 only had a single static
3126 * assignment of per-interface AC software queues to hardware queues. This
3127 * was problematic for a few reasons:
3128 * 1) off-channel transmissions might get stuck behind other frames
3129 * 2) multiple virtual interfaces couldn't be handled correctly
3130 * 3) after-DTIM frames could get stuck behind other frames
3131 *
3132 * To solve this, hardware typically uses multiple different queues for all
3133 * the different usages, and this needs to be propagated into mac80211 so it
3134 * won't have the same problem with the software queues.
3135 *
3136 * Therefore, mac80211 now offers the %IEEE80211_HW_QUEUE_CONTROL capability
3137 * flag that tells it that the driver implements its own queue control. To do
3138 * so, the driver will set up the various queues in each &struct ieee80211_vif
3139 * and the offchannel queue in &struct ieee80211_hw. In response, mac80211 will
3140 * use those queue IDs in the hw_queue field of &struct ieee80211_tx_info and
3141 * if necessary will queue the frame on the right software queue that mirrors
3142 * the hardware queue.
3143 * Additionally, the driver has to then use these HW queue IDs for the queue
3144 * management functions (ieee80211_stop_queue() et al.)
3145 *
3146 * The driver is free to set up the queue mappings as needed, multiple virtual
3147 * interfaces may map to the same hardware queues if needed. The setup has to
3148 * happen during add_interface or change_interface callbacks. For example, a
3149 * driver supporting station+station and station+AP modes might decide to have
3150 * 10 hardware queues to handle different scenarios:
3151 *
3152 * 4 AC HW queues for 1st vif: 0, 1, 2, 3
3153 * 4 AC HW queues for 2nd vif: 4, 5, 6, 7
3154 * after-DTIM queue for AP: 8
3155 * off-channel queue: 9
3156 *
3157 * It would then set up the hardware like this:
3158 * hw.offchannel_tx_hw_queue = 9
3159 *
3160 * and the first virtual interface that is added as follows:
3161 * vif.hw_queue[IEEE80211_AC_VO] = 0
3162 * vif.hw_queue[IEEE80211_AC_VI] = 1
3163 * vif.hw_queue[IEEE80211_AC_BE] = 2
3164 * vif.hw_queue[IEEE80211_AC_BK] = 3
3165 * vif.cab_queue = 8 // if AP mode, otherwise %IEEE80211_INVAL_HW_QUEUE
3166 * and the second virtual interface with 4-7.
3167 *
3168 * If queue 6 gets full, for example, mac80211 would only stop the second
3169 * virtual interface's BE queue since virtual interface queues are per AC.
3170 *
3171 * Note that the vif.cab_queue value should be set to %IEEE80211_INVAL_HW_QUEUE
3172 * whenever the queue is not used (i.e. the interface is not in AP mode) if the
3173 * queue could potentially be shared since mac80211 will look at cab_queue when
3174 * a queue is stopped/woken even if the interface is not in AP mode.
3175 */
3176
75a5f0cc
JB
3177/**
3178 * enum ieee80211_filter_flags - hardware filter flags
3179 *
3180 * These flags determine what the filter in hardware should be
3181 * programmed to let through and what should not be passed to the
3182 * stack. It is always safe to pass more frames than requested,
3183 * but this has negative impact on power consumption.
3184 *
75a5f0cc
JB
3185 * @FIF_ALLMULTI: pass all multicast frames, this is used if requested
3186 * by the user or if the hardware is not capable of filtering by
3187 * multicast address.
3188 *
3189 * @FIF_FCSFAIL: pass frames with failed FCS (but you need to set the
3190 * %RX_FLAG_FAILED_FCS_CRC for them)
3191 *
3192 * @FIF_PLCPFAIL: pass frames with failed PLCP CRC (but you need to set
3193 * the %RX_FLAG_FAILED_PLCP_CRC for them
3194 *
3195 * @FIF_BCN_PRBRESP_PROMISC: This flag is set during scanning to indicate
3196 * to the hardware that it should not filter beacons or probe responses
3197 * by BSSID. Filtering them can greatly reduce the amount of processing
3198 * mac80211 needs to do and the amount of CPU wakeups, so you should
3199 * honour this flag if possible.
3200 *
df140465
JB
3201 * @FIF_CONTROL: pass control frames (except for PS Poll) addressed to this
3202 * station
75a5f0cc
JB
3203 *
3204 * @FIF_OTHER_BSS: pass frames destined to other BSSes
e3b90ca2 3205 *
c2d3955b 3206 * @FIF_PSPOLL: pass PS Poll frames
7be5086d
JB
3207 *
3208 * @FIF_PROBE_REQ: pass probe request frames
873b1cf6
JM
3209 *
3210 * @FIF_MCAST_ACTION: pass multicast Action frames
4150c572 3211 */
75a5f0cc 3212enum ieee80211_filter_flags {
75a5f0cc
JB
3213 FIF_ALLMULTI = 1<<1,
3214 FIF_FCSFAIL = 1<<2,
3215 FIF_PLCPFAIL = 1<<3,
3216 FIF_BCN_PRBRESP_PROMISC = 1<<4,
3217 FIF_CONTROL = 1<<5,
3218 FIF_OTHER_BSS = 1<<6,
e3b90ca2 3219 FIF_PSPOLL = 1<<7,
7be5086d 3220 FIF_PROBE_REQ = 1<<8,
873b1cf6 3221 FIF_MCAST_ACTION = 1<<9,
75a5f0cc
JB
3222};
3223
1b7d03ac
RR
3224/**
3225 * enum ieee80211_ampdu_mlme_action - A-MPDU actions
3226 *
3227 * These flags are used with the ampdu_action() callback in
3228 * &struct ieee80211_ops to indicate which action is needed.
827d42c9
JB
3229 *
3230 * Note that drivers MUST be able to deal with a TX aggregation
3231 * session being stopped even before they OK'ed starting it by
5d22c89b 3232 * calling ieee80211_start_tx_ba_cb_irqsafe, because the peer
827d42c9
JB
3233 * might receive the addBA frame and send a delBA right away!
3234 *
18b559d5
JB
3235 * @IEEE80211_AMPDU_RX_START: start RX aggregation
3236 * @IEEE80211_AMPDU_RX_STOP: stop RX aggregation
2ce113de 3237 * @IEEE80211_AMPDU_TX_START: start TX aggregation, the driver must either
0c197f16
MG
3238 * call ieee80211_start_tx_ba_cb_irqsafe() or
3239 * call ieee80211_start_tx_ba_cb_irqsafe() with status
3240 * %IEEE80211_AMPDU_TX_START_DELAY_ADDBA to delay addba after
3241 * ieee80211_start_tx_ba_cb_irqsafe is called, or just return the special
2ce113de 3242 * status %IEEE80211_AMPDU_TX_START_IMMEDIATE.
b1720231 3243 * @IEEE80211_AMPDU_TX_OPERATIONAL: TX aggregation has become operational
18b559d5
JB
3244 * @IEEE80211_AMPDU_TX_STOP_CONT: stop TX aggregation but continue transmitting
3245 * queued packets, now unaggregated. After all packets are transmitted the
3246 * driver has to call ieee80211_stop_tx_ba_cb_irqsafe().
3247 * @IEEE80211_AMPDU_TX_STOP_FLUSH: stop TX aggregation and flush all packets,
3248 * called when the station is removed. There's no need or reason to call
3249 * ieee80211_stop_tx_ba_cb_irqsafe() in this case as mac80211 assumes the
3250 * session is gone and removes the station.
3251 * @IEEE80211_AMPDU_TX_STOP_FLUSH_CONT: called when TX aggregation is stopped
3252 * but the driver hasn't called ieee80211_stop_tx_ba_cb_irqsafe() yet and
3253 * now the connection is dropped and the station will be removed. Drivers
3254 * should clean up and drop remaining packets when this is called.
1b7d03ac
RR
3255 */
3256enum ieee80211_ampdu_mlme_action {
3257 IEEE80211_AMPDU_RX_START,
3258 IEEE80211_AMPDU_RX_STOP,
0df3ef45 3259 IEEE80211_AMPDU_TX_START,
18b559d5
JB
3260 IEEE80211_AMPDU_TX_STOP_CONT,
3261 IEEE80211_AMPDU_TX_STOP_FLUSH,
3262 IEEE80211_AMPDU_TX_STOP_FLUSH_CONT,
b1720231 3263 IEEE80211_AMPDU_TX_OPERATIONAL,
1b7d03ac 3264};
75a5f0cc 3265
2ce113de 3266#define IEEE80211_AMPDU_TX_START_IMMEDIATE 1
0c197f16 3267#define IEEE80211_AMPDU_TX_START_DELAY_ADDBA 2
2ce113de 3268
50ea05ef
SS
3269/**
3270 * struct ieee80211_ampdu_params - AMPDU action parameters
3271 *
3272 * @action: the ampdu action, value from %ieee80211_ampdu_mlme_action.
3273 * @sta: peer of this AMPDU session
3274 * @tid: tid of the BA session
3275 * @ssn: start sequence number of the session. TX/RX_STOP can pass 0. When
3276 * action is set to %IEEE80211_AMPDU_RX_START the driver passes back the
3277 * actual ssn value used to start the session and writes the value here.
3278 * @buf_size: reorder buffer size (number of subframes). Valid only when the
3279 * action is set to %IEEE80211_AMPDU_RX_START or
3280 * %IEEE80211_AMPDU_TX_OPERATIONAL
3281 * @amsdu: indicates the peer's ability to receive A-MSDU within A-MPDU.
3282 * valid when the action is set to %IEEE80211_AMPDU_TX_OPERATIONAL
3283 * @timeout: BA session timeout. Valid only when the action is set to
3284 * %IEEE80211_AMPDU_RX_START
3285 */
3286struct ieee80211_ampdu_params {
3287 enum ieee80211_ampdu_mlme_action action;
3288 struct ieee80211_sta *sta;
3289 u16 tid;
3290 u16 ssn;
41cbb0f5 3291 u16 buf_size;
50ea05ef
SS
3292 bool amsdu;
3293 u16 timeout;
3294};
3295
4049e09a
JB
3296/**
3297 * enum ieee80211_frame_release_type - frame release reason
3298 * @IEEE80211_FRAME_RELEASE_PSPOLL: frame released for PS-Poll
47086fc5
JB
3299 * @IEEE80211_FRAME_RELEASE_UAPSD: frame(s) released due to
3300 * frame received on trigger-enabled AC
4049e09a
JB
3301 */
3302enum ieee80211_frame_release_type {
3303 IEEE80211_FRAME_RELEASE_PSPOLL,
47086fc5 3304 IEEE80211_FRAME_RELEASE_UAPSD,
4049e09a
JB
3305};
3306
8f727ef3
JB
3307/**
3308 * enum ieee80211_rate_control_changed - flags to indicate what changed
3309 *
3310 * @IEEE80211_RC_BW_CHANGED: The bandwidth that can be used to transmit
e1a0c6b3
JB
3311 * to this station changed. The actual bandwidth is in the station
3312 * information -- for HT20/40 the IEEE80211_HT_CAP_SUP_WIDTH_20_40
3313 * flag changes, for HT and VHT the bandwidth field changes.
8f727ef3 3314 * @IEEE80211_RC_SMPS_CHANGED: The SMPS state of the station changed.
e687f61e
AQ
3315 * @IEEE80211_RC_SUPP_RATES_CHANGED: The supported rate set of this peer
3316 * changed (in IBSS mode) due to discovering more information about
3317 * the peer.
0af83d3d
JB
3318 * @IEEE80211_RC_NSS_CHANGED: N_SS (number of spatial streams) was changed
3319 * by the peer
8f727ef3
JB
3320 */
3321enum ieee80211_rate_control_changed {
3322 IEEE80211_RC_BW_CHANGED = BIT(0),
3323 IEEE80211_RC_SMPS_CHANGED = BIT(1),
e687f61e 3324 IEEE80211_RC_SUPP_RATES_CHANGED = BIT(2),
0af83d3d 3325 IEEE80211_RC_NSS_CHANGED = BIT(3),
8f727ef3
JB
3326};
3327
d339d5ca
IP
3328/**
3329 * enum ieee80211_roc_type - remain on channel type
3330 *
3331 * With the support for multi channel contexts and multi channel operations,
3332 * remain on channel operations might be limited/deferred/aborted by other
ae4a50ee 3333 * flows/operations which have higher priority (and vice versa).
d339d5ca
IP
3334 * Specifying the ROC type can be used by devices to prioritize the ROC
3335 * operations compared to other operations/flows.
3336 *
3337 * @IEEE80211_ROC_TYPE_NORMAL: There are no special requirements for this ROC.
3338 * @IEEE80211_ROC_TYPE_MGMT_TX: The remain on channel request is required
ae4a50ee 3339 * for sending management frames offchannel.
d339d5ca
IP
3340 */
3341enum ieee80211_roc_type {
3342 IEEE80211_ROC_TYPE_NORMAL = 0,
3343 IEEE80211_ROC_TYPE_MGMT_TX,
3344};
3345
cf2c92d8 3346/**
b1e8eb11 3347 * enum ieee80211_reconfig_type - reconfig type
cf2c92d8
EP
3348 *
3349 * This enum is used by the reconfig_complete() callback to indicate what
3350 * reconfiguration type was completed.
3351 *
3352 * @IEEE80211_RECONFIG_TYPE_RESTART: hw restart type
3353 * (also due to resume() callback returning 1)
3354 * @IEEE80211_RECONFIG_TYPE_SUSPEND: suspend type (regardless
3355 * of wowlan configuration)
3356 */
3357enum ieee80211_reconfig_type {
3358 IEEE80211_RECONFIG_TYPE_RESTART,
3359 IEEE80211_RECONFIG_TYPE_SUSPEND,
3360};
3361
15fae341
JB
3362/**
3363 * struct ieee80211_prep_tx_info - prepare TX information
3364 * @duration: if non-zero, hint about the required duration,
3365 * only used with the mgd_prepare_tx() method.
3366 * @subtype: frame subtype (auth, (re)assoc, deauth, disassoc)
3367 * @success: whether the frame exchange was successful, only
3368 * used with the mgd_complete_tx() method, and then only
3369 * valid for auth and (re)assoc.
3370 */
3371struct ieee80211_prep_tx_info {
3372 u16 duration;
3373 u16 subtype;
3374 u8 success:1;
3375};
3376
75a5f0cc
JB
3377/**
3378 * struct ieee80211_ops - callbacks from mac80211 to the driver
3379 *
3380 * This structure contains various callbacks that the driver may
3381 * handle or, in some cases, must handle, for example to configure
3382 * the hardware to a new channel or to transmit a frame.
3383 *
3384 * @tx: Handler that 802.11 module calls for each transmitted frame.
3385 * skb contains the buffer starting from the IEEE 802.11 header.
3386 * The low-level driver should send the frame out based on
eefce91a 3387 * configuration in the TX control data. This handler should,
11127e91 3388 * preferably, never fail and stop queues appropriately.
11127e91 3389 * Must be atomic.
75a5f0cc
JB
3390 *
3391 * @start: Called before the first netdevice attached to the hardware
3392 * is enabled. This should turn on the hardware and must turn on
3393 * frame reception (for possibly enabled monitor interfaces.)
3394 * Returns negative error codes, these may be seen in userspace,
3395 * or zero.
3396 * When the device is started it should not have a MAC address
3397 * to avoid acknowledging frames before a non-monitor device
3398 * is added.
e1781ed3 3399 * Must be implemented and can sleep.
75a5f0cc
JB
3400 *
3401 * @stop: Called after last netdevice attached to the hardware
3402 * is disabled. This should turn off the hardware (at least
3403 * it must turn off frame reception.)
3404 * May be called right after add_interface if that rejects
42935eca
LR
3405 * an interface. If you added any work onto the mac80211 workqueue
3406 * you should ensure to cancel it on this callback.
e1781ed3 3407 * Must be implemented and can sleep.
75a5f0cc 3408 *
eecc4800
JB
3409 * @suspend: Suspend the device; mac80211 itself will quiesce before and
3410 * stop transmitting and doing any other configuration, and then
3411 * ask the device to suspend. This is only invoked when WoWLAN is
3412 * configured, otherwise the device is deconfigured completely and
3413 * reconfigured at resume time.
2b4562df
JB
3414 * The driver may also impose special conditions under which it
3415 * wants to use the "normal" suspend (deconfigure), say if it only
3416 * supports WoWLAN when the device is associated. In this case, it
3417 * must return 1 from this function.
eecc4800
JB
3418 *
3419 * @resume: If WoWLAN was configured, this indicates that mac80211 is
3420 * now resuming its operation, after this the device must be fully
3421 * functional again. If this returns an error, the only way out is
3422 * to also unregister the device. If it returns 1, then mac80211
3423 * will also go through the regular complete restart on resume.
3424 *
d13e1414
JB
3425 * @set_wakeup: Enable or disable wakeup when WoWLAN configuration is
3426 * modified. The reason is that device_set_wakeup_enable() is
3427 * supposed to be called when the configuration changes, not only
3428 * in suspend().
3429 *
75a5f0cc 3430 * @add_interface: Called when a netdevice attached to the hardware is
e37d4dff 3431 * enabled. Because it is not called for monitor mode devices, @start
75a5f0cc
JB
3432 * and @stop must be implemented.
3433 * The driver should perform any initialization it needs before
3434 * the device can be enabled. The initial configuration for the
3435 * interface is given in the conf parameter.
3436 * The callback may refuse to add an interface by returning a
3437 * negative error code (which will be seen in userspace.)
e1781ed3 3438 * Must be implemented and can sleep.
75a5f0cc 3439 *
34d4bc4d
JB
3440 * @change_interface: Called when a netdevice changes type. This callback
3441 * is optional, but only if it is supported can interface types be
3442 * switched while the interface is UP. The callback may sleep.
3443 * Note that while an interface is being switched, it will not be
3444 * found by the interface iteration callbacks.
3445 *
75a5f0cc
JB
3446 * @remove_interface: Notifies a driver that an interface is going down.
3447 * The @stop callback is called after this if it is the last interface
3448 * and no monitor interfaces are present.
3449 * When all interfaces are removed, the MAC address in the hardware
3450 * must be cleared so the device no longer acknowledges packets,
3451 * the mac_addr member of the conf structure is, however, set to the
3452 * MAC address of the device going away.
e1781ed3 3453 * Hence, this callback must be implemented. It can sleep.
75a5f0cc
JB
3454 *
3455 * @config: Handler for configuration requests. IEEE 802.11 code calls this
3456 * function to change hardware configuration, e.g., channel.
6dd1bf31 3457 * This function should never fail but returns a negative error code
e1781ed3 3458 * if it does. The callback can sleep.
75a5f0cc 3459 *
471b3efd
JB
3460 * @bss_info_changed: Handler for configuration requests related to BSS
3461 * parameters that may vary during BSS's lifespan, and may affect low
3462 * level driver (e.g. assoc/disassoc status, erp parameters).
3463 * This function should not be used if no BSS has been set, unless
3464 * for association indication. The @changed parameter indicates which
e1781ed3
KV
3465 * of the bss parameters has changed when a call is made. The callback
3466 * can sleep.
471b3efd 3467 *
3ac64bee
JB
3468 * @prepare_multicast: Prepare for multicast filter configuration.
3469 * This callback is optional, and its return value is passed
3470 * to configure_filter(). This callback must be atomic.
3471 *
75a5f0cc
JB
3472 * @configure_filter: Configure the device's RX filter.
3473 * See the section "Frame filtering" for more information.
e1781ed3 3474 * This callback must be implemented and can sleep.
75a5f0cc 3475 *
1b09b556
AO
3476 * @config_iface_filter: Configure the interface's RX filter.
3477 * This callback is optional and is used to configure which frames
3478 * should be passed to mac80211. The filter_flags is the combination
3479 * of FIF_* flags. The changed_flags is a bit mask that indicates
3480 * which flags are changed.
3481 * This callback can sleep.
3482 *
546c80c9 3483 * @set_tim: Set TIM bit. mac80211 calls this function when a TIM bit
17741cdc 3484 * must be set or cleared for a given STA. Must be atomic.
75a5f0cc
JB
3485 *
3486 * @set_key: See the section "Hardware crypto acceleration"
e1781ed3
KV
3487 * This callback is only called between add_interface and
3488 * remove_interface calls, i.e. while the given virtual interface
dc822b5d 3489 * is enabled.
6dd1bf31 3490 * Returns a negative error code if the key can't be added.
e1781ed3 3491 * The callback can sleep.
75a5f0cc 3492 *
9ae4fda3
EG
3493 * @update_tkip_key: See the section "Hardware crypto acceleration"
3494 * This callback will be called in the context of Rx. Called for drivers
3495 * which set IEEE80211_KEY_FLAG_TKIP_REQ_RX_P1_KEY.
eb807fb2 3496 * The callback must be atomic.
9ae4fda3 3497 *
c68f4b89
JB
3498 * @set_rekey_data: If the device supports GTK rekeying, for example while the
3499 * host is suspended, it can assign this callback to retrieve the data
3500 * necessary to do GTK rekeying, this is the KEK, KCK and replay counter.
3501 * After rekeying was done it should (for example during resume) notify
3502 * userspace of the new replay counter using ieee80211_gtk_rekey_notify().
3503 *
de5fad81
YD
3504 * @set_default_unicast_key: Set the default (unicast) key index, useful for
3505 * WEP when the device sends data packets autonomously, e.g. for ARP
3506 * offloading. The index can be 0-3, or -1 for unsetting it.
3507 *
75a5f0cc 3508 * @hw_scan: Ask the hardware to service the scan request, no need to start
8318d78a 3509 * the scan state machine in stack. The scan must honour the channel
9050bdd8
KV
3510 * configuration done by the regulatory agent in the wiphy's
3511 * registered bands. The hardware (or the driver) needs to make sure
de95a54b
JB
3512 * that power save is disabled.
3513 * The @req ie/ie_len members are rewritten by mac80211 to contain the
3514 * entire IEs after the SSID, so that drivers need not look at these
3515 * at all but just send them after the SSID -- mac80211 includes the
3516 * (extended) supported rates and HT information (where applicable).
3517 * When the scan finishes, ieee80211_scan_completed() must be called;
3518 * note that it also must be called when the scan cannot finish due to
3519 * any error unless this callback returned a negative error code.
e9da68dd
JB
3520 * This callback is also allowed to return the special return value 1,
3521 * this indicates that hardware scan isn't desirable right now and a
3522 * software scan should be done instead. A driver wishing to use this
3523 * capability must ensure its (hardware) scan capabilities aren't
3524 * advertised as more capable than mac80211's software scan is.
e1781ed3 3525 * The callback can sleep.
75a5f0cc 3526 *
b856439b
EP
3527 * @cancel_hw_scan: Ask the low-level tp cancel the active hw scan.
3528 * The driver should ask the hardware to cancel the scan (if possible),
3529 * but the scan will be completed only after the driver will call
3530 * ieee80211_scan_completed().
3531 * This callback is needed for wowlan, to prevent enqueueing a new
3532 * scan_work after the low-level driver was already suspended.
3533 * The callback can sleep.
3534 *
79f460ca
LC
3535 * @sched_scan_start: Ask the hardware to start scanning repeatedly at
3536 * specific intervals. The driver must call the
3537 * ieee80211_sched_scan_results() function whenever it finds results.
3538 * This process will continue until sched_scan_stop is called.
3539 *
3540 * @sched_scan_stop: Tell the hardware to stop an ongoing scheduled scan.
37e3308c 3541 * In this case, ieee80211_sched_scan_stopped() must not be called.
79f460ca 3542 *
80e775bf
MB
3543 * @sw_scan_start: Notifier function that is called just before a software scan
3544 * is started. Can be NULL, if the driver doesn't need this notification.
a344d677
JB
3545 * The mac_addr parameter allows supporting NL80211_SCAN_FLAG_RANDOM_ADDR,
3546 * the driver may set the NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR flag if it
3547 * can use this parameter. The callback can sleep.
80e775bf 3548 *
e1781ed3
KV
3549 * @sw_scan_complete: Notifier function that is called just after a
3550 * software scan finished. Can be NULL, if the driver doesn't need
3551 * this notification.
3552 * The callback can sleep.
80e775bf 3553 *
6dd1bf31
BC
3554 * @get_stats: Return low-level statistics.
3555 * Returns zero if statistics are available.
e1781ed3 3556 * The callback can sleep.
75a5f0cc 3557 *
9352c19f
JB
3558 * @get_key_seq: If your device implements encryption in hardware and does
3559 * IV/PN assignment then this callback should be provided to read the
3560 * IV/PN for the given key from hardware.
e1781ed3 3561 * The callback must be atomic.
75a5f0cc 3562 *
f23a4780 3563 * @set_frag_threshold: Configuration of fragmentation threshold. Assign this
f3fe4e93
SS
3564 * if the device does fragmentation by itself. Note that to prevent the
3565 * stack from doing fragmentation IEEE80211_HW_SUPPORTS_TX_FRAG
3566 * should be set as well.
f23a4780
AN
3567 * The callback can sleep.
3568 *
75a5f0cc 3569 * @set_rts_threshold: Configuration of RTS threshold (if device needs it)
e1781ed3 3570 * The callback can sleep.
75a5f0cc 3571 *
34e89507
JB
3572 * @sta_add: Notifies low level driver about addition of an associated station,
3573 * AP, IBSS/WDS/mesh peer etc. This callback can sleep.
3574 *
3575 * @sta_remove: Notifies low level driver about removal of an associated
6a9d1b91
JB
3576 * station, AP, IBSS/WDS/mesh peer etc. Note that after the callback
3577 * returns it isn't safe to use the pointer, not even RCU protected;
3578 * no RCU grace period is guaranteed between returning here and freeing
3579 * the station. See @sta_pre_rcu_remove if needed.
3580 * This callback can sleep.
34e89507 3581 *
77d2ece6
SM
3582 * @sta_add_debugfs: Drivers can use this callback to add debugfs files
3583 * when a station is added to mac80211's station list. This callback
c7e9dbcf
JB
3584 * should be within a CONFIG_MAC80211_DEBUGFS conditional. This
3585 * callback can sleep.
77d2ece6 3586 *
34e89507 3587 * @sta_notify: Notifies low level driver about power state transition of an
d057e5a3
AN
3588 * associated station, AP, IBSS/WDS/mesh peer etc. For a VIF operating
3589 * in AP mode, this callback will not be called when the flag
3590 * %IEEE80211_HW_AP_LINK_PS is set. Must be atomic.
4571d3bf 3591 *
07e97338
QH
3592 * @sta_set_txpwr: Configure the station tx power. This callback set the tx
3593 * power for the station.
3594 * This callback can sleep.
3595 *
f09603a2
JB
3596 * @sta_state: Notifies low level driver about state transition of a
3597 * station (which can be the AP, a client, IBSS/WDS/mesh peer etc.)
3598 * This callback is mutually exclusive with @sta_add/@sta_remove.
3599 * It must not fail for down transitions but may fail for transitions
6a9d1b91
JB
3600 * up the list of states. Also note that after the callback returns it
3601 * isn't safe to use the pointer, not even RCU protected - no RCU grace
3602 * period is guaranteed between returning here and freeing the station.
3603 * See @sta_pre_rcu_remove if needed.
3604 * The callback can sleep.
3605 *
3606 * @sta_pre_rcu_remove: Notify driver about station removal before RCU
3607 * synchronisation. This is useful if a driver needs to have station
3608 * pointers protected using RCU, it can then use this call to clear
3609 * the pointers instead of waiting for an RCU grace period to elapse
3610 * in @sta_state.
f09603a2
JB
3611 * The callback can sleep.
3612 *
8f727ef3
JB
3613 * @sta_rc_update: Notifies the driver of changes to the bitrates that can be
3614 * used to transmit to the station. The changes are advertised with bits
3615 * from &enum ieee80211_rate_control_changed and the values are reflected
3616 * in the station data. This callback should only be used when the driver
3617 * uses hardware rate control (%IEEE80211_HW_HAS_RATE_CONTROL) since
3618 * otherwise the rate control algorithm is notified directly.
3619 * Must be atomic.
f815e2b3
JB
3620 * @sta_rate_tbl_update: Notifies the driver that the rate table changed. This
3621 * is only used if the configured rate control algorithm actually uses
3622 * the new rate table API, and is therefore optional. Must be atomic.
8f727ef3 3623 *
2b9a7e1b
JB
3624 * @sta_statistics: Get statistics for this station. For example with beacon
3625 * filtering, the statistics kept by mac80211 might not be accurate, so
3626 * let the driver pre-fill the statistics. The driver can fill most of
3627 * the values (indicating which by setting the filled bitmap), but not
3628 * all of them make sense - see the source for which ones are possible.
3629 * Statistics that the driver doesn't fill will be filled by mac80211.
3630 * The callback can sleep.
3631 *
75a5f0cc 3632 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
fe3fa827 3633 * bursting) for a hardware TX queue.
6dd1bf31 3634 * Returns a negative error code on failure.
e1781ed3 3635 * The callback can sleep.
75a5f0cc 3636 *
75a5f0cc 3637 * @get_tsf: Get the current TSF timer value from firmware/hardware. Currently,
3b5d665b 3638 * this is only used for IBSS mode BSSID merging and debugging. Is not a
7b08b3b4 3639 * required function.
e1781ed3 3640 * The callback can sleep.
3b5d665b
AF
3641 *
3642 * @set_tsf: Set the TSF timer to the specified value in the firmware/hardware.
ad24b0da 3643 * Currently, this is only used for IBSS mode debugging. Is not a
7b08b3b4 3644 * required function.
e1781ed3 3645 * The callback can sleep.
75a5f0cc 3646 *
354d381b
PT
3647 * @offset_tsf: Offset the TSF timer by the specified value in the
3648 * firmware/hardware. Preferred to set_tsf as it avoids delay between
3649 * calling set_tsf() and hardware getting programmed, which will show up
3650 * as TSF delay. Is not a required function.
3651 * The callback can sleep.
3652 *
75a5f0cc
JB
3653 * @reset_tsf: Reset the TSF timer and allow firmware/hardware to synchronize
3654 * with other STAs in the IBSS. This is only used in IBSS mode. This
3655 * function is optional if the firmware/hardware takes full care of
3656 * TSF synchronization.
e1781ed3 3657 * The callback can sleep.
75a5f0cc 3658 *
75a5f0cc
JB
3659 * @tx_last_beacon: Determine whether the last IBSS beacon was sent by us.
3660 * This is needed only for IBSS mode and the result of this function is
3661 * used to determine whether to reply to Probe Requests.
6dd1bf31 3662 * Returns non-zero if this device sent the last beacon.
e1781ed3 3663 * The callback can sleep.
d3c990fb 3664 *
4e8998f0
RD
3665 * @get_survey: Return per-channel survey information
3666 *
1f87f7d3
JB
3667 * @rfkill_poll: Poll rfkill hardware state. If you need this, you also
3668 * need to set wiphy->rfkill_poll to %true before registration,
3669 * and need to call wiphy_rfkill_set_hw_state() in the callback.
e1781ed3 3670 * The callback can sleep.
aff89a9b 3671 *
310bc676
LT
3672 * @set_coverage_class: Set slot time for given coverage class as specified
3673 * in IEEE 802.11-2007 section 17.3.8.6 and modify ACK timeout
a4bcaf55
LB
3674 * accordingly; coverage class equals to -1 to enable ACK timeout
3675 * estimation algorithm (dynack). To disable dynack set valid value for
3676 * coverage class. This callback is not required and may sleep.
310bc676 3677 *
52981cd7
DS
3678 * @testmode_cmd: Implement a cfg80211 test mode command. The passed @vif may
3679 * be %NULL. The callback can sleep.
71063f0e 3680 * @testmode_dump: Implement a cfg80211 test mode dump. The callback can sleep.
a80f7c0b
JB
3681 *
3682 * @flush: Flush all pending frames from the hardware queue, making sure
39ecc01d
JB
3683 * that the hardware queues are empty. The @queues parameter is a bitmap
3684 * of queues to flush, which is useful if different virtual interfaces
3685 * use different hardware queues; it may also indicate all queues.
3686 * If the parameter @drop is set to %true, pending frames may be dropped.
77be2c54 3687 * Note that vif can be NULL.
39ecc01d 3688 * The callback can sleep.
5ce6e438
JB
3689 *
3690 * @channel_switch: Drivers that need (or want) to offload the channel
3691 * switch operation for CSAs received from the AP may implement this
3692 * callback. They must then call ieee80211_chswitch_done() to indicate
3693 * completion of the channel switch.
4e6cbfd0 3694 *
79b1c460
BR
3695 * @set_antenna: Set antenna configuration (tx_ant, rx_ant) on the device.
3696 * Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may
3697 * reject TX/RX mask combinations they cannot support by returning -EINVAL
3698 * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX).
3699 *
3700 * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant).
4976b4eb
JB
3701 *
3702 * @remain_on_channel: Starts an off-channel period on the given channel, must
3703 * call back to ieee80211_ready_on_channel() when on that channel. Note
3704 * that normal channel traffic is not stopped as this is intended for hw
3705 * offload. Frames to transmit on the off-channel channel are transmitted
3706 * normally except for the %IEEE80211_TX_CTL_TX_OFFCHAN flag. When the
3707 * duration (which will always be non-zero) expires, the driver must call
196ac1c1 3708 * ieee80211_remain_on_channel_expired().
196ac1c1
JB
3709 * Note that this callback may be called while the device is in IDLE and
3710 * must be accepted in this case.
3711 * This callback may sleep.
4976b4eb
JB
3712 * @cancel_remain_on_channel: Requests that an ongoing off-channel period is
3713 * aborted before it expires. This callback may sleep.
38c09159
JL
3714 *
3715 * @set_ringparam: Set tx and rx ring sizes.
3716 *
3717 * @get_ringparam: Get tx and rx ring current and maximum sizes.
e8306f98
VN
3718 *
3719 * @tx_frames_pending: Check if there is any pending frame in the hardware
3720 * queues before entering power save.
bdbfd6b5
SM
3721 *
3722 * @set_bitrate_mask: Set a mask of rates to be used for rate control selection
3723 * when transmitting a frame. Currently only legacy rates are handled.
3724 * The callback can sleep.
a8182929
EG
3725 * @event_callback: Notify driver about any event in mac80211. See
3726 * &enum ieee80211_event_type for the different types.
6382246e 3727 * The callback must be atomic.
4049e09a
JB
3728 *
3729 * @release_buffered_frames: Release buffered frames according to the given
3730 * parameters. In the case where the driver buffers some frames for
3731 * sleeping stations mac80211 will use this callback to tell the driver
3732 * to release some frames, either for PS-poll or uAPSD.
e227867f 3733 * Note that if the @more_data parameter is %false the driver must check
4049e09a
JB
3734 * if there are more frames on the given TIDs, and if there are more than
3735 * the frames being released then it must still set the more-data bit in
3736 * the frame. If the @more_data parameter is %true, then of course the
3737 * more-data bit must always be set.
3738 * The @tids parameter tells the driver which TIDs to release frames
3739 * from, for PS-poll it will always have only a single bit set.
deeaee19
JB
3740 * In the case this is used for a PS-poll initiated release, the
3741 * @num_frames parameter will always be 1 so code can be shared. In
3742 * this case the driver must also set %IEEE80211_TX_STATUS_EOSP flag
3743 * on the TX status (and must report TX status) so that the PS-poll
3744 * period is properly ended. This is used to avoid sending multiple
3745 * responses for a retried PS-poll frame.
4049e09a
JB
3746 * In the case this is used for uAPSD, the @num_frames parameter may be
3747 * bigger than one, but the driver may send fewer frames (it must send
3748 * at least one, however). In this case it is also responsible for
47086fc5
JB
3749 * setting the EOSP flag in the QoS header of the frames. Also, when the
3750 * service period ends, the driver must set %IEEE80211_TX_STATUS_EOSP
37fbd908 3751 * on the last frame in the SP. Alternatively, it may call the function
e943789e 3752 * ieee80211_sta_eosp() to inform mac80211 of the end of the SP.
4049e09a 3753 * This callback must be atomic.
40b96408
JB
3754 * @allow_buffered_frames: Prepare device to allow the given number of frames
3755 * to go out to the given station. The frames will be sent by mac80211
3756 * via the usual TX path after this call. The TX information for frames
02f2f1a9 3757 * released will also have the %IEEE80211_TX_CTL_NO_PS_BUFFER flag set
40b96408
JB
3758 * and the last one will also have %IEEE80211_TX_STATUS_EOSP set. In case
3759 * frames from multiple TIDs are released and the driver might reorder
3760 * them between the TIDs, it must set the %IEEE80211_TX_STATUS_EOSP flag
3761 * on the last frame and clear it on all others and also handle the EOSP
37fbd908 3762 * bit in the QoS header correctly. Alternatively, it can also call the
e943789e 3763 * ieee80211_sta_eosp() function.
40b96408
JB
3764 * The @tids parameter is a bitmap and tells the driver which TIDs the
3765 * frames will be on; it will at most have two bits set.
3766 * This callback must be atomic.
e352114f
BG
3767 *
3768 * @get_et_sset_count: Ethtool API to get string-set count.
3769 *
3770 * @get_et_stats: Ethtool API to get a set of u64 stats.
3771 *
3772 * @get_et_strings: Ethtool API to get a set of strings to describe stats
3773 * and perhaps other supported types of ethtool data-sets.
3774 *
a1845fc7
JB
3775 * @mgd_prepare_tx: Prepare for transmitting a management frame for association
3776 * before associated. In multi-channel scenarios, a virtual interface is
3777 * bound to a channel before it is associated, but as it isn't associated
3778 * yet it need not necessarily be given airtime, in particular since any
3779 * transmission to a P2P GO needs to be synchronized against the GO's
3780 * powersave state. mac80211 will call this function before transmitting a
3781 * management frame prior to having successfully associated to allow the
3782 * driver to give it channel time for the transmission, to get a response
3783 * and to be able to synchronize with the GO.
94ba9271
IP
3784 * For drivers that set %IEEE80211_HW_DEAUTH_NEED_MGD_TX_PREP, mac80211
3785 * would also call this function before transmitting a deauthentication
3786 * frame in case that no beacon was heard from the AP/P2P GO.
a1845fc7
JB
3787 * The callback will be called before each transmission and upon return
3788 * mac80211 will transmit the frame right away.
15fae341
JB
3789 * Additional information is passed in the &struct ieee80211_prep_tx_info
3790 * data. If duration there is greater than zero, mac80211 hints to the
3791 * driver the duration for which the operation is requested.
a1845fc7 3792 * The callback is optional and can (should!) sleep.
15fae341
JB
3793 * @mgd_complete_tx: Notify the driver that the response frame for a previously
3794 * transmitted frame announced with @mgd_prepare_tx was received, the data
3795 * is filled similarly to @mgd_prepare_tx though the duration is not used.
c3645eac 3796 *
ee10f2c7
AN
3797 * @mgd_protect_tdls_discover: Protect a TDLS discovery session. After sending
3798 * a TDLS discovery-request, we expect a reply to arrive on the AP's
3799 * channel. We must stay on the channel (no PSM, scan, etc.), since a TDLS
3800 * setup-response is a direct packet not buffered by the AP.
3801 * mac80211 will call this function just before the transmission of a TDLS
3802 * discovery-request. The recommended period of protection is at least
3803 * 2 * (DTIM period).
3804 * The callback is optional and can sleep.
3805 *
c3645eac 3806 * @add_chanctx: Notifies device driver about new channel context creation.
dcae9e02 3807 * This callback may sleep.
c3645eac 3808 * @remove_chanctx: Notifies device driver about channel context destruction.
dcae9e02 3809 * This callback may sleep.
c3645eac
MK
3810 * @change_chanctx: Notifies device driver about channel context changes that
3811 * may happen when combining different virtual interfaces on the same
3812 * channel context with different settings
dcae9e02 3813 * This callback may sleep.
c3645eac
MK
3814 * @assign_vif_chanctx: Notifies device driver about channel context being bound
3815 * to vif. Possible use is for hw queue remapping.
dcae9e02 3816 * This callback may sleep.
c3645eac
MK
3817 * @unassign_vif_chanctx: Notifies device driver about channel context being
3818 * unbound from vif.
dcae9e02 3819 * This callback may sleep.
1a5f0c13
LC
3820 * @switch_vif_chanctx: switch a number of vifs from one chanctx to
3821 * another, as specified in the list of
3822 * @ieee80211_vif_chanctx_switch passed to the driver, according
3823 * to the mode defined in &ieee80211_chanctx_switch_mode.
dcae9e02 3824 * This callback may sleep.
1a5f0c13 3825 *
1041638f
JB
3826 * @start_ap: Start operation on the AP interface, this is called after all the
3827 * information in bss_conf is set and beacon can be retrieved. A channel
3828 * context is bound before this is called. Note that if the driver uses
3829 * software scan or ROC, this (and @stop_ap) isn't called when the AP is
3830 * just "paused" for scanning/ROC, which is indicated by the beacon being
3831 * disabled/enabled via @bss_info_changed.
3832 * @stop_ap: Stop operation on the AP interface.
9214ad7f 3833 *
cf2c92d8
EP
3834 * @reconfig_complete: Called after a call to ieee80211_restart_hw() and
3835 * during resume, when the reconfiguration has completed.
3836 * This can help the driver implement the reconfiguration step (and
3837 * indicate mac80211 is ready to receive frames).
3838 * This callback may sleep.
8f21b0ad 3839 *
a65240c1
JB
3840 * @ipv6_addr_change: IPv6 address assignment on the given interface changed.
3841 * Currently, this is only called for managed or P2P client interfaces.
3842 * This callback is optional; it must not sleep.
73da7d5b
SW
3843 *
3844 * @channel_switch_beacon: Starts a channel switch to a new channel.
3845 * Beacons are modified to include CSA or ECSA IEs before calling this
3846 * function. The corresponding count fields in these IEs must be
66e01cf9 3847 * decremented, and when they reach 1 the driver must call
73da7d5b
SW
3848 * ieee80211_csa_finish(). Drivers which use ieee80211_beacon_get()
3849 * get the csa counter decremented by mac80211, but must check if it is
8552a434 3850 * 1 using ieee80211_beacon_counter_is_complete() after the beacon has been
73da7d5b 3851 * transmitted and then call ieee80211_csa_finish().
66e01cf9
LC
3852 * If the CSA count starts as zero or 1, this function will not be called,
3853 * since there won't be any time to beacon before the switch anyway.
6d027bcc
LC
3854 * @pre_channel_switch: This is an optional callback that is called
3855 * before a channel switch procedure is started (ie. when a STA
9332ef9d 3856 * gets a CSA or a userspace initiated channel-switch), allowing
6d027bcc 3857 * the driver to prepare for the channel switch.
f1d65583
LC
3858 * @post_channel_switch: This is an optional callback that is called
3859 * after a channel switch procedure is completed, allowing the
3860 * driver to go back to a normal configuration.
b9cc81d8
SS
3861 * @abort_channel_switch: This is an optional callback that is called
3862 * when channel switch procedure was completed, allowing the
3863 * driver to go back to a normal configuration.
fafd2bce
SS
3864 * @channel_switch_rx_beacon: This is an optional callback that is called
3865 * when channel switch procedure is in progress and additional beacon with
3866 * CSA IE was received, allowing driver to track changes in count.
55fff501
JB
3867 * @join_ibss: Join an IBSS (on an IBSS interface); this is called after all
3868 * information in bss_conf is set up and the beacon can be retrieved. A
3869 * channel context is bound before this is called.
3870 * @leave_ibss: Leave the IBSS again.
cca674d4
AQ
3871 *
3872 * @get_expected_throughput: extract the expected throughput towards the
3873 * specified station. The returned value is expressed in Kbps. It returns 0
3874 * if the RC algorithm does not have proper data to provide.
5b3dc42b
FF
3875 *
3876 * @get_txpower: get current maximum tx power (in dBm) based on configuration
3877 * and hardware limits.
a7a6bdd0
AN
3878 *
3879 * @tdls_channel_switch: Start channel-switching with a TDLS peer. The driver
3880 * is responsible for continually initiating channel-switching operations
3881 * and returning to the base channel for communication with the AP. The
3882 * driver receives a channel-switch request template and the location of
3883 * the switch-timing IE within the template as part of the invocation.
3884 * The template is valid only within the call, and the driver can
3885 * optionally copy the skb for further re-use.
3886 * @tdls_cancel_channel_switch: Stop channel-switching with a TDLS peer. Both
3887 * peers must be on the base channel when the call completes.
8a4d32f3
AN
3888 * @tdls_recv_channel_switch: a TDLS channel-switch related frame (request or
3889 * response) has been received from a remote peer. The driver gets
3890 * parameters parsed from the incoming frame and may use them to continue
3891 * an ongoing channel-switch operation. In addition, a channel-switch
3892 * response template is provided, together with the location of the
3893 * switch-timing IE within the template. The skb can only be used within
3894 * the function call.
ba8c3d6f
FF
3895 *
3896 * @wake_tx_queue: Called when new packets have been added to the queue.
f59374eb
SS
3897 * @sync_rx_queues: Process all pending frames in RSS queues. This is a
3898 * synchronization which is needed in case driver has in its RSS queues
3899 * pending frames that were received prior to the control path action
3900 * currently taken (e.g. disassociation) but are not processed yet.
708d50ed
AB
3901 *
3902 * @start_nan: join an existing NAN cluster, or create a new one.
3903 * @stop_nan: leave the NAN cluster.
5953ff6d
AB
3904 * @nan_change_conf: change NAN configuration. The data in cfg80211_nan_conf
3905 * contains full new configuration and changes specify which parameters
3906 * are changed with respect to the last NAN config.
3907 * The driver gets both full configuration and the changed parameters since
3908 * some devices may need the full configuration while others need only the
3909 * changed parameters.
167e33f4
AB
3910 * @add_nan_func: Add a NAN function. Returns 0 on success. The data in
3911 * cfg80211_nan_func must not be referenced outside the scope of
3912 * this call.
3913 * @del_nan_func: Remove a NAN function. The driver must call
3914 * ieee80211_nan_func_terminated() with
3915 * NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST reason code upon removal.
9739fe29
SS
3916 * @can_aggregate_in_amsdu: Called in order to determine if HW supports
3917 * aggregating two specific frames in the same A-MSDU. The relation
3918 * between the skbs should be symmetric and transitive. Note that while
3919 * skb is always a real frame, head may or may not be an A-MSDU.
bc847970
PKC
3920 * @get_ftm_responder_stats: Retrieve FTM responder statistics, if available.
3921 * Statistics should be cumulative, currently no way to reset is provided.
cee7013b
JB
3922 *
3923 * @start_pmsr: start peer measurement (e.g. FTM) (this call can sleep)
3924 * @abort_pmsr: abort peer measurement (this call can sleep)
370f51d5
T
3925 * @set_tid_config: Apply TID specific configurations. This callback may sleep.
3926 * @reset_tid_config: Reset TID specific configuration for the peer.
3927 * This callback may sleep.
7fba53eb 3928 * @update_vif_offload: Update virtual interface offload flags
6aea26ce 3929 * This callback may sleep.
1ff4e8f2
FF
3930 * @sta_set_4addr: Called to notify the driver when a station starts/stops using
3931 * 4-address mode
70b6ff35 3932 * @set_sar_specs: Update the SAR (TX power) settings.
80a915ec
FF
3933 * @sta_set_decap_offload: Called to notify the driver when a station is allowed
3934 * to use rx decapsulation offload
f5a4c24e
LB
3935 * @add_twt_setup: Update hw with TWT agreement parameters received from the peer.
3936 * This callback allows the hw to check if requested parameters
3937 * are supported and if there is enough room for a new agreement.
3938 * The hw is expected to set agreement result in the req_type field of
3939 * twt structure.
3940 * @twt_teardown_request: Update the hw with TWT teardown request received
3941 * from the peer.
a95bfb87 3942 * @set_radar_background: Configure dedicated offchannel chain available for
237337c2
LB
3943 * radar/CAC detection on some hw. This chain can't be used to transmit
3944 * or receive frames and it is bounded to a running wdev.
a95bfb87 3945 * Background radar/CAC detection allows to avoid the CAC downtime
237337c2
LB
3946 * switching to a different channel during CAC detection on the selected
3947 * radar channel.
3948 * The caller is expected to set chandef pointer to NULL in order to
a95bfb87 3949 * disable background CAC/radar detection.
d787a3e3
FF
3950 * @net_fill_forward_path: Called from .ndo_fill_forward_path in order to
3951 * resolve a path for hardware flow offloading
75a5f0cc 3952 */
f0706e82 3953struct ieee80211_ops {
36323f81
TH
3954 void (*tx)(struct ieee80211_hw *hw,
3955 struct ieee80211_tx_control *control,
3956 struct sk_buff *skb);
4150c572 3957 int (*start)(struct ieee80211_hw *hw);
4150c572 3958 void (*stop)(struct ieee80211_hw *hw);
eecc4800
JB
3959#ifdef CONFIG_PM
3960 int (*suspend)(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan);
3961 int (*resume)(struct ieee80211_hw *hw);
6d52563f 3962 void (*set_wakeup)(struct ieee80211_hw *hw, bool enabled);
eecc4800 3963#endif
f0706e82 3964 int (*add_interface)(struct ieee80211_hw *hw,
1ed32e4f 3965 struct ieee80211_vif *vif);
34d4bc4d
JB
3966 int (*change_interface)(struct ieee80211_hw *hw,
3967 struct ieee80211_vif *vif,
2ca27bcf 3968 enum nl80211_iftype new_type, bool p2p);
f0706e82 3969 void (*remove_interface)(struct ieee80211_hw *hw,
1ed32e4f 3970 struct ieee80211_vif *vif);
e8975581 3971 int (*config)(struct ieee80211_hw *hw, u32 changed);
471b3efd
JB
3972 void (*bss_info_changed)(struct ieee80211_hw *hw,
3973 struct ieee80211_vif *vif,
3974 struct ieee80211_bss_conf *info,
3975 u32 changed);
b2abb6e2 3976
1041638f
JB
3977 int (*start_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
3978 void (*stop_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
3979
3ac64bee 3980 u64 (*prepare_multicast)(struct ieee80211_hw *hw,
22bedad3 3981 struct netdev_hw_addr_list *mc_list);
4150c572
JB
3982 void (*configure_filter)(struct ieee80211_hw *hw,
3983 unsigned int changed_flags,
3984 unsigned int *total_flags,
3ac64bee 3985 u64 multicast);
1b09b556
AO
3986 void (*config_iface_filter)(struct ieee80211_hw *hw,
3987 struct ieee80211_vif *vif,
3988 unsigned int filter_flags,
3989 unsigned int changed_flags);
17741cdc
JB
3990 int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
3991 bool set);
ea49c359 3992 int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd,
dc822b5d 3993 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
11a843b7 3994 struct ieee80211_key_conf *key);
9ae4fda3 3995 void (*update_tkip_key)(struct ieee80211_hw *hw,
b3fbdcf4
JB
3996 struct ieee80211_vif *vif,
3997 struct ieee80211_key_conf *conf,
3998 struct ieee80211_sta *sta,
3999 u32 iv32, u16 *phase1key);
c68f4b89
JB
4000 void (*set_rekey_data)(struct ieee80211_hw *hw,
4001 struct ieee80211_vif *vif,
4002 struct cfg80211_gtk_rekey_data *data);
de5fad81
YD
4003 void (*set_default_unicast_key)(struct ieee80211_hw *hw,
4004 struct ieee80211_vif *vif, int idx);
a060bbfe 4005 int (*hw_scan)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
c56ef672 4006 struct ieee80211_scan_request *req);
b856439b
EP
4007 void (*cancel_hw_scan)(struct ieee80211_hw *hw,
4008 struct ieee80211_vif *vif);
79f460ca
LC
4009 int (*sched_scan_start)(struct ieee80211_hw *hw,
4010 struct ieee80211_vif *vif,
4011 struct cfg80211_sched_scan_request *req,
633e2713 4012 struct ieee80211_scan_ies *ies);
37e3308c 4013 int (*sched_scan_stop)(struct ieee80211_hw *hw,
79f460ca 4014 struct ieee80211_vif *vif);
a344d677
JB
4015 void (*sw_scan_start)(struct ieee80211_hw *hw,
4016 struct ieee80211_vif *vif,
4017 const u8 *mac_addr);
4018 void (*sw_scan_complete)(struct ieee80211_hw *hw,
4019 struct ieee80211_vif *vif);
f0706e82
JB
4020 int (*get_stats)(struct ieee80211_hw *hw,
4021 struct ieee80211_low_level_stats *stats);
9352c19f
JB
4022 void (*get_key_seq)(struct ieee80211_hw *hw,
4023 struct ieee80211_key_conf *key,
4024 struct ieee80211_key_seq *seq);
f23a4780 4025 int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value);
f0706e82 4026 int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value);
34e89507
JB
4027 int (*sta_add)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4028 struct ieee80211_sta *sta);
4029 int (*sta_remove)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4030 struct ieee80211_sta *sta);
77d2ece6
SM
4031#ifdef CONFIG_MAC80211_DEBUGFS
4032 void (*sta_add_debugfs)(struct ieee80211_hw *hw,
4033 struct ieee80211_vif *vif,
4034 struct ieee80211_sta *sta,
4035 struct dentry *dir);
77d2ece6 4036#endif
32bfd35d 4037 void (*sta_notify)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
17741cdc 4038 enum sta_notify_cmd, struct ieee80211_sta *sta);
ba905bf4
ARN
4039 int (*sta_set_txpwr)(struct ieee80211_hw *hw,
4040 struct ieee80211_vif *vif,
4041 struct ieee80211_sta *sta);
f09603a2
JB
4042 int (*sta_state)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4043 struct ieee80211_sta *sta,
4044 enum ieee80211_sta_state old_state,
4045 enum ieee80211_sta_state new_state);
6a9d1b91
JB
4046 void (*sta_pre_rcu_remove)(struct ieee80211_hw *hw,
4047 struct ieee80211_vif *vif,
4048 struct ieee80211_sta *sta);
8f727ef3
JB
4049 void (*sta_rc_update)(struct ieee80211_hw *hw,
4050 struct ieee80211_vif *vif,
4051 struct ieee80211_sta *sta,
4052 u32 changed);
f815e2b3
JB
4053 void (*sta_rate_tbl_update)(struct ieee80211_hw *hw,
4054 struct ieee80211_vif *vif,
4055 struct ieee80211_sta *sta);
2b9a7e1b
JB
4056 void (*sta_statistics)(struct ieee80211_hw *hw,
4057 struct ieee80211_vif *vif,
4058 struct ieee80211_sta *sta,
4059 struct station_info *sinfo);
8a3a3c85 4060 int (*conf_tx)(struct ieee80211_hw *hw,
a3304b0a 4061 struct ieee80211_vif *vif, u16 ac,
f0706e82 4062 const struct ieee80211_tx_queue_params *params);
37a41b4a
EP
4063 u64 (*get_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
4064 void (*set_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4065 u64 tsf);
354d381b
PT
4066 void (*offset_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4067 s64 offset);
37a41b4a 4068 void (*reset_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
f0706e82 4069 int (*tx_last_beacon)(struct ieee80211_hw *hw);
57eeb208
JB
4070
4071 /**
4072 * @ampdu_action:
4073 * Perform a certain A-MPDU action.
4074 * The RA/TID combination determines the destination and TID we want
4075 * the ampdu action to be performed for. The action is defined through
4076 * ieee80211_ampdu_mlme_action.
4077 * When the action is set to %IEEE80211_AMPDU_TX_OPERATIONAL the driver
4078 * may neither send aggregates containing more subframes than @buf_size
4079 * nor send aggregates in a way that lost frames would exceed the
4080 * buffer size. If just limiting the aggregate size, this would be
4081 * possible with a buf_size of 8:
4082 *
4083 * - ``TX: 1.....7``
4084 * - ``RX: 2....7`` (lost frame #1)
4085 * - ``TX: 8..1...``
4086 *
4087 * which is invalid since #1 was now re-transmitted well past the
4088 * buffer size of 8. Correct ways to retransmit #1 would be:
4089 *
4090 * - ``TX: 1 or``
4091 * - ``TX: 18 or``
4092 * - ``TX: 81``
4093 *
4094 * Even ``189`` would be wrong since 1 could be lost again.
4095 *
2ce113de
JB
4096 * Returns a negative error code on failure. The driver may return
4097 * %IEEE80211_AMPDU_TX_START_IMMEDIATE for %IEEE80211_AMPDU_TX_START
4098 * if the session can start immediately.
4099 *
57eeb208
JB
4100 * The callback can sleep.
4101 */
1b7d03ac 4102 int (*ampdu_action)(struct ieee80211_hw *hw,
c951ad35 4103 struct ieee80211_vif *vif,
50ea05ef 4104 struct ieee80211_ampdu_params *params);
1289723e
HS
4105 int (*get_survey)(struct ieee80211_hw *hw, int idx,
4106 struct survey_info *survey);
1f87f7d3 4107 void (*rfkill_poll)(struct ieee80211_hw *hw);
a4bcaf55 4108 void (*set_coverage_class)(struct ieee80211_hw *hw, s16 coverage_class);
aff89a9b 4109#ifdef CONFIG_NL80211_TESTMODE
52981cd7
DS
4110 int (*testmode_cmd)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4111 void *data, int len);
71063f0e
WYG
4112 int (*testmode_dump)(struct ieee80211_hw *hw, struct sk_buff *skb,
4113 struct netlink_callback *cb,
4114 void *data, int len);
aff89a9b 4115#endif
77be2c54
EG
4116 void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4117 u32 queues, bool drop);
5ce6e438 4118 void (*channel_switch)(struct ieee80211_hw *hw,
0f791eb4 4119 struct ieee80211_vif *vif,
5ce6e438 4120 struct ieee80211_channel_switch *ch_switch);
15d96753
BR
4121 int (*set_antenna)(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant);
4122 int (*get_antenna)(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant);
21f83589
JB
4123
4124 int (*remain_on_channel)(struct ieee80211_hw *hw,
49884568 4125 struct ieee80211_vif *vif,
21f83589 4126 struct ieee80211_channel *chan,
d339d5ca
IP
4127 int duration,
4128 enum ieee80211_roc_type type);
5db4c4b9
EG
4129 int (*cancel_remain_on_channel)(struct ieee80211_hw *hw,
4130 struct ieee80211_vif *vif);
38c09159
JL
4131 int (*set_ringparam)(struct ieee80211_hw *hw, u32 tx, u32 rx);
4132 void (*get_ringparam)(struct ieee80211_hw *hw,
4133 u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);
e8306f98 4134 bool (*tx_frames_pending)(struct ieee80211_hw *hw);
bdbfd6b5
SM
4135 int (*set_bitrate_mask)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4136 const struct cfg80211_bitrate_mask *mask);
a8182929
EG
4137 void (*event_callback)(struct ieee80211_hw *hw,
4138 struct ieee80211_vif *vif,
4139 const struct ieee80211_event *event);
4049e09a 4140
40b96408
JB
4141 void (*allow_buffered_frames)(struct ieee80211_hw *hw,
4142 struct ieee80211_sta *sta,
4143 u16 tids, int num_frames,
4144 enum ieee80211_frame_release_type reason,
4145 bool more_data);
4049e09a
JB
4146 void (*release_buffered_frames)(struct ieee80211_hw *hw,
4147 struct ieee80211_sta *sta,
4148 u16 tids, int num_frames,
4149 enum ieee80211_frame_release_type reason,
4150 bool more_data);
e352114f
BG
4151
4152 int (*get_et_sset_count)(struct ieee80211_hw *hw,
4153 struct ieee80211_vif *vif, int sset);
4154 void (*get_et_stats)(struct ieee80211_hw *hw,
4155 struct ieee80211_vif *vif,
4156 struct ethtool_stats *stats, u64 *data);
4157 void (*get_et_strings)(struct ieee80211_hw *hw,
4158 struct ieee80211_vif *vif,
4159 u32 sset, u8 *data);
a1845fc7
JB
4160
4161 void (*mgd_prepare_tx)(struct ieee80211_hw *hw,
d4e36e55 4162 struct ieee80211_vif *vif,
15fae341
JB
4163 struct ieee80211_prep_tx_info *info);
4164 void (*mgd_complete_tx)(struct ieee80211_hw *hw,
4165 struct ieee80211_vif *vif,
4166 struct ieee80211_prep_tx_info *info);
c3645eac 4167
ee10f2c7
AN
4168 void (*mgd_protect_tdls_discover)(struct ieee80211_hw *hw,
4169 struct ieee80211_vif *vif);
4170
c3645eac
MK
4171 int (*add_chanctx)(struct ieee80211_hw *hw,
4172 struct ieee80211_chanctx_conf *ctx);
4173 void (*remove_chanctx)(struct ieee80211_hw *hw,
4174 struct ieee80211_chanctx_conf *ctx);
4175 void (*change_chanctx)(struct ieee80211_hw *hw,
4176 struct ieee80211_chanctx_conf *ctx,
4177 u32 changed);
4178 int (*assign_vif_chanctx)(struct ieee80211_hw *hw,
4179 struct ieee80211_vif *vif,
4180 struct ieee80211_chanctx_conf *ctx);
4181 void (*unassign_vif_chanctx)(struct ieee80211_hw *hw,
4182 struct ieee80211_vif *vif,
4183 struct ieee80211_chanctx_conf *ctx);
1a5f0c13
LC
4184 int (*switch_vif_chanctx)(struct ieee80211_hw *hw,
4185 struct ieee80211_vif_chanctx_switch *vifs,
4186 int n_vifs,
4187 enum ieee80211_chanctx_switch_mode mode);
9214ad7f 4188
cf2c92d8
EP
4189 void (*reconfig_complete)(struct ieee80211_hw *hw,
4190 enum ieee80211_reconfig_type reconfig_type);
a65240c1
JB
4191
4192#if IS_ENABLED(CONFIG_IPV6)
4193 void (*ipv6_addr_change)(struct ieee80211_hw *hw,
4194 struct ieee80211_vif *vif,
4195 struct inet6_dev *idev);
4196#endif
73da7d5b
SW
4197 void (*channel_switch_beacon)(struct ieee80211_hw *hw,
4198 struct ieee80211_vif *vif,
4199 struct cfg80211_chan_def *chandef);
6d027bcc
LC
4200 int (*pre_channel_switch)(struct ieee80211_hw *hw,
4201 struct ieee80211_vif *vif,
4202 struct ieee80211_channel_switch *ch_switch);
55fff501 4203
f1d65583
LC
4204 int (*post_channel_switch)(struct ieee80211_hw *hw,
4205 struct ieee80211_vif *vif);
b9cc81d8
SS
4206 void (*abort_channel_switch)(struct ieee80211_hw *hw,
4207 struct ieee80211_vif *vif);
fafd2bce
SS
4208 void (*channel_switch_rx_beacon)(struct ieee80211_hw *hw,
4209 struct ieee80211_vif *vif,
4210 struct ieee80211_channel_switch *ch_switch);
f1d65583 4211
55fff501
JB
4212 int (*join_ibss)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
4213 void (*leave_ibss)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
2439ca04
MA
4214 u32 (*get_expected_throughput)(struct ieee80211_hw *hw,
4215 struct ieee80211_sta *sta);
5b3dc42b
FF
4216 int (*get_txpower)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4217 int *dbm);
a7a6bdd0
AN
4218
4219 int (*tdls_channel_switch)(struct ieee80211_hw *hw,
4220 struct ieee80211_vif *vif,
4221 struct ieee80211_sta *sta, u8 oper_class,
4222 struct cfg80211_chan_def *chandef,
8a4d32f3 4223 struct sk_buff *tmpl_skb, u32 ch_sw_tm_ie);
a7a6bdd0
AN
4224 void (*tdls_cancel_channel_switch)(struct ieee80211_hw *hw,
4225 struct ieee80211_vif *vif,
4226 struct ieee80211_sta *sta);
8a4d32f3
AN
4227 void (*tdls_recv_channel_switch)(struct ieee80211_hw *hw,
4228 struct ieee80211_vif *vif,
4229 struct ieee80211_tdls_ch_sw_params *params);
ba8c3d6f 4230
e7881bd5
JB
4231 void (*wake_tx_queue)(struct ieee80211_hw *hw,
4232 struct ieee80211_txq *txq);
f59374eb 4233 void (*sync_rx_queues)(struct ieee80211_hw *hw);
708d50ed
AB
4234
4235 int (*start_nan)(struct ieee80211_hw *hw,
4236 struct ieee80211_vif *vif,
4237 struct cfg80211_nan_conf *conf);
4238 int (*stop_nan)(struct ieee80211_hw *hw,
4239 struct ieee80211_vif *vif);
5953ff6d
AB
4240 int (*nan_change_conf)(struct ieee80211_hw *hw,
4241 struct ieee80211_vif *vif,
4242 struct cfg80211_nan_conf *conf, u32 changes);
167e33f4
AB
4243 int (*add_nan_func)(struct ieee80211_hw *hw,
4244 struct ieee80211_vif *vif,
4245 const struct cfg80211_nan_func *nan_func);
4246 void (*del_nan_func)(struct ieee80211_hw *hw,
4247 struct ieee80211_vif *vif,
4248 u8 instance_id);
9739fe29
SS
4249 bool (*can_aggregate_in_amsdu)(struct ieee80211_hw *hw,
4250 struct sk_buff *head,
4251 struct sk_buff *skb);
bc847970
PKC
4252 int (*get_ftm_responder_stats)(struct ieee80211_hw *hw,
4253 struct ieee80211_vif *vif,
4254 struct cfg80211_ftm_responder_stats *ftm_stats);
cee7013b
JB
4255 int (*start_pmsr)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4256 struct cfg80211_pmsr_request *request);
4257 void (*abort_pmsr)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4258 struct cfg80211_pmsr_request *request);
370f51d5
T
4259 int (*set_tid_config)(struct ieee80211_hw *hw,
4260 struct ieee80211_vif *vif,
4261 struct ieee80211_sta *sta,
4262 struct cfg80211_tid_config *tid_conf);
4263 int (*reset_tid_config)(struct ieee80211_hw *hw,
4264 struct ieee80211_vif *vif,
4265 struct ieee80211_sta *sta, u8 tids);
6aea26ce
FF
4266 void (*update_vif_offload)(struct ieee80211_hw *hw,
4267 struct ieee80211_vif *vif);
1ff4e8f2
FF
4268 void (*sta_set_4addr)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4269 struct ieee80211_sta *sta, bool enabled);
c534e093
CH
4270 int (*set_sar_specs)(struct ieee80211_hw *hw,
4271 const struct cfg80211_sar_specs *sar);
80a915ec
FF
4272 void (*sta_set_decap_offload)(struct ieee80211_hw *hw,
4273 struct ieee80211_vif *vif,
4274 struct ieee80211_sta *sta, bool enabled);
f5a4c24e
LB
4275 void (*add_twt_setup)(struct ieee80211_hw *hw,
4276 struct ieee80211_sta *sta,
4277 struct ieee80211_twt_setup *twt);
4278 void (*twt_teardown_request)(struct ieee80211_hw *hw,
4279 struct ieee80211_sta *sta, u8 flowid);
a95bfb87
LB
4280 int (*set_radar_background)(struct ieee80211_hw *hw,
4281 struct cfg80211_chan_def *chandef);
d787a3e3
FF
4282 int (*net_fill_forward_path)(struct ieee80211_hw *hw,
4283 struct ieee80211_vif *vif,
4284 struct ieee80211_sta *sta,
4285 struct net_device_path_ctx *ctx,
4286 struct net_device_path *path);
f0706e82
JB
4287};
4288
75a5f0cc 4289/**
ad28757e 4290 * ieee80211_alloc_hw_nm - Allocate a new hardware device
75a5f0cc
JB
4291 *
4292 * This must be called once for each hardware device. The returned pointer
4293 * must be used to refer to this device when calling other functions.
4294 * mac80211 allocates a private data area for the driver pointed to by
4295 * @priv in &struct ieee80211_hw, the size of this area is given as
4296 * @priv_data_len.
4297 *
4298 * @priv_data_len: length of private data
4299 * @ops: callbacks for this device
ad28757e
BG
4300 * @requested_name: Requested name for this device.
4301 * NULL is valid value, and means use the default naming (phy%d)
0ae997dc
YB
4302 *
4303 * Return: A pointer to the new hardware device, or %NULL on error.
f0706e82 4304 */
ad28757e
BG
4305struct ieee80211_hw *ieee80211_alloc_hw_nm(size_t priv_data_len,
4306 const struct ieee80211_ops *ops,
4307 const char *requested_name);
4308
4309/**
4310 * ieee80211_alloc_hw - Allocate a new hardware device
4311 *
4312 * This must be called once for each hardware device. The returned pointer
4313 * must be used to refer to this device when calling other functions.
4314 * mac80211 allocates a private data area for the driver pointed to by
4315 * @priv in &struct ieee80211_hw, the size of this area is given as
4316 * @priv_data_len.
4317 *
4318 * @priv_data_len: length of private data
4319 * @ops: callbacks for this device
4320 *
4321 * Return: A pointer to the new hardware device, or %NULL on error.
4322 */
4323static inline
f0706e82 4324struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
ad28757e
BG
4325 const struct ieee80211_ops *ops)
4326{
4327 return ieee80211_alloc_hw_nm(priv_data_len, ops, NULL);
4328}
f0706e82 4329
75a5f0cc
JB
4330/**
4331 * ieee80211_register_hw - Register hardware device
4332 *
dbbea671
JB
4333 * You must call this function before any other functions in
4334 * mac80211. Note that before a hardware can be registered, you
4335 * need to fill the contained wiphy's information.
75a5f0cc
JB
4336 *
4337 * @hw: the device to register as returned by ieee80211_alloc_hw()
0ae997dc
YB
4338 *
4339 * Return: 0 on success. An error code otherwise.
75a5f0cc 4340 */
f0706e82
JB
4341int ieee80211_register_hw(struct ieee80211_hw *hw);
4342
e1e54068
JB
4343/**
4344 * struct ieee80211_tpt_blink - throughput blink description
4345 * @throughput: throughput in Kbit/sec
4346 * @blink_time: blink time in milliseconds
4347 * (full cycle, ie. one off + one on period)
4348 */
4349struct ieee80211_tpt_blink {
4350 int throughput;
4351 int blink_time;
4352};
4353
67408c8c
JB
4354/**
4355 * enum ieee80211_tpt_led_trigger_flags - throughput trigger flags
4356 * @IEEE80211_TPT_LEDTRIG_FL_RADIO: enable blinking with radio
4357 * @IEEE80211_TPT_LEDTRIG_FL_WORK: enable blinking when working
4358 * @IEEE80211_TPT_LEDTRIG_FL_CONNECTED: enable blinking when at least one
4359 * interface is connected in some way, including being an AP
4360 */
4361enum ieee80211_tpt_led_trigger_flags {
4362 IEEE80211_TPT_LEDTRIG_FL_RADIO = BIT(0),
4363 IEEE80211_TPT_LEDTRIG_FL_WORK = BIT(1),
4364 IEEE80211_TPT_LEDTRIG_FL_CONNECTED = BIT(2),
4365};
4366
f0706e82 4367#ifdef CONFIG_MAC80211_LEDS
f5c4ae07
JB
4368const char *__ieee80211_get_tx_led_name(struct ieee80211_hw *hw);
4369const char *__ieee80211_get_rx_led_name(struct ieee80211_hw *hw);
4370const char *__ieee80211_get_assoc_led_name(struct ieee80211_hw *hw);
4371const char *__ieee80211_get_radio_led_name(struct ieee80211_hw *hw);
4372const char *
4373__ieee80211_create_tpt_led_trigger(struct ieee80211_hw *hw,
4374 unsigned int flags,
4375 const struct ieee80211_tpt_blink *blink_table,
4376 unsigned int blink_table_len);
f0706e82 4377#endif
75a5f0cc
JB
4378/**
4379 * ieee80211_get_tx_led_name - get name of TX LED
4380 *
4381 * mac80211 creates a transmit LED trigger for each wireless hardware
4382 * that can be used to drive LEDs if your driver registers a LED device.
4383 * This function returns the name (or %NULL if not configured for LEDs)
4384 * of the trigger so you can automatically link the LED device.
4385 *
4386 * @hw: the hardware to get the LED trigger name for
0ae997dc
YB
4387 *
4388 * Return: The name of the LED trigger. %NULL if not configured for LEDs.
75a5f0cc 4389 */
f5c4ae07 4390static inline const char *ieee80211_get_tx_led_name(struct ieee80211_hw *hw)
f0706e82
JB
4391{
4392#ifdef CONFIG_MAC80211_LEDS
4393 return __ieee80211_get_tx_led_name(hw);
4394#else
4395 return NULL;
4396#endif
4397}
4398
75a5f0cc
JB
4399/**
4400 * ieee80211_get_rx_led_name - get name of RX LED
4401 *
4402 * mac80211 creates a receive LED trigger for each wireless hardware
4403 * that can be used to drive LEDs if your driver registers a LED device.
4404 * This function returns the name (or %NULL if not configured for LEDs)
4405 * of the trigger so you can automatically link the LED device.
4406 *
4407 * @hw: the hardware to get the LED trigger name for
0ae997dc
YB
4408 *
4409 * Return: The name of the LED trigger. %NULL if not configured for LEDs.
75a5f0cc 4410 */
f5c4ae07 4411static inline const char *ieee80211_get_rx_led_name(struct ieee80211_hw *hw)
f0706e82
JB
4412{
4413#ifdef CONFIG_MAC80211_LEDS
4414 return __ieee80211_get_rx_led_name(hw);
4415#else
4416 return NULL;
4417#endif
4418}
4419
cdcb006f
ID
4420/**
4421 * ieee80211_get_assoc_led_name - get name of association LED
4422 *
4423 * mac80211 creates a association LED trigger for each wireless hardware
4424 * that can be used to drive LEDs if your driver registers a LED device.
4425 * This function returns the name (or %NULL if not configured for LEDs)
4426 * of the trigger so you can automatically link the LED device.
4427 *
4428 * @hw: the hardware to get the LED trigger name for
0ae997dc
YB
4429 *
4430 * Return: The name of the LED trigger. %NULL if not configured for LEDs.
cdcb006f 4431 */
f5c4ae07 4432static inline const char *ieee80211_get_assoc_led_name(struct ieee80211_hw *hw)
47f0c502
MB
4433{
4434#ifdef CONFIG_MAC80211_LEDS
4435 return __ieee80211_get_assoc_led_name(hw);
4436#else
4437 return NULL;
4438#endif
4439}
4440
cdcb006f
ID
4441/**
4442 * ieee80211_get_radio_led_name - get name of radio LED
4443 *
4444 * mac80211 creates a radio change LED trigger for each wireless hardware
4445 * that can be used to drive LEDs if your driver registers a LED device.
4446 * This function returns the name (or %NULL if not configured for LEDs)
4447 * of the trigger so you can automatically link the LED device.
4448 *
4449 * @hw: the hardware to get the LED trigger name for
0ae997dc
YB
4450 *
4451 * Return: The name of the LED trigger. %NULL if not configured for LEDs.
cdcb006f 4452 */
f5c4ae07 4453static inline const char *ieee80211_get_radio_led_name(struct ieee80211_hw *hw)
cdcb006f
ID
4454{
4455#ifdef CONFIG_MAC80211_LEDS
4456 return __ieee80211_get_radio_led_name(hw);
4457#else
4458 return NULL;
4459#endif
4460}
47f0c502 4461
e1e54068
JB
4462/**
4463 * ieee80211_create_tpt_led_trigger - create throughput LED trigger
4464 * @hw: the hardware to create the trigger for
67408c8c 4465 * @flags: trigger flags, see &enum ieee80211_tpt_led_trigger_flags
e1e54068
JB
4466 * @blink_table: the blink table -- needs to be ordered by throughput
4467 * @blink_table_len: size of the blink table
4468 *
0ae997dc
YB
4469 * Return: %NULL (in case of error, or if no LED triggers are
4470 * configured) or the name of the new trigger.
4471 *
4472 * Note: This function must be called before ieee80211_register_hw().
e1e54068 4473 */
f5c4ae07 4474static inline const char *
67408c8c 4475ieee80211_create_tpt_led_trigger(struct ieee80211_hw *hw, unsigned int flags,
e1e54068
JB
4476 const struct ieee80211_tpt_blink *blink_table,
4477 unsigned int blink_table_len)
4478{
4479#ifdef CONFIG_MAC80211_LEDS
67408c8c 4480 return __ieee80211_create_tpt_led_trigger(hw, flags, blink_table,
e1e54068
JB
4481 blink_table_len);
4482#else
4483 return NULL;
4484#endif
4485}
4486
75a5f0cc
JB
4487/**
4488 * ieee80211_unregister_hw - Unregister a hardware device
4489 *
4490 * This function instructs mac80211 to free allocated resources
4491 * and unregister netdevices from the networking subsystem.
4492 *
4493 * @hw: the hardware to unregister
4494 */
f0706e82
JB
4495void ieee80211_unregister_hw(struct ieee80211_hw *hw);
4496
75a5f0cc
JB
4497/**
4498 * ieee80211_free_hw - free hardware descriptor
4499 *
4500 * This function frees everything that was allocated, including the
4501 * private data for the driver. You must call ieee80211_unregister_hw()
6ef307bc 4502 * before calling this function.
75a5f0cc
JB
4503 *
4504 * @hw: the hardware to free
4505 */
f0706e82
JB
4506void ieee80211_free_hw(struct ieee80211_hw *hw);
4507
f2753ddb
JB
4508/**
4509 * ieee80211_restart_hw - restart hardware completely
4510 *
4511 * Call this function when the hardware was restarted for some reason
4512 * (hardware error, ...) and the driver is unable to restore its state
4513 * by itself. mac80211 assumes that at this point the driver/hardware
4514 * is completely uninitialised and stopped, it starts the process by
4515 * calling the ->start() operation. The driver will need to reset all
4516 * internal state that it has prior to calling this function.
4517 *
4518 * @hw: the hardware to restart
4519 */
4520void ieee80211_restart_hw(struct ieee80211_hw *hw);
4521
c5d1686b
FF
4522/**
4523 * ieee80211_rx_list - receive frame and store processed skbs in a list
4524 *
4525 * Use this function to hand received frames to mac80211. The receive
4526 * buffer in @skb must start with an IEEE 802.11 header. In case of a
4527 * paged @skb is used, the driver is recommended to put the ieee80211
4528 * header of the frame on the linear part of the @skb to avoid memory
4529 * allocation and/or memcpy by the stack.
4530 *
4531 * This function may not be called in IRQ context. Calls to this function
4532 * for a single hardware must be synchronized against each other. Calls to
4533 * this function, ieee80211_rx_ni() and ieee80211_rx_irqsafe() may not be
4534 * mixed for a single hardware. Must not run concurrently with
4535 * ieee80211_tx_status() or ieee80211_tx_status_ni().
4536 *
4537 * This function must be called with BHs disabled and RCU read lock
4538 *
4539 * @hw: the hardware this frame came in on
4540 * @sta: the station the frame was received from, or %NULL
4541 * @skb: the buffer to receive, owned by mac80211 after this call
4542 * @list: the destination list
4543 */
4544void ieee80211_rx_list(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
4545 struct sk_buff *skb, struct list_head *list);
4546
06d181a8 4547/**
af9f9b22 4548 * ieee80211_rx_napi - receive frame from NAPI context
4e6cbfd0 4549 *
af9f9b22
JB
4550 * Use this function to hand received frames to mac80211. The receive
4551 * buffer in @skb must start with an IEEE 802.11 header. In case of a
4552 * paged @skb is used, the driver is recommended to put the ieee80211
4553 * header of the frame on the linear part of the @skb to avoid memory
4554 * allocation and/or memcpy by the stack.
4555 *
4556 * This function may not be called in IRQ context. Calls to this function
4557 * for a single hardware must be synchronized against each other. Calls to
4558 * this function, ieee80211_rx_ni() and ieee80211_rx_irqsafe() may not be
4559 * mixed for a single hardware. Must not run concurrently with
4560 * ieee80211_tx_status() or ieee80211_tx_status_ni().
4561 *
4562 * This function must be called with BHs disabled.
4563 *
4564 * @hw: the hardware this frame came in on
d63b548f 4565 * @sta: the station the frame was received from, or %NULL
af9f9b22
JB
4566 * @skb: the buffer to receive, owned by mac80211 after this call
4567 * @napi: the NAPI context
4e6cbfd0 4568 */
d63b548f
JB
4569void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
4570 struct sk_buff *skb, struct napi_struct *napi);
4e6cbfd0 4571
75a5f0cc
JB
4572/**
4573 * ieee80211_rx - receive frame
4574 *
4575 * Use this function to hand received frames to mac80211. The receive
e3cf8b3f
ZY
4576 * buffer in @skb must start with an IEEE 802.11 header. In case of a
4577 * paged @skb is used, the driver is recommended to put the ieee80211
4578 * header of the frame on the linear part of the @skb to avoid memory
4579 * allocation and/or memcpy by the stack.
75a5f0cc 4580 *
2485f710 4581 * This function may not be called in IRQ context. Calls to this function
e36e49f7
KV
4582 * for a single hardware must be synchronized against each other. Calls to
4583 * this function, ieee80211_rx_ni() and ieee80211_rx_irqsafe() may not be
f6b3d85f
FF
4584 * mixed for a single hardware. Must not run concurrently with
4585 * ieee80211_tx_status() or ieee80211_tx_status_ni().
75a5f0cc 4586 *
e36e49f7 4587 * In process context use instead ieee80211_rx_ni().
d20ef63d 4588 *
75a5f0cc
JB
4589 * @hw: the hardware this frame came in on
4590 * @skb: the buffer to receive, owned by mac80211 after this call
75a5f0cc 4591 */
af9f9b22
JB
4592static inline void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb)
4593{
d63b548f 4594 ieee80211_rx_napi(hw, NULL, skb, NULL);
af9f9b22 4595}
75a5f0cc
JB
4596
4597/**
4598 * ieee80211_rx_irqsafe - receive frame
4599 *
4600 * Like ieee80211_rx() but can be called in IRQ context
2485f710
JB
4601 * (internally defers to a tasklet.)
4602 *
e36e49f7 4603 * Calls to this function, ieee80211_rx() or ieee80211_rx_ni() may not
f6b3d85f
FF
4604 * be mixed for a single hardware.Must not run concurrently with
4605 * ieee80211_tx_status() or ieee80211_tx_status_ni().
75a5f0cc
JB
4606 *
4607 * @hw: the hardware this frame came in on
4608 * @skb: the buffer to receive, owned by mac80211 after this call
75a5f0cc 4609 */
f1d58c25 4610void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb);
f0706e82 4611
e36e49f7
KV
4612/**
4613 * ieee80211_rx_ni - receive frame (in process context)
4614 *
4615 * Like ieee80211_rx() but can be called in process context
4616 * (internally disables bottom halves).
4617 *
4618 * Calls to this function, ieee80211_rx() and ieee80211_rx_irqsafe() may
f6b3d85f
FF
4619 * not be mixed for a single hardware. Must not run concurrently with
4620 * ieee80211_tx_status() or ieee80211_tx_status_ni().
e36e49f7
KV
4621 *
4622 * @hw: the hardware this frame came in on
4623 * @skb: the buffer to receive, owned by mac80211 after this call
4624 */
4625static inline void ieee80211_rx_ni(struct ieee80211_hw *hw,
4626 struct sk_buff *skb)
4627{
4628 local_bh_disable();
4629 ieee80211_rx(hw, skb);
4630 local_bh_enable();
4631}
4632
d057e5a3
AN
4633/**
4634 * ieee80211_sta_ps_transition - PS transition for connected sta
4635 *
4636 * When operating in AP mode with the %IEEE80211_HW_AP_LINK_PS
4637 * flag set, use this function to inform mac80211 about a connected station
4638 * entering/leaving PS mode.
4639 *
4640 * This function may not be called in IRQ context or with softirqs enabled.
4641 *
4642 * Calls to this function for a single hardware must be synchronized against
4643 * each other.
4644 *
d057e5a3
AN
4645 * @sta: currently connected sta
4646 * @start: start or stop PS
0ae997dc
YB
4647 *
4648 * Return: 0 on success. -EINVAL when the requested PS mode is already set.
d057e5a3
AN
4649 */
4650int ieee80211_sta_ps_transition(struct ieee80211_sta *sta, bool start);
4651
4652/**
4653 * ieee80211_sta_ps_transition_ni - PS transition for connected sta
4654 * (in process context)
4655 *
4656 * Like ieee80211_sta_ps_transition() but can be called in process context
4657 * (internally disables bottom halves). Concurrent call restriction still
4658 * applies.
4659 *
4660 * @sta: currently connected sta
4661 * @start: start or stop PS
0ae997dc
YB
4662 *
4663 * Return: Like ieee80211_sta_ps_transition().
d057e5a3
AN
4664 */
4665static inline int ieee80211_sta_ps_transition_ni(struct ieee80211_sta *sta,
4666 bool start)
4667{
4668 int ret;
4669
4670 local_bh_disable();
4671 ret = ieee80211_sta_ps_transition(sta, start);
4672 local_bh_enable();
4673
4674 return ret;
4675}
4676
46fa38e8
JB
4677/**
4678 * ieee80211_sta_pspoll - PS-Poll frame received
4679 * @sta: currently connected station
4680 *
4681 * When operating in AP mode with the %IEEE80211_HW_AP_LINK_PS flag set,
4682 * use this function to inform mac80211 that a PS-Poll frame from a
4683 * connected station was received.
4684 * This must be used in conjunction with ieee80211_sta_ps_transition()
4685 * and possibly ieee80211_sta_uapsd_trigger(); calls to all three must
4686 * be serialized.
4687 */
4688void ieee80211_sta_pspoll(struct ieee80211_sta *sta);
4689
4690/**
4691 * ieee80211_sta_uapsd_trigger - (potential) U-APSD trigger frame received
4692 * @sta: currently connected station
4693 * @tid: TID of the received (potential) trigger frame
4694 *
4695 * When operating in AP mode with the %IEEE80211_HW_AP_LINK_PS flag set,
4696 * use this function to inform mac80211 that a (potential) trigger frame
4697 * from a connected station was received.
4698 * This must be used in conjunction with ieee80211_sta_ps_transition()
4699 * and possibly ieee80211_sta_pspoll(); calls to all three must be
4700 * serialized.
0aa419ec
EG
4701 * %IEEE80211_NUM_TIDS can be passed as the tid if the tid is unknown.
4702 * In this case, mac80211 will not check that this tid maps to an AC
4703 * that is trigger enabled and assume that the caller did the proper
4704 * checks.
46fa38e8
JB
4705 */
4706void ieee80211_sta_uapsd_trigger(struct ieee80211_sta *sta, u8 tid);
4707
d24deb25
GW
4708/*
4709 * The TX headroom reserved by mac80211 for its own tx_status functions.
4710 * This is enough for the radiotap header.
4711 */
651b9920 4712#define IEEE80211_TX_STATUS_HEADROOM ALIGN(14, 4)
d24deb25 4713
dcf55fb5 4714/**
042ec453 4715 * ieee80211_sta_set_buffered - inform mac80211 about driver-buffered frames
bdfbe804 4716 * @sta: &struct ieee80211_sta pointer for the sleeping station
042ec453
JB
4717 * @tid: the TID that has buffered frames
4718 * @buffered: indicates whether or not frames are buffered for this TID
dcf55fb5
FF
4719 *
4720 * If a driver buffers frames for a powersave station instead of passing
042ec453
JB
4721 * them back to mac80211 for retransmission, the station may still need
4722 * to be told that there are buffered frames via the TIM bit.
4723 *
4724 * This function informs mac80211 whether or not there are frames that are
4725 * buffered in the driver for a given TID; mac80211 can then use this data
4726 * to set the TIM bit (NOTE: This may call back into the driver's set_tim
4727 * call! Beware of the locking!)
4728 *
4729 * If all frames are released to the station (due to PS-poll or uAPSD)
4730 * then the driver needs to inform mac80211 that there no longer are
4731 * frames buffered. However, when the station wakes up mac80211 assumes
4732 * that all buffered frames will be transmitted and clears this data,
4733 * drivers need to make sure they inform mac80211 about all buffered
4734 * frames on the sleep transition (sta_notify() with %STA_NOTIFY_SLEEP).
4735 *
4736 * Note that technically mac80211 only needs to know this per AC, not per
4737 * TID, but since driver buffering will inevitably happen per TID (since
4738 * it is related to aggregation) it is easier to make mac80211 map the
4739 * TID to the AC as required instead of keeping track in all drivers that
4740 * use this API.
4741 */
4742void ieee80211_sta_set_buffered(struct ieee80211_sta *sta,
4743 u8 tid, bool buffered);
dcf55fb5 4744
0d528d85
FF
4745/**
4746 * ieee80211_get_tx_rates - get the selected transmit rates for a packet
4747 *
4748 * Call this function in a driver with per-packet rate selection support
4749 * to combine the rate info in the packet tx info with the most recent
4750 * rate selection table for the station entry.
4751 *
4752 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4753 * @sta: the receiver station to which this packet is sent.
4754 * @skb: the frame to be transmitted.
4755 * @dest: buffer for extracted rate/retry information
4756 * @max_rates: maximum number of rates to fetch
4757 */
4758void ieee80211_get_tx_rates(struct ieee80211_vif *vif,
4759 struct ieee80211_sta *sta,
4760 struct sk_buff *skb,
4761 struct ieee80211_tx_rate *dest,
4762 int max_rates);
4763
484a54c2
THJ
4764/**
4765 * ieee80211_sta_set_expected_throughput - set the expected tpt for a station
4766 *
4767 * Call this function to notify mac80211 about a change in expected throughput
4768 * to a station. A driver for a device that does rate control in firmware can
4769 * call this function when the expected throughput estimate towards a station
4770 * changes. The information is used to tune the CoDel AQM applied to traffic
4771 * going towards that station (which can otherwise be too aggressive and cause
4772 * slow stations to starve).
4773 *
4774 * @pubsta: the station to set throughput for.
4775 * @thr: the current expected throughput in kbps.
4776 */
4777void ieee80211_sta_set_expected_throughput(struct ieee80211_sta *pubsta,
4778 u32 thr);
4779
f8252e7b
AK
4780/**
4781 * ieee80211_tx_rate_update - transmit rate update callback
4782 *
4783 * Drivers should call this functions with a non-NULL pub sta
4784 * This function can be used in drivers that does not have provision
4785 * in updating the tx rate in data path.
4786 *
4787 * @hw: the hardware the frame was transmitted by
4788 * @pubsta: the station to update the tx rate for.
4789 * @info: tx status information
4790 */
4791void ieee80211_tx_rate_update(struct ieee80211_hw *hw,
4792 struct ieee80211_sta *pubsta,
4793 struct ieee80211_tx_info *info);
4794
75a5f0cc
JB
4795/**
4796 * ieee80211_tx_status - transmit status callback
4797 *
4798 * Call this function for all transmitted frames after they have been
4799 * transmitted. It is permissible to not call this function for
4800 * multicast frames but this can affect statistics.
4801 *
2485f710
JB
4802 * This function may not be called in IRQ context. Calls to this function
4803 * for a single hardware must be synchronized against each other. Calls
20ed3166 4804 * to this function, ieee80211_tx_status_ni() and ieee80211_tx_status_irqsafe()
f6b3d85f
FF
4805 * may not be mixed for a single hardware. Must not run concurrently with
4806 * ieee80211_rx() or ieee80211_rx_ni().
2485f710 4807 *
75a5f0cc
JB
4808 * @hw: the hardware the frame was transmitted by
4809 * @skb: the frame that was transmitted, owned by mac80211 after this call
75a5f0cc 4810 */
f0706e82 4811void ieee80211_tx_status(struct ieee80211_hw *hw,
e039fa4a 4812 struct sk_buff *skb);
2485f710 4813
5fe49a9d
FF
4814/**
4815 * ieee80211_tx_status_ext - extended transmit status callback
4816 *
4817 * This function can be used as a replacement for ieee80211_tx_status
4818 * in drivers that may want to provide extra information that does not
4819 * fit into &struct ieee80211_tx_info.
4820 *
4821 * Calls to this function for a single hardware must be synchronized
4822 * against each other. Calls to this function, ieee80211_tx_status_ni()
4823 * and ieee80211_tx_status_irqsafe() may not be mixed for a single hardware.
4824 *
4825 * @hw: the hardware the frame was transmitted by
4826 * @status: tx status information
4827 */
4828void ieee80211_tx_status_ext(struct ieee80211_hw *hw,
4829 struct ieee80211_tx_status *status);
4830
f027c2ac
FF
4831/**
4832 * ieee80211_tx_status_noskb - transmit status callback without skb
4833 *
4834 * This function can be used as a replacement for ieee80211_tx_status
4835 * in drivers that cannot reliably map tx status information back to
4836 * specific skbs.
4837 *
4838 * Calls to this function for a single hardware must be synchronized
4839 * against each other. Calls to this function, ieee80211_tx_status_ni()
4840 * and ieee80211_tx_status_irqsafe() may not be mixed for a single hardware.
4841 *
4842 * @hw: the hardware the frame was transmitted by
4843 * @sta: the receiver station to which this packet is sent
4844 * (NULL for multicast packets)
4845 * @info: tx status information
4846 */
5fe49a9d
FF
4847static inline void ieee80211_tx_status_noskb(struct ieee80211_hw *hw,
4848 struct ieee80211_sta *sta,
4849 struct ieee80211_tx_info *info)
4850{
4851 struct ieee80211_tx_status status = {
4852 .sta = sta,
4853 .info = info,
4854 };
4855
4856 ieee80211_tx_status_ext(hw, &status);
4857}
f027c2ac 4858
20ed3166
JS
4859/**
4860 * ieee80211_tx_status_ni - transmit status callback (in process context)
4861 *
4862 * Like ieee80211_tx_status() but can be called in process context.
4863 *
4864 * Calls to this function, ieee80211_tx_status() and
4865 * ieee80211_tx_status_irqsafe() may not be mixed
4866 * for a single hardware.
4867 *
4868 * @hw: the hardware the frame was transmitted by
4869 * @skb: the frame that was transmitted, owned by mac80211 after this call
4870 */
4871static inline void ieee80211_tx_status_ni(struct ieee80211_hw *hw,
4872 struct sk_buff *skb)
4873{
4874 local_bh_disable();
4875 ieee80211_tx_status(hw, skb);
4876 local_bh_enable();
4877}
4878
2485f710 4879/**
6ef307bc 4880 * ieee80211_tx_status_irqsafe - IRQ-safe transmit status callback
2485f710
JB
4881 *
4882 * Like ieee80211_tx_status() but can be called in IRQ context
4883 * (internally defers to a tasklet.)
4884 *
20ed3166
JS
4885 * Calls to this function, ieee80211_tx_status() and
4886 * ieee80211_tx_status_ni() may not be mixed for a single hardware.
2485f710
JB
4887 *
4888 * @hw: the hardware the frame was transmitted by
4889 * @skb: the frame that was transmitted, owned by mac80211 after this call
2485f710 4890 */
f0706e82 4891void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw,
e039fa4a 4892 struct sk_buff *skb);
f0706e82 4893
50ff477a
JC
4894/**
4895 * ieee80211_tx_status_8023 - transmit status callback for 802.3 frame format
4896 *
4897 * Call this function for all transmitted data frames after their transmit
4898 * completion. This callback should only be called for data frames which
66b239d2 4899 * are using driver's (or hardware's) offload capability of encap/decap
50ff477a
JC
4900 * 802.11 frames.
4901 *
4902 * This function may not be called in IRQ context. Calls to this function
4903 * for a single hardware must be synchronized against each other and all
4904 * calls in the same tx status family.
4905 *
4906 * @hw: the hardware the frame was transmitted by
4907 * @vif: the interface for which the frame was transmitted
4908 * @skb: the frame that was transmitted, owned by mac80211 after this call
4909 */
4910void ieee80211_tx_status_8023(struct ieee80211_hw *hw,
4911 struct ieee80211_vif *vif,
4912 struct sk_buff *skb);
4913
8178d38b
AN
4914/**
4915 * ieee80211_report_low_ack - report non-responding station
4916 *
4917 * When operating in AP-mode, call this function to report a non-responding
4918 * connected STA.
4919 *
4920 * @sta: the non-responding connected sta
4921 * @num_packets: number of packets sent to @sta without a response
4922 */
4923void ieee80211_report_low_ack(struct ieee80211_sta *sta, u32 num_packets);
4924
8552a434 4925#define IEEE80211_MAX_CNTDWN_COUNTERS_NUM 2
1af586c9 4926
6ec8c332
AO
4927/**
4928 * struct ieee80211_mutable_offsets - mutable beacon offsets
4929 * @tim_offset: position of TIM element
4930 * @tim_length: size of TIM element
8552a434
JC
4931 * @cntdwn_counter_offs: array of IEEE80211_MAX_CNTDWN_COUNTERS_NUM offsets
4932 * to countdown counters. This array can contain zero values which
8d77ec85 4933 * should be ignored.
6ec8c332
AO
4934 */
4935struct ieee80211_mutable_offsets {
4936 u16 tim_offset;
4937 u16 tim_length;
1af586c9 4938
8552a434 4939 u16 cntdwn_counter_offs[IEEE80211_MAX_CNTDWN_COUNTERS_NUM];
6ec8c332
AO
4940};
4941
4942/**
4943 * ieee80211_beacon_get_template - beacon template generation function
4944 * @hw: pointer obtained from ieee80211_alloc_hw().
4945 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4946 * @offs: &struct ieee80211_mutable_offsets pointer to struct that will
4947 * receive the offsets that may be updated by the driver.
4948 *
4949 * If the driver implements beaconing modes, it must use this function to
4950 * obtain the beacon template.
4951 *
4952 * This function should be used if the beacon frames are generated by the
4953 * device, and then the driver must use the returned beacon as the template
1af586c9
AO
4954 * The driver or the device are responsible to update the DTIM and, when
4955 * applicable, the CSA count.
6ec8c332
AO
4956 *
4957 * The driver is responsible for freeing the returned skb.
4958 *
4959 * Return: The beacon template. %NULL on error.
4960 */
4961struct sk_buff *
4962ieee80211_beacon_get_template(struct ieee80211_hw *hw,
4963 struct ieee80211_vif *vif,
4964 struct ieee80211_mutable_offsets *offs);
4965
f0706e82 4966/**
eddcbb94 4967 * ieee80211_beacon_get_tim - beacon generation function
f0706e82 4968 * @hw: pointer obtained from ieee80211_alloc_hw().
1ed32e4f 4969 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
eddcbb94
JB
4970 * @tim_offset: pointer to variable that will receive the TIM IE offset.
4971 * Set to 0 if invalid (in non-AP modes).
4972 * @tim_length: pointer to variable that will receive the TIM IE length,
4973 * (including the ID and length bytes!).
4974 * Set to 0 if invalid (in non-AP modes).
4975 *
4976 * If the driver implements beaconing modes, it must use this function to
6ec8c332 4977 * obtain the beacon frame.
f0706e82
JB
4978 *
4979 * If the beacon frames are generated by the host system (i.e., not in
eddcbb94 4980 * hardware/firmware), the driver uses this function to get each beacon
6ec8c332
AO
4981 * frame from mac80211 -- it is responsible for calling this function exactly
4982 * once before the beacon is needed (e.g. based on hardware interrupt).
eddcbb94
JB
4983 *
4984 * The driver is responsible for freeing the returned skb.
0ae997dc
YB
4985 *
4986 * Return: The beacon template. %NULL on error.
eddcbb94
JB
4987 */
4988struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
4989 struct ieee80211_vif *vif,
4990 u16 *tim_offset, u16 *tim_length);
4991
4992/**
4993 * ieee80211_beacon_get - beacon generation function
4994 * @hw: pointer obtained from ieee80211_alloc_hw().
1ed32e4f 4995 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
eddcbb94
JB
4996 *
4997 * See ieee80211_beacon_get_tim().
0ae997dc
YB
4998 *
4999 * Return: See ieee80211_beacon_get_tim().
f0706e82 5000 */
eddcbb94
JB
5001static inline struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
5002 struct ieee80211_vif *vif)
5003{
5004 return ieee80211_beacon_get_tim(hw, vif, NULL, NULL);
5005}
f0706e82 5006
1af586c9 5007/**
8552a434 5008 * ieee80211_beacon_update_cntdwn - request mac80211 to decrement the beacon countdown
1af586c9
AO
5009 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
5010 *
8552a434 5011 * The beacon counter should be updated after each beacon transmission.
1af586c9
AO
5012 * This function is called implicitly when
5013 * ieee80211_beacon_get/ieee80211_beacon_get_tim are called, however if the
5014 * beacon frames are generated by the device, the driver should call this
8552a434 5015 * function after each beacon transmission to sync mac80211's beacon countdown.
1af586c9 5016 *
8552a434 5017 * Return: new countdown value
1af586c9 5018 */
8552a434 5019u8 ieee80211_beacon_update_cntdwn(struct ieee80211_vif *vif);
1af586c9 5020
03737001 5021/**
8552a434 5022 * ieee80211_beacon_set_cntdwn - request mac80211 to set beacon countdown
03737001
GG
5023 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
5024 * @counter: the new value for the counter
5025 *
8552a434 5026 * The beacon countdown can be changed by the device, this API should be
03737001
GG
5027 * used by the device driver to update csa counter in mac80211.
5028 *
8552a434 5029 * It should never be used together with ieee80211_beacon_update_cntdwn(),
03737001
GG
5030 * as it will cause a race condition around the counter value.
5031 */
8552a434 5032void ieee80211_beacon_set_cntdwn(struct ieee80211_vif *vif, u8 counter);
03737001 5033
73da7d5b
SW
5034/**
5035 * ieee80211_csa_finish - notify mac80211 about channel switch
5036 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
5037 *
5038 * After a channel switch announcement was scheduled and the counter in this
66e01cf9 5039 * announcement hits 1, this function must be called by the driver to
73da7d5b
SW
5040 * notify mac80211 that the channel can be changed.
5041 */
5042void ieee80211_csa_finish(struct ieee80211_vif *vif);
5043
5044/**
8552a434 5045 * ieee80211_beacon_cntdwn_is_complete - find out if countdown reached 1
73da7d5b
SW
5046 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
5047 *
8552a434 5048 * This function returns whether the countdown reached zero.
73da7d5b 5049 */
8552a434 5050bool ieee80211_beacon_cntdwn_is_complete(struct ieee80211_vif *vif);
73da7d5b 5051
5f9404ab
JC
5052/**
5053 * ieee80211_color_change_finish - notify mac80211 about color change
5054 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
5055 *
5056 * After a color change announcement was scheduled and the counter in this
5057 * announcement hits 1, this function must be called by the driver to
5058 * notify mac80211 that the color can be changed
5059 */
5060void ieee80211_color_change_finish(struct ieee80211_vif *vif);
5061
02945821
AN
5062/**
5063 * ieee80211_proberesp_get - retrieve a Probe Response template
5064 * @hw: pointer obtained from ieee80211_alloc_hw().
5065 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
5066 *
5067 * Creates a Probe Response template which can, for example, be uploaded to
5068 * hardware. The destination address should be set by the caller.
5069 *
5070 * Can only be called in AP mode.
0ae997dc
YB
5071 *
5072 * Return: The Probe Response template. %NULL on error.
02945821
AN
5073 */
5074struct sk_buff *ieee80211_proberesp_get(struct ieee80211_hw *hw,
5075 struct ieee80211_vif *vif);
5076
7044cc56
KV
5077/**
5078 * ieee80211_pspoll_get - retrieve a PS Poll template
5079 * @hw: pointer obtained from ieee80211_alloc_hw().
5080 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
5081 *
5082 * Creates a PS Poll a template which can, for example, uploaded to
5083 * hardware. The template must be updated after association so that correct
5084 * AID, BSSID and MAC address is used.
5085 *
5086 * Note: Caller (or hardware) is responsible for setting the
5087 * &IEEE80211_FCTL_PM bit.
0ae997dc
YB
5088 *
5089 * Return: The PS Poll template. %NULL on error.
7044cc56
KV
5090 */
5091struct sk_buff *ieee80211_pspoll_get(struct ieee80211_hw *hw,
5092 struct ieee80211_vif *vif);
5093
5094/**
5095 * ieee80211_nullfunc_get - retrieve a nullfunc template
5096 * @hw: pointer obtained from ieee80211_alloc_hw().
5097 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
7b6ddeaf
JB
5098 * @qos_ok: QoS NDP is acceptable to the caller, this should be set
5099 * if at all possible
7044cc56
KV
5100 *
5101 * Creates a Nullfunc template which can, for example, uploaded to
5102 * hardware. The template must be updated after association so that correct
5103 * BSSID and address is used.
5104 *
7b6ddeaf
JB
5105 * If @qos_ndp is set and the association is to an AP with QoS/WMM, the
5106 * returned packet will be QoS NDP.
5107 *
7044cc56
KV
5108 * Note: Caller (or hardware) is responsible for setting the
5109 * &IEEE80211_FCTL_PM bit as well as Duration and Sequence Control fields.
0ae997dc
YB
5110 *
5111 * Return: The nullfunc template. %NULL on error.
7044cc56
KV
5112 */
5113struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw,
7b6ddeaf
JB
5114 struct ieee80211_vif *vif,
5115 bool qos_ok);
7044cc56 5116
05e54ea6
KV
5117/**
5118 * ieee80211_probereq_get - retrieve a Probe Request template
5119 * @hw: pointer obtained from ieee80211_alloc_hw().
a344d677 5120 * @src_addr: source MAC address
05e54ea6
KV
5121 * @ssid: SSID buffer
5122 * @ssid_len: length of SSID
b9a9ada1 5123 * @tailroom: tailroom to reserve at end of SKB for IEs
05e54ea6
KV
5124 *
5125 * Creates a Probe Request template which can, for example, be uploaded to
5126 * hardware.
0ae997dc
YB
5127 *
5128 * Return: The Probe Request template. %NULL on error.
05e54ea6
KV
5129 */
5130struct sk_buff *ieee80211_probereq_get(struct ieee80211_hw *hw,
a344d677 5131 const u8 *src_addr,
05e54ea6 5132 const u8 *ssid, size_t ssid_len,
b9a9ada1 5133 size_t tailroom);
05e54ea6 5134
f0706e82
JB
5135/**
5136 * ieee80211_rts_get - RTS frame generation function
5137 * @hw: pointer obtained from ieee80211_alloc_hw().
1ed32e4f 5138 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
f0706e82
JB
5139 * @frame: pointer to the frame that is going to be protected by the RTS.
5140 * @frame_len: the frame length (in octets).
e039fa4a 5141 * @frame_txctl: &struct ieee80211_tx_info of the frame.
f0706e82
JB
5142 * @rts: The buffer where to store the RTS frame.
5143 *
5144 * If the RTS frames are generated by the host system (i.e., not in
5145 * hardware/firmware), the low-level driver uses this function to receive
5146 * the next RTS frame from the 802.11 code. The low-level is responsible
5147 * for calling this function before and RTS frame is needed.
5148 */
32bfd35d 5149void ieee80211_rts_get(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
f0706e82 5150 const void *frame, size_t frame_len,
e039fa4a 5151 const struct ieee80211_tx_info *frame_txctl,
f0706e82
JB
5152 struct ieee80211_rts *rts);
5153
5154/**
5155 * ieee80211_rts_duration - Get the duration field for an RTS frame
5156 * @hw: pointer obtained from ieee80211_alloc_hw().
1ed32e4f 5157 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
f0706e82 5158 * @frame_len: the length of the frame that is going to be protected by the RTS.
e039fa4a 5159 * @frame_txctl: &struct ieee80211_tx_info of the frame.
f0706e82
JB
5160 *
5161 * If the RTS is generated in firmware, but the host system must provide
5162 * the duration field, the low-level driver uses this function to receive
5163 * the duration field value in little-endian byteorder.
0ae997dc
YB
5164 *
5165 * Return: The duration.
f0706e82 5166 */
32bfd35d
JB
5167__le16 ieee80211_rts_duration(struct ieee80211_hw *hw,
5168 struct ieee80211_vif *vif, size_t frame_len,
e039fa4a 5169 const struct ieee80211_tx_info *frame_txctl);
f0706e82
JB
5170
5171/**
5172 * ieee80211_ctstoself_get - CTS-to-self frame generation function
5173 * @hw: pointer obtained from ieee80211_alloc_hw().
1ed32e4f 5174 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
f0706e82
JB
5175 * @frame: pointer to the frame that is going to be protected by the CTS-to-self.
5176 * @frame_len: the frame length (in octets).
e039fa4a 5177 * @frame_txctl: &struct ieee80211_tx_info of the frame.
f0706e82
JB
5178 * @cts: The buffer where to store the CTS-to-self frame.
5179 *
5180 * If the CTS-to-self frames are generated by the host system (i.e., not in
5181 * hardware/firmware), the low-level driver uses this function to receive
5182 * the next CTS-to-self frame from the 802.11 code. The low-level is responsible
5183 * for calling this function before and CTS-to-self frame is needed.
5184 */
32bfd35d
JB
5185void ieee80211_ctstoself_get(struct ieee80211_hw *hw,
5186 struct ieee80211_vif *vif,
f0706e82 5187 const void *frame, size_t frame_len,
e039fa4a 5188 const struct ieee80211_tx_info *frame_txctl,
f0706e82
JB
5189 struct ieee80211_cts *cts);
5190
5191/**
5192 * ieee80211_ctstoself_duration - Get the duration field for a CTS-to-self frame
5193 * @hw: pointer obtained from ieee80211_alloc_hw().
1ed32e4f 5194 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
f0706e82 5195 * @frame_len: the length of the frame that is going to be protected by the CTS-to-self.
e039fa4a 5196 * @frame_txctl: &struct ieee80211_tx_info of the frame.
f0706e82
JB
5197 *
5198 * If the CTS-to-self is generated in firmware, but the host system must provide
5199 * the duration field, the low-level driver uses this function to receive
5200 * the duration field value in little-endian byteorder.
0ae997dc
YB
5201 *
5202 * Return: The duration.
f0706e82 5203 */
32bfd35d
JB
5204__le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
5205 struct ieee80211_vif *vif,
f0706e82 5206 size_t frame_len,
e039fa4a 5207 const struct ieee80211_tx_info *frame_txctl);
f0706e82
JB
5208
5209/**
5210 * ieee80211_generic_frame_duration - Calculate the duration field for a frame
5211 * @hw: pointer obtained from ieee80211_alloc_hw().
1ed32e4f 5212 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
d13e1414 5213 * @band: the band to calculate the frame duration on
f0706e82 5214 * @frame_len: the length of the frame.
8318d78a 5215 * @rate: the rate at which the frame is going to be transmitted.
f0706e82
JB
5216 *
5217 * Calculate the duration field of some generic frame, given its
5218 * length and transmission rate (in 100kbps).
0ae997dc
YB
5219 *
5220 * Return: The duration.
f0706e82 5221 */
32bfd35d
JB
5222__le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw,
5223 struct ieee80211_vif *vif,
57fbcce3 5224 enum nl80211_band band,
f0706e82 5225 size_t frame_len,
8318d78a 5226 struct ieee80211_rate *rate);
f0706e82
JB
5227
5228/**
5229 * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames
5230 * @hw: pointer as obtained from ieee80211_alloc_hw().
1ed32e4f 5231 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
f0706e82
JB
5232 *
5233 * Function for accessing buffered broadcast and multicast frames. If
5234 * hardware/firmware does not implement buffering of broadcast/multicast
5235 * frames when power saving is used, 802.11 code buffers them in the host
5236 * memory. The low-level driver uses this function to fetch next buffered
0ae997dc
YB
5237 * frame. In most cases, this is used when generating beacon frame.
5238 *
5239 * Return: A pointer to the next buffered skb or NULL if no more buffered
5240 * frames are available.
f0706e82
JB
5241 *
5242 * Note: buffered frames are returned only after DTIM beacon frame was
5243 * generated with ieee80211_beacon_get() and the low-level driver must thus
5244 * call ieee80211_beacon_get() first. ieee80211_get_buffered_bc() returns
5245 * NULL if the previous generated beacon was not DTIM, so the low-level driver
5246 * does not need to check for DTIM beacons separately and should be able to
5247 * use common code for all beacons.
5248 */
5249struct sk_buff *
e039fa4a 5250ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
f0706e82 5251
42d98795
JB
5252/**
5253 * ieee80211_get_tkip_p1k_iv - get a TKIP phase 1 key for IV32
5254 *
5255 * This function returns the TKIP phase 1 key for the given IV32.
5256 *
5257 * @keyconf: the parameter passed with the set key
5258 * @iv32: IV32 to get the P1K for
5259 * @p1k: a buffer to which the key will be written, as 5 u16 values
5260 */
5261void ieee80211_get_tkip_p1k_iv(struct ieee80211_key_conf *keyconf,
5262 u32 iv32, u16 *p1k);
5263
5d2cdcd4 5264/**
523b02ea
JB
5265 * ieee80211_get_tkip_p1k - get a TKIP phase 1 key
5266 *
5267 * This function returns the TKIP phase 1 key for the IV32 taken
5268 * from the given packet.
5269 *
5270 * @keyconf: the parameter passed with the set key
5271 * @skb: the packet to take the IV32 value from that will be encrypted
5272 * with this P1K
5273 * @p1k: a buffer to which the key will be written, as 5 u16 values
5274 */
42d98795
JB
5275static inline void ieee80211_get_tkip_p1k(struct ieee80211_key_conf *keyconf,
5276 struct sk_buff *skb, u16 *p1k)
5277{
5278 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
5279 const u8 *data = (u8 *)hdr + ieee80211_hdrlen(hdr->frame_control);
5280 u32 iv32 = get_unaligned_le32(&data[4]);
5281
5282 ieee80211_get_tkip_p1k_iv(keyconf, iv32, p1k);
5283}
523b02ea 5284
8bca5d81
JB
5285/**
5286 * ieee80211_get_tkip_rx_p1k - get a TKIP phase 1 key for RX
5287 *
5288 * This function returns the TKIP phase 1 key for the given IV32
5289 * and transmitter address.
5290 *
5291 * @keyconf: the parameter passed with the set key
5292 * @ta: TA that will be used with the key
5293 * @iv32: IV32 to get the P1K for
5294 * @p1k: a buffer to which the key will be written, as 5 u16 values
5295 */
5296void ieee80211_get_tkip_rx_p1k(struct ieee80211_key_conf *keyconf,
5297 const u8 *ta, u32 iv32, u16 *p1k);
5298
523b02ea
JB
5299/**
5300 * ieee80211_get_tkip_p2k - get a TKIP phase 2 key
5d2cdcd4 5301 *
523b02ea
JB
5302 * This function computes the TKIP RC4 key for the IV values
5303 * in the packet.
5d2cdcd4
EG
5304 *
5305 * @keyconf: the parameter passed with the set key
523b02ea
JB
5306 * @skb: the packet to take the IV32/IV16 values from that will be
5307 * encrypted with this key
5308 * @p2k: a buffer to which the key will be written, 16 bytes
5d2cdcd4 5309 */
523b02ea
JB
5310void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf,
5311 struct sk_buff *skb, u8 *p2k);
c68f4b89 5312
f8079d43
EP
5313/**
5314 * ieee80211_tkip_add_iv - write TKIP IV and Ext. IV to pos
5315 *
5316 * @pos: start of crypto header
5317 * @keyconf: the parameter passed with the set key
5318 * @pn: PN to add
5319 *
5320 * Returns: pointer to the octet following IVs (i.e. beginning of
5321 * the packet payload)
5322 *
5323 * This function writes the tkip IV value to pos (which should
5324 * point to the crypto header)
5325 */
5326u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key_conf *keyconf, u64 pn);
5327
3ea542d3
JB
5328/**
5329 * ieee80211_get_key_rx_seq - get key RX sequence counter
5330 *
5331 * @keyconf: the parameter passed with the set key
00b9cfa3 5332 * @tid: The TID, or -1 for the management frame value (CCMP/GCMP only);
3ea542d3
JB
5333 * the value on TID 0 is also used for non-QoS frames. For
5334 * CMAC, only TID 0 is valid.
5335 * @seq: buffer to receive the sequence data
5336 *
5337 * This function allows a driver to retrieve the current RX IV/PNs
5338 * for the given key. It must not be called if IV checking is done
5339 * by the device and not by mac80211.
5340 *
5341 * Note that this function may only be called when no RX processing
5342 * can be done concurrently.
5343 */
5344void ieee80211_get_key_rx_seq(struct ieee80211_key_conf *keyconf,
5345 int tid, struct ieee80211_key_seq *seq);
5346
27b3eb9c
JB
5347/**
5348 * ieee80211_set_key_rx_seq - set key RX sequence counter
5349 *
5350 * @keyconf: the parameter passed with the set key
00b9cfa3 5351 * @tid: The TID, or -1 for the management frame value (CCMP/GCMP only);
27b3eb9c
JB
5352 * the value on TID 0 is also used for non-QoS frames. For
5353 * CMAC, only TID 0 is valid.
5354 * @seq: new sequence data
5355 *
5356 * This function allows a driver to set the current RX IV/PNs for the
5357 * given key. This is useful when resuming from WoWLAN sleep and GTK
5358 * rekey may have been done while suspended. It should not be called
5359 * if IV checking is done by the device and not by mac80211.
5360 *
5361 * Note that this function may only be called when no RX processing
5362 * can be done concurrently.
5363 */
5364void ieee80211_set_key_rx_seq(struct ieee80211_key_conf *keyconf,
5365 int tid, struct ieee80211_key_seq *seq);
5366
5367/**
5368 * ieee80211_remove_key - remove the given key
5369 * @keyconf: the parameter passed with the set key
5370 *
5371 * Remove the given key. If the key was uploaded to the hardware at the
5372 * time this function is called, it is not deleted in the hardware but
5373 * instead assumed to have been removed already.
5374 *
5375 * Note that due to locking considerations this function can (currently)
5376 * only be called during key iteration (ieee80211_iter_keys().)
5377 */
5378void ieee80211_remove_key(struct ieee80211_key_conf *keyconf);
5379
5380/**
5381 * ieee80211_gtk_rekey_add - add a GTK key from rekeying during WoWLAN
5382 * @vif: the virtual interface to add the key on
5383 * @keyconf: new key data
5384 *
5385 * When GTK rekeying was done while the system was suspended, (a) new
5386 * key(s) will be available. These will be needed by mac80211 for proper
5387 * RX processing, so this function allows setting them.
5388 *
5389 * The function returns the newly allocated key structure, which will
5390 * have similar contents to the passed key configuration but point to
5391 * mac80211-owned memory. In case of errors, the function returns an
5392 * ERR_PTR(), use IS_ERR() etc.
5393 *
5394 * Note that this function assumes the key isn't added to hardware
5395 * acceleration, so no TX will be done with the key. Since it's a GTK
5396 * on managed (station) networks, this is true anyway. If the driver
5397 * calls this function from the resume callback and subsequently uses
5398 * the return code 1 to reconfigure the device, this key will be part
5399 * of the reconfiguration.
5400 *
5401 * Note that the driver should also call ieee80211_set_key_rx_seq()
5402 * for the new key for each TID to set up sequence counters properly.
5403 *
5404 * IMPORTANT: If this replaces a key that is present in the hardware,
5405 * then it will attempt to remove it during this call. In many cases
5406 * this isn't what you want, so call ieee80211_remove_key() first for
5407 * the key that's being replaced.
5408 */
5409struct ieee80211_key_conf *
5410ieee80211_gtk_rekey_add(struct ieee80211_vif *vif,
5411 struct ieee80211_key_conf *keyconf);
5412
c68f4b89
JB
5413/**
5414 * ieee80211_gtk_rekey_notify - notify userspace supplicant of rekeying
5415 * @vif: virtual interface the rekeying was done on
5416 * @bssid: The BSSID of the AP, for checking association
5417 * @replay_ctr: the new replay counter after GTK rekeying
5418 * @gfp: allocation flags
5419 */
5420void ieee80211_gtk_rekey_notify(struct ieee80211_vif *vif, const u8 *bssid,
5421 const u8 *replay_ctr, gfp_t gfp);
5422
4271d4bd
JB
5423/**
5424 * ieee80211_key_mic_failure - increment MIC failure counter for the key
5425 *
5426 * Note: this is really only safe if no other RX function is called
5427 * at the same time.
5428 *
5429 * @keyconf: the key in question
5430 */
5431void ieee80211_key_mic_failure(struct ieee80211_key_conf *keyconf);
5432
5433/**
5434 * ieee80211_key_replay - increment replay counter for the key
5435 *
5436 * Note: this is really only safe if no other RX function is called
5437 * at the same time.
5438 *
5439 * @keyconf: the key in question
5440 */
5441void ieee80211_key_replay(struct ieee80211_key_conf *keyconf);
5442
f0706e82
JB
5443/**
5444 * ieee80211_wake_queue - wake specific queue
5445 * @hw: pointer as obtained from ieee80211_alloc_hw().
5446 * @queue: queue number (counted from zero).
5447 *
5448 * Drivers should use this function instead of netif_wake_queue.
5449 */
5450void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue);
5451
5452/**
5453 * ieee80211_stop_queue - stop specific queue
5454 * @hw: pointer as obtained from ieee80211_alloc_hw().
5455 * @queue: queue number (counted from zero).
5456 *
5457 * Drivers should use this function instead of netif_stop_queue.
5458 */
5459void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue);
5460
92ab8535
TW
5461/**
5462 * ieee80211_queue_stopped - test status of the queue
5463 * @hw: pointer as obtained from ieee80211_alloc_hw().
5464 * @queue: queue number (counted from zero).
5465 *
5466 * Drivers should use this function instead of netif_stop_queue.
0ae997dc
YB
5467 *
5468 * Return: %true if the queue is stopped. %false otherwise.
92ab8535
TW
5469 */
5470
5471int ieee80211_queue_stopped(struct ieee80211_hw *hw, int queue);
5472
f0706e82
JB
5473/**
5474 * ieee80211_stop_queues - stop all queues
5475 * @hw: pointer as obtained from ieee80211_alloc_hw().
5476 *
5477 * Drivers should use this function instead of netif_stop_queue.
5478 */
5479void ieee80211_stop_queues(struct ieee80211_hw *hw);
5480
5481/**
5482 * ieee80211_wake_queues - wake all queues
5483 * @hw: pointer as obtained from ieee80211_alloc_hw().
5484 *
5485 * Drivers should use this function instead of netif_wake_queue.
5486 */
5487void ieee80211_wake_queues(struct ieee80211_hw *hw);
5488
75a5f0cc
JB
5489/**
5490 * ieee80211_scan_completed - completed hardware scan
5491 *
5492 * When hardware scan offload is used (i.e. the hw_scan() callback is
5493 * assigned) this function needs to be called by the driver to notify
8789d459
JB
5494 * mac80211 that the scan finished. This function can be called from
5495 * any context, including hardirq context.
75a5f0cc
JB
5496 *
5497 * @hw: the hardware that finished the scan
7947d3e0 5498 * @info: information about the completed scan
75a5f0cc 5499 */
7947d3e0
AS
5500void ieee80211_scan_completed(struct ieee80211_hw *hw,
5501 struct cfg80211_scan_info *info);
f0706e82 5502
79f460ca
LC
5503/**
5504 * ieee80211_sched_scan_results - got results from scheduled scan
5505 *
5506 * When a scheduled scan is running, this function needs to be called by the
5507 * driver whenever there are new scan results available.
5508 *
5509 * @hw: the hardware that is performing scheduled scans
5510 */
5511void ieee80211_sched_scan_results(struct ieee80211_hw *hw);
5512
5513/**
5514 * ieee80211_sched_scan_stopped - inform that the scheduled scan has stopped
5515 *
5516 * When a scheduled scan is running, this function can be called by
5517 * the driver if it needs to stop the scan to perform another task.
5518 * Usual scenarios are drivers that cannot continue the scheduled scan
5519 * while associating, for instance.
5520 *
5521 * @hw: the hardware that is performing scheduled scans
5522 */
5523void ieee80211_sched_scan_stopped(struct ieee80211_hw *hw);
5524
8b2c9824
JB
5525/**
5526 * enum ieee80211_interface_iteration_flags - interface iteration flags
5527 * @IEEE80211_IFACE_ITER_NORMAL: Iterate over all interfaces that have
5528 * been added to the driver; However, note that during hardware
5529 * reconfiguration (after restart_hw) it will iterate over a new
5530 * interface and over all the existing interfaces even if they
5531 * haven't been re-added to the driver yet.
5532 * @IEEE80211_IFACE_ITER_RESUME_ALL: During resume, iterate over all
5533 * interfaces, even if they haven't been re-added to the driver yet.
3384d757 5534 * @IEEE80211_IFACE_ITER_ACTIVE: Iterate only active interfaces (netdev is up).
265a0708
BG
5535 * @IEEE80211_IFACE_SKIP_SDATA_NOT_IN_DRIVER: Skip any interfaces where SDATA
5536 * is not in the driver. This may fix crashes during firmware recovery
5537 * for instance.
8b2c9824
JB
5538 */
5539enum ieee80211_interface_iteration_flags {
5540 IEEE80211_IFACE_ITER_NORMAL = 0,
5541 IEEE80211_IFACE_ITER_RESUME_ALL = BIT(0),
3384d757 5542 IEEE80211_IFACE_ITER_ACTIVE = BIT(1),
265a0708 5543 IEEE80211_IFACE_SKIP_SDATA_NOT_IN_DRIVER = BIT(2),
8b2c9824
JB
5544};
5545
3384d757
AN
5546/**
5547 * ieee80211_iterate_interfaces - iterate interfaces
5548 *
5549 * This function iterates over the interfaces associated with a given
5550 * hardware and calls the callback for them. This includes active as well as
5551 * inactive interfaces. This function allows the iterator function to sleep.
5552 * Will iterate over a new interface during add_interface().
5553 *
5554 * @hw: the hardware struct of which the interfaces should be iterated over
5555 * @iter_flags: iteration flags, see &enum ieee80211_interface_iteration_flags
5556 * @iterator: the iterator function to call
5557 * @data: first argument of the iterator function
5558 */
5559void ieee80211_iterate_interfaces(struct ieee80211_hw *hw, u32 iter_flags,
5560 void (*iterator)(void *data, u8 *mac,
5561 struct ieee80211_vif *vif),
5562 void *data);
5563
dabeb344 5564/**
6ef307bc 5565 * ieee80211_iterate_active_interfaces - iterate active interfaces
dabeb344
JB
5566 *
5567 * This function iterates over the interfaces associated with a given
5568 * hardware that are currently active and calls the callback for them.
2f561feb
ID
5569 * This function allows the iterator function to sleep, when the iterator
5570 * function is atomic @ieee80211_iterate_active_interfaces_atomic can
5571 * be used.
8b2c9824 5572 * Does not iterate over a new interface during add_interface().
dabeb344
JB
5573 *
5574 * @hw: the hardware struct of which the interfaces should be iterated over
8b2c9824 5575 * @iter_flags: iteration flags, see &enum ieee80211_interface_iteration_flags
2f561feb 5576 * @iterator: the iterator function to call
dabeb344
JB
5577 * @data: first argument of the iterator function
5578 */
3384d757
AN
5579static inline void
5580ieee80211_iterate_active_interfaces(struct ieee80211_hw *hw, u32 iter_flags,
5581 void (*iterator)(void *data, u8 *mac,
5582 struct ieee80211_vif *vif),
5583 void *data)
5584{
5585 ieee80211_iterate_interfaces(hw,
5586 iter_flags | IEEE80211_IFACE_ITER_ACTIVE,
5587 iterator, data);
5588}
dabeb344 5589
2f561feb
ID
5590/**
5591 * ieee80211_iterate_active_interfaces_atomic - iterate active interfaces
5592 *
5593 * This function iterates over the interfaces associated with a given
5594 * hardware that are currently active and calls the callback for them.
5595 * This function requires the iterator callback function to be atomic,
5596 * if that is not desired, use @ieee80211_iterate_active_interfaces instead.
8b2c9824 5597 * Does not iterate over a new interface during add_interface().
2f561feb
ID
5598 *
5599 * @hw: the hardware struct of which the interfaces should be iterated over
8b2c9824 5600 * @iter_flags: iteration flags, see &enum ieee80211_interface_iteration_flags
2f561feb
ID
5601 * @iterator: the iterator function to call, cannot sleep
5602 * @data: first argument of the iterator function
5603 */
5604void ieee80211_iterate_active_interfaces_atomic(struct ieee80211_hw *hw,
8b2c9824 5605 u32 iter_flags,
2f561feb
ID
5606 void (*iterator)(void *data,
5607 u8 *mac,
5608 struct ieee80211_vif *vif),
5609 void *data);
5610
c7c71066 5611/**
a05829a7 5612 * ieee80211_iterate_active_interfaces_mtx - iterate active interfaces
c7c71066
JB
5613 *
5614 * This function iterates over the interfaces associated with a given
5615 * hardware that are currently active and calls the callback for them.
34fb4db5 5616 * This version can only be used while holding the wiphy mutex.
acb99b9b
MB
5617 * The driver must not call this with a lock held that it can also take in
5618 * response to callbacks from mac80211, and it must not call this within
5619 * callbacks made by mac80211 - both would result in deadlocks.
c7c71066
JB
5620 *
5621 * @hw: the hardware struct of which the interfaces should be iterated over
5622 * @iter_flags: iteration flags, see &enum ieee80211_interface_iteration_flags
5623 * @iterator: the iterator function to call, cannot sleep
5624 * @data: first argument of the iterator function
5625 */
a05829a7
JB
5626void ieee80211_iterate_active_interfaces_mtx(struct ieee80211_hw *hw,
5627 u32 iter_flags,
5628 void (*iterator)(void *data,
c7c71066
JB
5629 u8 *mac,
5630 struct ieee80211_vif *vif),
a05829a7 5631 void *data);
c7c71066 5632
acb99b9b
MB
5633/**
5634 * ieee80211_iterate_stations - iterate stations
5635 *
5636 * This function iterates over all stations associated with a given
5637 * hardware that are currently uploaded to the driver and calls the callback
5638 * function for them.
5639 * This function allows the iterator function to sleep, when the iterator
5640 * function is atomic @ieee80211_iterate_stations_atomic can be used.
5641 *
5642 * @hw: the hardware struct of which the interfaces should be iterated over
5643 * @iterator: the iterator function to call, cannot sleep
5644 * @data: first argument of the iterator function
5645 */
5646void ieee80211_iterate_stations(struct ieee80211_hw *hw,
5647 void (*iterator)(void *data,
5648 struct ieee80211_sta *sta),
5649 void *data);
5650
0fc1e049
AN
5651/**
5652 * ieee80211_iterate_stations_atomic - iterate stations
5653 *
5654 * This function iterates over all stations associated with a given
5655 * hardware that are currently uploaded to the driver and calls the callback
5656 * function for them.
5657 * This function requires the iterator callback function to be atomic,
5658 *
5659 * @hw: the hardware struct of which the interfaces should be iterated over
5660 * @iterator: the iterator function to call, cannot sleep
5661 * @data: first argument of the iterator function
5662 */
5663void ieee80211_iterate_stations_atomic(struct ieee80211_hw *hw,
5664 void (*iterator)(void *data,
5665 struct ieee80211_sta *sta),
5666 void *data);
42935eca
LR
5667/**
5668 * ieee80211_queue_work - add work onto the mac80211 workqueue
5669 *
5670 * Drivers and mac80211 use this to add work onto the mac80211 workqueue.
5671 * This helper ensures drivers are not queueing work when they should not be.
5672 *
5673 * @hw: the hardware struct for the interface we are adding work for
5674 * @work: the work we want to add onto the mac80211 workqueue
5675 */
5676void ieee80211_queue_work(struct ieee80211_hw *hw, struct work_struct *work);
5677
5678/**
5679 * ieee80211_queue_delayed_work - add work onto the mac80211 workqueue
5680 *
5681 * Drivers and mac80211 use this to queue delayed work onto the mac80211
5682 * workqueue.
5683 *
5684 * @hw: the hardware struct for the interface we are adding work for
5685 * @dwork: delayable work to queue onto the mac80211 workqueue
5686 * @delay: number of jiffies to wait before queueing
5687 */
5688void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
5689 struct delayed_work *dwork,
5690 unsigned long delay);
5691
0df3ef45
RR
5692/**
5693 * ieee80211_start_tx_ba_session - Start a tx Block Ack session.
c951ad35 5694 * @sta: the station for which to start a BA session
0df3ef45 5695 * @tid: the TID to BA on.
bd2ce6e4 5696 * @timeout: session timeout value (in TUs)
ea2d8b59
RD
5697 *
5698 * Return: success if addBA request was sent, failure otherwise
0df3ef45
RR
5699 *
5700 * Although mac80211/low level driver/user space application can estimate
5701 * the need to start aggregation on a certain RA/TID, the session level
5702 * will be managed by the mac80211.
5703 */
bd2ce6e4
SM
5704int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid,
5705 u16 timeout);
0df3ef45 5706
0df3ef45
RR
5707/**
5708 * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate.
1ed32e4f 5709 * @vif: &struct ieee80211_vif pointer from the add_interface callback
0df3ef45
RR
5710 * @ra: receiver address of the BA session recipient.
5711 * @tid: the TID to BA on.
5712 *
5713 * This function must be called by low level driver once it has
5d22c89b
JB
5714 * finished with preparations for the BA session. It can be called
5715 * from any context.
0df3ef45 5716 */
c951ad35 5717void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
0df3ef45
RR
5718 u16 tid);
5719
5720/**
5721 * ieee80211_stop_tx_ba_session - Stop a Block Ack session.
c951ad35 5722 * @sta: the station whose BA session to stop
0df3ef45 5723 * @tid: the TID to stop BA.
ea2d8b59 5724 *
6a8579d0 5725 * Return: negative error if the TID is invalid, or no aggregation active
0df3ef45
RR
5726 *
5727 * Although mac80211/low level driver/user space application can estimate
5728 * the need to stop aggregation on a certain RA/TID, the session level
5729 * will be managed by the mac80211.
5730 */
6a8579d0 5731int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid);
0df3ef45 5732
0df3ef45
RR
5733/**
5734 * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate.
1ed32e4f 5735 * @vif: &struct ieee80211_vif pointer from the add_interface callback
0df3ef45
RR
5736 * @ra: receiver address of the BA session recipient.
5737 * @tid: the desired TID to BA on.
5738 *
5739 * This function must be called by low level driver once it has
5d22c89b
JB
5740 * finished with preparations for the BA session tear down. It
5741 * can be called from any context.
0df3ef45 5742 */
c951ad35 5743void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
0df3ef45
RR
5744 u16 tid);
5745
17741cdc
JB
5746/**
5747 * ieee80211_find_sta - find a station
5748 *
5ed176e1 5749 * @vif: virtual interface to look for station on
17741cdc
JB
5750 * @addr: station's address
5751 *
0ae997dc
YB
5752 * Return: The station, if found. %NULL otherwise.
5753 *
5754 * Note: This function must be called under RCU lock and the
17741cdc
JB
5755 * resulting pointer is only valid under RCU lock as well.
5756 */
5ed176e1 5757struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif,
17741cdc
JB
5758 const u8 *addr);
5759
5ed176e1 5760/**
686b9cb9 5761 * ieee80211_find_sta_by_ifaddr - find a station on hardware
5ed176e1
JB
5762 *
5763 * @hw: pointer as obtained from ieee80211_alloc_hw()
686b9cb9
BG
5764 * @addr: remote station's address
5765 * @localaddr: local address (vif->sdata->vif.addr). Use NULL for 'any'.
5ed176e1 5766 *
0ae997dc
YB
5767 * Return: The station, if found. %NULL otherwise.
5768 *
5769 * Note: This function must be called under RCU lock and the
5ed176e1
JB
5770 * resulting pointer is only valid under RCU lock as well.
5771 *
686b9cb9
BG
5772 * NOTE: You may pass NULL for localaddr, but then you will just get
5773 * the first STA that matches the remote address 'addr'.
5774 * We can have multiple STA associated with multiple
5775 * logical stations (e.g. consider a station connecting to another
5776 * BSSID on the same AP hardware without disconnecting first).
5777 * In this case, the result of this method with localaddr NULL
5778 * is not reliable.
5ed176e1 5779 *
686b9cb9 5780 * DO NOT USE THIS FUNCTION with localaddr NULL if at all possible.
5ed176e1 5781 */
686b9cb9
BG
5782struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw,
5783 const u8 *addr,
5784 const u8 *localaddr);
5ed176e1 5785
af818581
JB
5786/**
5787 * ieee80211_sta_block_awake - block station from waking up
5788 * @hw: the hardware
5789 * @pubsta: the station
5790 * @block: whether to block or unblock
5791 *
5792 * Some devices require that all frames that are on the queues
5793 * for a specific station that went to sleep are flushed before
5794 * a poll response or frames after the station woke up can be
5795 * delivered to that it. Note that such frames must be rejected
5796 * by the driver as filtered, with the appropriate status flag.
5797 *
5798 * This function allows implementing this mode in a race-free
5799 * manner.
5800 *
5801 * To do this, a driver must keep track of the number of frames
5802 * still enqueued for a specific station. If this number is not
5803 * zero when the station goes to sleep, the driver must call
5804 * this function to force mac80211 to consider the station to
5805 * be asleep regardless of the station's actual state. Once the
5806 * number of outstanding frames reaches zero, the driver must
5807 * call this function again to unblock the station. That will
5808 * cause mac80211 to be able to send ps-poll responses, and if
5809 * the station queried in the meantime then frames will also
5810 * be sent out as a result of this. Additionally, the driver
5811 * will be notified that the station woke up some time after
5812 * it is unblocked, regardless of whether the station actually
5813 * woke up while blocked or not.
5814 */
5815void ieee80211_sta_block_awake(struct ieee80211_hw *hw,
5816 struct ieee80211_sta *pubsta, bool block);
5817
37fbd908
JB
5818/**
5819 * ieee80211_sta_eosp - notify mac80211 about end of SP
5820 * @pubsta: the station
5821 *
5822 * When a device transmits frames in a way that it can't tell
5823 * mac80211 in the TX status about the EOSP, it must clear the
5824 * %IEEE80211_TX_STATUS_EOSP bit and call this function instead.
5825 * This applies for PS-Poll as well as uAPSD.
5826 *
e943789e
JB
5827 * Note that just like with _tx_status() and _rx() drivers must
5828 * not mix calls to irqsafe/non-irqsafe versions, this function
5829 * must not be mixed with those either. Use the all irqsafe, or
5830 * all non-irqsafe, don't mix!
5831 *
5832 * NB: the _irqsafe version of this function doesn't exist, no
5833 * driver needs it right now. Don't call this function if
5834 * you'd need the _irqsafe version, look at the git history
5835 * and restore the _irqsafe version!
37fbd908 5836 */
e943789e 5837void ieee80211_sta_eosp(struct ieee80211_sta *pubsta);
37fbd908 5838
0ead2510
EG
5839/**
5840 * ieee80211_send_eosp_nullfunc - ask mac80211 to send NDP with EOSP
5841 * @pubsta: the station
5842 * @tid: the tid of the NDP
5843 *
5844 * Sometimes the device understands that it needs to close
5845 * the Service Period unexpectedly. This can happen when
5846 * sending frames that are filling holes in the BA window.
5847 * In this case, the device can ask mac80211 to send a
5848 * Nullfunc frame with EOSP set. When that happens, the
5849 * driver must have called ieee80211_sta_set_buffered() to
5850 * let mac80211 know that there are no buffered frames any
5851 * more, otherwise mac80211 will get the more_data bit wrong.
5852 * The low level driver must have made sure that the frame
5853 * will be sent despite the station being in power-save.
5854 * Mac80211 won't call allow_buffered_frames().
5855 * Note that calling this function, doesn't exempt the driver
5856 * from closing the EOSP properly, it will still have to call
5857 * ieee80211_sta_eosp when the NDP is sent.
5858 */
5859void ieee80211_send_eosp_nullfunc(struct ieee80211_sta *pubsta, int tid);
5860
b4809e94
THJ
5861/**
5862 * ieee80211_sta_register_airtime - register airtime usage for a sta/tid
5863 *
c74114d7 5864 * Register airtime usage for a given sta on a given tid. The driver must call
b4809e94
THJ
5865 * this function to notify mac80211 that a station used a certain amount of
5866 * airtime. This information will be used by the TXQ scheduler to schedule
5867 * stations in a way that ensures airtime fairness.
5868 *
5869 * The reported airtime should as a minimum include all time that is spent
5870 * transmitting to the remote station, including overhead and padding, but not
5871 * including time spent waiting for a TXOP. If the time is not reported by the
5872 * hardware it can in some cases be calculated from the rate and known frame
5873 * composition. When possible, the time should include any failed transmission
5874 * attempts.
5875 *
5876 * The driver can either call this function synchronously for every packet or
5877 * aggregate, or asynchronously as airtime usage information becomes available.
5878 * TX and RX airtime can be reported together, or separately by setting one of
5879 * them to 0.
5880 *
5881 * @pubsta: the station
5882 * @tid: the TID to register airtime for
5883 * @tx_airtime: airtime used during TX (in usec)
5884 * @rx_airtime: airtime used during RX (in usec)
5885 */
5886void ieee80211_sta_register_airtime(struct ieee80211_sta *pubsta, u8 tid,
5887 u32 tx_airtime, u32 rx_airtime);
5888
3ace10f5
KY
5889/**
5890 * ieee80211_txq_airtime_check - check if a txq can send frame to device
5891 *
5892 * @hw: pointer obtained from ieee80211_alloc_hw()
5893 * @txq: pointer obtained from station or virtual interface
5894 *
5895 * Return true if the AQL's airtime limit has not been reached and the txq can
5896 * continue to send more packets to the device. Otherwise return false.
5897 */
5898bool
5899ieee80211_txq_airtime_check(struct ieee80211_hw *hw, struct ieee80211_txq *txq);
5900
830af02f
JB
5901/**
5902 * ieee80211_iter_keys - iterate keys programmed into the device
5903 * @hw: pointer obtained from ieee80211_alloc_hw()
5904 * @vif: virtual interface to iterate, may be %NULL for all
5905 * @iter: iterator function that will be called for each key
5906 * @iter_data: custom data to pass to the iterator function
5907 *
5908 * This function can be used to iterate all the keys known to
5909 * mac80211, even those that weren't previously programmed into
5910 * the device. This is intended for use in WoWLAN if the device
5911 * needs reprogramming of the keys during suspend. Note that due
5912 * to locking reasons, it is also only safe to call this at few
5913 * spots since it must hold the RTNL and be able to sleep.
f850e00f
JB
5914 *
5915 * The order in which the keys are iterated matches the order
5916 * in which they were originally installed and handed to the
5917 * set_key callback.
830af02f
JB
5918 */
5919void ieee80211_iter_keys(struct ieee80211_hw *hw,
5920 struct ieee80211_vif *vif,
5921 void (*iter)(struct ieee80211_hw *hw,
5922 struct ieee80211_vif *vif,
5923 struct ieee80211_sta *sta,
5924 struct ieee80211_key_conf *key,
5925 void *data),
5926 void *iter_data);
5927
ef044763
EP
5928/**
5929 * ieee80211_iter_keys_rcu - iterate keys programmed into the device
5930 * @hw: pointer obtained from ieee80211_alloc_hw()
5931 * @vif: virtual interface to iterate, may be %NULL for all
5932 * @iter: iterator function that will be called for each key
5933 * @iter_data: custom data to pass to the iterator function
5934 *
5935 * This function can be used to iterate all the keys known to
5936 * mac80211, even those that weren't previously programmed into
5937 * the device. Note that due to locking reasons, keys of station
5938 * in removal process will be skipped.
5939 *
5940 * This function requires being called in an RCU critical section,
5941 * and thus iter must be atomic.
5942 */
5943void ieee80211_iter_keys_rcu(struct ieee80211_hw *hw,
5944 struct ieee80211_vif *vif,
5945 void (*iter)(struct ieee80211_hw *hw,
5946 struct ieee80211_vif *vif,
5947 struct ieee80211_sta *sta,
5948 struct ieee80211_key_conf *key,
5949 void *data),
5950 void *iter_data);
5951
3448c005
JB
5952/**
5953 * ieee80211_iter_chan_contexts_atomic - iterate channel contexts
ae4a50ee 5954 * @hw: pointer obtained from ieee80211_alloc_hw().
3448c005
JB
5955 * @iter: iterator function
5956 * @iter_data: data passed to iterator function
5957 *
5958 * Iterate all active channel contexts. This function is atomic and
5959 * doesn't acquire any locks internally that might be held in other
5960 * places while calling into the driver.
5961 *
5962 * The iterator will not find a context that's being added (during
5963 * the driver callback to add it) but will find it while it's being
5964 * removed.
8a61af65
JB
5965 *
5966 * Note that during hardware restart, all contexts that existed
5967 * before the restart are considered already present so will be
5968 * found while iterating, whether they've been re-added already
5969 * or not.
3448c005
JB
5970 */
5971void ieee80211_iter_chan_contexts_atomic(
5972 struct ieee80211_hw *hw,
5973 void (*iter)(struct ieee80211_hw *hw,
5974 struct ieee80211_chanctx_conf *chanctx_conf,
5975 void *data),
5976 void *iter_data);
5977
a619a4c0
JO
5978/**
5979 * ieee80211_ap_probereq_get - retrieve a Probe Request template
5980 * @hw: pointer obtained from ieee80211_alloc_hw().
5981 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
5982 *
5983 * Creates a Probe Request template which can, for example, be uploaded to
5984 * hardware. The template is filled with bssid, ssid and supported rate
5985 * information. This function must only be called from within the
5986 * .bss_info_changed callback function and only in managed mode. The function
5987 * is only useful when the interface is associated, otherwise it will return
0ae997dc
YB
5988 * %NULL.
5989 *
5990 * Return: The Probe Request template. %NULL on error.
a619a4c0
JO
5991 */
5992struct sk_buff *ieee80211_ap_probereq_get(struct ieee80211_hw *hw,
5993 struct ieee80211_vif *vif);
5994
04de8381
KV
5995/**
5996 * ieee80211_beacon_loss - inform hardware does not receive beacons
5997 *
1ed32e4f 5998 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
04de8381 5999 *
c1288b12 6000 * When beacon filtering is enabled with %IEEE80211_VIF_BEACON_FILTER and
1e4dcd01 6001 * %IEEE80211_CONF_PS is set, the driver needs to inform whenever the
04de8381
KV
6002 * hardware is not receiving beacons with this function.
6003 */
6004void ieee80211_beacon_loss(struct ieee80211_vif *vif);
4b7679a5 6005
1e4dcd01
JO
6006/**
6007 * ieee80211_connection_loss - inform hardware has lost connection to the AP
6008 *
6009 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6010 *
c1288b12 6011 * When beacon filtering is enabled with %IEEE80211_VIF_BEACON_FILTER, and
1e4dcd01
JO
6012 * %IEEE80211_CONF_PS and %IEEE80211_HW_CONNECTION_MONITOR are set, the driver
6013 * needs to inform if the connection to the AP has been lost.
682bd38b
JB
6014 * The function may also be called if the connection needs to be terminated
6015 * for some other reason, even if %IEEE80211_HW_CONNECTION_MONITOR isn't set.
1e4dcd01
JO
6016 *
6017 * This function will cause immediate change to disassociated state,
6018 * without connection recovery attempts.
6019 */
6020void ieee80211_connection_loss(struct ieee80211_vif *vif);
6021
3f8a39ff
JB
6022/**
6023 * ieee80211_disconnect - request disconnection
6024 *
6025 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6026 * @reconnect: immediate reconnect is desired
6027 *
6028 * Request disconnection from the current network and, if enabled, send a
6029 * hint to the higher layers that immediate reconnect is desired.
6030 */
6031void ieee80211_disconnect(struct ieee80211_vif *vif, bool reconnect);
6032
95acac61
JB
6033/**
6034 * ieee80211_resume_disconnect - disconnect from AP after resume
6035 *
6036 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6037 *
6038 * Instructs mac80211 to disconnect from the AP after resume.
6039 * Drivers can use this after WoWLAN if they know that the
6040 * connection cannot be kept up, for example because keys were
6041 * used while the device was asleep but the replay counters or
6042 * similar cannot be retrieved from the device during resume.
6043 *
6044 * Note that due to implementation issues, if the driver uses
6045 * the reconfiguration functionality during resume the interface
6046 * will still be added as associated first during resume and then
6047 * disconnect normally later.
6048 *
6049 * This function can only be called from the resume callback and
6050 * the driver must not be holding any of its own locks while it
6051 * calls this function, or at least not any locks it needs in the
6052 * key configuration paths (if it supports HW crypto).
6053 */
6054void ieee80211_resume_disconnect(struct ieee80211_vif *vif);
f90754c1 6055
a97c13c3
JO
6056/**
6057 * ieee80211_cqm_rssi_notify - inform a configured connection quality monitoring
6058 * rssi threshold triggered
6059 *
6060 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6061 * @rssi_event: the RSSI trigger event type
769f07d8 6062 * @rssi_level: new RSSI level value or 0 if not available
a97c13c3
JO
6063 * @gfp: context flags
6064 *
ea086359 6065 * When the %IEEE80211_VIF_SUPPORTS_CQM_RSSI is set, and a connection quality
a97c13c3
JO
6066 * monitoring is configured with an rssi threshold, the driver will inform
6067 * whenever the rssi level reaches the threshold.
6068 */
6069void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif,
6070 enum nl80211_cqm_rssi_threshold_event rssi_event,
769f07d8 6071 s32 rssi_level,
a97c13c3
JO
6072 gfp_t gfp);
6073
98f03342
JB
6074/**
6075 * ieee80211_cqm_beacon_loss_notify - inform CQM of beacon loss
6076 *
6077 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6078 * @gfp: context flags
6079 */
6080void ieee80211_cqm_beacon_loss_notify(struct ieee80211_vif *vif, gfp_t gfp);
6081
164eb02d
SW
6082/**
6083 * ieee80211_radar_detected - inform that a radar was detected
6084 *
6085 * @hw: pointer as obtained from ieee80211_alloc_hw()
6086 */
6087void ieee80211_radar_detected(struct ieee80211_hw *hw);
6088
5ce6e438
JB
6089/**
6090 * ieee80211_chswitch_done - Complete channel switch process
6091 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6092 * @success: make the channel switch successful or not
6093 *
6094 * Complete the channel switch post-process: set the new operational channel
6095 * and wake up the suspended queues.
6096 */
6097void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success);
6098
6d501764
NE
6099/**
6100 * ieee80211_channel_switch_disconnect - disconnect due to channel switch error
6101 * @vif &struct ieee80211_vif pointer from the add_interface callback.
6102 * @block_tx: if %true, do not send deauth frame.
6103 *
6104 * Instruct mac80211 to disconnect due to a channel switch error. The channel
6105 * switch can request to block the tx and so, we need to make sure we do not send
6106 * a deauth frame in this case.
6107 */
6108void ieee80211_channel_switch_disconnect(struct ieee80211_vif *vif,
6109 bool block_tx);
6110
d1f5b7a3
JB
6111/**
6112 * ieee80211_request_smps - request SM PS transition
6113 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
633dd1ea 6114 * @smps_mode: new SM PS mode
d1f5b7a3
JB
6115 *
6116 * This allows the driver to request an SM PS transition in managed
6117 * mode. This is useful when the driver has more information than
6118 * the stack about possible interference, for example by bluetooth.
6119 */
6120void ieee80211_request_smps(struct ieee80211_vif *vif,
6121 enum ieee80211_smps_mode smps_mode);
6122
21f83589
JB
6123/**
6124 * ieee80211_ready_on_channel - notification of remain-on-channel start
6125 * @hw: pointer as obtained from ieee80211_alloc_hw()
6126 */
6127void ieee80211_ready_on_channel(struct ieee80211_hw *hw);
6128
6129/**
6130 * ieee80211_remain_on_channel_expired - remain_on_channel duration expired
6131 * @hw: pointer as obtained from ieee80211_alloc_hw()
6132 */
6133void ieee80211_remain_on_channel_expired(struct ieee80211_hw *hw);
6134
f41ccd71
SL
6135/**
6136 * ieee80211_stop_rx_ba_session - callback to stop existing BA sessions
6137 *
6138 * in order not to harm the system performance and user experience, the device
6139 * may request not to allow any rx ba session and tear down existing rx ba
6140 * sessions based on system constraints such as periodic BT activity that needs
6141 * to limit wlan activity (eg.sco or a2dp)."
6142 * in such cases, the intention is to limit the duration of the rx ppdu and
6143 * therefore prevent the peer device to use a-mpdu aggregation.
6144 *
6145 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6146 * @ba_rx_bitmap: Bit map of open rx ba per tid
6147 * @addr: & to bssid mac address
6148 */
6149void ieee80211_stop_rx_ba_session(struct ieee80211_vif *vif, u16 ba_rx_bitmap,
6150 const u8 *addr);
6151
06470f74
SS
6152/**
6153 * ieee80211_mark_rx_ba_filtered_frames - move RX BA window and mark filtered
6154 * @pubsta: station struct
6155 * @tid: the session's TID
6156 * @ssn: starting sequence number of the bitmap, all frames before this are
6157 * assumed to be out of the window after the call
6158 * @filtered: bitmap of filtered frames, BIT(0) is the @ssn entry etc.
6159 * @received_mpdus: number of received mpdus in firmware
6160 *
6161 * This function moves the BA window and releases all frames before @ssn, and
6162 * marks frames marked in the bitmap as having been filtered. Afterwards, it
6163 * checks if any frames in the window starting from @ssn can now be released
6164 * (in case they were only waiting for frames that were filtered.)
6165 */
6166void ieee80211_mark_rx_ba_filtered_frames(struct ieee80211_sta *pubsta, u8 tid,
6167 u16 ssn, u64 filtered,
6168 u16 received_mpdus);
6169
8c771244
FF
6170/**
6171 * ieee80211_send_bar - send a BlockAckReq frame
6172 *
6173 * can be used to flush pending frames from the peer's aggregation reorder
6174 * buffer.
6175 *
6176 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6177 * @ra: the peer's destination address
6178 * @tid: the TID of the aggregation session
6179 * @ssn: the new starting sequence number for the receiver
6180 */
6181void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn);
6182
1272c5d8
LC
6183/**
6184 * ieee80211_manage_rx_ba_offl - helper to queue an RX BA work
6185 * @vif: &struct ieee80211_vif pointer from the add_interface callback
6186 * @addr: station mac address
6187 * @tid: the rx tid
6188 */
699cb58c 6189void ieee80211_manage_rx_ba_offl(struct ieee80211_vif *vif, const u8 *addr,
1272c5d8 6190 unsigned int tid);
699cb58c 6191
08cf42e8
MK
6192/**
6193 * ieee80211_start_rx_ba_session_offl - start a Rx BA session
6194 *
6195 * Some device drivers may offload part of the Rx aggregation flow including
6196 * AddBa/DelBa negotiation but may otherwise be incapable of full Rx
6197 * reordering.
6198 *
6199 * Create structures responsible for reordering so device drivers may call here
6200 * when they complete AddBa negotiation.
6201 *
6202 * @vif: &struct ieee80211_vif pointer from the add_interface callback
6203 * @addr: station mac address
6204 * @tid: the rx tid
6205 */
699cb58c
JB
6206static inline void ieee80211_start_rx_ba_session_offl(struct ieee80211_vif *vif,
6207 const u8 *addr, u16 tid)
6208{
6209 if (WARN_ON(tid >= IEEE80211_NUM_TIDS))
6210 return;
6211 ieee80211_manage_rx_ba_offl(vif, addr, tid);
6212}
08cf42e8
MK
6213
6214/**
6215 * ieee80211_stop_rx_ba_session_offl - stop a Rx BA session
6216 *
6217 * Some device drivers may offload part of the Rx aggregation flow including
6218 * AddBa/DelBa negotiation but may otherwise be incapable of full Rx
6219 * reordering.
6220 *
6221 * Destroy structures responsible for reordering so device drivers may call here
6222 * when they complete DelBa negotiation.
6223 *
6224 * @vif: &struct ieee80211_vif pointer from the add_interface callback
6225 * @addr: station mac address
6226 * @tid: the rx tid
6227 */
699cb58c
JB
6228static inline void ieee80211_stop_rx_ba_session_offl(struct ieee80211_vif *vif,
6229 const u8 *addr, u16 tid)
6230{
6231 if (WARN_ON(tid >= IEEE80211_NUM_TIDS))
6232 return;
6233 ieee80211_manage_rx_ba_offl(vif, addr, tid + IEEE80211_NUM_TIDS);
6234}
08cf42e8 6235
04c2cf34
NG
6236/**
6237 * ieee80211_rx_ba_timer_expired - stop a Rx BA session due to timeout
6238 *
6239 * Some device drivers do not offload AddBa/DelBa negotiation, but handle rx
6240 * buffer reording internally, and therefore also handle the session timer.
6241 *
6242 * Trigger the timeout flow, which sends a DelBa.
6243 *
6244 * @vif: &struct ieee80211_vif pointer from the add_interface callback
6245 * @addr: station mac address
6246 * @tid: the rx tid
6247 */
6248void ieee80211_rx_ba_timer_expired(struct ieee80211_vif *vif,
6249 const u8 *addr, unsigned int tid);
6250
4b7679a5 6251/* Rate control API */
e6a9854b 6252
4b7679a5 6253/**
e6a9854b
JB
6254 * struct ieee80211_tx_rate_control - rate control information for/from RC algo
6255 *
6256 * @hw: The hardware the algorithm is invoked for.
6257 * @sband: The band this frame is being transmitted on.
6258 * @bss_conf: the current BSS configuration
f44d4eb5
SW
6259 * @skb: the skb that will be transmitted, the control information in it needs
6260 * to be filled in
e6a9854b
JB
6261 * @reported_rate: The rate control algorithm can fill this in to indicate
6262 * which rate should be reported to userspace as the current rate and
6263 * used for rate calculations in the mesh network.
6264 * @rts: whether RTS will be used for this frame because it is longer than the
6265 * RTS threshold
6266 * @short_preamble: whether mac80211 will request short-preamble transmission
6267 * if the selected rate supports it
f44d4eb5 6268 * @rate_idx_mask: user-requested (legacy) rate mask
2ffbe6d3 6269 * @rate_idx_mcs_mask: user-requested MCS rate mask (NULL if not in use)
8f0729b1 6270 * @bss: whether this frame is sent out in AP or IBSS mode
e6a9854b
JB
6271 */
6272struct ieee80211_tx_rate_control {
6273 struct ieee80211_hw *hw;
6274 struct ieee80211_supported_band *sband;
6275 struct ieee80211_bss_conf *bss_conf;
6276 struct sk_buff *skb;
6277 struct ieee80211_tx_rate reported_rate;
6278 bool rts, short_preamble;
37eb0b16 6279 u32 rate_idx_mask;
2ffbe6d3 6280 u8 *rate_idx_mcs_mask;
8f0729b1 6281 bool bss;
4b7679a5
JB
6282};
6283
09b4a4fa
JB
6284/**
6285 * enum rate_control_capabilities - rate control capabilities
6286 */
6287enum rate_control_capabilities {
6288 /**
6289 * @RATE_CTRL_CAPA_VHT_EXT_NSS_BW:
6290 * Support for extended NSS BW support (dot11VHTExtendedNSSCapable)
6291 * Note that this is only looked at if the minimum number of chains
6292 * that the AP uses is < the number of TX chains the hardware has,
6293 * otherwise the NSS difference doesn't bother us.
6294 */
6295 RATE_CTRL_CAPA_VHT_EXT_NSS_BW = BIT(0),
08a46c64
FF
6296 /**
6297 * @RATE_CTRL_CAPA_AMPDU_TRIGGER:
6298 * mac80211 should start A-MPDU sessions on tx
6299 */
6300 RATE_CTRL_CAPA_AMPDU_TRIGGER = BIT(1),
09b4a4fa
JB
6301};
6302
4b7679a5 6303struct rate_control_ops {
09b4a4fa 6304 unsigned long capa;
4b7679a5 6305 const char *name;
6cb5f3ea
JB
6306 void *(*alloc)(struct ieee80211_hw *hw);
6307 void (*add_debugfs)(struct ieee80211_hw *hw, void *priv,
6308 struct dentry *debugfsdir);
4b7679a5
JB
6309 void (*free)(void *priv);
6310
6311 void *(*alloc_sta)(void *priv, struct ieee80211_sta *sta, gfp_t gfp);
6312 void (*rate_init)(void *priv, struct ieee80211_supported_band *sband,
3de805cf 6313 struct cfg80211_chan_def *chandef,
4b7679a5 6314 struct ieee80211_sta *sta, void *priv_sta);
81cb7623 6315 void (*rate_update)(void *priv, struct ieee80211_supported_band *sband,
3de805cf 6316 struct cfg80211_chan_def *chandef,
64f68e5d
JB
6317 struct ieee80211_sta *sta, void *priv_sta,
6318 u32 changed);
4b7679a5
JB
6319 void (*free_sta)(void *priv, struct ieee80211_sta *sta,
6320 void *priv_sta);
6321
18fb84d9
FF
6322 void (*tx_status_ext)(void *priv,
6323 struct ieee80211_supported_band *sband,
6324 void *priv_sta, struct ieee80211_tx_status *st);
4b7679a5
JB
6325 void (*tx_status)(void *priv, struct ieee80211_supported_band *sband,
6326 struct ieee80211_sta *sta, void *priv_sta,
6327 struct sk_buff *skb);
e6a9854b
JB
6328 void (*get_rate)(void *priv, struct ieee80211_sta *sta, void *priv_sta,
6329 struct ieee80211_tx_rate_control *txrc);
4b7679a5
JB
6330
6331 void (*add_sta_debugfs)(void *priv, void *priv_sta,
6332 struct dentry *dir);
cca674d4
AQ
6333
6334 u32 (*get_expected_throughput)(void *priv_sta);
4b7679a5
JB
6335};
6336
6337static inline int rate_supported(struct ieee80211_sta *sta,
57fbcce3 6338 enum nl80211_band band,
4b7679a5
JB
6339 int index)
6340{
6341 return (sta == NULL || sta->supp_rates[band] & BIT(index));
6342}
6343
6344static inline s8
6345rate_lowest_index(struct ieee80211_supported_band *sband,
6346 struct ieee80211_sta *sta)
6347{
6348 int i;
6349
6350 for (i = 0; i < sband->n_bitrates; i++)
6351 if (rate_supported(sta, sband->band, i))
6352 return i;
6353
6354 /* warn when we cannot find a rate. */
54d5026e 6355 WARN_ON_ONCE(1);
4b7679a5 6356
54d5026e 6357 /* and return 0 (the lowest index) */
4b7679a5
JB
6358 return 0;
6359}
6360
b770b43e
LR
6361static inline
6362bool rate_usable_index_exists(struct ieee80211_supported_band *sband,
6363 struct ieee80211_sta *sta)
6364{
6365 unsigned int i;
6366
6367 for (i = 0; i < sband->n_bitrates; i++)
6368 if (rate_supported(sta, sband->band, i))
6369 return true;
6370 return false;
6371}
4b7679a5 6372
0d528d85
FF
6373/**
6374 * rate_control_set_rates - pass the sta rate selection to mac80211/driver
6375 *
6376 * When not doing a rate control probe to test rates, rate control should pass
6377 * its rate selection to mac80211. If the driver supports receiving a station
6378 * rate table, it will use it to ensure that frames are always sent based on
6379 * the most recent rate control module decision.
6380 *
6381 * @hw: pointer as obtained from ieee80211_alloc_hw()
6382 * @pubsta: &struct ieee80211_sta pointer to the target destination.
6383 * @rates: new tx rate set to be used for this station.
6384 */
6385int rate_control_set_rates(struct ieee80211_hw *hw,
6386 struct ieee80211_sta *pubsta,
6387 struct ieee80211_sta_rates *rates);
6388
631ad703
JB
6389int ieee80211_rate_control_register(const struct rate_control_ops *ops);
6390void ieee80211_rate_control_unregister(const struct rate_control_ops *ops);
4b7679a5 6391
10c806b3
LR
6392static inline bool
6393conf_is_ht20(struct ieee80211_conf *conf)
6394{
675a0b04 6395 return conf->chandef.width == NL80211_CHAN_WIDTH_20;
10c806b3
LR
6396}
6397
6398static inline bool
6399conf_is_ht40_minus(struct ieee80211_conf *conf)
6400{
675a0b04
KB
6401 return conf->chandef.width == NL80211_CHAN_WIDTH_40 &&
6402 conf->chandef.center_freq1 < conf->chandef.chan->center_freq;
10c806b3
LR
6403}
6404
6405static inline bool
6406conf_is_ht40_plus(struct ieee80211_conf *conf)
6407{
675a0b04
KB
6408 return conf->chandef.width == NL80211_CHAN_WIDTH_40 &&
6409 conf->chandef.center_freq1 > conf->chandef.chan->center_freq;
10c806b3
LR
6410}
6411
6412static inline bool
6413conf_is_ht40(struct ieee80211_conf *conf)
6414{
675a0b04 6415 return conf->chandef.width == NL80211_CHAN_WIDTH_40;
10c806b3
LR
6416}
6417
6418static inline bool
6419conf_is_ht(struct ieee80211_conf *conf)
6420{
041f607d
RL
6421 return (conf->chandef.width != NL80211_CHAN_WIDTH_5) &&
6422 (conf->chandef.width != NL80211_CHAN_WIDTH_10) &&
6423 (conf->chandef.width != NL80211_CHAN_WIDTH_20_NOHT);
10c806b3
LR
6424}
6425
2ca27bcf
JB
6426static inline enum nl80211_iftype
6427ieee80211_iftype_p2p(enum nl80211_iftype type, bool p2p)
6428{
6429 if (p2p) {
6430 switch (type) {
6431 case NL80211_IFTYPE_STATION:
6432 return NL80211_IFTYPE_P2P_CLIENT;
6433 case NL80211_IFTYPE_AP:
6434 return NL80211_IFTYPE_P2P_GO;
6435 default:
6436 break;
6437 }
6438 }
6439 return type;
6440}
6441
6442static inline enum nl80211_iftype
6443ieee80211_vif_type_p2p(struct ieee80211_vif *vif)
6444{
6445 return ieee80211_iftype_p2p(vif->type, vif->p2p);
6446}
6447
65554d07
SS
6448/**
6449 * ieee80211_update_mu_groups - set the VHT MU-MIMO groud data
6450 *
6451 * @vif: the specified virtual interface
6452 * @membership: 64 bits array - a bit is set if station is member of the group
6453 * @position: 2 bits per group id indicating the position in the group
6454 *
6455 * Note: This function assumes that the given vif is valid and the position and
6456 * membership data is of the correct size and are in the same byte order as the
6457 * matching GroupId management frame.
6458 * Calls to this function need to be serialized with RX path.
6459 */
6460void ieee80211_update_mu_groups(struct ieee80211_vif *vif,
6461 const u8 *membership, const u8 *position);
6462
615f7b9b
MV
6463void ieee80211_enable_rssi_reports(struct ieee80211_vif *vif,
6464 int rssi_min_thold,
6465 int rssi_max_thold);
6466
6467void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif);
768db343 6468
0d8a0a17 6469/**
0ae997dc 6470 * ieee80211_ave_rssi - report the average RSSI for the specified interface
0d8a0a17
WYG
6471 *
6472 * @vif: the specified virtual interface
6473 *
0ae997dc
YB
6474 * Note: This function assumes that the given vif is valid.
6475 *
6476 * Return: The average RSSI value for the requested interface, or 0 if not
6477 * applicable.
0d8a0a17 6478 */
1dae27f8
WYG
6479int ieee80211_ave_rssi(struct ieee80211_vif *vif);
6480
cd8f7cb4
JB
6481/**
6482 * ieee80211_report_wowlan_wakeup - report WoWLAN wakeup
6483 * @vif: virtual interface
6484 * @wakeup: wakeup reason(s)
6485 * @gfp: allocation flags
6486 *
6487 * See cfg80211_report_wowlan_wakeup().
6488 */
6489void ieee80211_report_wowlan_wakeup(struct ieee80211_vif *vif,
6490 struct cfg80211_wowlan_wakeup *wakeup,
6491 gfp_t gfp);
6492
06be6b14
FF
6493/**
6494 * ieee80211_tx_prepare_skb - prepare an 802.11 skb for transmission
6495 * @hw: pointer as obtained from ieee80211_alloc_hw()
6496 * @vif: virtual interface
6497 * @skb: frame to be sent from within the driver
6498 * @band: the band to transmit on
6499 * @sta: optional pointer to get the station to send the frame to
6500 *
6501 * Note: must be called under RCU lock
6502 */
6503bool ieee80211_tx_prepare_skb(struct ieee80211_hw *hw,
6504 struct ieee80211_vif *vif, struct sk_buff *skb,
6505 int band, struct ieee80211_sta **sta);
6506
cb17ed29 6507/**
b1e8eb11 6508 * ieee80211_parse_tx_radiotap - Sanity-check and parse the radiotap header
bddc0c41
MV
6509 * of injected frames.
6510 *
6511 * To accurately parse and take into account rate and retransmission fields,
6512 * you must initialize the chandef field in the ieee80211_tx_info structure
6513 * of the skb before calling this function.
6514 *
cb17ed29
MV
6515 * @skb: packet injected by userspace
6516 * @dev: the &struct device of this 802.11 device
6517 */
6518bool ieee80211_parse_tx_radiotap(struct sk_buff *skb,
6519 struct net_device *dev);
6520
a7022e65
FF
6521/**
6522 * struct ieee80211_noa_data - holds temporary data for tracking P2P NoA state
6523 *
6524 * @next_tsf: TSF timestamp of the next absent state change
6525 * @has_next_tsf: next absent state change event pending
6526 *
6527 * @absent: descriptor bitmask, set if GO is currently absent
6528 *
6529 * private:
6530 *
6531 * @count: count fields from the NoA descriptors
6532 * @desc: adjusted data from the NoA
6533 */
6534struct ieee80211_noa_data {
6535 u32 next_tsf;
6536 bool has_next_tsf;
6537
6538 u8 absent;
6539
6540 u8 count[IEEE80211_P2P_NOA_DESC_MAX];
6541 struct {
6542 u32 start;
6543 u32 duration;
6544 u32 interval;
6545 } desc[IEEE80211_P2P_NOA_DESC_MAX];
6546};
6547
6548/**
6549 * ieee80211_parse_p2p_noa - initialize NoA tracking data from P2P IE
6550 *
6551 * @attr: P2P NoA IE
6552 * @data: NoA tracking data
6553 * @tsf: current TSF timestamp
6554 *
6555 * Return: number of successfully parsed descriptors
6556 */
6557int ieee80211_parse_p2p_noa(const struct ieee80211_p2p_noa_attr *attr,
6558 struct ieee80211_noa_data *data, u32 tsf);
6559
6560/**
6561 * ieee80211_update_p2p_noa - get next pending P2P GO absent state change
6562 *
6563 * @data: NoA tracking data
6564 * @tsf: current TSF timestamp
6565 */
6566void ieee80211_update_p2p_noa(struct ieee80211_noa_data *data, u32 tsf);
6567
c887f0d3 6568/**
b1e8eb11 6569 * ieee80211_tdls_oper_request - request userspace to perform a TDLS operation
c887f0d3
AN
6570 * @vif: virtual interface
6571 * @peer: the peer's destination address
6572 * @oper: the requested TDLS operation
6573 * @reason_code: reason code for the operation, valid for TDLS teardown
6574 * @gfp: allocation flags
6575 *
6576 * See cfg80211_tdls_oper_request().
6577 */
6578void ieee80211_tdls_oper_request(struct ieee80211_vif *vif, const u8 *peer,
6579 enum nl80211_tdls_operation oper,
6580 u16 reason_code, gfp_t gfp);
a7f3a768 6581
b6da911b
LK
6582/**
6583 * ieee80211_reserve_tid - request to reserve a specific TID
6584 *
6585 * There is sometimes a need (such as in TDLS) for blocking the driver from
6586 * using a specific TID so that the FW can use it for certain operations such
6587 * as sending PTI requests. To make sure that the driver doesn't use that TID,
6588 * this function must be called as it flushes out packets on this TID and marks
6589 * it as blocked, so that any transmit for the station on this TID will be
6590 * redirected to the alternative TID in the same AC.
6591 *
6592 * Note that this function blocks and may call back into the driver, so it
6593 * should be called without driver locks held. Also note this function should
6594 * only be called from the driver's @sta_state callback.
6595 *
6596 * @sta: the station to reserve the TID for
6597 * @tid: the TID to reserve
6598 *
6599 * Returns: 0 on success, else on failure
6600 */
6601int ieee80211_reserve_tid(struct ieee80211_sta *sta, u8 tid);
6602
6603/**
6604 * ieee80211_unreserve_tid - request to unreserve a specific TID
6605 *
6606 * Once there is no longer any need for reserving a certain TID, this function
6607 * should be called, and no longer will packets have their TID modified for
6608 * preventing use of this TID in the driver.
6609 *
6610 * Note that this function blocks and acquires a lock, so it should be called
6611 * without driver locks held. Also note this function should only be called
6612 * from the driver's @sta_state callback.
6613 *
6614 * @sta: the station
6615 * @tid: the TID to unreserve
6616 */
6617void ieee80211_unreserve_tid(struct ieee80211_sta *sta, u8 tid);
6618
ba8c3d6f
FF
6619/**
6620 * ieee80211_tx_dequeue - dequeue a packet from a software tx queue
6621 *
6622 * @hw: pointer as obtained from ieee80211_alloc_hw()
18667600
THJ
6623 * @txq: pointer obtained from station or virtual interface, or from
6624 * ieee80211_next_txq()
ba8c3d6f
FF
6625 *
6626 * Returns the skb if successful, %NULL if no frame was available.
fca1279f
JB
6627 *
6628 * Note that this must be called in an rcu_read_lock() critical section,
6629 * which can only be released after the SKB was handled. Some pointers in
66b239d2 6630 * skb->cb, e.g. the key pointer, are protected by RCU and thus the
fca1279f
JB
6631 * critical section must persist not just for the duration of this call
6632 * but for the duration of the frame handling.
6633 * However, also note that while in the wake_tx_queue() method,
6634 * rcu_read_lock() is already held.
fb0e76ab
ES
6635 *
6636 * softirqs must also be disabled when this function is called.
6637 * In process context, use ieee80211_tx_dequeue_ni() instead.
ba8c3d6f
FF
6638 */
6639struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw,
6640 struct ieee80211_txq *txq);
f2ac7e30 6641
fb0e76ab
ES
6642/**
6643 * ieee80211_tx_dequeue_ni - dequeue a packet from a software tx queue
6644 * (in process context)
6645 *
6646 * Like ieee80211_tx_dequeue() but can be called in process context
6647 * (internally disables bottom halves).
6648 *
6649 * @hw: pointer as obtained from ieee80211_alloc_hw()
6650 * @txq: pointer obtained from station or virtual interface, or from
6651 * ieee80211_next_txq()
6652 */
6653static inline struct sk_buff *ieee80211_tx_dequeue_ni(struct ieee80211_hw *hw,
6654 struct ieee80211_txq *txq)
6655{
6656 struct sk_buff *skb;
6657
6658 local_bh_disable();
6659 skb = ieee80211_tx_dequeue(hw, txq);
6660 local_bh_enable();
6661
6662 return skb;
6663}
6664
18667600
THJ
6665/**
6666 * ieee80211_next_txq - get next tx queue to pull packets from
6667 *
6668 * @hw: pointer as obtained from ieee80211_alloc_hw()
6669 * @ac: AC number to return packets from.
6670 *
18667600
THJ
6671 * Returns the next txq if successful, %NULL if no queue is eligible. If a txq
6672 * is returned, it should be returned with ieee80211_return_txq() after the
6673 * driver has finished scheduling it.
6674 */
6675struct ieee80211_txq *ieee80211_next_txq(struct ieee80211_hw *hw, u8 ac);
6676
6677/**
5b989c18 6678 * ieee80211_txq_schedule_start - start new scheduling round for TXQs
18667600
THJ
6679 *
6680 * @hw: pointer as obtained from ieee80211_alloc_hw()
6681 * @ac: AC number to acquire locks for
6682 *
5b989c18
FF
6683 * Should be called before ieee80211_next_txq() or ieee80211_return_txq().
6684 * The driver must not call multiple TXQ scheduling rounds concurrently.
18667600 6685 */
5b989c18
FF
6686void ieee80211_txq_schedule_start(struct ieee80211_hw *hw, u8 ac);
6687
6688/* (deprecated) */
6689static inline void ieee80211_txq_schedule_end(struct ieee80211_hw *hw, u8 ac)
6690{
6691}
18667600
THJ
6692
6693/**
5b989c18 6694 * ieee80211_schedule_txq - schedule a TXQ for transmission
18667600
THJ
6695 *
6696 * @hw: pointer as obtained from ieee80211_alloc_hw()
5b989c18 6697 * @txq: pointer obtained from station or virtual interface
18667600 6698 *
2b4a6698
FF
6699 * Schedules a TXQ for transmission if it is not already scheduled,
6700 * even if mac80211 does not have any packets buffered.
6701 *
6702 * The driver may call this function if it has buffered packets for
6703 * this TXQ internally.
18667600 6704 */
2433647b 6705void ieee80211_schedule_txq(struct ieee80211_hw *hw, struct ieee80211_txq *txq);
18667600 6706
390298e8 6707/**
5b989c18 6708 * ieee80211_return_txq - return a TXQ previously acquired by ieee80211_next_txq()
390298e8
THJ
6709 *
6710 * @hw: pointer as obtained from ieee80211_alloc_hw()
6711 * @txq: pointer obtained from station or virtual interface
2b4a6698
FF
6712 * @force: schedule txq even if mac80211 does not have any buffered packets.
6713 *
6714 * The driver may set force=true if it has buffered packets for this TXQ
6715 * internally.
390298e8 6716 */
2433647b
THJ
6717void ieee80211_return_txq(struct ieee80211_hw *hw, struct ieee80211_txq *txq,
6718 bool force);
390298e8 6719
b4809e94
THJ
6720/**
6721 * ieee80211_txq_may_transmit - check whether TXQ is allowed to transmit
6722 *
6723 * This function is used to check whether given txq is allowed to transmit by
6724 * the airtime scheduler, and can be used by drivers to access the airtime
6725 * fairness accounting without going using the scheduling order enfored by
6726 * next_txq().
6727 *
6728 * Returns %true if the airtime scheduler thinks the TXQ should be allowed to
6729 * transmit, and %false if it should be throttled. This function can also have
6730 * the side effect of rotating the TXQ in the scheduler rotation, which will
6731 * eventually bring the deficit to positive and allow the station to transmit
6732 * again.
6733 *
6734 * The API ieee80211_txq_may_transmit() also ensures that TXQ list will be
ae4a50ee 6735 * aligned against driver's own round-robin scheduler list. i.e it rotates
b4809e94
THJ
6736 * the TXQ list till it makes the requested node becomes the first entry
6737 * in TXQ list. Thus both the TXQ list and driver's list are in sync. If this
6738 * function returns %true, the driver is expected to schedule packets
6739 * for transmission, and then return the TXQ through ieee80211_return_txq().
6740 *
6741 * @hw: pointer as obtained from ieee80211_alloc_hw()
6742 * @txq: pointer obtained from station or virtual interface
6743 */
6744bool ieee80211_txq_may_transmit(struct ieee80211_hw *hw,
6745 struct ieee80211_txq *txq);
6746
f2ac7e30
MK
6747/**
6748 * ieee80211_txq_get_depth - get pending frame/byte count of given txq
6749 *
6750 * The values are not guaranteed to be coherent with regard to each other, i.e.
6751 * txq state can change half-way of this function and the caller may end up
6752 * with "new" frame_cnt and "old" byte_cnt or vice-versa.
6753 *
6754 * @txq: pointer obtained from station or virtual interface
6755 * @frame_cnt: pointer to store frame count
6756 * @byte_cnt: pointer to store byte count
6757 */
6758void ieee80211_txq_get_depth(struct ieee80211_txq *txq,
6759 unsigned long *frame_cnt,
6760 unsigned long *byte_cnt);
167e33f4
AB
6761
6762/**
6763 * ieee80211_nan_func_terminated - notify about NAN function termination.
6764 *
6765 * This function is used to notify mac80211 about NAN function termination.
6766 * Note that this function can't be called from hard irq.
6767 *
6768 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6769 * @inst_id: the local instance id
6770 * @reason: termination reason (one of the NL80211_NAN_FUNC_TERM_REASON_*)
6771 * @gfp: allocation flags
6772 */
6773void ieee80211_nan_func_terminated(struct ieee80211_vif *vif,
6774 u8 inst_id,
6775 enum nl80211_nan_func_term_reason reason,
6776 gfp_t gfp);
92bc43bc
AB
6777
6778/**
6779 * ieee80211_nan_func_match - notify about NAN function match event.
6780 *
6781 * This function is used to notify mac80211 about NAN function match. The
6782 * cookie inside the match struct will be assigned by mac80211.
6783 * Note that this function can't be called from hard irq.
6784 *
6785 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6786 * @match: match event information
6787 * @gfp: allocation flags
6788 */
6789void ieee80211_nan_func_match(struct ieee80211_vif *vif,
6790 struct cfg80211_nan_match_params *match,
6791 gfp_t gfp);
6792
db3e1c40
THJ
6793/**
6794 * ieee80211_calc_rx_airtime - calculate estimated transmission airtime for RX.
6795 *
6796 * This function calculates the estimated airtime usage of a frame based on the
6797 * rate information in the RX status struct and the frame length.
6798 *
6799 * @hw: pointer as obtained from ieee80211_alloc_hw()
6800 * @status: &struct ieee80211_rx_status containing the transmission rate
6801 * information.
6802 * @len: frame length in bytes
6803 */
6804u32 ieee80211_calc_rx_airtime(struct ieee80211_hw *hw,
6805 struct ieee80211_rx_status *status,
6806 int len);
6807
6808/**
6809 * ieee80211_calc_tx_airtime - calculate estimated transmission airtime for TX.
6810 *
6811 * This function calculates the estimated airtime usage of a frame based on the
6812 * rate information in the TX info struct and the frame length.
6813 *
6814 * @hw: pointer as obtained from ieee80211_alloc_hw()
6815 * @info: &struct ieee80211_tx_info of the frame.
6816 * @len: frame length in bytes
6817 */
6818u32 ieee80211_calc_tx_airtime(struct ieee80211_hw *hw,
6819 struct ieee80211_tx_info *info,
6820 int len);
50ff477a
JC
6821/**
6822 * ieee80211_set_hw_80211_encap - enable hardware encapsulation offloading.
6823 *
6824 * This function is used to notify mac80211 that a vif can be passed raw 802.3
6825 * frames. The driver needs to then handle the 802.11 encapsulation inside the
6826 * hardware or firmware.
6827 *
6828 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6829 * @enable: indicate if the feature should be turned on or off
6830 */
6831bool ieee80211_set_hw_80211_encap(struct ieee80211_vif *vif, bool enable);
db3e1c40 6832
295b02c4
AD
6833/**
6834 * ieee80211_get_fils_discovery_tmpl - Get FILS discovery template.
6835 * @hw: pointer obtained from ieee80211_alloc_hw().
6836 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6837 *
6838 * The driver is responsible for freeing the returned skb.
6839 *
6840 * Return: FILS discovery template. %NULL on error.
6841 */
6842struct sk_buff *ieee80211_get_fils_discovery_tmpl(struct ieee80211_hw *hw,
6843 struct ieee80211_vif *vif);
632189a0
AD
6844
6845/**
6846 * ieee80211_get_unsol_bcast_probe_resp_tmpl - Get unsolicited broadcast
6847 * probe response template.
6848 * @hw: pointer obtained from ieee80211_alloc_hw().
6849 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6850 *
6851 * The driver is responsible for freeing the returned skb.
6852 *
6853 * Return: Unsolicited broadcast probe response template. %NULL on error.
6854 */
6855struct sk_buff *
6856ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
6857 struct ieee80211_vif *vif);
cff7b5ca 6858
5f9404ab
JC
6859/**
6860 * ieeee80211_obss_color_collision_notify - notify userland about a BSS color
6861 * collision.
6862 *
6863 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
6864 * @color_bitmap: a 64 bit bitmap representing the colors that the local BSS is
6865 * aware of.
6866 */
6867void
6868ieeee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
6869 u64 color_bitmap);
6870
cff7b5ca
PB
6871/**
6872 * ieee80211_is_tx_data - check if frame is a data frame
6873 *
6874 * The function is used to check if a frame is a data frame. Frames with
6875 * hardware encapsulation enabled are data frames.
6876 *
6877 * @skb: the frame to be transmitted.
6878 */
6879static inline bool ieee80211_is_tx_data(struct sk_buff *skb)
6880{
6881 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
6882 struct ieee80211_hdr *hdr = (void *) skb->data;
6883
6884 return info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP ||
6885 ieee80211_is_data(hdr->frame_control);
6886}
6887
f0706e82 6888#endif /* MAC80211_H */