Home
last modified time | relevance | path

Searched refs:hwirq (Results 1 – 25 of 390) sorted by relevance

12345678910>>...16

/linux/Documentation/translations/zh_CN/core-api/irq/
H A Dirq-domain.rst33 提供任何对控制器本地IRQ(hwirq)号到Linux IRQ号空间的反向映射的支持。
52 irq_domain和一个hwirq号作为参数。 如果hwirq的映射还不存在,那么它将分配
73 如在irq_chip回调中),那么可以直接从irq_data->hwirq中获得。
89 线性反向映射维护了一个固定大小的表,该表以hwirq号为索引。 当一个hwirq被映射
90 时,会给hwirq分配一个irq_desc,并将irq号存储在表中。
94 必须尽可能大的hwirq号。
110 irq_domain维护着从hwirq号到Linux IRQ的radix的树状映射。 当一个hwirq被映射时,
111 一个irq_desc被分配,hwirq被用作radix树的查找键。
113 如果hwirq号可以非常大,树状映射是一个很好的选择,因为它不需要分配一个和最大hwirq
114 号一样大的表。 缺点是,hwirq到IRQ号的查找取决于表中有多少条目。
[all …]
/linux/drivers/irqchip/
H A Dirq-sp7021-intc.c87 offset = (hwirq / 32) * 4; in sp_intc_assign_bit()
93 mask |= BIT(hwirq % 32); in sp_intc_assign_bit()
95 mask &= ~BIT(hwirq % 32); in sp_intc_assign_bit()
102 u32 hwirq = d->hwirq; in sp_intc_ack_irq() local
104 if (unlikely(IS_GPIO_INT(hwirq) && TEST_STATE(hwirq, _IS_EDGE))) { // WORKAROUND in sp_intc_ack_irq()
105 sp_intc_assign_bit(hwirq, REG_INTR_POLARITY, !TEST_STATE(hwirq, _IS_LOW)); in sp_intc_ack_irq()
124 u32 hwirq = d->hwirq; in sp_intc_set_type() local
133 ASSIGN_STATE(hwirq, _IS_LOW, is_low); in sp_intc_set_type()
171 int hwirq; in sp_intc_handle_ext_cascaded() local
176 if (unlikely(IS_GPIO_INT(hwirq) && TEST_STATE(hwirq, _IS_ACTIVE))) { // WORKAROUND in sp_intc_handle_ext_cascaded()
[all …]
H A Dirq-mchp-eic.c103 irq_set_irq_wake(eic->irqs[d->hwirq], on); in mchp_eic_irq_set_wake()
105 eic->wakeup_source |= BIT(d->hwirq); in mchp_eic_irq_set_wake()
107 eic->wakeup_source &= ~BIT(d->hwirq); in mchp_eic_irq_set_wake()
114 unsigned int hwirq; in mchp_eic_irq_suspend() local
116 for (hwirq = 0; hwirq < MCHP_EIC_NIRQ; hwirq++) in mchp_eic_irq_suspend()
118 MCHP_EIC_SCFG(hwirq)); in mchp_eic_irq_suspend()
128 unsigned int hwirq; in mchp_eic_irq_resume() local
133 for (hwirq = 0; hwirq < MCHP_EIC_NIRQ; hwirq++) in mchp_eic_irq_resume()
135 MCHP_EIC_SCFG(hwirq)); in mchp_eic_irq_resume()
160 irq_hw_number_t hwirq; in mchp_eic_domain_alloc() local
[all …]
H A Dirq-mmp.c71 int hwirq; in icu_mask_ack_irq() local
74 hwirq = d->irq - data->virq_base; in icu_mask_ack_irq()
95 int hwirq; in icu_mask_irq() local
98 hwirq = d->irq - data->virq_base; in icu_mask_irq()
124 int hwirq; in icu_unmask_irq() local
227 int hwirq; in mmp_handle_irq() local
230 if (!(hwirq & SEL_INT_PENDING)) in mmp_handle_irq()
232 hwirq &= SEL_INT_NUM_MASK; in mmp_handle_irq()
238 int hwirq; in mmp2_handle_irq() local
241 if (!(hwirq & SEL_INT_PENDING)) in mmp2_handle_irq()
[all …]
H A Dirq-riscv-intc.c54 if (IS_ENABLED(CONFIG_32BIT) && d->hwirq >= BITS_PER_LONG) in riscv_intc_irq_mask()
55 csr_clear(CSR_IEH, BIT(d->hwirq - BITS_PER_LONG)); in riscv_intc_irq_mask()
57 csr_clear(CSR_IE, BIT(d->hwirq)); in riscv_intc_irq_mask()
62 if (IS_ENABLED(CONFIG_32BIT) && d->hwirq >= BITS_PER_LONG) in riscv_intc_irq_unmask()
63 csr_set(CSR_IEH, BIT(d->hwirq - BITS_PER_LONG)); in riscv_intc_irq_unmask()
65 csr_set(CSR_IE, BIT(d->hwirq)); in riscv_intc_irq_unmask()
71 * Andes specific S-mode local interrupt causes (hwirq) in andes_intc_irq_mask()
75 unsigned int mask = BIT(d->hwirq % BITS_PER_LONG); in andes_intc_irq_mask()
77 if (d->hwirq < ANDES_SLI_CAUSE_BASE) in andes_intc_irq_mask()
85 unsigned int mask = BIT(d->hwirq in andes_intc_irq_unmask()
124 riscv_intc_domain_map(struct irq_domain * d,unsigned int irq,irq_hw_number_t hwirq) riscv_intc_domain_map() argument
140 irq_hw_number_t hwirq; riscv_intc_domain_alloc() local
[all...]
H A Dirq-pruss-intc.c193 reg_idx = hwirq / 32; in pruss_intc_map()
194 val = BIT(hwirq % 32); in pruss_intc_map()
208 hwirq, ch, host); in pruss_intc_map()
241 reg_idx = hwirq / 32; in pruss_intc_unmap()
253 hwirq, ch, host); in pruss_intc_unmap()
293 unsigned int hwirq = data->hwirq; in pruss_intc_irq_ack() local
301 unsigned int hwirq = data->hwirq; in pruss_intc_irq_mask() local
309 unsigned int hwirq = data->hwirq; in pruss_intc_irq_unmask() local
491 int hwirq, err; in pruss_intc_irq_handler() local
606 unsigned int hwirq; in pruss_intc_remove() local
[all …]
H A Dirq-or1k-pic.c28 mtspr(SPR_PICMR, mfspr(SPR_PICMR) & ~(1UL << data->hwirq)); in or1k_pic_mask()
33 mtspr(SPR_PICMR, mfspr(SPR_PICMR) | (1UL << data->hwirq)); in or1k_pic_unmask()
38 mtspr(SPR_PICSR, (1UL << data->hwirq)); in or1k_pic_ack()
43 mtspr(SPR_PICMR, mfspr(SPR_PICMR) & ~(1UL << data->hwirq)); in or1k_pic_mask_ack()
44 mtspr(SPR_PICSR, (1UL << data->hwirq)); in or1k_pic_mask_ack()
55 mtspr(SPR_PICSR, mfspr(SPR_PICSR) & ~(1UL << data->hwirq)); in or1k_pic_or1200_ack()
102 int hwirq; in pic_get_irq() local
104 hwirq = ffs(mfspr(SPR_PICSR) >> first); in pic_get_irq()
105 if (!hwirq) in pic_get_irq()
108 hwirq = hwirq + first - 1; in pic_get_irq()
[all …]
H A Dirq-ls-extirq.c57 irq_hw_number_t hwirq = data->hwirq; in ls_extirq_set_type() local
61 mask = 1U << (31 - hwirq); in ls_extirq_set_type()
63 mask = 1U << hwirq; in ls_extirq_set_type()
104 irq_hw_number_t hwirq; in ls_extirq_domain_alloc() local
109 hwirq = fwspec->param[0]; in ls_extirq_domain_alloc()
110 if (hwirq >= priv->nirq) in ls_extirq_domain_alloc()
141 u32 hwirq, intsize, j; in ls_extirq_parse_map() local
145 hwirq = be32_to_cpup(map); in ls_extirq_parse_map()
146 if (hwirq >= MAXIRQ) in ls_extirq_parse_map()
148 priv->nirq = max(priv->nirq, hwirq + 1); in ls_extirq_parse_map()
[all …]
H A Dirq-sifive-plic.c93 static void __plic_toggle(void __iomem *enable_base, int hwirq, int enable) in __plic_toggle() argument
95 u32 __iomem *reg = enable_base + (hwirq / 32) * sizeof(u32); in __plic_toggle()
96 u32 hwirq_mask = 1 << (hwirq % 32); in __plic_toggle()
104 static void plic_toggle(struct plic_handler *handler, int hwirq, int enable) in plic_toggle() argument
109 __plic_toggle(handler->enable_base, hwirq, enable); in plic_toggle()
121 plic_toggle(handler, d->hwirq, enable); in plic_irq_toggle()
139 writel(1, priv->regs + PRIORITY_BASE + d->hwirq * PRIORITY_PER_ID); in plic_irq_unmask()
146 writel(0, priv->regs + PRIORITY_BASE + d->hwirq * PRIORITY_PER_ID); in plic_irq_mask()
154 plic_toggle(handler, d->hwirq, 1); in plic_irq_eoi()
155 writel(d->hwirq, handle in plic_irq_eoi()
309 plic_irqdomain_map(struct irq_domain * d,unsigned int irq,irq_hw_number_t hwirq) plic_irqdomain_map() argument
322 plic_irq_domain_translate(struct irq_domain * d,struct irq_fwspec * fwspec,unsigned long * hwirq,unsigned int * type) plic_irq_domain_translate() argument
337 irq_hw_number_t hwirq; plic_irq_domain_alloc() local
371 irq_hw_number_t hwirq; plic_handle_irq() local
492 irq_hw_number_t hwirq; plic_probe() local
[all...]
H A Dirq-mvebu-sei.c59 u32 reg_idx = SEI_IRQ_REG_IDX(d->hwirq); in mvebu_sei_ack_irq()
74 reg |= BIT(SEI_IRQ_REG_BIT(d->hwirq)); in mvebu_sei_mask_irq()
88 reg &= ~BIT(SEI_IRQ_REG_BIT(d->hwirq)); in mvebu_sei_unmask_irq()
199 unsigned long *hwirq, in mvebu_sei_ap_translate() argument
202 *hwirq = fwspec->param[0]; in mvebu_sei_ap_translate()
213 unsigned long hwirq; in mvebu_sei_ap_alloc() local
244 clear_bit(hwirq, sei->cp_msi_bitmap); in mvebu_sei_cp_release_irq()
254 unsigned long hwirq; in mvebu_sei_cp_domain_alloc() local
264 if (hwirq < sei->caps->cp_range.size) in mvebu_sei_cp_domain_alloc()
265 set_bit(hwirq, sei->cp_msi_bitmap); in mvebu_sei_cp_domain_alloc()
[all …]
H A Dirq-mbigen.c71 hwirq -= RESERVED_IRQ_PER_MBIGEN_CHIP; in get_mbigen_vec_reg()
72 nid = hwirq / IRQS_PER_MBIGEN_NODE + 1; in get_mbigen_vec_reg()
73 pin = hwirq % IRQS_PER_MBIGEN_NODE; in get_mbigen_vec_reg()
84 hwirq -= RESERVED_IRQ_PER_MBIGEN_CHIP; in get_mbigen_type_reg()
85 nid = hwirq / IRQS_PER_MBIGEN_NODE + 1; in get_mbigen_type_reg()
98 unsigned int ofst = (hwirq / 32) * 4; in get_mbigen_clear_reg()
100 *mask = 1 << (hwirq % 32); in get_mbigen_clear_reg()
156 base += get_mbigen_vec_reg(d->hwirq); in mbigen_write_msg()
170 unsigned long *hwirq, in mbigen_domain_translate() argument
181 *hwirq = fwspec->param[0]; in mbigen_domain_translate()
[all …]
H A Dirq-partition-percpu.c26 unsigned int cpu, unsigned int hwirq) in partition_check_cpu() argument
28 return cpumask_test_cpu(cpu, &part->parts[hwirq].mask); in partition_check_cpu()
37 if (partition_check_cpu(part, smp_processor_id(), d->hwirq) && in partition_irq_mask()
101 seq_printf(p, " %5s-%lu", chip->name, data->hwirq); in partition_irq_print_chip()
118 int hwirq; in partition_handle_irq() local
122 for_each_set_bit(hwirq, part->bitmap, part->nr_parts) { in partition_handle_irq()
123 if (partition_check_cpu(part, cpu, hwirq)) in partition_handle_irq()
127 if (unlikely(hwirq == part->nr_parts)) in partition_handle_irq()
130 generic_handle_domain_irq(part->domain, hwirq); in partition_handle_irq()
139 irq_hw_number_t hwirq; in partition_domain_alloc() local
[all …]
H A Dirq-xilinx-intc.c67 unsigned long mask = BIT(d->hwirq); in intc_enable_or_unmask()
85 pr_debug("irq-xilinx: disable: %ld\n", d->hwirq); in intc_disable_or_mask()
86 xintc_write(irqc, CIE, BIT(d->hwirq)); in intc_disable_or_mask()
93 pr_debug("irq-xilinx: ack: %ld\n", d->hwirq); in intc_ack()
94 xintc_write(irqc, IAR, BIT(d->hwirq)); in intc_ack()
100 unsigned long mask = BIT(d->hwirq); in intc_mask_ack()
145 u32 hwirq = xintc_read(irqc, IVR); in xil_intc_irq_handler() local
147 if (hwirq == -1U) in xil_intc_irq_handler()
157 u32 hwirq; in xil_intc_handle_irq() local
160 hwirq = xintc_read(primary_intc, IVR); in xil_intc_handle_irq()
[all …]
H A Dirq-sni-exiu.c44 writel(BIT(d->hwirq), data->base + EIREQCLR); in exiu_irq_ack()
58 writel(BIT(d->hwirq), data->base + EIREQCLR); in exiu_irq_eoi()
103 val |= BIT(d->hwirq); in exiu_irq_set_type()
105 val &= ~BIT(d->hwirq); in exiu_irq_set_type()
110 val &= ~BIT(d->hwirq); in exiu_irq_set_type()
113 val |= BIT(d->hwirq); in exiu_irq_set_type()
140 unsigned long *hwirq, in exiu_domain_translate() argument
157 *hwirq = fwspec->param[0]; in exiu_domain_translate()
169 irq_hw_number_t hwirq; in exiu_domain_alloc() local
178 hwirq = fwspec->param[1] - info->spi_base; in exiu_domain_alloc()
[all …]
/linux/arch/powerpc/sysdev/
H A Dmpic_u3msi.c97 return 0xf8004000 | (hwirq << 4); in find_u4_magic_addr()
105 irq_hw_number_t hwirq; in u3msi_teardown_msi_irqs() local
108 hwirq = virq_to_hw(entry->irq); in u3msi_teardown_msi_irqs()
122 int hwirq; in u3msi_setup_msi_irqs() local
137 if (hwirq < 0) { in u3msi_setup_msi_irqs()
139 return hwirq; in u3msi_setup_msi_irqs()
142 addr = find_ht_magic_addr(pdev, hwirq); in u3msi_setup_msi_irqs()
160 virq, hwirq, (unsigned long)addr); in u3msi_setup_msi_irqs()
163 virq, hwirq, (unsigned long)addr); in u3msi_setup_msi_irqs()
164 msg.data = hwirq; in u3msi_setup_msi_irqs()
[all …]
/linux/arch/powerpc/platforms/85xx/
H A Dsocrates_fpga_pic.c113 irq_line = fpga_irqs[hwirq].irq_line; in socrates_fpga_pic_ack()
117 mask |= (1 << (hwirq + 16)); in socrates_fpga_pic_ack()
129 irq_line = fpga_irqs[hwirq].irq_line; in socrates_fpga_pic_mask()
133 mask &= ~(1 << hwirq); in socrates_fpga_pic_mask()
149 mask &= ~(1 << hwirq); in socrates_fpga_pic_mask_ack()
150 mask |= (1 << (hwirq + 16)); in socrates_fpga_pic_mask_ack()
166 mask |= (1 << hwirq); in socrates_fpga_pic_unmask()
182 mask |= (1 << (hwirq + 16)); in socrates_fpga_pic_eoi()
211 mask |= (1 << hwirq); in socrates_fpga_pic_set_type()
213 mask &= ~(1 << hwirq); in socrates_fpga_pic_set_type()
[all …]
/linux/arch/powerpc/platforms/powernv/
H A Dpci-cxl.c43 int hwirq = msi_bitmap_alloc_hwirqs(&phb->msi_bmp, num); in pnv_cxl_alloc_hwirqs() local
45 if (hwirq < 0) { in pnv_cxl_alloc_hwirqs()
50 return phb->msi_base + hwirq; in pnv_cxl_alloc_hwirqs()
68 int i, hwirq; in pnv_cxl_release_hwirq_ranges() local
76 hwirq = irqs->offset[i] - phb->msi_base; in pnv_cxl_release_hwirq_ranges()
77 msi_bitmap_free_hwirqs(&phb->msi_bmp, hwirq, in pnv_cxl_release_hwirq_ranges()
88 int i, hwirq, try; in pnv_cxl_alloc_hwirq_ranges() local
97 if (hwirq >= 0) in pnv_cxl_alloc_hwirq_ranges()
104 irqs->offset[i] = phb->msi_base + hwirq; in pnv_cxl_alloc_hwirq_ranges()
134 unsigned int xive_num = hwirq - phb->msi_base; in pnv_cxl_ioda_msi_setup()
[all …]
/linux/arch/powerpc/platforms/pasemi/
H A Dmsi.c61 irq_hw_number_t hwirq; in pasemi_msi_teardown_msi_irqs() local
66 hwirq = virq_to_hw(entry->irq); in pasemi_msi_teardown_msi_irqs()
79 int hwirq; in pasemi_msi_setup_msi_irqs() local
95 hwirq = msi_bitmap_alloc_hwirqs(&msi_mpic->msi_bitmap, in pasemi_msi_setup_msi_irqs()
97 if (hwirq < 0) { in pasemi_msi_setup_msi_irqs()
99 return hwirq; in pasemi_msi_setup_msi_irqs()
102 virq = irq_create_mapping(msi_mpic->irqhost, hwirq); in pasemi_msi_setup_msi_irqs()
105 hwirq); in pasemi_msi_setup_msi_irqs()
106 msi_bitmap_free_hwirqs(&msi_mpic->msi_bitmap, hwirq, in pasemi_msi_setup_msi_irqs()
122 "addr 0x%x\n", virq, hwirq, msg.address_lo); in pasemi_msi_setup_msi_irqs()
[all …]
/linux/kernel/irq/
H A Dirqdomain.c545 irq_hw_number_t hwirq; in irq_domain_disassociate() local
551 hwirq = irq_data->hwirq; in irq_domain_disassociate()
569 irq_data->hwirq = 0; in irq_domain_disassociate()
592 irq_data->hwirq = hwirq; in irq_domain_associate_locked()
772 hwirq, type); in irq_domain_translate()
956 if (data && data->hwirq == hwirq) in __irq_resolve_mapping()
959 *irq = hwirq; in __irq_resolve_mapping()
1118 irq_data->hwirq = 0; in irq_domain_reset_irq_data()
1192 irq_hw_number_t hwirq = data->hwirq; in irq_domain_remove_irq() local
1379 irq_data->hwirq = hwirq; in irq_domain_set_hwirq_and_chip()
[all …]
/linux/arch/arm/mach-imx/
H A Dgpc.c91 unsigned int idx = d->hwirq / 32; in imx_gpc_irq_set_wake()
94 mask = 1 << d->hwirq % 32; in imx_gpc_irq_set_wake()
132 val &= ~(1 << hwirq % 32); in imx_gpc_hwirq_unmask()
143 val |= 1 << (hwirq % 32); in imx_gpc_hwirq_mask()
149 imx_gpc_hwirq_unmask(d->hwirq); in imx_gpc_irq_unmask()
155 imx_gpc_hwirq_mask(d->hwirq); in imx_gpc_irq_mask()
174 unsigned long *hwirq, in imx_gpc_domain_translate() argument
185 *hwirq = fwspec->param[1]; in imx_gpc_domain_translate()
199 irq_hw_number_t hwirq; in imx_gpc_domain_alloc() local
207 hwirq = fwspec->param[1]; in imx_gpc_domain_alloc()
[all …]
/linux/drivers/pci/controller/
H A Dpcie-iproc-msi.c152 unsigned long hwirq) in iproc_msi_addr_offset() argument
203 return (hwirq - hwirq_to_cpu(msi, hwirq)); in hwirq_to_canonical_hwirq()
219 data->hwirq = hwirq_to_canonical_hwirq(msi, data->hwirq) + target_cpu; in iproc_msi_irq_set_affinity()
251 int hwirq, i; in iproc_msi_irq_domain_alloc() local
267 if (hwirq < 0) in iproc_msi_irq_domain_alloc()
285 unsigned int hwirq; in iproc_msi_irq_domain_free() local
289 hwirq = hwirq_to_canonical_hwirq(msi, data->hwirq); in iproc_msi_irq_domain_free()
306 u32 hwirq; in decode_msi_hwirq() local
311 hwirq = readl(msg); in decode_msi_hwirq()
312 hwirq = (hwirq >> 5) + (hwirq & 0x1f); in decode_msi_hwirq()
[all …]
/linux/drivers/misc/cxl/
H A Dirq.c192 irq_off = hwirq - ctx->irqs.offset[r]; in cxl_irq_afu()
202 ctx->pe, irq, hwirq); in cxl_irq_afu()
208 afu_irq, ctx->pe, irq, hwirq); in cxl_irq_afu()
231 virq = irq_create_mapping(NULL, hwirq); in cxl_map_irq()
263 int hwirq, virq; in cxl_register_one_irq() local
266 return hwirq; in cxl_register_one_irq()
271 *dest_hwirq = hwirq; in cxl_register_one_irq()
359 irq_hw_number_t hwirq; in afu_register_hwirqs() local
367 hwirq = ctx->irqs.offset[r]; in afu_register_hwirqs()
404 irq_hw_number_t hwirq; in afu_release_irqs() local
[all …]
/linux/drivers/pinctrl/mediatek/
H A Dmtk-eint.c105 u32 mask = BIT(hwirq & 0x1f); in mtk_eint_flip_edge()
120 hwirq); in mtk_eint_flip_edge()
129 u32 mask = BIT(d->hwirq & 0x1f); in mtk_eint_mask()
141 u32 mask = BIT(d->hwirq & 0x1f); in mtk_eint_unmask()
149 if (eint->dual_edge[d->hwirq]) in mtk_eint_unmask()
166 u32 mask = BIT(d->hwirq & 0x1f); in mtk_eint_ack()
184 d->irq, d->hwirq, type); in mtk_eint_set_type()
189 eint->dual_edge[d->hwirq] = 1; in mtk_eint_set_type()
191 eint->dual_edge[d->hwirq] = 0; in mtk_eint_set_type()
226 int shift = d->hwirq & 0x1f; in mtk_eint_irq_set_wake()
[all …]
/linux/drivers/gpio/
H A Dgpio-hlwd.c66 int hwirq; in hlwd_gpio_irqhandler() local
124 mask &= ~BIT(data->hwirq); in hlwd_gpio_irq_mask()
140 mask |= BIT(data->hwirq); in hlwd_gpio_irq_unmask()
159 level &= ~BIT(hwirq); in hlwd_gpio_irq_setup_emulation()
160 level |= state ^ BIT(hwirq); in hlwd_gpio_irq_setup_emulation()
164 hlwd->rising_edge &= ~BIT(hwirq); in hlwd_gpio_irq_setup_emulation()
165 hlwd->falling_edge &= ~BIT(hwirq); in hlwd_gpio_irq_setup_emulation()
167 hlwd->rising_edge |= BIT(hwirq); in hlwd_gpio_irq_setup_emulation()
169 hlwd->falling_edge |= BIT(hwirq); in hlwd_gpio_irq_setup_emulation()
186 level |= BIT(data->hwirq); in hlwd_gpio_irq_set_type()
[all …]
/linux/arch/powerpc/sysdev/ge/
H A Dge_pic.c116 unsigned int hwirq = irqd_to_hwirq(d); in gef_pic_mask() local
121 mask &= ~(1 << hwirq); in gef_pic_mask()
137 unsigned int hwirq = irqd_to_hwirq(d); in gef_pic_unmask() local
142 mask |= (1 << hwirq); in gef_pic_unmask()
159 irq_hw_number_t hwirq) in gef_pic_host_map() argument
234 int hwirq; in gef_pic_get_irq() local
243 for (hwirq = GEF_PIC_NUM_IRQS - 1; hwirq > -1; hwirq--) { in gef_pic_get_irq()
244 if (active & (0x1 << hwirq)) in gef_pic_get_irq()
248 (irq_hw_number_t)hwirq); in gef_pic_get_irq()

12345678910>>...16