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