|
@@ -77,6 +77,18 @@ enum {
|
|
|
IRQTF_AFFINITY,
|
|
|
};
|
|
|
|
|
|
+/**
|
|
|
+ * These values can be returned by request_any_context_irq() and
|
|
|
+ * describe the context the interrupt will be run in.
|
|
|
+ *
|
|
|
+ * IRQC_IS_HARDIRQ - interrupt runs in hardirq context
|
|
|
+ * IRQC_IS_NESTED - interrupt runs in a nested threaded context
|
|
|
+ */
|
|
|
+enum {
|
|
|
+ IRQC_IS_HARDIRQ = 0,
|
|
|
+ IRQC_IS_NESTED,
|
|
|
+};
|
|
|
+
|
|
|
typedef irqreturn_t (*irq_handler_t)(int, void *);
|
|
|
|
|
|
/**
|
|
@@ -120,6 +132,10 @@ request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
|
|
|
return request_threaded_irq(irq, handler, NULL, flags, name, dev);
|
|
|
}
|
|
|
|
|
|
+extern int __must_check
|
|
|
+request_any_context_irq(unsigned int irq, irq_handler_t handler,
|
|
|
+ unsigned long flags, const char *name, void *dev_id);
|
|
|
+
|
|
|
extern void exit_irq_thread(void);
|
|
|
#else
|
|
|
|
|
@@ -141,6 +157,13 @@ request_threaded_irq(unsigned int irq, irq_handler_t handler,
|
|
|
return request_irq(irq, handler, flags, name, dev);
|
|
|
}
|
|
|
|
|
|
+static inline int __must_check
|
|
|
+request_any_context_irq(unsigned int irq, irq_handler_t handler,
|
|
|
+ unsigned long flags, const char *name, void *dev_id)
|
|
|
+{
|
|
|
+ return request_irq(irq, handler, flags, name, dev_id);
|
|
|
+}
|
|
|
+
|
|
|
static inline void exit_irq_thread(void) { }
|
|
|
#endif
|
|
|
|