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