libnvme(9)

πŸ’– libnvme(9) β€” API Manual, but make it cute πŸ’–

okay bestie, so this one is a page from the libnvme API manual β€” section 9 of the manual, to be exact β€” and it's all about one lil struct. strap in. ✨


🌸 NAME 🌸

struct nvme_mi_aem_msg β€” the AEM Message definition. that's it. that's the whole name. iconic behavior honestly. πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

struct nvme_mi_aem_msg {
    struct nvme_mi_msg_hdr hdr;
    struct nvme_mi_aem_occ_list_hdr occ_list_hdr;
 };

like, look at her. two members. no notes. 🫢


πŸŽ€ Members πŸŽ€

  • hdr β€” the general response message header. the standard-issue intro, the "hey girl" of the message. ✨
  • occ_list_hdr β€” the ae occurrence list header. this is the part that tells you what's actually in the bag. πŸ‘œ

πŸ’œ Description πŸ’œ

so here's the tea, bestie: every ae message is gonna start with one of these. like, no exceptions, it's the opening act. 🎀

the occ_list_hder will define information about how many ae occ data entries are included. so it's giving... table of contents energy. πŸ“–

each entry is defined by the nvme_mi_aem_occ_data structure, which will follow the occ_list_hdr. so the order is: header, list header, then the entries, one after another, no skipping. 🌈

and here's the part where it gets a lil unhinged: each nvme_mi_aem_occ_data structure has a fixed length header but a variable length payload β€” ude to occurrence specific and vendor specific info. so like, every single one could be a different size. 😭

🚨 do NOT, i am begging you, index the nvme_mi_ae_occ data structures by array or by fixed offset. for this reason. the sizes are not fixed, so that math does not math. walk the list properly or perish. πŸ’€

that's the whole page, bestie, you ate it. πŸ‘‘


sign-off time 🧚✨ this was struct nvme_mi_aem_msg from the libnvme(9) page, dated August 2026, out of the libnvme API manual. mwah. πŸ’–πŸŽ€πŸ¦‹πŸŒΈ

πŸ“¦ where this page comes from