Lines Matching +full:per +full:- +full:queue

1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
3 * Copyright (C) 2012-2014, 2018-2024 Intel Corporation
4 * Copyright (C) 2013-2014 Intel Mobile Communications GmbH
5 * Copyright (C) 2015-2016 Intel Deutschland GmbH
14 #include "iwl-trans.h" /* for IWL_MAX_TID_COUNT */
15 #include "fw-api.h" /* IWL_STATION_COUNT_MAX */
22 * DOC: DQA - Dynamic Queue Allocation -introduction
24 * Dynamic Queue Allocation (AKA "DQA") is a feature implemented in iwlwifi
25 * driver to allow dynamic allocation of queues on-demand, rather than allocate
26 * them statically ahead of time. Ideally, we would like to allocate one queue
27 * per RA/TID, thus allowing an AP - for example - to send BE traffic to STA2
33 * TXQ #0 - command queue
34 * TXQ #1 - aux frames
35 * TXQ #2 - P2P device frames
36 * TXQ #3 - P2P GO/SoftAP GCAST/BCAST frames
37 * TXQ #4 - BSS DATA frames queue
38 * TXQ #5-8 - Non-QoS and MGMT frames queue pool
39 * TXQ #9 - P2P GO/SoftAP probe responses
40 * TXQ #10-31 - DATA frames queue pool
41 * The queues are dynamically taken from either the MGMT frames queue pool or
43 * queue.
46 * until a queue is allocated for it, and only then can be TXed. Therefore, it
48 * %mvm->add_stream_wk later allocates the queues and TXes the deferred frames.
51 * queues in the pool. If there is no longer a free MGMT queue to allocate, a
52 * queue will be allocated from the DATA pool instead. Since QoS NDPs can create
53 * a problem for aggregations, they too will use a MGMT queue.
55 * When adding a STA, a DATA queue is reserved for it so that it can TX from
56 * it. If no such free queue exists for reserving, the STA addition will fail.
58 * If the DATA queue pool gets exhausted, no new STA will be accepted, and if a
62 * When a RA/TID needs to become aggregated, no new queue is required to be
63 * allocated, only mark the queue as aggregated via the ADD_STA command. Note,
64 * however, that a shared queue cannot be aggregated, and only after the other
65 * TIDs become inactive and are removed - only then can the queue be
76 * DOC: station table - introduction
87 * This data includes the index of the station in the fw, per tid information
88 * (sequence numbers, Block-ack state machine, etc...). The stations are
100 * DOC: station table - locking
107 * The station holds the sequence number per tid. So this data needs to be
108 * accessed in the Tx path (which is softIRQ). It also holds the Block-Ack
119 * If a station is deleted while it still has packets in its A-MPDU queues,
125 * DOC: station table - internal stations
136 * we fill ERR_PTR(-EINVAL) in this mapping and all other dereferencing of
145 * DOC: station table - AP Station in STA mode
157 * DOC: station table - Drain vs. Flush
159 * Flush means that all the frames in the SCD queue are dumped regardless the
168 * DOC: station table - fw restart
176 * means that the stations being re-added after the reset will have the same
179 * are not added by mac80211 will be re-added in the init flow that is called
185 * DOC: AP mode - PS
188 * shared queues (i.e. non-aggregation queues) to that station will be dropped
191 * AMPDUs are in a separate queue that is stopped by the fw. We just need to
196 * from the AMPDU queues or sends frames to non-aggregation queues itself,
197 * depending on which ACs are delivery-enabled and what TID has frames to
198 * transmit. Note that mac80211 has all the knowledge since all the non-agg
226 * @IWL_EMPTYING_HW_QUEUE_ADDBA: establishing a BA session - waiting for the
227 * HW queue to be empty from packets for this RA /TID.
228 * @IWL_EMPTYING_HW_QUEUE_DELBA: tearing down a BA session - waiting for the
229 * HW queue to be empty from packets for this RA /TID.
241 * struct iwl_mvm_tid_data - holds the states for each RA / TID
248 * @amsdu_in_ampdu_allowed: true if A-MSDU in A-MPDU is allowed.
250 * @txq_id: Tx queue used by the BA session / DQA
251 * @ssn: the first packet to be sent in AGG HW queue in Tx AGG start flow, or
252 * the first packet to be sent in legacy HW queue in Tx AGG stop flow.
255 * @tx_time: medium time consumed by this A-MPDU
285 * enum iwl_mvm_rxq_notif_type - Internal message identifier
296 * struct iwl_mvm_internal_rxq_notif - Internal representation of the data sent
317 * struct iwl_mvm_rxq_dup_data - per station per rx queue data
318 * @last_seq: last sequence per tid for duplicate packet detection
327 * struct iwl_mvm_link_sta - link specific parameters of a station
331 * the driver - %rs_drv or in the FW - %rs_fw.
356 * struct iwl_mvm_tpt_counter - per-queue MPDU counter
359 * @per_link: per-link counters.
360 * @window_start: timestamp of the counting-window start
369 * struct iwl_mvm_sta - representation of a station in the driver
379 * @next_status_eosp: the next reclaimed packet is a PS-Poll response and
383 * @tid_data: per tid data + mgmt. Look at %iwl_mvm_tid_data.
386 * @reserved_queue: the queue reserved for this STA for DQA purposes
387 * Every STA has is given one reserved queue to allow it to operate. If no
388 * such queue can be guaranteed, the STA addition will fail.
399 * even when that station is asleep. This is useful in case the queue
401 * we are sending frames from an AMPDU queue and there was a hole in
403 * @ptk_pn: per-queue PTK PN data structures
404 * @dup_data: per queue duplicate packet detection data
409 * @deflink: the default link station, for non-MLO STA, all link specific data
412 * @link: per link sta entries. For non-MLO only link[0] holds data. For MLO,
415 * @mpdu_counters: RX/TX MPDUs counters for each queue.
417 * When mac80211 creates a station it reserves some space (hw->sta_data_size)
464 return (void *)sta->drv_priv; in iwl_mvm_sta_from_mac80211()
468 * struct iwl_mvm_int_sta - representation of an internal station (auxiliary or
481 * iwl_mvm_sta_send_to_fw - Send the STA info to the FW.
539 bool tx, int queue);
555 int tid, u8 queue, bool start);
610 * struct iwl_mvm_sta_state_ops - callbacks for the sta_state() ops
613 * non-MLD versions of sta_state() is these function calls,
675 u16 *queue, u8 tid,