STRUCT IRQ_DOMAIN_INFO(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

okay so bestie, welcome to the struct irq_domain_info(9) page in the Kernel API Manual β€” and it's literally the blueprint for spinning up an interrupt domain πŸ’–

struct irq_domain_info β€” Domain information structure. that's the whole assignment. this struct is where you tell the kernel everything it needs to know about the irq domain you're about to create πŸŽ€


✨ SYNOPSIS ✨

here's the whole thing verbatim, no cap β€” every field, every type, every #ifdef, exactly as written:

struct irq_domain_info {
    struct fwnode_handle                    *fwnode;
    unsigned int                            domain_flags;
    unsigned int                            size;
    irq_hw_number_t hwirq_max;
    int direct_max;
    unsigned int                            hwirq_base;
    unsigned int                            virq_base;
    enum irq_domain_bus_token               bus_token;
    const char                              *name_suffix;
    const struct irq_domain_ops             *ops;
    void *host_data;
    struct device                           *dev;
  #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY;
    struct irq_domain                       *parent;
  #endif;
    struct irq_domain_chip_generic_info     *dgc_info;
    int (*init)(struct irq_domain *d);
    void (*exit)(struct irq_domain *d);
 };
not the #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY; gate on parent bestie β€” that field only exists when hierarchy support is compiled in πŸ™ˆ the rest are always there.

πŸ¦‹ Members πŸ¦‹

time for the vibe check on every single field πŸ’…

  • fwnode β€” the firmware node for the interrupt controller. this is where the domain learns who it belongs to 🧚
  • domain_flags β€” extra flags you want to add on top of the domain flags. sprinkle responsibly ✨
  • size β€” size of the linear map; 0 means radix mapping only, nothing linear about it πŸ’€
  • hwirq_max β€” the maximum number of interrupts the controller supports. the ceiling, the limit, the moment 🫢
  • direct_max β€” the maximum value of direct maps. use ~0 for no limit, and 0 for no direct mapping at all. choose your fighter πŸ‘‘
  • hwirq_base β€” the first hardware interrupt number β€” legacy domains only, so if you're not doing legacy this isn't your moment 🌈
  • virq_base β€” the first Linux interrupt number, for legacy domains that want to immediately associate the interrupts right after domain creation. instant association, iconic behavior ⭐
  • bus_token β€” the domain bus token πŸ”₯
  • name_suffix β€” optional name suffix, and lowkey it's there to avoid collisions when multiple domains get added using the same fwnode. two domains, one fwnode, chaos averted πŸ’–
  • ops β€” the domain operation callbacks. the actual behavior lives here πŸŽ€
  • host_data β€” controller private data pointer. your own little pocket of stuff πŸ“
  • dev β€” the device which creates the domain πŸ¦‹
  • parent β€” pointer to the parent irq domain, used in a hierarchy domain. only around when CONFIG_IRQ_DOMAIN_HIERARCHY is set, per the synopsis above πŸ’œ
  • dgc_info β€” Geneneric chip information structure pointer, used to create generic chips for the domain if not NULL 🧚
  • init β€” function called when the domain is created. lets you do some additional domain initialisation, a little pre-game ritual ✨
  • exit β€” function called when the domain is destroyed. lets you do some additional cleanup operation β€” the goodbye routine, the tidy-up, the "leaving the group chat" 🌸

πŸ” SEE ALSO πŸ”

go read these next, bestie, they're all in the Kernel file ./include/linux/irqdomain.h:


and that's the whole page, periodt πŸ’… this one came out of ./include/linux, dated October 2026 β€” so if you're ever wondering where it lives, that's the spot, mwah πŸ«ΆπŸ’–

πŸ“¦ where this page comes from