STRUCT IRQ_DOMAIN_INFO(9)
πΈ 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 onparentbestie β 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;0means 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~0for no limit, and0for 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 whenCONFIG_IRQ_DOMAIN_HIERARCHYis set, per the synopsis above πdgc_infoβ Geneneric chip information structure pointer, used to create generic chips for the domain if notNULLπ§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:
struct irq_fwspec(9)struct irq_fwspec_info(9)struct irq_domain_ops(9)struct irq_domain(9)irq_domain_create_linear(9)irq_create_mapping(9)irq_resolve_mapping(9)irq_find_mapping(9)irq_domain_create_hierarchy(9)irq_domain_alloc_irqs(9)
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
- 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