Lines Matching +full:tx +full:- +full:internal +full:- +full:delay +full:- +full:ps
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * mac80211 <-> driver interface
5 * Copyright 2002-2005, Devicescape Software, Inc.
6 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
7 * Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net>
8 * Copyright 2013-2014 Intel Mobile Communications GmbH
9 * Copyright (C) 2015 - 2017 Intel Deutschland GmbH
10 * Copyright (C) 2018 - 2020 Intel Corporation
31 * only partial functionality in hard- or firmware. This document
32 * defines the interface between mac80211 and low-level hardware
40 * called in hardware interrupt context. The low-level driver must not call any
42 * call, the low-level driver should first ACK the interrupt and perform the
47 * use the non-IRQ-safe functions!
77 * mac80211 provides its own workqueue for drivers and internal mac80211 use.
90 * DOC: mac80211 software tx queueing
102 * Intermediate queues (struct ieee80211_txq) are kept per-sta per-tid, with
103 * another per-sta for non-data/non-mgmt and bufferable management frames, and
104 * a single per-vif queue for multicast data frames.
106 * The driver is expected to initialize its private per-queue data for stations
132 * enum ieee80211_max_queues - maximum number of queues
139 IEEE80211_MAX_QUEUE_MAP = BIT(IEEE80211_MAX_QUEUES) - 1,
145 * enum ieee80211_ac_numbers - AC numbers as used in mac80211
159 * struct ieee80211_tx_queue_params - transmit queue configuration
166 * 2^n-1 in the range 1..32767]
170 * @uapsd: is U-APSD mode enabled for the queue
193 * enum ieee80211_chanctx_change - change flag for channel context
210 * struct ieee80211_chanctx_conf - channel context that vifs may be tuned to
212 * This is the driver-visible part. The ieee80211_chanctx
238 * enum ieee80211_chanctx_switch_mode - channel context switch mode
246 * implement this as an on-the-fly chandef switch of the existing
257 * struct ieee80211_vif_chanctx_switch - vif chanctx switch information
275 * enum ieee80211_bss_change - BSS change notification flags
302 * @BSS_CHANGED_PS: PS changed for this BSS (STA mode)
303 * @BSS_CHANGED_TXPOWER: TX power setting changed for this interface
304 * @BSS_CHANGED_P2P_PS: P2P powersave settings (CTWindow, opportunistic PS)
312 * @BSS_CHANGED_MU_GROUPS: VHT MU-MIMO group id or user position changed
371 * enum ieee80211_event_type - event to be notified to the low level driver
387 * enum ieee80211_rssi_event_data - relevant when event type is %RSSI_EVENT
397 * struct ieee80211_rssi_event - data attached to an %RSSI_EVENT
405 * enum ieee80211_mlme_event_data - relevant when event type is %MLME_EVENT
419 * enum ieee80211_mlme_event_status - relevant when event type is %MLME_EVENT
431 * struct ieee80211_mlme_event - data attached to an %MLME_EVENT
443 * struct ieee80211_ba_event - data attached for BlockAck related events
455 * struct ieee80211_event - event to be sent to the driver
472 * struct ieee80211_mu_group_data - STA's VHT MU-MIMO group data
474 * This structure describes the group id data of VHT MU-MIMO
476 * @membership: 64 bits array - a bit is set if station is member of the group
485 * struct ieee80211_ftm_responder_params - FTM responder parameters
500 * struct ieee80211_fils_discovery - FILS discovery parameters from
501 * IEEE Std 802.11ai-2016, Annex C.3 MIB detail.
503 * @min_interval: Minimum packet interval in TUs (0 - 10000)
504 * @max_interval: Maximum packet interval in TUs (0 - 10000)
512 * struct ieee80211_bss_conf - holds the BSS's changing parameters
518 * @multi_sta_back_32bit: supports BA bitmap of 32-bits in Multi-STA BACK
520 * @ack_enabled: indicates support to receive a multi-TID that solicits either
540 * with the %BSS_CHANGED_BEACON_INFO flag, will be non-zero then.
560 * @beacon_rate: associated AP's beacon TX rate
561 * @mcast_rate: per-band multicast rate index + 1 (0: disabled)
564 * @chandef: Channel definition for this BSS -- the hardware might be
566 * @mu_group: VHT MU-MIMO group membership data
587 * @qos: This is a QoS-enabled BSS.
591 * @ps: power-save mode (STA only). This flag is NOT affected by
595 * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode.
596 * @txpower: TX power in dBm. INT_MIN means not configured.
597 * @txpower_type: TX power adjustment used to control per packet Transmit
605 * to use P2P PS mechanism or not. AP/P2P GO is not allowed to use P2P PS
606 * if it has associated clients without P2P PS support.
676 bool ps; member
710 * enum mac80211_tx_info_flags - flags to describe transmission information/status
714 * @IEEE80211_TX_CTL_REQ_TX_STATUS: require TX status callback for this frame.
719 * assign sequence numbers to QoS-data frames but cannot do so correctly
720 * for non-QoS-data and management frames because beacons need them from
724 * 802.11-2007 7.1.3.4.1 paragraph 3. This flag will always be set for
731 * @IEEE80211_TX_CTL_AMPDU: this frame should be sent as part of an A-MPDU
732 * @IEEE80211_TX_CTL_INJECTED: Frame was injected, internal to mac80211.
747 * @IEEE80211_TX_CTL_RATE_CTRL_PROBE: internal to mac80211, can be
750 * @IEEE80211_TX_INTFL_OFFCHAN_TX_OK: Internal to mac80211. Used to indicate
752 * off-channel operation.
755 * @IEEE80211_TX_INTFL_RETRIED: completely internal to mac80211,
756 * used to indicate that a frame was already retried due to PS
757 * @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211,
760 * frame (PS-Poll or uAPSD) or a non-bufferable MMPDU and must
767 * after TX status because the destination was asleep, it must not
773 * MLME command (internal to mac80211 to figure out whether to send TX
776 * @IEEE80211_TX_CTL_STBC: Enables Space-Time Block Coding (STBC) for this
779 * the off-channel channel when a remain-on-channel offload is done
780 * in hardware -- normal packets still flow and are expected to be
792 * PS-Poll responses.
802 * This flag must not be set for frames that don't request no-ack
847 * enum mac80211_tx_control_flags - flags to describe transmit control
852 * frame (PS-Poll or uAPSD).
854 * @IEEE80211_TX_CTRL_AMSDU: This frame is an A-MSDU frame
857 * @IEEE80211_TX_INTCFL_NEED_TXPROCESSING: completely internal to mac80211,
858 * used to indicate that a pending frame requires TX processing before
863 * These flags are used in tx_info->control.flags.
878 * set by the tx handlers for each transmission attempt by the mac80211 stack.
890 * enum mac80211_rate_control_flags - per-rate flags set by the
893 * These flags are set by the Rate control algorithm for each rate during tx,
897 * @IEEE80211_TX_RC_USE_CTS_PROTECT: CTS-to-self protection is required.
944 * struct ieee80211_tx_rate - rate selection/status
950 * A value of -1 for @idx indicates an invalid rate and, if used
962 * { 3, 2 }, { 2, 2 }, { 1, 4 }, { -1, 0 }, { -1, 0 }
970 * { 3, 2 }, { 2, 2 }, { 1, 1 }, { -1, 0 } ...
987 WARN_ON((nss - 1) & ~0x7); in ieee80211_rate_set_vht()
988 rate->idx = ((nss - 1) << 4) | mcs; in ieee80211_rate_set_vht()
994 return rate->idx & 0xF; in ieee80211_rate_get_vht_mcs()
1000 return (rate->idx >> 4) + 1; in ieee80211_rate_get_vht_nss()
1004 * struct ieee80211_tx_info - skb transmit information
1006 * This structure is placed in skb->cb for three uses:
1007 * (1) mac80211 TX control - mac80211 tells the driver what to do
1008 * (2) driver internal use (if applicable)
1009 * (3) TX status information - driver tells mac80211 what happened
1014 * @ack_frame_id: internal frame ID for TX status, used internally
1015 * @tx_time_est: TX time estimate in units of 4us, used internally
1017 * @control.rates: TX rates array to try
1115 * in increments of 4us and clamp the maximum to 2**12-1 in ieee80211_info_set_tx_time_est()
1117 info->tx_time_est = min_t(u16, tx_time_est, 4095) >> 2; in ieee80211_info_set_tx_time_est()
1118 return info->tx_time_est << 2; in ieee80211_info_set_tx_time_est()
1124 return info->tx_time_est << 2; in ieee80211_info_get_tx_time_est()
1128 * struct ieee80211_tx_status - extended tx status info for rate control
1131 * @info: Basic tx status information
1133 * @rate: The TX rate that was used when sending the packet
1145 * struct ieee80211_scan_ies - descriptors for different blocks of IEs
1166 return (struct ieee80211_tx_info *)skb->cb; in IEEE80211_SKB_CB()
1171 return (struct ieee80211_rx_status *)skb->cb; in IEEE80211_SKB_RXCB()
1175 * ieee80211_tx_info_clear_status - clear TX status
1180 * a number of things in TX status. This function clears everything
1181 * in the TX status but the rate control information (it does clear
1185 * info->driver_data! Use info->rate_driver_data
1200 info->status.rates[i].count = 0; in ieee80211_tx_info_clear_status()
1204 memset(&info->status.ampdu_ack_len, 0, in ieee80211_tx_info_clear_status()
1205 sizeof(struct ieee80211_tx_info) - in ieee80211_tx_info_clear_status()
1211 * enum mac80211_rx_flags - receive flags
1227 * de-duplication by itself.
1242 * Valid only for data frames (mainly A-MPDU)
1243 * @RX_FLAG_AMPDU_DETAILS: A-MPDU details are known, in particular the reference
1245 * each A-MPDU
1247 * subframes of a single A-MPDU
1248 * @RX_FLAG_AMPDU_IS_LAST: this subframe is the last subframe of the A-MPDU
1263 * @RX_FLAG_AMSDU_MORE: Some drivers may prefer to report separate A-MSDU
1265 * All, but the last MSDU from an A-MSDU should have this flag set. E.g.
1266 * if an A-MSDU has 3 frames, the first 2 must have the flag set, while
1268 * deal with retransmission/duplication recovery properly since A-MSDU
1270 * either regular MSDU or singly A-MSDUs. Subframes must not be
1272 * @RX_FLAG_RADIOTAP_VENDOR_DATA: This frame contains vendor-specific
1273 * radiotap data in the skb->data (before the frame) as described by
1280 * @RX_FLAG_AMPDU_EOF_BIT: Value of the EOF bit in the A-MPDU delimiter for this
1286 * - DATA3_DATA_MCS
1287 * - DATA3_DATA_DCM
1288 * - DATA3_CODING
1289 * - DATA5_GI
1290 * - DATA5_DATA_BW_RU_ALLOC
1291 * - DATA6_NSTS
1292 * - DATA3_STBC
1297 * @RX_FLAG_RADIOTAP_LSIG: L-SIG radiotap data is present
1299 * the "0-length PSDU" field included there. The value for it is
1337 * enum mac80211_rx_encoding_flags - MCS & bandwidth flags
1341 * @RX_ENC_FLAG_HT_GF: This frame was received in a HT-greenfield transmission,
1346 * @RX_ENC_FLAG_STBC_MASK: STBC 2 bit bitmask. 1 - Nss=1, 2 - Nss=2, 3 - Nss=3
1368 * struct ieee80211_rx_status - receive status
1370 * The low-level driver should provide this information (the subset
1374 * @mactime: value in microseconds of the 64-bit Time Synchronization Function
1383 * for data (other) frames - for those it only affects radiotap reporting.
1390 * @chain_signal: per-chain signal strength, in dBm (unlike @signal, doesn't
1403 * @rx_flags: internal RX flags for mac80211
1404 * @ampdu_reference: A-MPDU reference number, must be a different value for
1405 * each A-MPDU but the same for each subframe within one A-MPDU
1406 * @ampdu_delimiter_crc: A-MPDU delimiter CRC
1407 * @zero_length_psdu_type: radiotap type of the 0-length PSDU
1434 return MHZ_TO_KHZ(rx_status->freq) + in ieee80211_rx_status_to_khz()
1435 (rx_status->freq_offset ? 500 : 0); in ieee80211_rx_status_to_khz()
1439 * struct ieee80211_vendor_radiotap - vendor radiotap data information
1445 * description itself (which has a fixed 2-byte alignment)
1457 * This struct, including the vendor data, goes into the skb->data before
1472 * enum ieee80211_conf_flags - configuration flags
1476 * @IEEE80211_CONF_MONITOR: there's a monitor interface present -- use this
1480 * This is the power save mode defined by IEEE 802.11-2007 section 11.2,
1503 * enum ieee80211_conf_changed - denotes which configuration changed
1507 * @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed
1508 * @IEEE80211_CONF_CHANGE_POWER: the TX power changed
1528 * enum ieee80211_smps_mode - spatial multiplexing power save mode
1534 * @IEEE80211_SMPS_NUM_MODES: internal, don't use
1547 * struct ieee80211_conf - configuration of the device
1597 * struct ieee80211_channel_switch - holds the channel switch data
1602 * @timestamp: value in microseconds of the 64-bit Time Synchronization
1612 * @delay: maximum delay between the time the AP transmitted the last beacon in
1622 u32 delay; member
1626 * enum ieee80211_vif_flags - virtual interface flags
1631 * monitoring on this virtual interface -- i.e. it can monitor
1634 * @IEEE80211_VIF_SUPPORTS_UAPSD: The device can do U-APSD for this
1651 * enum ieee80211_offload_flags - virtual interface offload flags
1653 * @IEEE80211_OFFLOAD_ENCAP_ENABLED: tx encapsulation offload is enabled
1656 * @IEEE80211_OFFLOAD_ENCAP_4ADDR: support 4-address mode encapsulation offload
1665 * struct ieee80211_vif - per-interface data
1675 * interface, i.e. a GO or p2p-sta respectively
1677 * write-protected by sdata_lock and local->mtx so holding either is fine
1679 * @mu_mimo_owner: indicates interface owns MU-MIMO capability
1690 * @cab_queue: content-after-beacon (DTIM beacon really) queue, AP mode only
1692 * when it is not assigned. This pointer is RCU-protected due to the TX
1705 * @txq: the multicast data TX queue (if driver uses the TXQ abstraction)
1707 * protected by fq->lock.
1708 * @offload_flags: 802.3 -> 802.11 enapsulation offload flags, see
1747 return vif->type == NL80211_IFTYPE_MESH_POINT; in ieee80211_vif_is_mesh()
1753 * wdev_to_ieee80211_vif - return a vif struct from a wdev
1766 * ieee80211_vif_to_wdev - return a wdev struct from a vif
1779 * enum ieee80211_key_flags - key flags
1807 * RX, if your crypto engine can't deal with TX you can also set the
1818 * @IEEE80211_KEY_FLAG_NO_AUTO_TX: Key needs explicit Tx activation.
1838 * struct ieee80211_key_conf - key information
1847 * @tx_pn: PN used for TX keys, may be used by the driver as well if it
1850 * @keyidx: the key index (0-3)
1852 * @key: key material. For ALG_TKIP the key is encoded as a 256-bit (32 byte)
1854 * - Temporal Encryption Key (128 bits)
1855 * - Temporal Authenticator Tx MIC Key (64 bits)
1856 * - Temporal Authenticator Rx MIC Key (64 bits)
1878 * struct ieee80211_key_seq - key sequence counter
1889 * @hw: data for HW-only (e.g. cipher scheme) keys
1917 * struct ieee80211_cipher_scheme - cipher scheme
1947 * enum set_key_cmd - key command
1960 * enum ieee80211_sta_state - station state
1979 * enum ieee80211_sta_rx_bandwidth - station RX bandwidth
1997 * struct ieee80211_sta_rates - station rate selection table
2001 * Overriding entries per-packet is possible by using cb tx control.
2015 * struct ieee80211_sta_txpwr - station txpower configuration
2019 * @power: indicates the tx power, in dBm, to be used when sending data frames
2021 * @type: In particular if TPC %type is NL80211_TX_POWER_LIMITED then tx power
2023 * %type is NL80211_TX_POWER_AUTOMATIC then it indicates default tx power.
2033 * struct ieee80211_sta - station table entry
2036 * communicating with. Since stations are RCU-managed in
2072 * A-MSDU. Taken from the Extended Capabilities element. 0 means
2074 * @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not.
2075 * @max_rc_amsdu_len: Maximum A-MSDU size in bytes recommended by rate control.
2076 * @max_tid_amsdu_len: Maximum A-MSDU size in bytes for this TID
2077 * @txpwr: the station tx power configuration
2078 * @txq: per-TID data TX queues (if driver uses the TXQ abstraction); note that
2079 * the last entry (%IEEE80211_NUM_TIDS) is used for non-data frames
2104 * indicates the maximal length of an A-MSDU in bytes.
2109 * A-MSDU maximal size is min(max_amsdu_len, 4065) bytes.
2110 * * If the skb is not part of a BA agreement, the A-MSDU maximal
2114 * driver. This is defined by the spec (IEEE 802.11-2012 section
2132 * enum sta_notify_cmd - sta notify command
2145 * struct ieee80211_tx_control - TX control data
2155 * struct ieee80211_txq - Software intermediate tx queue
2158 * @sta: station table entry, %NULL for per-vif queue
2159 * @tid: the TID for this queue (unused for per-vif queue),
2160 * %IEEE80211_NUM_TIDS for non-data (if enabled)
2162 * @drv_priv: driver private area, sized by hw->txq_data_size
2178 * enum ieee80211_hw_flags - hardware flags
2189 * should be instantiated, and the TX rate reported to userspace
2190 * will be taken from the TX status instead of the rate control
2226 * Hardware supports 11n A-MPDU aggregation.
2233 * stack support for dynamic PS.
2236 * Hardware has support for dynamic PS.
2242 * Hardware can provide ack status reports of Tx frames to
2247 * periodic keep-alives to the AP and probing the AP on beacon loss.
2254 * per-station GTKs as used by IBSS RSN or during fast transition. If
2255 * the device doesn't support per-station GTKs, but can be asked not
2261 * autonomously manages the PS status of connected stations. When
2262 * this flag is set mac80211 will not trigger PS mode for connected
2265 * the PS mode of connected stations.
2267 * @IEEE80211_HW_TX_AMPDU_SETUP_IN_HW: The device handles TX A-MPDU session
2276 * be created. It is expected user-space will create vifs as
2280 * crypto algorithms can be done in software - so don't automatically
2285 * @IEEE80211_HW_SUPPORT_FAST_XMIT: The driver/hardware supports fast-xmit,
2289 * @IEEE80211_HW_QUEUE_CONTROL: The driver wants to control per-interface
2308 * @IEEE80211_HW_CHANCTX_STA_CSA: Support 802.11h based channel-switch (CSA)
2314 * or tailroom of TX skbs without copying them first.
2322 * @IEEE80211_HW_SUPPORTS_AMSDU_IN_AMPDU: The driver supports receiving A-MSDUs
2323 * within A-MPDU.
2325 * @IEEE80211_HW_BEACON_TX_STATUS: The device/driver provides TX status
2339 * which implies using per-CPU station statistics.
2342 * A-MSDU frames. Requires software tx queueing and fast-xmit support.
2344 * limit the maximum A-MSDU size based on the current tx rate by setting
2348 * skbs, needed for zero-copy software A-MSDU.
2365 * beacon was heard. This is required in multi-channel scenarios, where the
2371 * support QoS NDP for AP probing - that's most likely a driver bug.
2379 * but if the rate control is built-in then it must be set by the driver.
2382 * @IEEE80211_HW_STA_MMPDU_TXQ: use the extra non-TID per-station TXQ for all
2386 * @IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN: Driver does not report accurate A-MPDU
2387 * length in tx status information
2395 * aggregating MPDUs with the same keyid, allowing mac80211 to keep Tx
2396 * A-MPDU sessions active while rekeying with Extended Key ID.
2398 * @IEEE80211_HW_SUPPORTS_TX_ENCAP_OFFLOAD: Hardware supports tx encapsulation
2460 * struct ieee80211_hw - hardware information and state
2481 * @extra_beacon_tailroom: tailroom to reserve in each beacon tx skb.
2514 * sub-frames) to be used for A-MPDU block ack receiver
2527 * @max_tx_fragments: maximum number of tx buffers per (A)-MSDU, sum
2528 * of 1 + skb_shinfo(skb)->nr_frags for each skb in the frag_list.
2530 * @offchannel_tx_hw_queue: HW queue ID to use for offchannel TX
2545 * @units_pos member is set to a non-negative value then the timestamp
2551 * @radiotap_timestamp.accuracy: If non-negative, fills the accuracy in the
2559 * for each access category if it is uAPSD trigger-enabled and delivery-
2562 * that corresponding AC is both trigger- and delivery-enabled. '0' means
2628 return test_bit(flg, hw->flags); in _ieee80211_hw_check()
2635 return __set_bit(flg, hw->flags); in _ieee80211_hw_set()
2640 * struct ieee80211_scan_request - hw scan request
2653 * struct ieee80211_tdls_ch_sw_params - TDLS channel switch parameters
2655 * @sta: peer this TDLS channel-switch request/response came from
2656 * @chandef: channel referenced in a TDLS channel-switch request
2658 * @status: channel-switch response status
2660 * @switch_time: switch-timing parameter received in the frame
2661 * @switch_timeout: switch-timing parameter received in the frame
2662 * @tmpl_skb: TDLS switch-channel response template
2663 * @ch_sw_tm_ie: offset of the channel-switch timing IE inside @tmpl_skb
2678 * wiphy_to_ieee80211_hw - return a mac80211 driver hw struct from a wiphy
2684 * structure can then access it via hw->priv. Note that mac802111 drivers should
2693 * SET_IEEE80211_DEV - set device for 802.11 hardware
2700 set_wiphy_dev(hw->wiphy, dev); in SET_IEEE80211_DEV()
2704 * SET_IEEE80211_PERM_ADDR - set the permanent MAC address for 802.11 hardware
2711 memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN); in SET_IEEE80211_PERM_ADDR()
2718 if (WARN_ON_ONCE(c->control.rates[0].idx < 0)) in ieee80211_get_tx_rate()
2720 return &hw->wiphy->bands[c->band]->bitrates[c->control.rates[0].idx]; in ieee80211_get_tx_rate()
2727 if (c->control.rts_cts_rate_idx < 0) in ieee80211_get_rts_cts_rate()
2729 return &hw->wiphy->bands[c->band]->bitrates[c->control.rts_cts_rate_idx]; in ieee80211_get_rts_cts_rate()
2736 if (c->control.rates[idx + 1].idx < 0) in ieee80211_get_alt_retry_rate()
2738 return &hw->wiphy->bands[c->band]->bitrates[c->control.rates[idx + 1].idx]; in ieee80211_get_alt_retry_rate()
2742 * ieee80211_free_txskb - free TX skb
2765 * When transmitting, the TX control data will use the @hw_key_idx
2770 * the key is now in use, -%EOPNOTSUPP or -%ENOSPC if it couldn't be
2806 * when they are able to replace in-use PTK keys according to the following
2812 at the time of the key deletion (including re-transmits),
2834 * IEEE 802.11-2007 section 11.2 is enabled. This is not to be confused
2839 * When PS is enabled, hardware needs to wakeup for beacons and receive the
2852 * hardware stays awake for a user-specified period of time after sending a
2859 * PS based on traffic. Driver needs to only set %IEEE80211_HW_SUPPORTS_PS
2861 * hardware having support for the dynamic PS feature may set the
2863 * dynamic PS mode itself. The driver needs to look at the
2866 * dynamic PS feature in stack and will just keep %IEEE80211_CONF_PS
2869 * Driver informs U-APSD client support by enabling
2873 * utilize U-APSD, dynamic powersave is disabled for voip AC and all frames
2876 * Note: U-APSD client mode is not yet supported with
2907 * - a list of information element IDs
2908 * - a list of OUIs for the vendor information element
2922 * the various vendor-assigned IEs with unknown contents (128, 129, 133-136,
2946 * and rationale, please refer to 802.11 (as amended by 802.11n-2009)
3010 * client powersaving, both "legacy" PS (PS-Poll/null data) and uAPSD.
3014 * will not poll with PS-Poll and trigger with uAPSD at the same time.
3025 * handle PS-Poll/uAPSD.
3039 * it can PS-Poll, or it can possibly start a uAPSD service period.
3042 * the station sends a PS-Poll or a uAPSD trigger frame, mac80211
3047 * response to a PS-Poll) also has %IEEE80211_TX_STATUS_EOSP set to
3049 * TX status report it also sets %IEEE80211_TX_CTL_REQ_TX_STATUS.
3050 * When TX status is reported for this frame, the service period is
3053 * Additionally, non-bufferable MMPDUs can also be transmitted by
3061 * transmitted to a certain station is out-of-band communication to
3079 * there is more data on other TIDs -- the TIDs to release frames
3084 * shorten service periods (or abort PS-Poll responses), it must
3086 * are buffered in the driver -- those must remain buffered to avoid
3097 * Note that if the driver ever buffers frames other than QoS-data
3098 * frames, it must take care to never send a non-QoS-data frame as
3099 * the last frame in a service period, adding a QoS-nulldata frame
3100 * after a non-QoS-data frame if needed.
3107 * assignment of per-interface AC software queues to hardware queues. This
3109 * 1) off-channel transmissions might get stuck behind other frames
3111 * 3) after-DTIM frames could get stuck behind other frames
3135 * after-DTIM queue for AP: 8
3136 * off-channel queue: 9
3147 * and the second virtual interface with 4-7.
3159 * enum ieee80211_filter_flags - hardware filter flags
3182 * @FIF_CONTROL: pass control frames (except for PS Poll) addressed to this
3187 * @FIF_PSPOLL: pass PS Poll frames
3206 * enum ieee80211_ampdu_mlme_action - A-MPDU actions
3211 * Note that drivers MUST be able to deal with a TX aggregation
3218 * @IEEE80211_AMPDU_TX_START: start TX aggregation, the driver must either
3221 * %IEEE80211_AMPDU_TX_START_DELAY_ADDBA to delay addba after
3224 * @IEEE80211_AMPDU_TX_OPERATIONAL: TX aggregation has become operational
3225 * @IEEE80211_AMPDU_TX_STOP_CONT: stop TX aggregation but continue transmitting
3228 * @IEEE80211_AMPDU_TX_STOP_FLUSH: stop TX aggregation and flush all packets,
3232 * @IEEE80211_AMPDU_TX_STOP_FLUSH_CONT: called when TX aggregation is stopped
3251 * struct ieee80211_ampdu_params - AMPDU action parameters
3256 * @ssn: start sequence number of the session. TX/RX_STOP can pass 0. When
3262 * @amsdu: indicates the peer's ability to receive A-MSDU within A-MPDU.
3278 * enum ieee80211_frame_release_type - frame release reason
3279 * @IEEE80211_FRAME_RELEASE_PSPOLL: frame released for PS-Poll
3281 * frame received on trigger-enabled AC
3289 * enum ieee80211_rate_control_changed - flags to indicate what changed
3293 * information -- for HT20/40 the IEEE80211_HT_CAP_SUP_WIDTH_20_40
3310 * enum ieee80211_roc_type - remain on channel type
3328 * enum ieee80211_reconfig_type - reconfig type
3344 * struct ieee80211_ops - callbacks from mac80211 to the driver
3350 * @tx: Handler that 802.11 module calls for each transmitted frame.
3352 * The low-level driver should send the frame out based on
3353 * configuration in the TX control data. This handler should,
3363 * to avoid acknowledging frames before a non-monitor device
3472 * offloading. The index can be 0-3, or -1 for unsetting it.
3481 * at all but just send them after the SSID -- mac80211 includes the
3493 * @cancel_hw_scan: Ask the low-level tp cancel the active hw scan.
3498 * scan_work after the low-level driver was already suspended.
3520 * @get_stats: Return low-level statistics.
3558 * @sta_set_txpwr: Configure the station tx power. This callback set the tx
3567 * isn't safe to use the pointer, not even RCU protected - no RCU grace
3592 * let the driver pre-fill the statistics. The driver can fill most of
3594 * all of them make sense - see the source for which ones are possible.
3598 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
3599 * bursting) for a hardware TX queue.
3614 * firmware/hardware. Preferred to set_tsf as it avoids delay between
3616 * as TSF delay. Is not a required function.
3628 * Returns non-zero if this device sent the last beacon.
3631 * @get_survey: Return per-channel survey information
3634 * need to set wiphy->rfkill_poll to %true before registration,
3639 * in IEEE 802.11-2007 section 17.3.8.6 and modify ACK timeout
3640 * accordingly; coverage class equals to -1 to enable ACK timeout
3662 * Parameters are bitmaps of allowed antennas to use for TX/RX. Drivers may
3663 * reject TX/RX mask combinations they cannot support by returning -EINVAL
3668 * @remain_on_channel: Starts an off-channel period on the given channel, must
3671 * offload. Frames to transmit on the off-channel channel are transmitted
3673 * duration (which will always be non-zero) expires, the driver must call
3678 * @cancel_remain_on_channel: Requests that an ongoing off-channel period is
3681 * @set_ringparam: Set tx and rx ring sizes.
3683 * @get_ringparam: Get tx and rx ring current and maximum sizes.
3698 * to release some frames, either for PS-poll or uAPSD.
3701 * the frames being released then it must still set the more-data bit in
3703 * more-data bit must always be set.
3705 * from, for PS-poll it will always have only a single bit set.
3706 * In the case this is used for a PS-poll initiated release, the
3709 * on the TX status (and must report TX status) so that the PS-poll
3711 * responses for a retried PS-poll frame.
3722 * via the usual TX path after this call. The TX information for frames
3734 * @get_et_sset_count: Ethtool API to get string-set count.
3739 * and perhaps other supported types of ethtool data-sets.
3742 * before associated. In multi-channel scenarios, a virtual interface is
3760 * a TDLS discovery-request, we expect a reply to arrive on the AP's
3762 * setup-response is a direct packet not buffered by the AP.
3764 * discovery-request. The recommended period of protection is at least
3818 * gets a CSA or a userspace initiated channel-switch), allowing
3838 * @get_txpower: get current maximum tx power (in dBm) based on configuration
3841 * @tdls_channel_switch: Start channel-switching with a TDLS peer. The driver
3842 * is responsible for continually initiating channel-switching operations
3844 * driver receives a channel-switch request template and the location of
3845 * the switch-timing IE within the template as part of the invocation.
3847 * optionally copy the skb for further re-use.
3848 * @tdls_cancel_channel_switch: Stop channel-switching with a TDLS peer. Both
3850 * @tdls_recv_channel_switch: a TDLS channel-switch related frame (request or
3853 * an ongoing channel-switch operation. In addition, a channel-switch
3855 * switch-timing IE within the template. The skb can only be used within
3879 * aggregating two specific frames in the same A-MSDU. The relation
3881 * skb is always a real frame, head may or may not be an A-MSDU.
3893 * 4-address mode
3896 void (*tx)(struct ieee80211_hw *hw, member
4015 * Perform a certain A-MPDU action.
4025 * - ``TX: 1.....7``
4026 * - ``RX: 2....7`` (lost frame #1)
4027 * - ``TX: 8..1...``
4029 * which is invalid since #1 was now re-transmitted well past the
4032 * - ``TX: 1 or``
4033 * - ``TX: 18 or``
4034 * - ``TX: 81``
4073 int (*set_ringparam)(struct ieee80211_hw *hw, u32 tx, u32 rx);
4075 u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);
4217 * ieee80211_alloc_hw_nm - Allocate a new hardware device
4237 * ieee80211_alloc_hw - Allocate a new hardware device
4258 * ieee80211_register_hw - Register hardware device
4271 * struct ieee80211_tpt_blink - throughput blink description
4282 * enum ieee80211_tpt_led_trigger_flags - throughput trigger flags
4306 * ieee80211_get_tx_led_name - get name of TX LED
4327 * ieee80211_get_rx_led_name - get name of RX LED
4348 * ieee80211_get_assoc_led_name - get name of association LED
4369 * ieee80211_get_radio_led_name - get name of radio LED
4390 * ieee80211_create_tpt_led_trigger - create throughput LED trigger
4393 * @blink_table: the blink table -- needs to be ordered by throughput
4415 * ieee80211_unregister_hw - Unregister a hardware device
4425 * ieee80211_free_hw - free hardware descriptor
4436 * ieee80211_restart_hw - restart hardware completely
4442 * calling the ->start() operation. The driver will need to reset all
4443 * internal state that it has prior to calling this function.
4450 * ieee80211_rx_list - receive frame and store processed skbs in a list
4475 * ieee80211_rx_napi - receive frame from NAPI context
4500 * ieee80211_rx - receive frame
4525 * ieee80211_rx_irqsafe - receive frame
4540 * ieee80211_rx_ni - receive frame (in process context)
4561 * ieee80211_sta_ps_transition - PS transition for connected sta
4565 * entering/leaving PS mode.
4573 * @start: start or stop PS
4575 * Return: 0 on success. -EINVAL when the requested PS mode is already set.
4580 * ieee80211_sta_ps_transition_ni - PS transition for connected sta
4588 * @start: start or stop PS
4605 * ieee80211_sta_pspoll - PS-Poll frame received
4609 * use this function to inform mac80211 that a PS-Poll frame from a
4618 * ieee80211_sta_uapsd_trigger - (potential) U-APSD trigger frame received
4636 * The TX headroom reserved by mac80211 for its own tx_status functions.
4642 * ieee80211_sta_set_buffered - inform mac80211 about driver-buffered frames
4656 * If all frames are released to the station (due to PS-poll or uAPSD)
4673 * ieee80211_get_tx_rates - get the selected transmit rates for a packet
4675 * Call this function in a driver with per-packet rate selection support
4676 * to combine the rate info in the packet tx info with the most recent
4692 * ieee80211_sta_set_expected_throughput - set the expected tpt for a station
4708 * ieee80211_tx_rate_update - transmit rate update callback
4710 * Drivers should call this functions with a non-NULL pub sta
4712 * in updating the tx rate in data path.
4715 * @pubsta: the station to update the tx rate for.
4716 * @info: tx status information
4723 * ieee80211_tx_status - transmit status callback
4742 * ieee80211_tx_status_ext - extended transmit status callback
4753 * @status: tx status information
4759 * ieee80211_tx_status_noskb - transmit status callback without skb
4762 * in drivers that cannot reliably map tx status information back to
4772 * @info: tx status information
4787 * ieee80211_tx_status_ni - transmit status callback (in process context)
4807 * ieee80211_tx_status_irqsafe - IRQ-safe transmit status callback
4822 * ieee80211_tx_status_8023 - transmit status callback for 802.3 frame format
4831 * calls in the same tx status family.
4842 * ieee80211_report_low_ack - report non-responding station
4844 * When operating in AP-mode, call this function to report a non-responding
4847 * @sta: the non-responding connected sta
4855 * struct ieee80211_mutable_offsets - mutable beacon offsets
4870 * ieee80211_beacon_get_template - beacon template generation function
4894 * ieee80211_beacon_get_tim - beacon generation function
4898 * Set to 0 if invalid (in non-AP modes).
4901 * Set to 0 if invalid (in non-AP modes).
4908 * frame from mac80211 -- it is responsible for calling this function exactly
4920 * ieee80211_beacon_get - beacon generation function
4935 * ieee80211_beacon_update_cntdwn - request mac80211 to decrement the beacon countdown
4949 * ieee80211_beacon_set_cntdwn - request mac80211 to set beacon countdown
4962 * ieee80211_csa_finish - notify mac80211 about channel switch
4972 * ieee80211_beacon_cntdwn_is_complete - find out if countdown reached 1
4980 * ieee80211_proberesp_get - retrieve a Probe Response template
4995 * ieee80211_pspoll_get - retrieve a PS Poll template
4999 * Creates a PS Poll a template which can, for example, uploaded to
5006 * Return: The PS Poll template. %NULL on error.
5012 * ieee80211_nullfunc_get - retrieve a nullfunc template
5035 * ieee80211_probereq_get - retrieve a Probe Request template
5053 * ieee80211_rts_get - RTS frame generation function
5062 * hardware/firmware), the low-level driver uses this function to receive
5063 * the next RTS frame from the 802.11 code. The low-level is responsible
5072 * ieee80211_rts_duration - Get the duration field for an RTS frame
5079 * the duration field, the low-level driver uses this function to receive
5080 * the duration field value in little-endian byteorder.
5089 * ieee80211_ctstoself_get - CTS-to-self frame generation function
5092 * @frame: pointer to the frame that is going to be protected by the CTS-to-self.
5095 * @cts: The buffer where to store the CTS-to-self frame.
5097 * If the CTS-to-self frames are generated by the host system (i.e., not in
5098 * hardware/firmware), the low-level driver uses this function to receive
5099 * the next CTS-to-self frame from the 802.11 code. The low-level is responsible
5100 * for calling this function before and CTS-to-self frame is needed.
5109 * ieee80211_ctstoself_duration - Get the duration field for a CTS-to-self frame
5112 * @frame_len: the length of the frame that is going to be protected by the CTS-to-self.
5115 * If the CTS-to-self is generated in firmware, but the host system must provide
5116 * the duration field, the low-level driver uses this function to receive
5117 * the duration field value in little-endian byteorder.
5127 * ieee80211_generic_frame_duration - Calculate the duration field for a frame
5146 * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames
5153 * memory. The low-level driver uses this function to fetch next buffered
5160 * generated with ieee80211_beacon_get() and the low-level driver must thus
5162 * NULL if the previous generated beacon was not DTIM, so the low-level driver
5170 * ieee80211_get_tkip_p1k_iv - get a TKIP phase 1 key for IV32
5182 * ieee80211_get_tkip_p1k - get a TKIP phase 1 key
5195 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_get_tkip_p1k()
5196 const u8 *data = (u8 *)hdr + ieee80211_hdrlen(hdr->frame_control); in ieee80211_get_tkip_p1k()
5203 * ieee80211_get_tkip_rx_p1k - get a TKIP phase 1 key for RX
5217 * ieee80211_get_tkip_p2k - get a TKIP phase 2 key
5231 * ieee80211_tkip_add_iv - write TKIP IV and Ext. IV to pos
5246 * ieee80211_get_key_rx_seq - get key RX sequence counter
5249 * @tid: The TID, or -1 for the management frame value (CCMP/GCMP only);
5250 * the value on TID 0 is also used for non-QoS frames. For
5265 * ieee80211_set_key_rx_seq - set key RX sequence counter
5268 * @tid: The TID, or -1 for the management frame value (CCMP/GCMP only);
5269 * the value on TID 0 is also used for non-QoS frames. For
5285 * ieee80211_remove_key - remove the given key
5298 * ieee80211_gtk_rekey_add - add a GTK key from rekeying during WoWLAN
5308 * mac80211-owned memory. In case of errors, the function returns an
5312 * acceleration, so no TX will be done with the key. Since it's a GTK
5331 * ieee80211_gtk_rekey_notify - notify userspace supplicant of rekeying
5341 * ieee80211_wake_queue - wake specific queue
5350 * ieee80211_stop_queue - stop specific queue
5359 * ieee80211_queue_stopped - test status of the queue
5371 * ieee80211_stop_queues - stop all queues
5379 * ieee80211_wake_queues - wake all queues
5387 * ieee80211_scan_completed - completed hardware scan
5401 * ieee80211_sched_scan_results - got results from scheduled scan
5411 * ieee80211_sched_scan_stopped - inform that the scheduled scan has stopped
5423 * enum ieee80211_interface_iteration_flags - interface iteration flags
5428 * haven't been re-added to the driver yet.
5430 * interfaces, even if they haven't been re-added to the driver yet.
5444 * ieee80211_iterate_interfaces - iterate interfaces
5462 * ieee80211_iterate_active_interfaces - iterate active interfaces
5488 * ieee80211_iterate_active_interfaces_atomic - iterate active interfaces
5509 * ieee80211_iterate_active_interfaces_rtnl - iterate active interfaces
5528 * ieee80211_iterate_stations_atomic - iterate stations
5544 * ieee80211_queue_work - add work onto the mac80211 workqueue
5555 * ieee80211_queue_delayed_work - add work onto the mac80211 workqueue
5562 * @delay: number of jiffies to wait before queueing
5566 unsigned long delay);
5569 * ieee80211_start_tx_ba_session - Start a tx Block Ack session.
5584 * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate.
5597 * ieee80211_stop_tx_ba_session - Stop a Block Ack session.
5610 * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate.
5623 * ieee80211_find_sta - find a station
5637 * ieee80211_find_sta_by_ifaddr - find a station on hardware
5641 * @localaddr: local address (vif->sdata->vif.addr). Use NULL for 'any'.
5663 * ieee80211_sta_block_awake - block station from waking up
5674 * This function allows implementing this mode in a race-free
5684 * cause mac80211 to be able to send ps-poll responses, and if
5695 * ieee80211_sta_eosp - notify mac80211 about end of SP
5699 * mac80211 in the TX status about the EOSP, it must clear the
5701 * This applies for PS-Poll as well as uAPSD.
5704 * not mix calls to irqsafe/non-irqsafe versions, this function
5706 * all non-irqsafe, don't mix!
5716 * ieee80211_send_eosp_nullfunc - ask mac80211 to send NDP with EOSP
5729 * will be sent despite the station being in power-save.
5738 * ieee80211_sta_register_airtime - register airtime usage for a sta/tid
5754 * TX and RX airtime can be reported together, or separately by setting one of
5759 * @tx_airtime: airtime used during TX (in usec)
5766 * ieee80211_txq_airtime_check - check if a txq can send frame to device
5778 * ieee80211_iter_keys - iterate keys programmed into the device
5805 * ieee80211_iter_keys_rcu - iterate keys programmed into the device
5829 * ieee80211_iter_chan_contexts_atomic - iterate channel contexts
5844 * found while iterating, whether they've been re-added already
5855 * ieee80211_ap_probereq_get - retrieve a Probe Request template
5872 * ieee80211_beacon_loss - inform hardware does not receive beacons
5883 * ieee80211_connection_loss - inform hardware has lost connection to the AP
5899 * ieee80211_resume_disconnect - disconnect from AP after resume
5922 * ieee80211_cqm_rssi_notify - inform a configured connection quality monitoring
5940 * ieee80211_cqm_beacon_loss_notify - inform CQM of beacon loss
5948 * ieee80211_radar_detected - inform that a radar was detected
5955 * ieee80211_chswitch_done - Complete channel switch process
5959 * Complete the channel switch post-process: set the new operational channel
5965 * ieee80211_request_smps - request SM PS transition
5967 * @smps_mode: new SM PS mode
5969 * This allows the driver to request an SM PS transition in managed
5977 * ieee80211_ready_on_channel - notification of remain-on-channel start
5983 * ieee80211_remain_on_channel_expired - remain_on_channel duration expired
5989 * ieee80211_stop_rx_ba_session - callback to stop existing BA sessions
5996 * therefore prevent the peer device to use a-mpdu aggregation.
6006 * ieee80211_mark_rx_ba_filtered_frames - move RX BA window and mark filtered
6024 * ieee80211_send_bar - send a BlockAckReq frame
6037 * ieee80211_manage_rx_ba_offl - helper to queue an RX BA work
6046 * ieee80211_start_rx_ba_session_offl - start a Rx BA session
6068 * ieee80211_stop_rx_ba_session_offl - stop a Rx BA session
6090 * ieee80211_rx_ba_timer_expired - stop a Rx BA session due to timeout
6107 * struct ieee80211_tx_rate_control - rate control information for/from RC algo
6119 * @short_preamble: whether mac80211 will request short-preamble transmission
6121 * @rate_idx_mask: user-requested (legacy) rate mask
6122 * @rate_idx_mcs_mask: user-requested MCS rate mask (NULL if not in use)
6138 * enum rate_control_capabilities - rate control capabilities
6145 * that the AP uses is < the number of TX chains the hardware has,
6194 return (sta == NULL || sta->supp_rates[band] & BIT(index)); in rate_supported()
6203 for (i = 0; i < sband->n_bitrates; i++) in rate_lowest_index()
6204 if (rate_supported(sta, sband->band, i)) in rate_lowest_index()
6220 for (i = 0; i < sband->n_bitrates; i++) in rate_usable_index_exists()
6221 if (rate_supported(sta, sband->band, i)) in rate_usable_index_exists()
6227 * rate_control_set_rates - pass the sta rate selection to mac80211/driver
6236 * @rates: new tx rate set to be used for this station.
6248 return conf->chandef.width == NL80211_CHAN_WIDTH_20; in conf_is_ht20()
6254 return conf->chandef.width == NL80211_CHAN_WIDTH_40 && in conf_is_ht40_minus()
6255 conf->chandef.center_freq1 < conf->chandef.chan->center_freq; in conf_is_ht40_minus()
6261 return conf->chandef.width == NL80211_CHAN_WIDTH_40 && in conf_is_ht40_plus()
6262 conf->chandef.center_freq1 > conf->chandef.chan->center_freq; in conf_is_ht40_plus()
6268 return conf->chandef.width == NL80211_CHAN_WIDTH_40; in conf_is_ht40()
6274 return (conf->chandef.width != NL80211_CHAN_WIDTH_5) && in conf_is_ht()
6275 (conf->chandef.width != NL80211_CHAN_WIDTH_10) && in conf_is_ht()
6276 (conf->chandef.width != NL80211_CHAN_WIDTH_20_NOHT); in conf_is_ht()
6298 return ieee80211_iftype_p2p(vif->type, vif->p2p); in ieee80211_vif_type_p2p()
6302 * ieee80211_update_mu_groups - set the VHT MU-MIMO groud data
6305 * @membership: 64 bits array - a bit is set if station is member of the group
6323 * ieee80211_ave_rssi - report the average RSSI for the specified interface
6335 * ieee80211_report_wowlan_wakeup - report WoWLAN wakeup
6347 * ieee80211_tx_prepare_skb - prepare an 802.11 skb for transmission
6361 * ieee80211_parse_tx_radiotap - Sanity-check and parse the radiotap header
6375 * struct ieee80211_noa_data - holds temporary data for tracking P2P NoA state
6402 * ieee80211_parse_p2p_noa - initialize NoA tracking data from P2P IE
6414 * ieee80211_update_p2p_noa - get next pending P2P GO absent state change
6422 * ieee80211_tdls_oper_request - request userspace to perform a TDLS operation
6436 * ieee80211_reserve_tid - request to reserve a specific TID
6457 * ieee80211_unreserve_tid - request to unreserve a specific TID
6473 * ieee80211_tx_dequeue - dequeue a packet from a software tx queue
6483 * skb->cb, e.g. the key pointer, are protected by RCU and thus the
6496 * ieee80211_tx_dequeue_ni - dequeue a packet from a software tx queue
6519 * ieee80211_next_txq - get next tx queue to pull packets from
6531 * ieee80211_txq_schedule_start - start new scheduling round for TXQs
6550 * ieee80211_schedule_txq - schedule a TXQ for transmission
6568 * ieee80211_return_txq - return a TXQ previously acquired by ieee80211_next_txq()
6585 * ieee80211_txq_may_transmit - check whether TXQ is allowed to transmit
6599 * aligned against driver's own round-robin scheduler list. i.e it rotates
6612 * ieee80211_txq_get_depth - get pending frame/byte count of given txq
6615 * txq state can change half-way of this function and the caller may end up
6616 * with "new" frame_cnt and "old" byte_cnt or vice-versa.
6627 * ieee80211_nan_func_terminated - notify about NAN function termination.
6643 * ieee80211_nan_func_match - notify about NAN function match event.
6658 * ieee80211_calc_rx_airtime - calculate estimated transmission airtime for RX.
6673 * ieee80211_calc_tx_airtime - calculate estimated transmission airtime for TX.
6676 * rate information in the TX info struct and the frame length.
6686 * ieee80211_set_hw_80211_encap - enable hardware encapsulation offloading.
6698 * ieee80211_get_fils_discovery_tmpl - Get FILS discovery template.
6710 * ieee80211_get_unsol_bcast_probe_resp_tmpl - Get unsolicited broadcast