drivers/net/wireless/intel/iwlwifi/mld/agg.h
Source file repositories/reference/linux-study-clean/drivers/net/wireless/intel/iwlwifi/mld/agg.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/intel/iwlwifi/mld/agg.h- Extension
.h- Size
- 4236 bytes
- Lines
- 128
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
mld.hfw/api/rx.h
Detected Declarations
struct iwl_mld_reorder_bufferstruct iwl_mld_reorder_buf_entrystruct iwl_mld_baid_datastruct iwl_mld_delba_dataenum iwl_mld_reorder_result
Annotated Snippet
struct iwl_mld_reorder_buffer {
u16 head_sn;
u16 num_stored;
int queue;
bool valid;
} ____cacheline_aligned_in_smp;
/**
* struct iwl_mld_reorder_buf_entry - reorder buffer entry per-queue/per-seqno
* @frames: list of skbs stored. a list is necessary because in an A-MSDU,
* all sub-frames share the same sequence number, so they are stored
* together in the same list.
*/
struct iwl_mld_reorder_buf_entry {
struct sk_buff_head frames;
}
#ifndef __CHECKER__
/* sparse doesn't like this construct: "bad integer constant expression" */
__aligned(roundup_pow_of_two(sizeof(struct sk_buff_head)))
#endif
;
/**
* struct iwl_mld_baid_data - Block Ack session data
* @rcu_head: RCU head for freeing this data
* @sta_mask: station mask for the BAID
* @tid: tid of the session
* @baid: baid of the session
* @buf_size: the reorder buffer size as set by the last ADDBA request
* @entries_per_queue: number of buffers per queue, this actually gets
* aligned up to avoid cache line sharing between queues
* @timeout: the timeout value specified in the ADDBA request.
* @last_rx_timestamp: timestamp of the last received packet (in jiffies). This
* value is updated only when the configured @timeout has passed since
* the last update to minimize cache bouncing between RX queues.
* @session_timer: timer is set to expire after 2 * @timeout (since we want
* to minimize the cache bouncing by updating @last_rx_timestamp only once
* after @timeout has passed). If no packets are received within this
* period, it informs mac80211 to initiate delBA flow, terminating the
* BA session.
* @rcu_ptr: BA data RCU protected access
* @mld: mld pointer, needed for timer context
* @reorder_buf: reorder buffer, allocated per queue
* @entries: data
*/
struct iwl_mld_baid_data {
struct rcu_head rcu_head;
u32 sta_mask;
u8 tid;
u8 baid;
u16 buf_size;
u16 entries_per_queue;
u16 timeout;
struct timer_list session_timer;
unsigned long last_rx_timestamp;
struct iwl_mld_baid_data __rcu **rcu_ptr;
struct iwl_mld *mld;
struct iwl_mld_reorder_buffer reorder_buf[IWL_MAX_RX_HW_QUEUES];
struct iwl_mld_reorder_buf_entry entries[] ____cacheline_aligned_in_smp;
};
/**
* struct iwl_mld_delba_data - RX queue sync data for %IWL_MLD_RXQ_NOTIF_DEL_BA
*
* @baid: Block Ack id, used to identify the BA session to be removed
*/
struct iwl_mld_delba_data {
u32 baid;
} __packed;
/**
* enum iwl_mld_reorder_result - Possible return values for iwl_mld_reorder()
* indicating how the caller should handle the skb based on the result.
*
* @IWL_MLD_PASS_SKB: skb should be passed to upper layer.
* @IWL_MLD_BUFFERED_SKB: skb has been buffered, don't pass it to upper layer.
* @IWL_MLD_DROP_SKB: skb should be dropped and freed by the caller.
*/
enum iwl_mld_reorder_result {
IWL_MLD_PASS_SKB,
IWL_MLD_BUFFERED_SKB,
IWL_MLD_DROP_SKB
};
int iwl_mld_ampdu_rx_start(struct iwl_mld *mld, struct ieee80211_sta *sta,
int tid, u16 ssn, u16 buf_size, u16 timeout);
int iwl_mld_ampdu_rx_stop(struct iwl_mld *mld, struct ieee80211_sta *sta,
int tid);
enum iwl_mld_reorder_result
Annotation
- Immediate include surface: `mld.h`, `fw/api/rx.h`.
- Detected declarations: `struct iwl_mld_reorder_buffer`, `struct iwl_mld_reorder_buf_entry`, `struct iwl_mld_baid_data`, `struct iwl_mld_delba_data`, `enum iwl_mld_reorder_result`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.