irq_domain_create_simple(9)
πΈ NAME πΈ
irq_domain_create_simple β Register an irq_domain and optionally map a range of irqs. This is irq_domain_create_simple(9) from the Kernel API Manual, and it's lowkey the setup bestie for interrupt domains π.
β¨ SYNOPSIS β¨
okay so the signature is literally:
struct irq_domain * irq_domain_create_simple (struct fwnode_handle
*fwnode , unsigned int size , unsigned int first_irq , const struct
irq_domain_ops *ops , void *host_data );
π ARGUMENTS π
fwnodeβ firmware node for the interrupt controller, like the controller's little ID card π³sizeβ total number of irqs in mapping, periodt.first_irqβ first number of irq block assigned to the domain. Pass zero to assign irqs on-the-fly π¦. Iffirst_irqis non-zero, then pre-map all of the irqs in the domain to virqs starting atfirst_irq.opsβ domain callbacks.host_dataβ Controller private data pointer, aka the controller's own little stash π«Ά.
π DESCRIPTION π
Okay so irq_domain_create_simple() allocates an irq_domain, and optionally if first_irq is positive then it also allocates irq_descs and maps all of the hwirqs to virqs starting at first_irq. That's the whole glow-up β¨.
This is intended to implement the expected behaviour for most interrupt controllers. If device tree is used, then first_irq will be 0 and irqs get mapped dynamically on the fly. However, if the controller requires static virq assignments (non-DT boot) then it will set that up correctly. So it handles both the chill dynamic vibe and the structured static vibe, iykyk π
.
π SEE ALSO π
The whole friend group lives here, bestie β plus the kernel file ./kernel/irq/irqdomain.c π§:
__irq_domain_alloc_fwnode(9)irq_domain_free_fwnode(9)irq_domain_instantiate(9)irq_domain_remove(9)irq_find_matching_fwspec(9)irq_set_default_domain(9)irq_get_default_domain(9)irq_create_direct_mapping(9)irq_create_mapping_affinity(9)irq_dispose_mapping(9)__irq_resolve_mapping(9)irq_domain_xlate_onecell(9)irq_domain_xlate_twocell(9)irq_domain_xlate_twothreecell(9)irq_domain_xlate_onetwocell(9)irq_domain_translate_onecell(9)irq_domain_translate_twocell(9)irq_domain_translate_twothreecell(9)irq_domain_reset_irq_data(9)irq_domain_disconnect_hierarchy(9)irq_domain_get_irq_data(9)irq_domain_set_hwirq_and_chip(9)irq_domain_set_info(9)irq_domain_free_irqs_common(9)irq_domain_free_irqs_top(9)__irq_domain_alloc_irqs(9)irq_domain_push_irq(9)irq_domain_pop_irq(9)irq_domain_free_irqs(9)irq_domain_alloc_irqs_parent(9)irq_domain_free_irqs_parent(9)irq_domain_activate_irq(9)irq_domain_deactivate_irq(9)
Okay bye bestie π«Ά β source/version: ./kernel/irq; date: October 2026; page: irq_domain_create_simple(9). That's the whole manual, periodt π
β¨
π¦ 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