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