STRUCT IWL_RXQ(9)
β¨ struct iwl_rxq(9) β¨
okay so bestie, welcome to the Kernel API Manual, section 9, and today's main character is struct iwl_rxq β literally "Rx queue" π
this is the whole vibe, the receive queue struct, and yes we're gonna go through every single field because that's just how we do it here π«Ά
β¨ NAME β¨
struct iwl_rxq β Rx queue π
π¦ SYNOPSIS π¦
struct iwl_rxq {
int id;
void *bd;
dma_addr_t bd_dma;
void *used_bd;
dma_addr_t used_bd_dma;
u32 read;
u32 write;
u32 free_count;
u32 used_count;
u32 write_actual;
u32 queue_size;
struct list_head rx_free;
struct list_head rx_used;
bool need_update, next_rb_is_fragment;
void *rb_stts;
dma_addr_t rb_stts_dma;
spinlock_t lock;
struct napi_struct napi;
struct iwl_rx_mem_buffer *queue[RX_QUEUE_SIZE];
};
like, look at her. fully iconic. no notes. π
π Members π
bestie, let's go one by one, no skipping, we don't do skipping here β
idβ the queue index. that's her number, her little ID card πΈbdβ the driver's pointer to the buffer of receive buffer descriptors (rbd). important detail alert: the address size is 32 bit in pre-9000 devices and 64 bit in 9000 devices. and in AX210 devices, it's a pointer to a list ofiwl_rx_transfer_desc's πbd_dmaβ bus address of buffer of receive buffer descriptors (rbd) π¦used_bdβ the driver's pointer to the buffer of used receive buffer descriptors (rbd)used_bd_dmaβ physical address of buffer of used receive buffer descriptors (rbd) β¨readβ shared index to newest available Rx buffer πwriteβ shared index to oldest written Rx packet πfree_countβ number of pre-allocated buffers inrx_freeπused_countβ number of RBDs handled to allocator to use for allocationwrite_actualβ β¦so the source literally leaves this one blank π iconic mysterious silence, she said nothing and left, no description provided, we respect itqueue_sizeβ size of this queue πrx_freeβ list of RBDs with allocated RB ready for use πrx_usedβ list of RBDs with no RB attached πneed_updateβ flag to indicate we need to updateread/writeindex π₯next_rb_is_fragmentβ indicates that the previous RB that we handled set the fragmented flag, so the next one is still another fragment π§rb_sttsβ the driver's pointer to receive buffer status βrb_stts_dmaβ bus address of receive buffer status πΈlockβ per-queue lock πnapiβ NAPI struct for this queue πqueueβ the actual rx queue. not used for multi-rx queue. π«Ά
π NOTE π
rx_free and rx_used are used as a FIFO for iwl_rx_mem_buffers β yes bestie, first in first out, she's orderly like that π
π SEE ALSO π
- Kernel file
./drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/internal.h struct iwl_rx_mem_buffer(9)struct iwl_rx_transfer_desc(9)struct iwl_rx_completion_desc(9)struct iwl_rx_completion_desc_bz(9)struct iwl_rb_allocator(9)iwl_get_closed_rb_stts(9)enum iwl_fw_mon_dbgfs_state(9)enum iwl_shared_irq_flags(9)enum iwl_image_response_code(9)struct cont_rec(9)enum iwl_pcie_imr_status(9)struct iwl_txq(9)struct iwl_pcie_txqs(9)struct iwl_trans_pcie(9)iwl_txq_inc_wrap(9)iwl_txq_dec_wrap(9)
like, go read them all, i'll wait π«Άβ¨
and that's the whole page, bestie!! source path clipped down to ./drivers/net/wireless/intel/i..., dated October 2026, and it's struct iwl_rxq(9) β that's the Kernel API Manual, section 9, mwah π periodt ππ¦π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms