path: root/include/linux/irq.h
diff options
authorDaniel Thompson <daniel.thompson@linaro.org>2014-09-25 15:50:17 +0100
committerDaniel Thompson <daniel.thompson@linaro.org>2015-01-13 15:40:37 +0000
commita861e098dd83a6e698342a7cb8ebae9f8ce39c79 (patch)
tree2a824d9cd54b1806e2df4edec2fc06546a833c74 /include/linux/irq.h
parentf6190b863f77c3c9ff4e1acc54e56736831d5267 (diff)
irq: Allow interrupts to routed to NMI (or similar)
Some combinations of architectures and interrupt controllers make it possible for abitrary interrupt signals to be selectively made immune to masking by local_irq_disable(). For example, on ARM platforms, many interrupt controllers allow interrupts to be routed to FIQ rather than IRQ. These features could be exploited to implement debug and tracing features that can be implemented using NMI on x86 platforms (perf, hard lockup, kgdb). This patch assumes that the management of the NMI handler itself will be architecture specific (maybe notifier list like x86, hard coded like ARM, or something else entirely). The generic layer can still manage the irq as normal (affinity, enable/disable, free) but is not responsible for dispatching. Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
Diffstat (limited to 'include/linux/irq.h')
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/irq.h b/include/linux/irq.h
index d09ec7a1243e..695eb37f04ae 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -307,6 +307,7 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)
* @irq_eoi: end of interrupt
* @irq_set_affinity: set the CPU affinity on SMP machines
* @irq_retrigger: resend an IRQ to the CPU
+ * @irq_set_nmi_routing:set whether interrupt can act like NMI
* @irq_set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ
* @irq_set_wake: enable/disable power-management wake-on of an IRQ
* @irq_bus_lock: function to lock access to slow bus (i2c) chips
@@ -341,6 +342,7 @@ struct irq_chip {
int (*irq_set_affinity)(struct irq_data *data, const struct cpumask *dest, bool force);
int (*irq_retrigger)(struct irq_data *data);
+ int (*irq_set_nmi_routing)(struct irq_data *data, unsigned int nmi);
int (*irq_set_type)(struct irq_data *data, unsigned int flow_type);
int (*irq_set_wake)(struct irq_data *data, unsigned int on);