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/linux | |
| 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/linux')
| -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 | ||
