diff options
Diffstat (limited to 'kernel/irq')
| -rw-r--r-- | kernel/irq/chip.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index d27b25855743..475e8a71bcdc 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
| @@ -39,6 +39,7 @@ void dynamic_irq_init(unsigned int irq) | |||
| 39 | desc->chip = &no_irq_chip; | 39 | desc->chip = &no_irq_chip; |
| 40 | desc->handle_irq = handle_bad_irq; | 40 | desc->handle_irq = handle_bad_irq; |
| 41 | desc->depth = 1; | 41 | desc->depth = 1; |
| 42 | desc->msi_desc = NULL; | ||
| 42 | desc->handler_data = NULL; | 43 | desc->handler_data = NULL; |
| 43 | desc->chip_data = NULL; | 44 | desc->chip_data = NULL; |
| 44 | desc->action = NULL; | 45 | desc->action = NULL; |
| @@ -74,6 +75,9 @@ void dynamic_irq_cleanup(unsigned int irq) | |||
| 74 | WARN_ON(1); | 75 | WARN_ON(1); |
| 75 | return; | 76 | return; |
| 76 | } | 77 | } |
| 78 | desc->msi_desc = NULL; | ||
| 79 | desc->handler_data = NULL; | ||
| 80 | desc->chip_data = NULL; | ||
| 77 | desc->handle_irq = handle_bad_irq; | 81 | desc->handle_irq = handle_bad_irq; |
| 78 | desc->chip = &no_irq_chip; | 82 | desc->chip = &no_irq_chip; |
| 79 | spin_unlock_irqrestore(&desc->lock, flags); | 83 | spin_unlock_irqrestore(&desc->lock, flags); |
| @@ -162,6 +166,30 @@ int set_irq_data(unsigned int irq, void *data) | |||
| 162 | EXPORT_SYMBOL(set_irq_data); | 166 | EXPORT_SYMBOL(set_irq_data); |
| 163 | 167 | ||
| 164 | /** | 168 | /** |
| 169 | * set_irq_data - set irq type data for an irq | ||
| 170 | * @irq: Interrupt number | ||
| 171 | * @data: Pointer to interrupt specific data | ||
| 172 | * | ||
| 173 | * Set the hardware irq controller data for an irq | ||
| 174 | */ | ||
| 175 | int set_irq_msi(unsigned int irq, struct msi_desc *entry) | ||
| 176 | { | ||
| 177 | struct irq_desc *desc; | ||
| 178 | unsigned long flags; | ||
| 179 | |||
| 180 | if (irq >= NR_IRQS) { | ||
| 181 | printk(KERN_ERR | ||
| 182 | "Trying to install msi data for IRQ%d\n", irq); | ||
| 183 | return -EINVAL; | ||
| 184 | } | ||
| 185 | desc = irq_desc + irq; | ||
| 186 | spin_lock_irqsave(&desc->lock, flags); | ||
| 187 | desc->msi_desc = entry; | ||
| 188 | spin_unlock_irqrestore(&desc->lock, flags); | ||
| 189 | return 0; | ||
| 190 | } | ||
| 191 | |||
| 192 | /** | ||
| 165 | * set_irq_chip_data - set irq chip data for an irq | 193 | * set_irq_chip_data - set irq chip data for an irq |
| 166 | * @irq: Interrupt number | 194 | * @irq: Interrupt number |
| 167 | * @data: Pointer to chip specific data | 195 | * @data: Pointer to chip specific data |
