STRUCT PDS_CORE_Q_INIT_CMD(9)
πΈ struct pds_core_q_init_cmd β Queue init command πΈ
okay bestie, welcome to the Kernel API Manual, section 9 β this is the page for struct pds_core_q_init_cmd, aka the lil love letter you send to the firmware when you want a queue born π it's the queue init command, and it's genuinely so iconic for a struct that's basically a form to fill out.
β¨ SYNOPSIS β¨
no cap, this is the whole shape of it. copy it exactly, don't freestyle π«Ά
struct pds_core_q_init_cmd {
u8 opcode;
u8 type;
__le16 client_id;
u8 ver;
u8 rsvd[3];
__le32 index;
__le16 pid;
__le16 intr_index;
__le16 flags;
#define PDS_CORE_QINIT_F_IRQ 0x01 ;
#define PDS_CORE_QINIT_F_ENA 0x02 ;
u8 cos;
#define PDS_CORE_QSIZE_MIN_LG2 2;
#define PDS_CORE_QSIZE_MAX_LG2 12;
u8 ring_size;
__le64 ring_base;
__le64 cq_ring_base;
};
π Members π
these are the fields, and yes we're doing all of them, nobody's getting skipped π
opcodeβ the opcode, and it'sPDS_AQ_CMD_Q_INIT. that's literally it, that's the vibe check it has to pass β¨typeβ logical queue type. like, which flavor of queue are we even doing here π¦client_idβ client identifier. tells the firmware who's asking, bestie, so it knows who to text back π±verβ queue type version. versioning! we love a struct that respects versioning πrsvdβ word boundary padding. it's filler, it's decor, it's doing absolutely nothing and we still respect it πindexβ the(LIF, qtype)relative admin queue index. keyed off both the LIF and the qtype, so it's giving very specific πpidβ process ID.intr_indexβ interrupt control register index, or Event queue index. one field, two possible jobs β main character energy fr fr πflagsβ the bit flags, and there are two of them:IRQβ Interrupt requested on completion.ENAβ Enable the queue. IfENA=0the queue is initialized but remains disabled, to be later enabled with the Queue Enable command. IfENA=1, then queue is initialized and then enabled.
cosβ class of service for this queue. fancy β¨ring_sizeβ Queue ring size, encoded as alog2(size), in number of descriptors. The actual ring size is(1 << ring_size). For example, to select a ring size of 64 descriptors writering_size = 6. The minimumring_sizevalue is2for a ring of 4 descriptors. The maximumring_sizevalue is12for a ring of 4k descriptors. Values ofring_size<2and>12are reserved.
β οΈ ok this one matters:ring_sizeis a log2, not a count. do not put64in there thinking you're clever, put6. and stay inside2β12because<2and>12are reserved β reserved is just the kernel's polite way of saying "girl don't" π
ring_baseβ Queue ring base address.cq_ring_baseβ Completion queue ring base address.
π₯ SEE ALSO π₯
the whole extended universe, bestie β the kernel file lives at ./include/linux/pds/pds_adminq.h, and here's every sibling struct/friend this page points you at π
pds_core_notifyq_event(9)struct pds_core_link_change_event(9)struct pds_core_reset_event(9)struct pds_core_client_event(9)struct pds_core_notifyq_cmd(9)struct pds_core_client_reg_cmd(9)struct pds_core_client_reg_comp(9)struct pds_core_client_unreg_cmd(9)struct pds_core_client_request_cmd(9)enum pds_core_logical_qtype(9)union pds_core_lif_config(9)struct pds_core_lif_status(9)struct pds_core_lif_info(9)struct pds_core_lif_identity(9)struct pds_core_lif_identify_cmd(9)struct pds_core_lif_identify_comp(9)struct pds_core_lif_init_cmd(9)struct pds_core_lif_init_comp(9)struct pds_core_lif_reset_cmd(9)enum pds_core_lif_attr(9)struct pds_core_lif_setattr_cmd(9)struct pds_core_lif_setattr_comp(9)struct pds_core_lif_getattr_cmd(9)struct pds_core_lif_getattr_comp(9)struct pds_core_q_identity(9)struct pds_core_q_identify_cmd(9)struct pds_core_q_identify_comp(9)struct pds_core_q_init_comp(9)struct pds_vdpa_cmd(9)struct pds_vdpa_init_cmd(9)struct pds_vdpa_ident(9)struct pds_vdpa_ident_cmd(9)struct pds_vdpa_status_cmd(9)enum pds_vdpa_attr(9)struct pds_vdpa_setattr_cmd(9)struct pds_vdpa_vq_init_cmd(9)struct pds_vdpa_vq_init_comp(9)struct pds_vdpa_vq_reset_cmd(9)struct pds_vdpa_vq_reset_comp(9)struct pds_vdpa_set_features_cmd(9)struct pds_lm_cmd(9)struct pds_lm_state_size_cmd(9)struct pds_lm_state_size_comp(9)struct pds_lm_suspend_cmd(9)struct pds_lm_suspend_status_cmd(9)struct pds_lm_resume_cmd(9)struct pds_lm_sg_elem(9)struct pds_lm_save_cmd(9)struct pds_lm_restore_cmd(9)union pds_lm_dev_state(9)struct pds_lm_dirty_region_info(9)struct pds_lm_dirty_status_cmd(9)enum pds_lm_dirty_bmp_type(9)struct pds_lm_dirty_status_comp(9)struct pds_lm_dirty_enable_cmd(9)struct pds_lm_dirty_disable_cmd(9)struct pds_lm_dirty_seq_ack_cmd(9)struct pds_lm_host_vf_status_cmd(9)struct pds_fwctl_cmd(9)struct pds_fwctl_comp(9)struct pds_fwctl_ident_cmd(9)struct pds_fwctl_ident(9)struct pds_fwctl_query_cmd(9)struct pds_fwctl_query_comp(9)struct pds_fwctl_query_data_endpoint(9)struct pds_fwctl_query_data_operation(9)struct pds_fwctl_query_data(9)struct pds_fwctl_rpc_cmd(9)struct pds_sg_elem(9)struct pds_fwctl_rpc_comp(9)
that's the whole page, bestie, you ate it up π
go forth and initialize your queues responsibly. and for the receipts: this came out of ./include/linux/pds, dated October 2026, and it's page struct pds_core_q_init_cmd(9) of the Kernel API Manual β mwah, stan a well-documented struct ππβ¨
π¦ 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