STRUCT LIBIE_AQ_DESC(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹ struct libie_aq_desc(9) πŸ¦‹

okay so this is the Kernel API Manual entry for struct libie_aq_desc, and bestie you're gonna want to sit down for this one because it's literally the blueprint for how the driver slides into firmware's DMs. it's giving very much "the little descriptor that could" πŸ’…


✨ NAME ✨

struct libie_aq_desc β€” the Admin Queue (AQ) descriptor. that's it, that's the vibe. a whole lil packet-shaped queen πŸ‘‘


πŸŽ€ SYNOPSIS πŸŽ€

okay so here's the shape of it, and yes she's got a union in her, we love a union:

struct libie_aq_desc {
    __le16 flags;
    __le16 opcode;
    __le16 datalen;
    __le16 retval;
    __le32 cookie_high;
    __le32 cookie_low;
    union {
      u8 raw[16];
      struct libie_aqc_generic generic;
      struct libie_aqc_get_ver get_ver;
      struct libie_aqc_driver_ver driver_ver;
      struct libie_aqc_req_res res_owner;
      struct libie_aqc_list_caps get_cap;
      struct libie_aqc_fw_log fw_log;
    } params;
 };

like. look at her. the raw[16] AND the fancy named structs? versatile icon behavior honestly 🌈


πŸ’– Members πŸ’–

  • flags β€” the LIBIE_AQ_FLAG_* flags go here. little flag moment ✨
  • opcode β€” the AQ command opcode. it's giving "which command am I" energy πŸŽ€
  • datalen β€” length in bytes of the indirect/external data buffer. numbers, we respect them πŸ“
  • retval β€” the return value from firmware. this is where firmware claps back πŸ’€
  • cookie_high β€” the opaque data high-half. mysterious. love that for us πŸ“
  • cookie_low β€” the opaque data low-half. the other half of the mystery 🫢
  • params β€” command-specific parameters. this is the union up there, she contains multitudes πŸ‘‘

🌸 Description 🌸

so here's the tea β˜• β€” this is the descriptor format for the commands the driver posts on the Admin Transmit Queue (ATQ). that's the posting-your-command part, very main character energy.

and then the firmware literally writes back onto the command descriptor and returns the result of the command. like a reply-text situation but for kernel descriptors πŸ˜­πŸ’Œ

now β€” asynchronous events that are not an immediate result of the command? those get written to the Admin Receive Queue (ARQ) using the same descriptor format. same fit, different queue. iconic πŸ¦‹

also important bestie: descriptors are in little-endian notation with 32-bit words. don't forget, don't fight it, just respect the byte order fr fr πŸ”₯


πŸ” SEE ALSO πŸ”

  • the kernel file ./include/linux/net/intel/libie/adminq.h (go read her, she's the source of truth) πŸ‘‘
  • struct libie_aqc_generic(9)
  • struct libie_aqc_get_ver(9)
  • struct libie_aqc_driver_ver(9)
  • struct libie_aqc_req_res(9)
  • struct libie_aqc_list_caps(9)
  • struct libie_aqc_list_caps_elem(9)

like a whole friend group of structs. go say hi to all of them 🫢✨


lowkey reminder: keep every field where it belongs, don't shuffle the union, and keep your endianness straight. the descriptor does not want to be misinterpreted, and honestly? same πŸ’…

and that's the whole page, bestie πŸŽ€ this came to you from ./include/linux/net/intel/libie, dated October 2026, and it's literally titled struct libie_aq_desc(9) β€” slay, bye, go write some AQ commands πŸ’œπŸ¦‹βœ¨

πŸ“¦ where this page comes from