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