STRUCT MHUV3(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– struct mhuv3(9) πŸ’–

okay so bestie, welcome to the glow-up of struct mhuv3(9) β€” a Kernel API Manual moment, and honestly? it's giving main character energy for the MHUv3 mailbox controller data πŸŽ€ this is the struct that holds all the deets about one of those blocks, and we're gonna walk through every single field together, no cap.


✨ NAME ✨

struct mhuv3 β€” the MHUv3 mailbox controller data. that's it, that's the whole vibe πŸ¦‹


🌸 SYNOPSIS 🌸

struct mhuv3 {
    enum mhuv3_frame frame;
    bool auto_op_full;
    unsigned int major;
    unsigned int minor;
    unsigned int implem;
    unsigned int rev;
    unsigned int var;
    unsigned int prod_id;
    unsigned int num_chans;
    int cmb_irq;
    struct ctrl_page __iomem *ctrl;
    union {
      struct mhu3_pbx_frame_reg __iomem *pbx;
      struct mhu3_mbx_frame_reg __iomem *mbx;
    };
    struct mhuv3_extension *ext[NUM_EXT];
    struct mbox_controller mbox;
 };

literally copy this exactly, okay? no fixing, no "improving", no nothing 😀 the compiler does not care about your aesthetics.


πŸ’… Members πŸ’…

  • frame β€” the frame type, bestie. it's either MBX_FRAME or PBX_FRAME, pick your fighter βš”οΈ
  • auto_op_full β€” a flag that tells you whether this MHU supports AutoOp full mode. just a lil yes/no, iconic behaviour ✨
  • major β€” the MHUv3 controller architectural major version. the big number πŸ‘‘
  • minor β€” the MHUv3 controller architectural minor version. the smol number πŸ“
  • implem β€” the MHUv3 controller IIDR implementer. who made it, basically 🫢
  • rev β€” the MHUv3 controller IIDR revision. the revision, ngl 🌈
  • var β€” the MHUv3 controller IIDR variant. the variant, fr fr πŸ¦‹
  • prod_id β€” the MHUv3 controller IIDR product_id. the product id itself, we love a literal queen πŸ’œ
  • num_chans β€” the total number of channels discovered across all extensions. all of them. every last one πŸ”₯
  • cmb_irq β€” the combined IRQ number, but only if one was found defined. if not, it's just vibes πŸ™ˆ
  • ctrl β€” a reference to the MHUv3 control page for this block. your map to the control page, iykyk πŸŽ€
  • {unnamed_union} β€” anonymous. yes it's anonymous, no we can't name it, it's mysterious like that πŸ’€
    • pbx β€” base address of the PBX register mapping region πŸ“
    • mbx β€” base address of the MBX register mapping region πŸ“
  • ext β€” an array holding descriptors for any found implemented extension. it's struct mhuv3_extension *ext[NUM_EXT];, so you know it's an array of pointers, one slot per extension, slay πŸ’…
  • mbox β€” the mailbox controller belonging to the MHU frame. the actual mailbox controller, the whole point, the main event 🌟
lowkey reminder bestie: the union with pbx and mbx is anonymous β€” that's not me being weird, that's literally in the page. {unnamed_union}. periodt.

πŸ”₯ SEE ALSO πŸ”₯

  • Kernel file ./drivers/mailbox/arm_mhuv3.c
  • struct mhuv3_protocol_ops(9)
  • struct mhuv3_mbox_chan_priv(9)
  • struct mhuv3_extension(9)

go read those next, bestie, they're all connected and it's a whole storyline 🧚


okay so that's the whole page!! and for the cute sign-off: this lives in ./drivers/mailbox, and it's dated October 2026 β€” so yeah, we're reading a manual from the future, which is honestly very main character of us β­πŸ’– byeee 🫢

πŸ“¦ where this page comes from