Lines Matching +full:irq +full:- +full:mirror
1 // SPDX-License-Identifier: GPL-2.0-or-later
9 #define pr_fmt(fmt) "ipi-mux: " fmt
12 #include <linux/irq.h>
33 atomic_andnot(BIT(irqd_to_hwirq(d)), &icpu->enable); in ipi_mux_mask()
41 atomic_or(ibit, &icpu->enable); in ipi_mux_unmask()
50 if (atomic_read(&icpu->bits) & ibit) in ipi_mux_unmask()
65 * This sequence is the mirror of the one in ipi_mux_unmask(); in ipi_mux_send_mask()
71 pending = atomic_fetch_or_release(ibit, &icpu->bits); in ipi_mux_send_mask()
86 if (!(pending & ibit) && (atomic_read(&icpu->enable) & ibit)) in ipi_mux_send_mask()
118 * ipi_mux_process - Process multiplexed virtual IPIs
132 en = atomic_read(&icpu->enable); in ipi_mux_process()
138 ipis = atomic_fetch_andnot(en, &icpu->bits) & en; in ipi_mux_process()
145 * ipi_mux_create - Create virtual IPIs multiplexed on top of a single
161 return -EEXIST; in ipi_mux_create()
164 return -EINVAL; in ipi_mux_create()
168 return -ENOMEM; in ipi_mux_create()
170 fwnode = irq_domain_alloc_named_fwnode("IPI-Mux"); in ipi_mux_create()
173 rc = -ENOMEM; in ipi_mux_create()
181 rc = -ENOMEM; in ipi_mux_create()
185 domain->flags |= IRQ_DOMAIN_FLAG_IPI_SINGLE; in ipi_mux_create()