![]() |
RT-Thread RTOS
An open source embedded real-time operating system
|
Registration, ISR attach, trap dispatch, and global IRQ control wrappers.
rt_pic_ops | Role |
|---|---|
**irq_init / irq_finit** | Controller-wide setup (called from **rt_pic_irq_init**) |
**irq_enable / irq_disable** | Optional gate |
**irq_mask / irq_unmask** | Mask line at hardware |
**irq_ack / irq_eoi** | Acknowledge / end of interrupt |
**irq_map** | Allocate virtual IRQ from hwirq + mode (required for OFW) |
**irq_parse** | Decode **#interrupt-cells** into **out_pirq** (required for OFW) |
**irq_set_priority / irq_set_affinity / irq_set_triger_mode** | Configuration |
**irq_send_ipi** | SMP IPI |
MSI: **irq_alloc_msi**, **irq_compose_msi_msg**, … | PIC and PCI MSI |
**flags** | **RT_PIC_F_IRQ_ROUTING** — parent dispatches children in **rt_pic_handle_isr** |
Root PIC (CPU-facing) registers a trap handler:
CPU exception → **rt_pic_do_traps()** → first handler returning **RT_TRUE**:
pic-gicv2.c)pirq** (IPI vs SPI)irq_ack** → **rt_pic_handle_isr(pirq)** → **irq_eoi**Child PICs without traps are reached via cascade or dedicated parent ISR (PIC cascade and routing).
children_nodes** non-empty: for each child, **irq_ack**, recursive **rt_pic_handle_isr(child)**, **irq_eoi**pirq->isr.action.handler(irq, param)**pirq->isr.list**Used by root trap and by software demux (e.g. Rockchip PCIe legacy ISR).
irq**: virtual global numberpirq->isr**; additional handlers malloc **struct rt_pic_isr** nodesrt_hw_interrupt_install** in **pic_rthw.c** wraps **rt_pic_attach_irq**Thin wrappers: **irq2pirq(irq)** → **pirq->pic->ops->…**
**rt_hw_interrupt_mask / umask** in arch code call these.
For **rt_phye**-like refcount see phye; PIC uses per-pirq ISR and init_count only inside individual drivers.
PIC core **rt_phye_init** N/A — use **irq_map** once per DT line.
There is no single **rt_pic_register** — providers:
struct rt_pic** in driver private dataops**, **priv_data**rt_pic_linear_irq**rt_ofw_data(np) = &pic** (or **rt_dm_dev_bind_fwdata**)rt_pic_user_extends**, **rt_pic_add_traps**