STRUCT LIBIE_CTLQ_MSG(9)
π struct libie_ctlq_msg(9) π
okay bestie, so this is the kernel API manual page for struct libie_ctlq_msg(9) β yes the section 9 one, and it's literally the control queue message data struct. like, the whole vibe of a control-queue message, all wrapped up in one little C struct. it's giving "backstage pass to the queue" ngl π
β¨ NAME β¨
struct libie_ctlq_msg β control queue message data π¦
πΈ SYNOPSIS πΈ
ok so here's the whole thing, and yes you can copy it, go off:
struct libie_ctlq_msg {
u16 flags;
u16 opcode;
u16 data_len;
union {
u16 func_id;
u16 hw_retval;
};
u32 chnl_opcode;
u32 chnl_retval;
u32 param0;
u16 sw_cookie;
u16 virt_flags;
u64 addr_param;
union {
struct kvec recv_mem;
struct libie_cp_dma_mem send_mem;
};
};
likeβ¦ she's got unions inside her, she's got u16s and u32s and a u64, she's that girl π
π Members π
okay so member by member, let's get into it π«Ά
flagsβ refer to the 'Flags sub-structure' definitions β¨ (yes, with that exact capitalisation and quotes, iykyk)opcodeβ infrastructure message opcode π₯data_lenβ size of the payload, i.e. how much stuff is actually in there π{unnamed_union}β anonymous π that's literally what it says. no name. she's mysterious like that.func_idβ queue id for mailbox selection, and it's0for the default mailbox (Tx) π¬hw_retvalβ execution status from the HW (Rx) β
chnl_opcodeβ virtchnl message opcode πchnl_retvalβ virtchnl return value πparam0β indirect message raw parameter0 (yes, "raw parameter0", no space, that's the name bestie π)sw_cookieβ used to verify the response of the sent virtchnl message π like a lil matching key so you know the reply is yoursvirt_flagsβ virtchnl capability flags πΈaddr_paramβ additional parameters in place of the address, given no buffer π (translation: when there's no buffer, the address slot gets repurposed){unnamed_union}β anonymous, again π (there are two of these, keep both, don't merge them)recv_memβ virtual address and size of the buffer that contains the indirect response π₯send_memβ physical and virtual address of the DMA buffer, used for sending π€
fr fr, the two anonymous unions are separate things β the top one isfunc_id/hw_retval(Tx queue id vs Rx hw status), the bottom one is your recv buffer vs your send buffer. don't mix them up, that's the whole point of them being bare/nested like that. π§
π¦ SEE ALSO π¦
the whole friend group π«Ά:
- Kernel file
./include/linux/net/intel/libie/controlq.henum libie_ctlq_type(9)struct libie_ctlq_ctx(9)struct libie_ctlq_reg(9)struct libie_cp_dma_mem(9)struct libie_ctlq_create_info(9)struct libie_ctlq_info(9)struct libie_ctlq_desc(9)struct libie_ctlq_clean_params(9)libie_ctlq_release_rx_buf(9)enum libie_ctlq_xn_state(9)struct libie_ctlq_xn(9)struct libie_ctlq_xn_manager(9)struct libie_ctlq_xn_send_params(9)libie_cp_can_send_onstack(9)struct libie_ctlq_xn_recv_params(9)struct libie_ctlq_xn_init_params(9)
aaaand that's the page π this one lives in ./include/linux/net/intel/libie, dated October 2026, and it's the struct libie_ctlq_msg(9) page β slay, go read the header file, mwah πβ¨
π¦ 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