diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-11 16:21:31 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-11 16:21:31 -0400 |
commit | d90a7e86401ffea2163a4337f3a47f3909c4e255 (patch) | |
tree | afe3d4aa24849c561bb1e6c04c4c54808cbedb47 /include | |
parent | 12a499612e1ff439bdad240c7f86c55366941d4d (diff) | |
parent | 4dbc9ca219b0f294332e734528f7b82211700170 (diff) |
Merge branch 'irq-threaded-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'irq-threaded-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
genirq: Do not mask oneshot edge type interrupts
genirq: Support nested threaded irq handling
genirq: Add buslock support
genirq: Add oneshot support
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/interrupt.h | 4 | ||||
-rw-r--r-- | include/linux/irq.h | 10 |
2 files changed, 14 insertions, 0 deletions
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 35e7df1e9f30..1ac57e522a1f 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -50,6 +50,9 @@ | |||
50 | * IRQF_IRQPOLL - Interrupt is used for polling (only the interrupt that is | 50 | * IRQF_IRQPOLL - Interrupt is used for polling (only the interrupt that is |
51 | * registered first in an shared interrupt is considered for | 51 | * registered first in an shared interrupt is considered for |
52 | * performance reasons) | 52 | * performance reasons) |
53 | * IRQF_ONESHOT - Interrupt is not reenabled after the hardirq handler finished. | ||
54 | * Used by threaded interrupts which need to keep the | ||
55 | * irq line disabled until the threaded handler has been run. | ||
53 | */ | 56 | */ |
54 | #define IRQF_DISABLED 0x00000020 | 57 | #define IRQF_DISABLED 0x00000020 |
55 | #define IRQF_SAMPLE_RANDOM 0x00000040 | 58 | #define IRQF_SAMPLE_RANDOM 0x00000040 |
@@ -59,6 +62,7 @@ | |||
59 | #define IRQF_PERCPU 0x00000400 | 62 | #define IRQF_PERCPU 0x00000400 |
60 | #define IRQF_NOBALANCING 0x00000800 | 63 | #define IRQF_NOBALANCING 0x00000800 |
61 | #define IRQF_IRQPOLL 0x00001000 | 64 | #define IRQF_IRQPOLL 0x00001000 |
65 | #define IRQF_ONESHOT 0x00002000 | ||
62 | 66 | ||
63 | /* | 67 | /* |
64 | * Bits used by threaded handlers: | 68 | * Bits used by threaded handlers: |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 9e9eb76faf81..ae9653dbcd78 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -69,6 +69,8 @@ typedef void (*irq_flow_handler_t)(unsigned int irq, | |||
69 | #define IRQ_MOVE_PCNTXT 0x01000000 /* IRQ migration from process context */ | 69 | #define IRQ_MOVE_PCNTXT 0x01000000 /* IRQ migration from process context */ |
70 | #define IRQ_AFFINITY_SET 0x02000000 /* IRQ affinity was set from userspace*/ | 70 | #define IRQ_AFFINITY_SET 0x02000000 /* IRQ affinity was set from userspace*/ |
71 | #define IRQ_SUSPENDED 0x04000000 /* IRQ has gone through suspend sequence */ | 71 | #define IRQ_SUSPENDED 0x04000000 /* IRQ has gone through suspend sequence */ |
72 | #define IRQ_ONESHOT 0x08000000 /* IRQ is not unmasked after hardirq */ | ||
73 | #define IRQ_NESTED_THREAD 0x10000000 /* IRQ is nested into another, no own handler thread */ | ||
72 | 74 | ||
73 | #ifdef CONFIG_IRQ_PER_CPU | 75 | #ifdef CONFIG_IRQ_PER_CPU |
74 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) | 76 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) |
@@ -100,6 +102,9 @@ struct msi_desc; | |||
100 | * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ | 102 | * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ |
101 | * @set_wake: enable/disable power-management wake-on of an IRQ | 103 | * @set_wake: enable/disable power-management wake-on of an IRQ |
102 | * | 104 | * |
105 | * @bus_lock: function to lock access to slow bus (i2c) chips | ||
106 | * @bus_sync_unlock: function to sync and unlock slow bus (i2c) chips | ||
107 | * | ||
103 | * @release: release function solely used by UML | 108 | * @release: release function solely used by UML |
104 | * @typename: obsoleted by name, kept as migration helper | 109 | * @typename: obsoleted by name, kept as migration helper |
105 | */ | 110 | */ |
@@ -123,6 +128,9 @@ struct irq_chip { | |||
123 | int (*set_type)(unsigned int irq, unsigned int flow_type); | 128 | int (*set_type)(unsigned int irq, unsigned int flow_type); |
124 | int (*set_wake)(unsigned int irq, unsigned int on); | 129 | int (*set_wake)(unsigned int irq, unsigned int on); |
125 | 130 | ||
131 | void (*bus_lock)(unsigned int irq); | ||
132 | void (*bus_sync_unlock)(unsigned int irq); | ||
133 | |||
126 | /* Currently used only by UML, might disappear one day.*/ | 134 | /* Currently used only by UML, might disappear one day.*/ |
127 | #ifdef CONFIG_IRQ_RELEASE_METHOD | 135 | #ifdef CONFIG_IRQ_RELEASE_METHOD |
128 | void (*release)(unsigned int irq, void *dev_id); | 136 | void (*release)(unsigned int irq, void *dev_id); |
@@ -373,6 +381,8 @@ set_irq_chained_handler(unsigned int irq, | |||
373 | __set_irq_handler(irq, handle, 1, NULL); | 381 | __set_irq_handler(irq, handle, 1, NULL); |
374 | } | 382 | } |
375 | 383 | ||
384 | extern void set_irq_nested_thread(unsigned int irq, int nest); | ||
385 | |||
376 | extern void set_irq_noprobe(unsigned int irq); | 386 | extern void set_irq_noprobe(unsigned int irq); |
377 | extern void set_irq_probe(unsigned int irq); | 387 | extern void set_irq_probe(unsigned int irq); |
378 | 388 | ||