diff options
Diffstat (limited to 'arch/alpha')
| -rw-r--r-- | arch/alpha/Kconfig | 1 | ||||
| -rw-r--r-- | arch/alpha/kernel/irq.c | 13 | ||||
| -rw-r--r-- | arch/alpha/kernel/irq_alpha.c | 11 | ||||
| -rw-r--r-- | arch/alpha/kernel/irq_i8259.c | 18 | ||||
| -rw-r--r-- | arch/alpha/kernel/irq_impl.h | 8 | ||||
| -rw-r--r-- | arch/alpha/kernel/irq_pyxis.c | 20 | ||||
| -rw-r--r-- | arch/alpha/kernel/irq_srm.c | 16 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_alcor.c | 28 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_cabriolet.c | 16 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_dp264.c | 52 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_eb64p.c | 18 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_eiger.c | 14 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_jensen.c | 24 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_marvel.c | 42 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_mikasa.c | 16 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_noritake.c | 16 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_rawhide.c | 17 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_rx164.c | 16 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_sable.c | 20 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_takara.c | 14 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_titan.c | 21 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_wildfire.c | 32 |
22 files changed, 224 insertions, 209 deletions
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index 47f63d480141..cc31bec2e316 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig | |||
| @@ -11,6 +11,7 @@ config ALPHA | |||
| 11 | select HAVE_GENERIC_HARDIRQS | 11 | select HAVE_GENERIC_HARDIRQS |
| 12 | select GENERIC_IRQ_PROBE | 12 | select GENERIC_IRQ_PROBE |
| 13 | select AUTO_IRQ_AFFINITY if SMP | 13 | select AUTO_IRQ_AFFINITY if SMP |
| 14 | select GENERIC_HARDIRQS_NO_DEPRECATED | ||
| 14 | help | 15 | help |
| 15 | The Alpha is a 64-bit general-purpose processor designed and | 16 | The Alpha is a 64-bit general-purpose processor designed and |
| 16 | marketed by the Digital Equipment Corporation of blessed memory, | 17 | marketed by the Digital Equipment Corporation of blessed memory, |
diff --git a/arch/alpha/kernel/irq.c b/arch/alpha/kernel/irq.c index 9ab234f48dd8..a19d60082299 100644 --- a/arch/alpha/kernel/irq.c +++ b/arch/alpha/kernel/irq.c | |||
| @@ -44,11 +44,16 @@ static char irq_user_affinity[NR_IRQS]; | |||
| 44 | 44 | ||
| 45 | int irq_select_affinity(unsigned int irq) | 45 | int irq_select_affinity(unsigned int irq) |
| 46 | { | 46 | { |
| 47 | struct irq_desc *desc = irq_to_desc[irq]; | 47 | struct irq_data *data = irq_get_irq_data(irq); |
| 48 | struct irq_chip *chip; | ||
| 48 | static int last_cpu; | 49 | static int last_cpu; |
| 49 | int cpu = last_cpu + 1; | 50 | int cpu = last_cpu + 1; |
| 50 | 51 | ||
| 51 | if (!desc || !get_irq_desc_chip(desc)->set_affinity || irq_user_affinity[irq]) | 52 | if (!data) |
| 53 | return 1; | ||
| 54 | chip = irq_data_get_irq_chip(data); | ||
| 55 | |||
| 56 | if (!chip->irq_set_affinity || irq_user_affinity[irq]) | ||
| 52 | return 1; | 57 | return 1; |
| 53 | 58 | ||
| 54 | while (!cpu_possible(cpu) || | 59 | while (!cpu_possible(cpu) || |
| @@ -56,8 +61,8 @@ int irq_select_affinity(unsigned int irq) | |||
| 56 | cpu = (cpu < (NR_CPUS-1) ? cpu + 1 : 0); | 61 | cpu = (cpu < (NR_CPUS-1) ? cpu + 1 : 0); |
| 57 | last_cpu = cpu; | 62 | last_cpu = cpu; |
| 58 | 63 | ||
| 59 | cpumask_copy(desc->affinity, cpumask_of(cpu)); | 64 | cpumask_copy(data->affinity, cpumask_of(cpu)); |
| 60 | get_irq_desc_chip(desc)->set_affinity(irq, cpumask_of(cpu)); | 65 | chip->irq_set_affinity(data, cpumask_of(cpu), false); |
| 61 | return 0; | 66 | return 0; |
| 62 | } | 67 | } |
| 63 | #endif /* CONFIG_SMP */ | 68 | #endif /* CONFIG_SMP */ |
diff --git a/arch/alpha/kernel/irq_alpha.c b/arch/alpha/kernel/irq_alpha.c index 2d0679b60939..411ca11d0a18 100644 --- a/arch/alpha/kernel/irq_alpha.c +++ b/arch/alpha/kernel/irq_alpha.c | |||
| @@ -228,14 +228,9 @@ struct irqaction timer_irqaction = { | |||
| 228 | void __init | 228 | void __init |
| 229 | init_rtc_irq(void) | 229 | init_rtc_irq(void) |
| 230 | { | 230 | { |
| 231 | struct irq_desc *desc = irq_to_desc(RTC_IRQ); | 231 | set_irq_chip_and_handler_name(RTC_IRQ, &no_irq_chip, |
| 232 | 232 | handle_simple_irq, "RTC"); | |
| 233 | if (desc) { | 233 | setup_irq(RTC_IRQ, &timer_irqaction); |
| 234 | desc->status |= IRQ_DISABLED; | ||
| 235 | set_irq_chip_and_handler_name(RTC_IRQ, &no_irq_chip, | ||
| 236 | handle_simple_irq, "RTC"); | ||
| 237 | setup_irq(RTC_IRQ, &timer_irqaction); | ||
| 238 | } | ||
| 239 | } | 234 | } |
| 240 | 235 | ||
| 241 | /* Dummy irqactions. */ | 236 | /* Dummy irqactions. */ |
diff --git a/arch/alpha/kernel/irq_i8259.c b/arch/alpha/kernel/irq_i8259.c index 956ea0ed1694..c7cc9813e45f 100644 --- a/arch/alpha/kernel/irq_i8259.c +++ b/arch/alpha/kernel/irq_i8259.c | |||
| @@ -33,10 +33,10 @@ i8259_update_irq_hw(unsigned int irq, unsigned long mask) | |||
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | inline void | 35 | inline void |
| 36 | i8259a_enable_irq(unsigned int irq) | 36 | i8259a_enable_irq(struct irq_data *d) |
| 37 | { | 37 | { |
| 38 | spin_lock(&i8259_irq_lock); | 38 | spin_lock(&i8259_irq_lock); |
| 39 | i8259_update_irq_hw(irq, cached_irq_mask &= ~(1 << irq)); | 39 | i8259_update_irq_hw(d->irq, cached_irq_mask &= ~(1 << d->irq)); |
| 40 | spin_unlock(&i8259_irq_lock); | 40 | spin_unlock(&i8259_irq_lock); |
| 41 | } | 41 | } |
| 42 | 42 | ||
| @@ -47,16 +47,18 @@ __i8259a_disable_irq(unsigned int irq) | |||
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | void | 49 | void |
| 50 | i8259a_disable_irq(unsigned int irq) | 50 | i8259a_disable_irq(struct irq_data *d) |
| 51 | { | 51 | { |
| 52 | spin_lock(&i8259_irq_lock); | 52 | spin_lock(&i8259_irq_lock); |
| 53 | __i8259a_disable_irq(irq); | 53 | __i8259a_disable_irq(d->irq); |
| 54 | spin_unlock(&i8259_irq_lock); | 54 | spin_unlock(&i8259_irq_lock); |
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | void | 57 | void |
| 58 | i8259a_mask_and_ack_irq(unsigned int irq) | 58 | i8259a_mask_and_ack_irq(struct irq_data *d) |
| 59 | { | 59 | { |
| 60 | unsigned int irq = d->irq; | ||
| 61 | |||
| 60 | spin_lock(&i8259_irq_lock); | 62 | spin_lock(&i8259_irq_lock); |
| 61 | __i8259a_disable_irq(irq); | 63 | __i8259a_disable_irq(irq); |
| 62 | 64 | ||
| @@ -71,9 +73,9 @@ i8259a_mask_and_ack_irq(unsigned int irq) | |||
| 71 | 73 | ||
| 72 | struct irq_chip i8259a_irq_type = { | 74 | struct irq_chip i8259a_irq_type = { |
| 73 | .name = "XT-PIC", | 75 | .name = "XT-PIC", |
| 74 | .unmask = i8259a_enable_irq, | 76 | .irq_unmask = i8259a_enable_irq, |
| 75 | .mask = i8259a_disable_irq, | 77 | .irq_mask = i8259a_disable_irq, |
| 76 | .mask_ack = i8259a_mask_and_ack_irq, | 78 | .irq_mask_ack = i8259a_mask_and_ack_irq, |
| 77 | }; | 79 | }; |
| 78 | 80 | ||
| 79 | void __init | 81 | void __init |
diff --git a/arch/alpha/kernel/irq_impl.h b/arch/alpha/kernel/irq_impl.h index b63ccd7386f1..d507a234b05d 100644 --- a/arch/alpha/kernel/irq_impl.h +++ b/arch/alpha/kernel/irq_impl.h | |||
| @@ -31,11 +31,9 @@ extern void init_rtc_irq(void); | |||
| 31 | 31 | ||
| 32 | extern void common_init_isa_dma(void); | 32 | extern void common_init_isa_dma(void); |
| 33 | 33 | ||
| 34 | extern void i8259a_enable_irq(unsigned int); | 34 | extern void i8259a_enable_irq(struct irq_data *d); |
| 35 | extern void i8259a_disable_irq(unsigned int); | 35 | extern void i8259a_disable_irq(struct irq_data *d); |
| 36 | extern void i8259a_mask_and_ack_irq(unsigned int); | 36 | extern void i8259a_mask_and_ack_irq(struct irq_data *d); |
| 37 | extern unsigned int i8259a_startup_irq(unsigned int); | ||
| 38 | extern void i8259a_end_irq(unsigned int); | ||
| 39 | extern struct irq_chip i8259a_irq_type; | 37 | extern struct irq_chip i8259a_irq_type; |
| 40 | extern void init_i8259a_irqs(void); | 38 | extern void init_i8259a_irqs(void); |
| 41 | 39 | ||
diff --git a/arch/alpha/kernel/irq_pyxis.c b/arch/alpha/kernel/irq_pyxis.c index 2863458c853e..b30227fa7f5f 100644 --- a/arch/alpha/kernel/irq_pyxis.c +++ b/arch/alpha/kernel/irq_pyxis.c | |||
| @@ -29,21 +29,21 @@ pyxis_update_irq_hw(unsigned long mask) | |||
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | static inline void | 31 | static inline void |
| 32 | pyxis_enable_irq(unsigned int irq) | 32 | pyxis_enable_irq(struct irq_data *d) |
| 33 | { | 33 | { |
| 34 | pyxis_update_irq_hw(cached_irq_mask |= 1UL << (irq - 16)); | 34 | pyxis_update_irq_hw(cached_irq_mask |= 1UL << (d->irq - 16)); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | static void | 37 | static void |
| 38 | pyxis_disable_irq(unsigned int irq) | 38 | pyxis_disable_irq(struct irq_data *d) |
| 39 | { | 39 | { |
| 40 | pyxis_update_irq_hw(cached_irq_mask &= ~(1UL << (irq - 16))); | 40 | pyxis_update_irq_hw(cached_irq_mask &= ~(1UL << (d->irq - 16))); |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | static void | 43 | static void |
| 44 | pyxis_mask_and_ack_irq(unsigned int irq) | 44 | pyxis_mask_and_ack_irq(struct irq_data *d) |
| 45 | { | 45 | { |
| 46 | unsigned long bit = 1UL << (irq - 16); | 46 | unsigned long bit = 1UL << (d->irq - 16); |
| 47 | unsigned long mask = cached_irq_mask &= ~bit; | 47 | unsigned long mask = cached_irq_mask &= ~bit; |
| 48 | 48 | ||
| 49 | /* Disable the interrupt. */ | 49 | /* Disable the interrupt. */ |
| @@ -58,9 +58,9 @@ pyxis_mask_and_ack_irq(unsigned int irq) | |||
| 58 | 58 | ||
| 59 | static struct irq_chip pyxis_irq_type = { | 59 | static struct irq_chip pyxis_irq_type = { |
| 60 | .name = "PYXIS", | 60 | .name = "PYXIS", |
| 61 | .mask_ack = pyxis_mask_and_ack_irq, | 61 | .irq_mask_ack = pyxis_mask_and_ack_irq, |
| 62 | .mask = pyxis_disable_irq, | 62 | .irq_mask = pyxis_disable_irq, |
| 63 | .unmask = pyxis_enable_irq, | 63 | .irq_unmask = pyxis_enable_irq, |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| 66 | void | 66 | void |
| @@ -103,7 +103,7 @@ init_pyxis_irqs(unsigned long ignore_mask) | |||
| 103 | if ((ignore_mask >> i) & 1) | 103 | if ((ignore_mask >> i) & 1) |
| 104 | continue; | 104 | continue; |
| 105 | set_irq_chip_and_handler(i, &pyxis_irq_type, handle_level_irq); | 105 | set_irq_chip_and_handler(i, &pyxis_irq_type, handle_level_irq); |
| 106 | irq_to_desc(i)->status |= IRQ_LEVEL; | 106 | irq_set_status_flags(i, IRQ_LEVEL); |
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | setup_irq(16+7, &isa_cascade_irqaction); | 109 | setup_irq(16+7, &isa_cascade_irqaction); |
diff --git a/arch/alpha/kernel/irq_srm.c b/arch/alpha/kernel/irq_srm.c index 0e57e828b413..82a47bba41c4 100644 --- a/arch/alpha/kernel/irq_srm.c +++ b/arch/alpha/kernel/irq_srm.c | |||
| @@ -18,27 +18,27 @@ | |||
| 18 | DEFINE_SPINLOCK(srm_irq_lock); | 18 | DEFINE_SPINLOCK(srm_irq_lock); |
| 19 | 19 | ||
| 20 | static inline void | 20 | static inline void |
| 21 | srm_enable_irq(unsigned int irq) | 21 | srm_enable_irq(struct irq_data *d) |
| 22 | { | 22 | { |
| 23 | spin_lock(&srm_irq_lock); | 23 | spin_lock(&srm_irq_lock); |
| 24 | cserve_ena(irq - 16); | 24 | cserve_ena(d->irq - 16); |
| 25 | spin_unlock(&srm_irq_lock); | 25 | spin_unlock(&srm_irq_lock); |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | static void | 28 | static void |
| 29 | srm_disable_irq(unsigned int irq) | 29 | srm_disable_irq(struct irq_data *d) |
| 30 | { | 30 | { |
| 31 | spin_lock(&srm_irq_lock); | 31 | spin_lock(&srm_irq_lock); |
| 32 | cserve_dis(irq - 16); | 32 | cserve_dis(d->irq - 16); |
| 33 | spin_unlock(&srm_irq_lock); | 33 | spin_unlock(&srm_irq_lock); |
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | /* Handle interrupts from the SRM, assuming no additional weirdness. */ | 36 | /* Handle interrupts from the SRM, assuming no additional weirdness. */ |
| 37 | static struct irq_chip srm_irq_type = { | 37 | static struct irq_chip srm_irq_type = { |
| 38 | .name = "SRM", | 38 | .name = "SRM", |
| 39 | .unmask = srm_enable_irq, | 39 | .irq_unmask = srm_enable_irq, |
| 40 | .mask = srm_disable_irq, | 40 | .irq_mask = srm_disable_irq, |
| 41 | .mask_ack = srm_disable_irq, | 41 | .irq_mask_ack = srm_disable_irq, |
| 42 | }; | 42 | }; |
| 43 | 43 | ||
| 44 | void __init | 44 | void __init |
| @@ -52,7 +52,7 @@ init_srm_irqs(long max, unsigned long ignore_mask) | |||
| 52 | if (i < 64 && ((ignore_mask >> i) & 1)) | 52 | if (i < 64 && ((ignore_mask >> i) & 1)) |
| 53 | continue; | 53 | continue; |
| 54 | set_irq_chip_and_handler(i, &srm_irq_type, handle_level_irq); | 54 | set_irq_chip_and_handler(i, &srm_irq_type, handle_level_irq); |
| 55 | irq_to_desc(i)->status |= IRQ_LEVEL; | 55 | irq_set_status_flags(i, IRQ_LEVEL); |
| 56 | } | 56 | } |
| 57 | } | 57 | } |
| 58 | 58 | ||
diff --git a/arch/alpha/kernel/sys_alcor.c b/arch/alpha/kernel/sys_alcor.c index 7bef61768236..88d95e872f55 100644 --- a/arch/alpha/kernel/sys_alcor.c +++ b/arch/alpha/kernel/sys_alcor.c | |||
| @@ -44,31 +44,31 @@ alcor_update_irq_hw(unsigned long mask) | |||
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | static inline void | 46 | static inline void |
| 47 | alcor_enable_irq(unsigned int irq) | 47 | alcor_enable_irq(struct irq_data *d) |
| 48 | { | 48 | { |
| 49 | alcor_update_irq_hw(cached_irq_mask |= 1UL << (irq - 16)); | 49 | alcor_update_irq_hw(cached_irq_mask |= 1UL << (d->irq - 16)); |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | static void | 52 | static void |
| 53 | alcor_disable_irq(unsigned int irq) | 53 | alcor_disable_irq(struct irq_data *d) |
| 54 | { | 54 | { |
| 55 | alcor_update_irq_hw(cached_irq_mask &= ~(1UL << (irq - 16))); | 55 | alcor_update_irq_hw(cached_irq_mask &= ~(1UL << (d->irq - 16))); |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | static void | 58 | static void |
| 59 | alcor_mask_and_ack_irq(unsigned int irq) | 59 | alcor_mask_and_ack_irq(struct irq_data *d) |
| 60 | { | 60 | { |
| 61 | alcor_disable_irq(irq); | 61 | alcor_disable_irq(d); |
| 62 | 62 | ||
| 63 | /* On ALCOR/XLT, need to dismiss interrupt via GRU. */ | 63 | /* On ALCOR/XLT, need to dismiss interrupt via GRU. */ |
| 64 | *(vuip)GRU_INT_CLEAR = 1 << (irq - 16); mb(); | 64 | *(vuip)GRU_INT_CLEAR = 1 << (d->irq - 16); mb(); |
| 65 | *(vuip)GRU_INT_CLEAR = 0; mb(); | 65 | *(vuip)GRU_INT_CLEAR = 0; mb(); |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | static void | 68 | static void |
| 69 | alcor_isa_mask_and_ack_irq(unsigned int irq) | 69 | alcor_isa_mask_and_ack_irq(struct irq_data *d) |
| 70 | { | 70 | { |
| 71 | i8259a_mask_and_ack_irq(irq); | 71 | i8259a_mask_and_ack_irq(d); |
| 72 | 72 | ||
| 73 | /* On ALCOR/XLT, need to dismiss interrupt via GRU. */ | 73 | /* On ALCOR/XLT, need to dismiss interrupt via GRU. */ |
| 74 | *(vuip)GRU_INT_CLEAR = 0x80000000; mb(); | 74 | *(vuip)GRU_INT_CLEAR = 0x80000000; mb(); |
| @@ -77,9 +77,9 @@ alcor_isa_mask_and_ack_irq(unsigned int irq) | |||
| 77 | 77 | ||
| 78 | static struct irq_chip alcor_irq_type = { | 78 | static struct irq_chip alcor_irq_type = { |
| 79 | .name = "ALCOR", | 79 | .name = "ALCOR", |
| 80 | .unmask = alcor_enable_irq, | 80 | .irq_unmask = alcor_enable_irq, |
| 81 | .mask = alcor_disable_irq, | 81 | .irq_mask = alcor_disable_irq, |
| 82 | .mask_ack = alcor_mask_and_ack_irq, | 82 | .irq_mask_ack = alcor_mask_and_ack_irq, |
| 83 | }; | 83 | }; |
| 84 | 84 | ||
| 85 | static void | 85 | static void |
| @@ -126,9 +126,9 @@ alcor_init_irq(void) | |||
| 126 | if (i >= 16+20 && i <= 16+30) | 126 | if (i >= 16+20 && i <= 16+30) |
| 127 | continue; | 127 | continue; |
| 128 | set_irq_chip_and_handler(i, &alcor_irq_type, handle_level_irq); | 128 | set_irq_chip_and_handler(i, &alcor_irq_type, handle_level_irq); |
| 129 | irq_to_desc(i)->status |= IRQ_LEVEL; | 129 | irq_set_status_flags(i, IRQ_LEVEL); |
| 130 | } | 130 | } |
| 131 | i8259a_irq_type.ack = alcor_isa_mask_and_ack_irq; | 131 | i8259a_irq_type.irq_ack = alcor_isa_mask_and_ack_irq; |
| 132 | 132 | ||
| 133 | init_i8259a_irqs(); | 133 | init_i8259a_irqs(); |
| 134 | common_init_isa_dma(); | 134 | common_init_isa_dma(); |
diff --git a/arch/alpha/kernel/sys_cabriolet.c b/arch/alpha/kernel/sys_cabriolet.c index b0c916493aea..57eb6307bc27 100644 --- a/arch/alpha/kernel/sys_cabriolet.c +++ b/arch/alpha/kernel/sys_cabriolet.c | |||
| @@ -46,22 +46,22 @@ cabriolet_update_irq_hw(unsigned int irq, unsigned long mask) | |||
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | static inline void | 48 | static inline void |
| 49 | cabriolet_enable_irq(unsigned int irq) | 49 | cabriolet_enable_irq(struct irq_data *d) |
| 50 | { | 50 | { |
| 51 | cabriolet_update_irq_hw(irq, cached_irq_mask &= ~(1UL << irq)); | 51 | cabriolet_update_irq_hw(d->irq, cached_irq_mask &= ~(1UL << d->irq)); |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | static void | 54 | static void |
| 55 | cabriolet_disable_irq(unsigned int irq) | 55 | cabriolet_disable_irq(struct irq_data *d) |
| 56 | { | 56 | { |
| 57 | cabriolet_update_irq_hw(irq, cached_irq_mask |= 1UL << irq); | 57 | cabriolet_update_irq_hw(d->irq, cached_irq_mask |= 1UL << d->irq); |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | static struct irq_chip cabriolet_irq_type = { | 60 | static struct irq_chip cabriolet_irq_type = { |
| 61 | .name = "CABRIOLET", | 61 | .name = "CABRIOLET", |
| 62 | .unmask = cabriolet_enable_irq, | 62 | .irq_unmask = cabriolet_enable_irq, |
| 63 | .mask = cabriolet_disable_irq, | 63 | .irq_mask = cabriolet_disable_irq, |
| 64 | .mask_ack = cabriolet_disable_irq, | 64 | .irq_mask_ack = cabriolet_disable_irq, |
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | static void | 67 | static void |
| @@ -107,7 +107,7 @@ common_init_irq(void (*srm_dev_int)(unsigned long v)) | |||
| 107 | for (i = 16; i < 35; ++i) { | 107 | for (i = 16; i < 35; ++i) { |
| 108 | set_irq_chip_and_handler(i, &cabriolet_irq_type, | 108 | set_irq_chip_and_handler(i, &cabriolet_irq_type, |
| 109 | handle_level_irq); | 109 | handle_level_irq); |
| 110 | irq_to_desc(i)->status |= IRQ_LEVEL; | 110 | irq_set_status_flags(i, IRQ_LEVEL); |
| 111 | } | 111 | } |
| 112 | } | 112 | } |
| 113 | 113 | ||
diff --git a/arch/alpha/kernel/sys_dp264.c b/arch/alpha/kernel/sys_dp264.c index edad5f759ccd..481df4ecb651 100644 --- a/arch/alpha/kernel/sys_dp264.c +++ b/arch/alpha/kernel/sys_dp264.c | |||
| @@ -98,37 +98,37 @@ tsunami_update_irq_hw(unsigned long mask) | |||
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | static void | 100 | static void |
| 101 | dp264_enable_irq(unsigned int irq) | 101 | dp264_enable_irq(struct irq_data *d) |
| 102 | { | 102 | { |
| 103 | spin_lock(&dp264_irq_lock); | 103 | spin_lock(&dp264_irq_lock); |
| 104 | cached_irq_mask |= 1UL << irq; | 104 | cached_irq_mask |= 1UL << d->irq; |
| 105 | tsunami_update_irq_hw(cached_irq_mask); | 105 | tsunami_update_irq_hw(cached_irq_mask); |
| 106 | spin_unlock(&dp264_irq_lock); | 106 | spin_unlock(&dp264_irq_lock); |
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | static void | 109 | static void |
| 110 | dp264_disable_irq(unsigned int irq) | 110 | dp264_disable_irq(struct irq_data *d) |
| 111 | { | 111 | { |
| 112 | spin_lock(&dp264_irq_lock); | 112 | spin_lock(&dp264_irq_lock); |
| 113 | cached_irq_mask &= ~(1UL << irq); | 113 | cached_irq_mask &= ~(1UL << d->irq); |
| 114 | tsunami_update_irq_hw(cached_irq_mask); | 114 | tsunami_update_irq_hw(cached_irq_mask); |
| 115 | spin_unlock(&dp264_irq_lock); | 115 | spin_unlock(&dp264_irq_lock); |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | static void | 118 | static void |
| 119 | clipper_enable_irq(unsigned int irq) | 119 | clipper_enable_irq(struct irq_data *d) |
| 120 | { | 120 | { |
| 121 | spin_lock(&dp264_irq_lock); | 121 | spin_lock(&dp264_irq_lock); |
| 122 | cached_irq_mask |= 1UL << (irq - 16); | 122 | cached_irq_mask |= 1UL << (d->irq - 16); |
| 123 | tsunami_update_irq_hw(cached_irq_mask); | 123 | tsunami_update_irq_hw(cached_irq_mask); |
| 124 | spin_unlock(&dp264_irq_lock); | 124 | spin_unlock(&dp264_irq_lock); |
| 125 | } | 125 | } |
| 126 | 126 | ||
| 127 | static void | 127 | static void |
| 128 | clipper_disable_irq(unsigned int irq) | 128 | clipper_disable_irq(struct irq_data *d) |
| 129 | { | 129 | { |
| 130 | spin_lock(&dp264_irq_lock); | 130 | spin_lock(&dp264_irq_lock); |
| 131 | cached_irq_mask &= ~(1UL << (irq - 16)); | 131 | cached_irq_mask &= ~(1UL << (d->irq - 16)); |
| 132 | tsunami_update_irq_hw(cached_irq_mask); | 132 | tsunami_update_irq_hw(cached_irq_mask); |
| 133 | spin_unlock(&dp264_irq_lock); | 133 | spin_unlock(&dp264_irq_lock); |
| 134 | } | 134 | } |
| @@ -149,10 +149,11 @@ cpu_set_irq_affinity(unsigned int irq, cpumask_t affinity) | |||
| 149 | } | 149 | } |
| 150 | 150 | ||
| 151 | static int | 151 | static int |
| 152 | dp264_set_affinity(unsigned int irq, const struct cpumask *affinity) | 152 | dp264_set_affinity(struct irq_data *d, const struct cpumask *affinity, |
| 153 | { | 153 | bool force) |
| 154 | { | ||
| 154 | spin_lock(&dp264_irq_lock); | 155 | spin_lock(&dp264_irq_lock); |
| 155 | cpu_set_irq_affinity(irq, *affinity); | 156 | cpu_set_irq_affinity(d->irq, *affinity); |
| 156 | tsunami_update_irq_hw(cached_irq_mask); | 157 | tsunami_update_irq_hw(cached_irq_mask); |
| 157 | spin_unlock(&dp264_irq_lock); | 158 | spin_unlock(&dp264_irq_lock); |
| 158 | 159 | ||
| @@ -160,10 +161,11 @@ dp264_set_affinity(unsigned int irq, const struct cpumask *affinity) | |||
| 160 | } | 161 | } |
| 161 | 162 | ||
| 162 | static int | 163 | static int |
| 163 | clipper_set_affinity(unsigned int irq, const struct cpumask *affinity) | 164 | clipper_set_affinity(struct irq_data *d, const struct cpumask *affinity, |
| 164 | { | 165 | bool force) |
| 166 | { | ||
| 165 | spin_lock(&dp264_irq_lock); | 167 | spin_lock(&dp264_irq_lock); |
| 166 | cpu_set_irq_affinity(irq - 16, *affinity); | 168 | cpu_set_irq_affinity(d->irq - 16, *affinity); |
| 167 | tsunami_update_irq_hw(cached_irq_mask); | 169 | tsunami_update_irq_hw(cached_irq_mask); |
| 168 | spin_unlock(&dp264_irq_lock); | 170 | spin_unlock(&dp264_irq_lock); |
| 169 | 171 | ||
| @@ -171,19 +173,19 @@ clipper_set_affinity(unsigned int irq, const struct cpumask *affinity) | |||
| 171 | } | 173 | } |
| 172 | 174 | ||
| 173 | static struct irq_chip dp264_irq_type = { | 175 | static struct irq_chip dp264_irq_type = { |
| 174 | .name = "DP264", | 176 | .name = "DP264", |
| 175 | .unmask = dp264_enable_irq, | 177 | .irq_unmask = dp264_enable_irq, |
| 176 | .mask = dp264_disable_irq, | 178 | .irq_mask = dp264_disable_irq, |
| 177 | .mask_ack = dp264_disable_irq, | 179 | .irq_mask_ack = dp264_disable_irq, |
| 178 | .set_affinity = dp264_set_affinity, | 180 | .irq_set_affinity = dp264_set_affinity, |
| 179 | }; | 181 | }; |
| 180 | 182 | ||
| 181 | static struct irq_chip clipper_irq_type = { | 183 | static struct irq_chip clipper_irq_type = { |
| 182 | .name = "CLIPPER", | 184 | .name = "CLIPPER", |
| 183 | .unmask = clipper_enable_irq, | 185 | .irq_unmask = clipper_enable_irq, |
| 184 | .mask = clipper_disable_irq, | 186 | .irq_mask = clipper_disable_irq, |
| 185 | .mask_ack = clipper_disable_irq, | 187 | .irq_mask_ack = clipper_disable_irq, |
| 186 | .set_affinity = clipper_set_affinity, | 188 | .irq_set_affinity = clipper_set_affinity, |
| 187 | }; | 189 | }; |
| 188 | 190 | ||
| 189 | static void | 191 | static void |
| @@ -268,8 +270,8 @@ init_tsunami_irqs(struct irq_chip * ops, int imin, int imax) | |||
| 268 | { | 270 | { |
| 269 | long i; | 271 | long i; |
| 270 | for (i = imin; i <= imax; ++i) { | 272 | for (i = imin; i <= imax; ++i) { |
| 271 | irq_to_desc(i)->status |= IRQ_LEVEL; | ||
| 272 | set_irq_chip_and_handler(i, ops, handle_level_irq); | 273 | set_irq_chip_and_handler(i, ops, handle_level_irq); |
| 274 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 273 | } | 275 | } |
| 274 | } | 276 | } |
| 275 | 277 | ||
diff --git a/arch/alpha/kernel/sys_eb64p.c b/arch/alpha/kernel/sys_eb64p.c index ae5f29d127b0..402e908ffb3e 100644 --- a/arch/alpha/kernel/sys_eb64p.c +++ b/arch/alpha/kernel/sys_eb64p.c | |||
| @@ -44,22 +44,22 @@ eb64p_update_irq_hw(unsigned int irq, unsigned long mask) | |||
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | static inline void | 46 | static inline void |
| 47 | eb64p_enable_irq(unsigned int irq) | 47 | eb64p_enable_irq(struct irq_data *d) |
| 48 | { | 48 | { |
| 49 | eb64p_update_irq_hw(irq, cached_irq_mask &= ~(1 << irq)); | 49 | eb64p_update_irq_hw(d->irq, cached_irq_mask &= ~(1 << d->irq)); |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | static void | 52 | static void |
| 53 | eb64p_disable_irq(unsigned int irq) | 53 | eb64p_disable_irq(struct irq_data *d) |
| 54 | { | 54 | { |
| 55 | eb64p_update_irq_hw(irq, cached_irq_mask |= 1 << irq); | 55 | eb64p_update_irq_hw(d->irq, cached_irq_mask |= 1 << d->irq); |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | static struct irq_chip eb64p_irq_type = { | 58 | static struct irq_chip eb64p_irq_type = { |
| 59 | .name = "EB64P", | 59 | .name = "EB64P", |
| 60 | .unmask = eb64p_enable_irq, | 60 | .irq_unmask = eb64p_enable_irq, |
| 61 | .mask = eb64p_disable_irq, | 61 | .irq_mask = eb64p_disable_irq, |
| 62 | .mask_ack = eb64p_disable_irq, | 62 | .irq_mask_ack = eb64p_disable_irq, |
| 63 | }; | 63 | }; |
| 64 | 64 | ||
| 65 | static void | 65 | static void |
| @@ -118,9 +118,9 @@ eb64p_init_irq(void) | |||
| 118 | init_i8259a_irqs(); | 118 | init_i8259a_irqs(); |
| 119 | 119 | ||
| 120 | for (i = 16; i < 32; ++i) { | 120 | for (i = 16; i < 32; ++i) { |
| 121 | irq_to_desc(i)->status |= IRQ_LEVEL; | ||
| 122 | set_irq_chip_and_handler(i, &eb64p_irq_type, handle_level_irq); | 121 | set_irq_chip_and_handler(i, &eb64p_irq_type, handle_level_irq); |
| 123 | } | 122 | irq_set_status_flags(i, IRQ_LEVEL); |
| 123 | } | ||
| 124 | 124 | ||
| 125 | common_init_isa_dma(); | 125 | common_init_isa_dma(); |
| 126 | setup_irq(16+5, &isa_cascade_irqaction); | 126 | setup_irq(16+5, &isa_cascade_irqaction); |
diff --git a/arch/alpha/kernel/sys_eiger.c b/arch/alpha/kernel/sys_eiger.c index 1121bc5c6c6c..0b44a54c1522 100644 --- a/arch/alpha/kernel/sys_eiger.c +++ b/arch/alpha/kernel/sys_eiger.c | |||
| @@ -51,16 +51,18 @@ eiger_update_irq_hw(unsigned long irq, unsigned long mask) | |||
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | static inline void | 53 | static inline void |
| 54 | eiger_enable_irq(unsigned int irq) | 54 | eiger_enable_irq(struct irq_data *d) |
| 55 | { | 55 | { |
| 56 | unsigned int irq = d->irq; | ||
| 56 | unsigned long mask; | 57 | unsigned long mask; |
| 57 | mask = (cached_irq_mask[irq >= 64] &= ~(1UL << (irq & 63))); | 58 | mask = (cached_irq_mask[irq >= 64] &= ~(1UL << (irq & 63))); |
| 58 | eiger_update_irq_hw(irq, mask); | 59 | eiger_update_irq_hw(irq, mask); |
| 59 | } | 60 | } |
| 60 | 61 | ||
| 61 | static void | 62 | static void |
| 62 | eiger_disable_irq(unsigned int irq) | 63 | eiger_disable_irq(struct irq_data *d) |
| 63 | { | 64 | { |
| 65 | unsigned int irq = d->irq; | ||
| 64 | unsigned long mask; | 66 | unsigned long mask; |
| 65 | mask = (cached_irq_mask[irq >= 64] |= 1UL << (irq & 63)); | 67 | mask = (cached_irq_mask[irq >= 64] |= 1UL << (irq & 63)); |
| 66 | eiger_update_irq_hw(irq, mask); | 68 | eiger_update_irq_hw(irq, mask); |
| @@ -68,9 +70,9 @@ eiger_disable_irq(unsigned int irq) | |||
| 68 | 70 | ||
| 69 | static struct irq_chip eiger_irq_type = { | 71 | static struct irq_chip eiger_irq_type = { |
| 70 | .name = "EIGER", | 72 | .name = "EIGER", |
| 71 | .unmask = eiger_enable_irq, | 73 | .irq_unmask = eiger_enable_irq, |
| 72 | .mask = eiger_disable_irq, | 74 | .irq_mask = eiger_disable_irq, |
| 73 | .mask_ack = eiger_disable_irq, | 75 | .irq_mask_ack = eiger_disable_irq, |
| 74 | }; | 76 | }; |
| 75 | 77 | ||
| 76 | static void | 78 | static void |
| @@ -136,8 +138,8 @@ eiger_init_irq(void) | |||
| 136 | init_i8259a_irqs(); | 138 | init_i8259a_irqs(); |
| 137 | 139 | ||
| 138 | for (i = 16; i < 128; ++i) { | 140 | for (i = 16; i < 128; ++i) { |
| 139 | irq_to_desc(i)->status |= IRQ_LEVEL; | ||
| 140 | set_irq_chip_and_handler(i, &eiger_irq_type, handle_level_irq); | 141 | set_irq_chip_and_handler(i, &eiger_irq_type, handle_level_irq); |
| 142 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 141 | } | 143 | } |
| 142 | } | 144 | } |
| 143 | 145 | ||
diff --git a/arch/alpha/kernel/sys_jensen.c b/arch/alpha/kernel/sys_jensen.c index 34f55e03d331..00341b75c8b2 100644 --- a/arch/alpha/kernel/sys_jensen.c +++ b/arch/alpha/kernel/sys_jensen.c | |||
| @@ -63,34 +63,34 @@ | |||
| 63 | */ | 63 | */ |
| 64 | 64 | ||
| 65 | static void | 65 | static void |
| 66 | jensen_local_enable(unsigned int irq) | 66 | jensen_local_enable(struct irq_data *d) |
| 67 | { | 67 | { |
| 68 | /* the parport is really hw IRQ 1, silly Jensen. */ | 68 | /* the parport is really hw IRQ 1, silly Jensen. */ |
| 69 | if (irq == 7) | 69 | if (d->irq == 7) |
| 70 | i8259a_enable_irq(1); | 70 | i8259a_enable_irq(d); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | static void | 73 | static void |
| 74 | jensen_local_disable(unsigned int irq) | 74 | jensen_local_disable(struct irq_data *d) |
| 75 | { | 75 | { |
| 76 | /* the parport is really hw IRQ 1, silly Jensen. */ | 76 | /* the parport is really hw IRQ 1, silly Jensen. */ |
| 77 | if (irq == 7) | 77 | if (d->irq == 7) |
| 78 | i8259a_disable_irq(1); | 78 | i8259a_disable_irq(d); |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | static void | 81 | static void |
| 82 | jensen_local_mask_ack(unsigned int irq) | 82 | jensen_local_mask_ack(struct irq_data *d) |
| 83 | { | 83 | { |
| 84 | /* the parport is really hw IRQ 1, silly Jensen. */ | 84 | /* the parport is really hw IRQ 1, silly Jensen. */ |
| 85 | if (irq == 7) | 85 | if (d->irq == 7) |
| 86 | i8259a_mask_and_ack_irq(1); | 86 | i8259a_mask_and_ack_irq(d); |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | static struct irq_chip jensen_local_irq_type = { | 89 | static struct irq_chip jensen_local_irq_type = { |
| 90 | .name = "LOCAL", | 90 | .name = "LOCAL", |
| 91 | .unmask = jensen_local_enable, | 91 | .irq_unmask = jensen_local_enable, |
| 92 | .mask = jensen_local_disable, | 92 | .irq_mask = jensen_local_disable, |
| 93 | .mask_ack = jensen_local_mask_ack, | 93 | .irq_mask_ack = jensen_local_mask_ack, |
| 94 | }; | 94 | }; |
| 95 | 95 | ||
| 96 | static void | 96 | static void |
diff --git a/arch/alpha/kernel/sys_marvel.c b/arch/alpha/kernel/sys_marvel.c index 2bfc9f1b1ddc..e61910734e41 100644 --- a/arch/alpha/kernel/sys_marvel.c +++ b/arch/alpha/kernel/sys_marvel.c | |||
| @@ -104,9 +104,10 @@ io7_get_irq_ctl(unsigned int irq, struct io7 **pio7) | |||
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | static void | 106 | static void |
| 107 | io7_enable_irq(unsigned int irq) | 107 | io7_enable_irq(struct irq_data *d) |
| 108 | { | 108 | { |
| 109 | volatile unsigned long *ctl; | 109 | volatile unsigned long *ctl; |
| 110 | unsigned int irq = d->irq; | ||
| 110 | struct io7 *io7; | 111 | struct io7 *io7; |
| 111 | 112 | ||
| 112 | ctl = io7_get_irq_ctl(irq, &io7); | 113 | ctl = io7_get_irq_ctl(irq, &io7); |
| @@ -115,7 +116,7 @@ io7_enable_irq(unsigned int irq) | |||
| 115 | __func__, irq); | 116 | __func__, irq); |
| 116 | return; | 117 | return; |
| 117 | } | 118 | } |
| 118 | 119 | ||
| 119 | spin_lock(&io7->irq_lock); | 120 | spin_lock(&io7->irq_lock); |
| 120 | *ctl |= 1UL << 24; | 121 | *ctl |= 1UL << 24; |
| 121 | mb(); | 122 | mb(); |
| @@ -124,9 +125,10 @@ io7_enable_irq(unsigned int irq) | |||
| 124 | } | 125 | } |
| 125 | 126 | ||
| 126 | static void | 127 | static void |
| 127 | io7_disable_irq(unsigned int irq) | 128 | io7_disable_irq(struct irq_data *d) |
| 128 | { | 129 | { |
| 129 | volatile unsigned long *ctl; | 130 | volatile unsigned long *ctl; |
| 131 | unsigned int irq = d->irq; | ||
| 130 | struct io7 *io7; | 132 | struct io7 *io7; |
| 131 | 133 | ||
| 132 | ctl = io7_get_irq_ctl(irq, &io7); | 134 | ctl = io7_get_irq_ctl(irq, &io7); |
| @@ -135,7 +137,7 @@ io7_disable_irq(unsigned int irq) | |||
| 135 | __func__, irq); | 137 | __func__, irq); |
| 136 | return; | 138 | return; |
| 137 | } | 139 | } |
| 138 | 140 | ||
| 139 | spin_lock(&io7->irq_lock); | 141 | spin_lock(&io7->irq_lock); |
| 140 | *ctl &= ~(1UL << 24); | 142 | *ctl &= ~(1UL << 24); |
| 141 | mb(); | 143 | mb(); |
| @@ -144,35 +146,29 @@ io7_disable_irq(unsigned int irq) | |||
| 144 | } | 146 | } |
| 145 | 147 | ||
| 146 | static void | 148 | static void |
| 147 | marvel_irq_noop(unsigned int irq) | 149 | marvel_irq_noop(struct irq_data *d) |
| 148 | { | 150 | { |
| 149 | return; | 151 | return; |
| 150 | } | ||
| 151 | |||
| 152 | static unsigned int | ||
| 153 | marvel_irq_noop_return(unsigned int irq) | ||
| 154 | { | ||
| 155 | return 0; | ||
| 156 | } | 152 | } |
| 157 | 153 | ||
| 158 | static struct irq_chip marvel_legacy_irq_type = { | 154 | static struct irq_chip marvel_legacy_irq_type = { |
| 159 | .name = "LEGACY", | 155 | .name = "LEGACY", |
| 160 | .mask = marvel_irq_noop, | 156 | .irq_mask = marvel_irq_noop, |
| 161 | .unmask = marvel_irq_noop, | 157 | .irq_unmask = marvel_irq_noop, |
| 162 | }; | 158 | }; |
| 163 | 159 | ||
| 164 | static struct irq_chip io7_lsi_irq_type = { | 160 | static struct irq_chip io7_lsi_irq_type = { |
| 165 | .name = "LSI", | 161 | .name = "LSI", |
| 166 | .unmask = io7_enable_irq, | 162 | .irq_unmask = io7_enable_irq, |
| 167 | .mask = io7_disable_irq, | 163 | .irq_mask = io7_disable_irq, |
| 168 | .mask_ack = io7_disable_irq, | 164 | .irq_mask_ack = io7_disable_irq, |
| 169 | }; | 165 | }; |
| 170 | 166 | ||
| 171 | static struct irq_chip io7_msi_irq_type = { | 167 | static struct irq_chip io7_msi_irq_type = { |
| 172 | .name = "MSI", | 168 | .name = "MSI", |
| 173 | .unmask = io7_enable_irq, | 169 | .irq_unmask = io7_enable_irq, |
| 174 | .mask = io7_disable_irq, | 170 | .irq_mask = io7_disable_irq, |
| 175 | .ack = marvel_irq_noop, | 171 | .irq_ack = marvel_irq_noop, |
| 176 | }; | 172 | }; |
| 177 | 173 | ||
| 178 | static void | 174 | static void |
| @@ -280,8 +276,8 @@ init_io7_irqs(struct io7 *io7, | |||
| 280 | 276 | ||
| 281 | /* Set up the lsi irqs. */ | 277 | /* Set up the lsi irqs. */ |
| 282 | for (i = 0; i < 128; ++i) { | 278 | for (i = 0; i < 128; ++i) { |
| 283 | irq_to_desc(base + i)->status |= IRQ_LEVEL; | ||
| 284 | set_irq_chip_and_handler(base + i, lsi_ops, handle_level_irq); | 279 | set_irq_chip_and_handler(base + i, lsi_ops, handle_level_irq); |
| 280 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 285 | } | 281 | } |
| 286 | 282 | ||
| 287 | /* Disable the implemented irqs in hardware. */ | 283 | /* Disable the implemented irqs in hardware. */ |
| @@ -294,8 +290,8 @@ init_io7_irqs(struct io7 *io7, | |||
| 294 | 290 | ||
| 295 | /* Set up the msi irqs. */ | 291 | /* Set up the msi irqs. */ |
| 296 | for (i = 128; i < (128 + 512); ++i) { | 292 | for (i = 128; i < (128 + 512); ++i) { |
| 297 | irq_to_desc(base + i)->status |= IRQ_LEVEL; | ||
| 298 | set_irq_chip_and_handler(base + i, msi_ops, handle_level_irq); | 293 | set_irq_chip_and_handler(base + i, msi_ops, handle_level_irq); |
| 294 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 299 | } | 295 | } |
| 300 | 296 | ||
| 301 | for (i = 0; i < 16; ++i) | 297 | for (i = 0; i < 16; ++i) |
diff --git a/arch/alpha/kernel/sys_mikasa.c b/arch/alpha/kernel/sys_mikasa.c index bcc1639e8efb..cf7f43dd3147 100644 --- a/arch/alpha/kernel/sys_mikasa.c +++ b/arch/alpha/kernel/sys_mikasa.c | |||
| @@ -43,22 +43,22 @@ mikasa_update_irq_hw(int mask) | |||
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | static inline void | 45 | static inline void |
| 46 | mikasa_enable_irq(unsigned int irq) | 46 | mikasa_enable_irq(struct irq_data *d) |
| 47 | { | 47 | { |
| 48 | mikasa_update_irq_hw(cached_irq_mask |= 1 << (irq - 16)); | 48 | mikasa_update_irq_hw(cached_irq_mask |= 1 << (d->irq - 16)); |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | static void | 51 | static void |
| 52 | mikasa_disable_irq(unsigned int irq) | 52 | mikasa_disable_irq(struct irq_data *d) |
| 53 | { | 53 | { |
| 54 | mikasa_update_irq_hw(cached_irq_mask &= ~(1 << (irq - 16))); | 54 | mikasa_update_irq_hw(cached_irq_mask &= ~(1 << (d->irq - 16))); |
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | static struct irq_chip mikasa_irq_type = { | 57 | static struct irq_chip mikasa_irq_type = { |
| 58 | .name = "MIKASA", | 58 | .name = "MIKASA", |
| 59 | .unmask = mikasa_enable_irq, | 59 | .irq_unmask = mikasa_enable_irq, |
| 60 | .mask = mikasa_disable_irq, | 60 | .irq_mask = mikasa_disable_irq, |
| 61 | .mask_ack = mikasa_disable_irq, | 61 | .irq_mask_ack = mikasa_disable_irq, |
| 62 | }; | 62 | }; |
| 63 | 63 | ||
| 64 | static void | 64 | static void |
| @@ -98,8 +98,8 @@ mikasa_init_irq(void) | |||
| 98 | mikasa_update_irq_hw(0); | 98 | mikasa_update_irq_hw(0); |
| 99 | 99 | ||
| 100 | for (i = 16; i < 32; ++i) { | 100 | for (i = 16; i < 32; ++i) { |
| 101 | irq_to_desc(i)->status |= IRQ_LEVEL; | ||
| 102 | set_irq_chip_and_handler(i, &mikasa_irq_type, handle_level_irq); | 101 | set_irq_chip_and_handler(i, &mikasa_irq_type, handle_level_irq); |
| 102 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 103 | } | 103 | } |
| 104 | 104 | ||
| 105 | init_i8259a_irqs(); | 105 | init_i8259a_irqs(); |
diff --git a/arch/alpha/kernel/sys_noritake.c b/arch/alpha/kernel/sys_noritake.c index e88f4ae1260e..92bc188e94a9 100644 --- a/arch/alpha/kernel/sys_noritake.c +++ b/arch/alpha/kernel/sys_noritake.c | |||
| @@ -48,22 +48,22 @@ noritake_update_irq_hw(int irq, int mask) | |||
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | static void | 50 | static void |
| 51 | noritake_enable_irq(unsigned int irq) | 51 | noritake_enable_irq(struct irq_data *d) |
| 52 | { | 52 | { |
| 53 | noritake_update_irq_hw(irq, cached_irq_mask |= 1 << (irq - 16)); | 53 | noritake_update_irq_hw(d->irq, cached_irq_mask |= 1 << (d->irq - 16)); |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | static void | 56 | static void |
| 57 | noritake_disable_irq(unsigned int irq) | 57 | noritake_disable_irq(struct irq_data *d) |
| 58 | { | 58 | { |
| 59 | noritake_update_irq_hw(irq, cached_irq_mask &= ~(1 << (irq - 16))); | 59 | noritake_update_irq_hw(d->irq, cached_irq_mask &= ~(1 << (d->irq - 16))); |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | static struct irq_chip noritake_irq_type = { | 62 | static struct irq_chip noritake_irq_type = { |
| 63 | .name = "NORITAKE", | 63 | .name = "NORITAKE", |
| 64 | .unmask = noritake_enable_irq, | 64 | .irq_unmask = noritake_enable_irq, |
| 65 | .mask = noritake_disable_irq, | 65 | .irq_mask = noritake_disable_irq, |
| 66 | .mask_ack = noritake_disable_irq, | 66 | .irq_mask_ack = noritake_disable_irq, |
| 67 | }; | 67 | }; |
| 68 | 68 | ||
| 69 | static void | 69 | static void |
| @@ -127,8 +127,8 @@ noritake_init_irq(void) | |||
| 127 | outw(0, 0x54c); | 127 | outw(0, 0x54c); |
| 128 | 128 | ||
| 129 | for (i = 16; i < 48; ++i) { | 129 | for (i = 16; i < 48; ++i) { |
| 130 | irq_to_desc(i)->status |= IRQ_LEVEL; | ||
| 131 | set_irq_chip_and_handler(i, &noritake_irq_type, handle_level_irq); | 130 | set_irq_chip_and_handler(i, &noritake_irq_type, handle_level_irq); |
| 131 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | init_i8259a_irqs(); | 134 | init_i8259a_irqs(); |
diff --git a/arch/alpha/kernel/sys_rawhide.c b/arch/alpha/kernel/sys_rawhide.c index 6a51364dd1cc..936d4140ed5f 100644 --- a/arch/alpha/kernel/sys_rawhide.c +++ b/arch/alpha/kernel/sys_rawhide.c | |||
| @@ -56,9 +56,10 @@ rawhide_update_irq_hw(int hose, int mask) | |||
| 56 | (((h) < MCPCIA_MAX_HOSES) && (cached_irq_masks[(h)] != 0)) | 56 | (((h) < MCPCIA_MAX_HOSES) && (cached_irq_masks[(h)] != 0)) |
| 57 | 57 | ||
| 58 | static inline void | 58 | static inline void |
| 59 | rawhide_enable_irq(unsigned int irq) | 59 | rawhide_enable_irq(struct irq_data *d) |
| 60 | { | 60 | { |
| 61 | unsigned int mask, hose; | 61 | unsigned int mask, hose; |
| 62 | unsigned int irq = d->irq; | ||
| 62 | 63 | ||
| 63 | irq -= 16; | 64 | irq -= 16; |
| 64 | hose = irq / 24; | 65 | hose = irq / 24; |
| @@ -76,9 +77,10 @@ rawhide_enable_irq(unsigned int irq) | |||
| 76 | } | 77 | } |
| 77 | 78 | ||
| 78 | static void | 79 | static void |
| 79 | rawhide_disable_irq(unsigned int irq) | 80 | rawhide_disable_irq(struct irq_data *d) |
| 80 | { | 81 | { |
| 81 | unsigned int mask, hose; | 82 | unsigned int mask, hose; |
| 83 | unsigned int irq = d->irq; | ||
| 82 | 84 | ||
| 83 | irq -= 16; | 85 | irq -= 16; |
| 84 | hose = irq / 24; | 86 | hose = irq / 24; |
| @@ -96,9 +98,10 @@ rawhide_disable_irq(unsigned int irq) | |||
| 96 | } | 98 | } |
| 97 | 99 | ||
| 98 | static void | 100 | static void |
| 99 | rawhide_mask_and_ack_irq(unsigned int irq) | 101 | rawhide_mask_and_ack_irq(struct irq_data *d) |
| 100 | { | 102 | { |
| 101 | unsigned int mask, mask1, hose; | 103 | unsigned int mask, mask1, hose; |
| 104 | unsigned int irq = d->irq; | ||
| 102 | 105 | ||
| 103 | irq -= 16; | 106 | irq -= 16; |
| 104 | hose = irq / 24; | 107 | hose = irq / 24; |
| @@ -123,9 +126,9 @@ rawhide_mask_and_ack_irq(unsigned int irq) | |||
| 123 | 126 | ||
| 124 | static struct irq_chip rawhide_irq_type = { | 127 | static struct irq_chip rawhide_irq_type = { |
| 125 | .name = "RAWHIDE", | 128 | .name = "RAWHIDE", |
| 126 | .unmask = rawhide_enable_irq, | 129 | .irq_unmask = rawhide_enable_irq, |
| 127 | .mask = rawhide_disable_irq, | 130 | .irq_mask = rawhide_disable_irq, |
| 128 | .mask_ack = rawhide_mask_and_ack_irq, | 131 | .irq_mask_ack = rawhide_mask_and_ack_irq, |
| 129 | }; | 132 | }; |
| 130 | 133 | ||
| 131 | static void | 134 | static void |
| @@ -177,8 +180,8 @@ rawhide_init_irq(void) | |||
| 177 | } | 180 | } |
| 178 | 181 | ||
| 179 | for (i = 16; i < 128; ++i) { | 182 | for (i = 16; i < 128; ++i) { |
| 180 | irq_to_desc(i)->status |= IRQ_LEVEL; | ||
| 181 | set_irq_chip_and_handler(i, &rawhide_irq_type, handle_level_irq); | 183 | set_irq_chip_and_handler(i, &rawhide_irq_type, handle_level_irq); |
| 184 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 182 | } | 185 | } |
| 183 | 186 | ||
| 184 | init_i8259a_irqs(); | 187 | init_i8259a_irqs(); |
diff --git a/arch/alpha/kernel/sys_rx164.c b/arch/alpha/kernel/sys_rx164.c index 89e7e37ec84c..cea22a62913b 100644 --- a/arch/alpha/kernel/sys_rx164.c +++ b/arch/alpha/kernel/sys_rx164.c | |||
| @@ -47,22 +47,22 @@ rx164_update_irq_hw(unsigned long mask) | |||
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | static inline void | 49 | static inline void |
| 50 | rx164_enable_irq(unsigned int irq) | 50 | rx164_enable_irq(struct irq_data *d) |
| 51 | { | 51 | { |
| 52 | rx164_update_irq_hw(cached_irq_mask |= 1UL << (irq - 16)); | 52 | rx164_update_irq_hw(cached_irq_mask |= 1UL << (d->irq - 16)); |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | static void | 55 | static void |
| 56 | rx164_disable_irq(unsigned int irq) | 56 | rx164_disable_irq(struct irq_data *d) |
| 57 | { | 57 | { |
| 58 | rx164_update_irq_hw(cached_irq_mask &= ~(1UL << (irq - 16))); | 58 | rx164_update_irq_hw(cached_irq_mask &= ~(1UL << (d->irq - 16))); |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | static struct irq_chip rx164_irq_type = { | 61 | static struct irq_chip rx164_irq_type = { |
| 62 | .name = "RX164", | 62 | .name = "RX164", |
| 63 | .unmask = rx164_enable_irq, | 63 | .irq_unmask = rx164_enable_irq, |
| 64 | .mask = rx164_disable_irq, | 64 | .irq_mask = rx164_disable_irq, |
| 65 | .mask_ack = rx164_disable_irq, | 65 | .irq_mask_ack = rx164_disable_irq, |
| 66 | }; | 66 | }; |
| 67 | 67 | ||
| 68 | static void | 68 | static void |
| @@ -99,8 +99,8 @@ rx164_init_irq(void) | |||
| 99 | 99 | ||
| 100 | rx164_update_irq_hw(0); | 100 | rx164_update_irq_hw(0); |
| 101 | for (i = 16; i < 40; ++i) { | 101 | for (i = 16; i < 40; ++i) { |
| 102 | irq_to_desc(i)->status |= IRQ_LEVEL; | ||
| 103 | set_irq_chip_and_handler(i, &rx164_irq_type, handle_level_irq); | 102 | set_irq_chip_and_handler(i, &rx164_irq_type, handle_level_irq); |
| 103 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | init_i8259a_irqs(); | 106 | init_i8259a_irqs(); |
diff --git a/arch/alpha/kernel/sys_sable.c b/arch/alpha/kernel/sys_sable.c index 5c4423d1b06c..a349538aabc9 100644 --- a/arch/alpha/kernel/sys_sable.c +++ b/arch/alpha/kernel/sys_sable.c | |||
| @@ -443,11 +443,11 @@ lynx_swizzle(struct pci_dev *dev, u8 *pinp) | |||
| 443 | /* GENERIC irq routines */ | 443 | /* GENERIC irq routines */ |
| 444 | 444 | ||
| 445 | static inline void | 445 | static inline void |
| 446 | sable_lynx_enable_irq(unsigned int irq) | 446 | sable_lynx_enable_irq(struct irq_data *d) |
| 447 | { | 447 | { |
| 448 | unsigned long bit, mask; | 448 | unsigned long bit, mask; |
| 449 | 449 | ||
| 450 | bit = sable_lynx_irq_swizzle->irq_to_mask[irq]; | 450 | bit = sable_lynx_irq_swizzle->irq_to_mask[d->irq]; |
| 451 | spin_lock(&sable_lynx_irq_lock); | 451 | spin_lock(&sable_lynx_irq_lock); |
| 452 | mask = sable_lynx_irq_swizzle->shadow_mask &= ~(1UL << bit); | 452 | mask = sable_lynx_irq_swizzle->shadow_mask &= ~(1UL << bit); |
| 453 | sable_lynx_irq_swizzle->update_irq_hw(bit, mask); | 453 | sable_lynx_irq_swizzle->update_irq_hw(bit, mask); |
| @@ -459,11 +459,11 @@ sable_lynx_enable_irq(unsigned int irq) | |||
| 459 | } | 459 | } |
| 460 | 460 | ||
| 461 | static void | 461 | static void |
| 462 | sable_lynx_disable_irq(unsigned int irq) | 462 | sable_lynx_disable_irq(struct irq_data *d) |
| 463 | { | 463 | { |
| 464 | unsigned long bit, mask; | 464 | unsigned long bit, mask; |
| 465 | 465 | ||
| 466 | bit = sable_lynx_irq_swizzle->irq_to_mask[irq]; | 466 | bit = sable_lynx_irq_swizzle->irq_to_mask[d->irq]; |
| 467 | spin_lock(&sable_lynx_irq_lock); | 467 | spin_lock(&sable_lynx_irq_lock); |
| 468 | mask = sable_lynx_irq_swizzle->shadow_mask |= 1UL << bit; | 468 | mask = sable_lynx_irq_swizzle->shadow_mask |= 1UL << bit; |
| 469 | sable_lynx_irq_swizzle->update_irq_hw(bit, mask); | 469 | sable_lynx_irq_swizzle->update_irq_hw(bit, mask); |
| @@ -475,11 +475,11 @@ sable_lynx_disable_irq(unsigned int irq) | |||
| 475 | } | 475 | } |
| 476 | 476 | ||
| 477 | static void | 477 | static void |
| 478 | sable_lynx_mask_and_ack_irq(unsigned int irq) | 478 | sable_lynx_mask_and_ack_irq(struct irq_data *d) |
| 479 | { | 479 | { |
| 480 | unsigned long bit, mask; | 480 | unsigned long bit, mask; |
| 481 | 481 | ||
| 482 | bit = sable_lynx_irq_swizzle->irq_to_mask[irq]; | 482 | bit = sable_lynx_irq_swizzle->irq_to_mask[d->irq]; |
| 483 | spin_lock(&sable_lynx_irq_lock); | 483 | spin_lock(&sable_lynx_irq_lock); |
| 484 | mask = sable_lynx_irq_swizzle->shadow_mask |= 1UL << bit; | 484 | mask = sable_lynx_irq_swizzle->shadow_mask |= 1UL << bit; |
| 485 | sable_lynx_irq_swizzle->update_irq_hw(bit, mask); | 485 | sable_lynx_irq_swizzle->update_irq_hw(bit, mask); |
| @@ -489,9 +489,9 @@ sable_lynx_mask_and_ack_irq(unsigned int irq) | |||
| 489 | 489 | ||
| 490 | static struct irq_chip sable_lynx_irq_type = { | 490 | static struct irq_chip sable_lynx_irq_type = { |
| 491 | .name = "SABLE/LYNX", | 491 | .name = "SABLE/LYNX", |
| 492 | .unmask = sable_lynx_enable_irq, | 492 | .irq_unmask = sable_lynx_enable_irq, |
| 493 | .mask = sable_lynx_disable_irq, | 493 | .irq_mask = sable_lynx_disable_irq, |
| 494 | .mask_ack = sable_lynx_mask_and_ack_irq, | 494 | .irq_mask_ack = sable_lynx_mask_and_ack_irq, |
| 495 | }; | 495 | }; |
| 496 | 496 | ||
| 497 | static void | 497 | static void |
| @@ -518,9 +518,9 @@ sable_lynx_init_irq(int nr_of_irqs) | |||
| 518 | long i; | 518 | long i; |
| 519 | 519 | ||
| 520 | for (i = 0; i < nr_of_irqs; ++i) { | 520 | for (i = 0; i < nr_of_irqs; ++i) { |
| 521 | irq_to_desc(i)->status |= IRQ_LEVEL; | ||
| 522 | set_irq_chip_and_handler(i, &sable_lynx_irq_type, | 521 | set_irq_chip_and_handler(i, &sable_lynx_irq_type, |
| 523 | handle_level_irq); | 522 | handle_level_irq); |
| 523 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 524 | } | 524 | } |
| 525 | 525 | ||
| 526 | common_init_isa_dma(); | 526 | common_init_isa_dma(); |
diff --git a/arch/alpha/kernel/sys_takara.c b/arch/alpha/kernel/sys_takara.c index f8a1e8a862fb..42a5331f13c4 100644 --- a/arch/alpha/kernel/sys_takara.c +++ b/arch/alpha/kernel/sys_takara.c | |||
| @@ -45,16 +45,18 @@ takara_update_irq_hw(unsigned long irq, unsigned long mask) | |||
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | static inline void | 47 | static inline void |
| 48 | takara_enable_irq(unsigned int irq) | 48 | takara_enable_irq(struct irq_data *d) |
| 49 | { | 49 | { |
| 50 | unsigned int irq = d->irq; | ||
| 50 | unsigned long mask; | 51 | unsigned long mask; |
| 51 | mask = (cached_irq_mask[irq >= 64] &= ~(1UL << (irq & 63))); | 52 | mask = (cached_irq_mask[irq >= 64] &= ~(1UL << (irq & 63))); |
| 52 | takara_update_irq_hw(irq, mask); | 53 | takara_update_irq_hw(irq, mask); |
| 53 | } | 54 | } |
| 54 | 55 | ||
| 55 | static void | 56 | static void |
| 56 | takara_disable_irq(unsigned int irq) | 57 | takara_disable_irq(struct irq_data *d) |
| 57 | { | 58 | { |
| 59 | unsigned int irq = d->irq; | ||
| 58 | unsigned long mask; | 60 | unsigned long mask; |
| 59 | mask = (cached_irq_mask[irq >= 64] |= 1UL << (irq & 63)); | 61 | mask = (cached_irq_mask[irq >= 64] |= 1UL << (irq & 63)); |
| 60 | takara_update_irq_hw(irq, mask); | 62 | takara_update_irq_hw(irq, mask); |
| @@ -62,9 +64,9 @@ takara_disable_irq(unsigned int irq) | |||
| 62 | 64 | ||
| 63 | static struct irq_chip takara_irq_type = { | 65 | static struct irq_chip takara_irq_type = { |
| 64 | .name = "TAKARA", | 66 | .name = "TAKARA", |
| 65 | .unmask = takara_enable_irq, | 67 | .irq_unmask = takara_enable_irq, |
| 66 | .mask = takara_disable_irq, | 68 | .irq_mask = takara_disable_irq, |
| 67 | .mask_ack = takara_disable_irq, | 69 | .irq_mask_ack = takara_disable_irq, |
| 68 | }; | 70 | }; |
| 69 | 71 | ||
| 70 | static void | 72 | static void |
| @@ -136,8 +138,8 @@ takara_init_irq(void) | |||
| 136 | takara_update_irq_hw(i, -1); | 138 | takara_update_irq_hw(i, -1); |
| 137 | 139 | ||
| 138 | for (i = 16; i < 128; ++i) { | 140 | for (i = 16; i < 128; ++i) { |
| 139 | irq_to_desc(i)->status |= IRQ_LEVEL; | ||
| 140 | set_irq_chip_and_handler(i, &takara_irq_type, handle_level_irq); | 141 | set_irq_chip_and_handler(i, &takara_irq_type, handle_level_irq); |
| 142 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 141 | } | 143 | } |
| 142 | 144 | ||
| 143 | common_init_isa_dma(); | 145 | common_init_isa_dma(); |
diff --git a/arch/alpha/kernel/sys_titan.c b/arch/alpha/kernel/sys_titan.c index e02494bf5ef3..f6c108a3d673 100644 --- a/arch/alpha/kernel/sys_titan.c +++ b/arch/alpha/kernel/sys_titan.c | |||
| @@ -112,8 +112,9 @@ titan_update_irq_hw(unsigned long mask) | |||
| 112 | } | 112 | } |
| 113 | 113 | ||
| 114 | static inline void | 114 | static inline void |
| 115 | titan_enable_irq(unsigned int irq) | 115 | titan_enable_irq(struct irq_data *d) |
| 116 | { | 116 | { |
| 117 | unsigned int irq = d->irq; | ||
| 117 | spin_lock(&titan_irq_lock); | 118 | spin_lock(&titan_irq_lock); |
| 118 | titan_cached_irq_mask |= 1UL << (irq - 16); | 119 | titan_cached_irq_mask |= 1UL << (irq - 16); |
| 119 | titan_update_irq_hw(titan_cached_irq_mask); | 120 | titan_update_irq_hw(titan_cached_irq_mask); |
| @@ -121,8 +122,9 @@ titan_enable_irq(unsigned int irq) | |||
| 121 | } | 122 | } |
| 122 | 123 | ||
| 123 | static inline void | 124 | static inline void |
| 124 | titan_disable_irq(unsigned int irq) | 125 | titan_disable_irq(struct irq_data *d) |
| 125 | { | 126 | { |
| 127 | unsigned int irq = d->irq; | ||
| 126 | spin_lock(&titan_irq_lock); | 128 | spin_lock(&titan_irq_lock); |
| 127 | titan_cached_irq_mask &= ~(1UL << (irq - 16)); | 129 | titan_cached_irq_mask &= ~(1UL << (irq - 16)); |
| 128 | titan_update_irq_hw(titan_cached_irq_mask); | 130 | titan_update_irq_hw(titan_cached_irq_mask); |
| @@ -144,7 +146,8 @@ titan_cpu_set_irq_affinity(unsigned int irq, cpumask_t affinity) | |||
| 144 | } | 146 | } |
| 145 | 147 | ||
| 146 | static int | 148 | static int |
| 147 | titan_set_irq_affinity(unsigned int irq, const struct cpumask *affinity) | 149 | titan_set_irq_affinity(struct irq_data *d, const struct cpumask *affinity, |
| 150 | bool force) | ||
| 148 | { | 151 | { |
| 149 | spin_lock(&titan_irq_lock); | 152 | spin_lock(&titan_irq_lock); |
| 150 | titan_cpu_set_irq_affinity(irq - 16, *affinity); | 153 | titan_cpu_set_irq_affinity(irq - 16, *affinity); |
| @@ -175,17 +178,17 @@ init_titan_irqs(struct irq_chip * ops, int imin, int imax) | |||
| 175 | { | 178 | { |
| 176 | long i; | 179 | long i; |
| 177 | for (i = imin; i <= imax; ++i) { | 180 | for (i = imin; i <= imax; ++i) { |
| 178 | irq_to_desc(i)->status |= IRQ_LEVEL; | ||
| 179 | set_irq_chip_and_handler(i, ops, handle_level_irq); | 181 | set_irq_chip_and_handler(i, ops, handle_level_irq); |
| 182 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 180 | } | 183 | } |
| 181 | } | 184 | } |
| 182 | 185 | ||
| 183 | static struct irq_chip titan_irq_type = { | 186 | static struct irq_chip titan_irq_type = { |
| 184 | .name = "TITAN", | 187 | .name = "TITAN", |
| 185 | .unmask = titan_enable_irq, | 188 | .irq_unmask = titan_enable_irq, |
| 186 | .mask = titan_disable_irq, | 189 | .irq_mask = titan_disable_irq, |
| 187 | .mask_ack = titan_disable_irq, | 190 | .irq_mask_ack = titan_disable_irq, |
| 188 | .set_affinity = titan_set_irq_affinity, | 191 | .irq_set_affinity = titan_set_irq_affinity, |
| 189 | }; | 192 | }; |
| 190 | 193 | ||
| 191 | static irqreturn_t | 194 | static irqreturn_t |
diff --git a/arch/alpha/kernel/sys_wildfire.c b/arch/alpha/kernel/sys_wildfire.c index eec52594d410..ca60a387ef0a 100644 --- a/arch/alpha/kernel/sys_wildfire.c +++ b/arch/alpha/kernel/sys_wildfire.c | |||
| @@ -104,10 +104,12 @@ wildfire_init_irq_hw(void) | |||
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | static void | 106 | static void |
| 107 | wildfire_enable_irq(unsigned int irq) | 107 | wildfire_enable_irq(struct irq_data *d) |
| 108 | { | 108 | { |
| 109 | unsigned int irq = d->irq; | ||
| 110 | |||
| 109 | if (irq < 16) | 111 | if (irq < 16) |
| 110 | i8259a_enable_irq(irq); | 112 | i8259a_enable_irq(d); |
| 111 | 113 | ||
| 112 | spin_lock(&wildfire_irq_lock); | 114 | spin_lock(&wildfire_irq_lock); |
| 113 | set_bit(irq, &cached_irq_mask); | 115 | set_bit(irq, &cached_irq_mask); |
| @@ -116,10 +118,12 @@ wildfire_enable_irq(unsigned int irq) | |||
| 116 | } | 118 | } |
| 117 | 119 | ||
| 118 | static void | 120 | static void |
| 119 | wildfire_disable_irq(unsigned int irq) | 121 | wildfire_disable_irq(struct irq_data *d) |
| 120 | { | 122 | { |
| 123 | unsigned int irq = d->irq; | ||
| 124 | |||
| 121 | if (irq < 16) | 125 | if (irq < 16) |
| 122 | i8259a_disable_irq(irq); | 126 | i8259a_disable_irq(d); |
| 123 | 127 | ||
| 124 | spin_lock(&wildfire_irq_lock); | 128 | spin_lock(&wildfire_irq_lock); |
| 125 | clear_bit(irq, &cached_irq_mask); | 129 | clear_bit(irq, &cached_irq_mask); |
| @@ -128,10 +132,12 @@ wildfire_disable_irq(unsigned int irq) | |||
| 128 | } | 132 | } |
| 129 | 133 | ||
| 130 | static void | 134 | static void |
| 131 | wildfire_mask_and_ack_irq(unsigned int irq) | 135 | wildfire_mask_and_ack_irq(struct irq_data *d) |
| 132 | { | 136 | { |
| 137 | unsigned int irq = d->irq; | ||
| 138 | |||
| 133 | if (irq < 16) | 139 | if (irq < 16) |
| 134 | i8259a_mask_and_ack_irq(irq); | 140 | i8259a_mask_and_ack_irq(d); |
| 135 | 141 | ||
| 136 | spin_lock(&wildfire_irq_lock); | 142 | spin_lock(&wildfire_irq_lock); |
| 137 | clear_bit(irq, &cached_irq_mask); | 143 | clear_bit(irq, &cached_irq_mask); |
| @@ -141,9 +147,9 @@ wildfire_mask_and_ack_irq(unsigned int irq) | |||
| 141 | 147 | ||
| 142 | static struct irq_chip wildfire_irq_type = { | 148 | static struct irq_chip wildfire_irq_type = { |
| 143 | .name = "WILDFIRE", | 149 | .name = "WILDFIRE", |
| 144 | .unmask = wildfire_enable_irq, | 150 | .irq_unmask = wildfire_enable_irq, |
| 145 | .mask = wildfire_disable_irq, | 151 | .irq_mask = wildfire_disable_irq, |
| 146 | .mask_ack = wildfire_mask_and_ack_irq, | 152 | .irq_mask_ack = wildfire_mask_and_ack_irq, |
| 147 | }; | 153 | }; |
| 148 | 154 | ||
| 149 | static void __init | 155 | static void __init |
| @@ -177,21 +183,21 @@ wildfire_init_irq_per_pca(int qbbno, int pcano) | |||
| 177 | for (i = 0; i < 16; ++i) { | 183 | for (i = 0; i < 16; ++i) { |
| 178 | if (i == 2) | 184 | if (i == 2) |
| 179 | continue; | 185 | continue; |
| 180 | irq_to_desc(i+irq_bias)->status |= IRQ_LEVEL; | ||
| 181 | set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, | 186 | set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, |
| 182 | handle_level_irq); | 187 | handle_level_irq); |
| 188 | irq_set_status_flags(i + irq_bias, IRQ_LEVEL); | ||
| 183 | } | 189 | } |
| 184 | 190 | ||
| 185 | irq_to_desc(36+irq_bias)->status |= IRQ_LEVEL; | ||
| 186 | set_irq_chip_and_handler(36+irq_bias, &wildfire_irq_type, | 191 | set_irq_chip_and_handler(36+irq_bias, &wildfire_irq_type, |
| 187 | handle_level_irq); | 192 | handle_level_irq); |
| 193 | irq_set_status_flags(36 + irq_bias, IRQ_LEVEL); | ||
| 188 | for (i = 40; i < 64; ++i) { | 194 | for (i = 40; i < 64; ++i) { |
| 189 | irq_to_desc(i+irq_bias)->status |= IRQ_LEVEL; | ||
| 190 | set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, | 195 | set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, |
| 191 | handle_level_irq); | 196 | handle_level_irq); |
| 197 | irq_set_status_flags(i + irq_bias, IRQ_LEVEL); | ||
| 192 | } | 198 | } |
| 193 | 199 | ||
| 194 | setup_irq(32+irq_bias, &isa_enable); | 200 | setup_irq(32+irq_bias, &isa_enable); |
| 195 | } | 201 | } |
| 196 | 202 | ||
| 197 | static void __init | 203 | static void __init |
