aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/sni/pcimt.c
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /arch/mips/sni/pcimt.c
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (diff)
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts: litmus/sched_cedf.c
Diffstat (limited to 'arch/mips/sni/pcimt.c')
-rw-r--r--arch/mips/sni/pcimt.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/arch/mips/sni/pcimt.c b/arch/mips/sni/pcimt.c
index 51e62bbaa23b..ed3b3d317358 100644
--- a/arch/mips/sni/pcimt.c
+++ b/arch/mips/sni/pcimt.c
@@ -11,6 +11,7 @@
11 11
12#include <linux/init.h> 12#include <linux/init.h>
13#include <linux/interrupt.h> 13#include <linux/interrupt.h>
14#include <linux/irq.h>
14#include <linux/pci.h> 15#include <linux/pci.h>
15#include <linux/serial_8250.h> 16#include <linux/serial_8250.h>
16 17
@@ -193,33 +194,24 @@ static struct pci_controller sni_controller = {
193 .io_map_base = SNI_PORT_BASE 194 .io_map_base = SNI_PORT_BASE
194}; 195};
195 196
196static void enable_pcimt_irq(unsigned int irq) 197static void enable_pcimt_irq(struct irq_data *d)
197{ 198{
198 unsigned int mask = 1 << (irq - PCIMT_IRQ_INT2); 199 unsigned int mask = 1 << (d->irq - PCIMT_IRQ_INT2);
199 200
200 *(volatile u8 *) PCIMT_IRQSEL |= mask; 201 *(volatile u8 *) PCIMT_IRQSEL |= mask;
201} 202}
202 203
203void disable_pcimt_irq(unsigned int irq) 204void disable_pcimt_irq(struct irq_data *d)
204{ 205{
205 unsigned int mask = ~(1 << (irq - PCIMT_IRQ_INT2)); 206 unsigned int mask = ~(1 << (d->irq - PCIMT_IRQ_INT2));
206 207
207 *(volatile u8 *) PCIMT_IRQSEL &= mask; 208 *(volatile u8 *) PCIMT_IRQSEL &= mask;
208} 209}
209 210
210static void end_pcimt_irq(unsigned int irq)
211{
212 if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
213 enable_pcimt_irq(irq);
214}
215
216static struct irq_chip pcimt_irq_type = { 211static struct irq_chip pcimt_irq_type = {
217 .name = "PCIMT", 212 .name = "PCIMT",
218 .ack = disable_pcimt_irq, 213 .irq_mask = disable_pcimt_irq,
219 .mask = disable_pcimt_irq, 214 .irq_unmask = enable_pcimt_irq,
220 .mask_ack = disable_pcimt_irq,
221 .unmask = enable_pcimt_irq,
222 .end = end_pcimt_irq,
223}; 215};
224 216
225/* 217/*
@@ -304,7 +296,7 @@ void __init sni_pcimt_irq_init(void)
304 mips_cpu_irq_init(); 296 mips_cpu_irq_init();
305 /* Actually we've got more interrupts to handle ... */ 297 /* Actually we've got more interrupts to handle ... */
306 for (i = PCIMT_IRQ_INT2; i <= PCIMT_IRQ_SCSI; i++) 298 for (i = PCIMT_IRQ_INT2; i <= PCIMT_IRQ_SCSI; i++)
307 set_irq_chip_and_handler(i, &pcimt_irq_type, handle_level_irq); 299 irq_set_chip_and_handler(i, &pcimt_irq_type, handle_level_irq);
308 sni_hwint = sni_pcimt_hwint; 300 sni_hwint = sni_pcimt_hwint;
309 change_c0_status(ST0_IM, IE_IRQ1|IE_IRQ3); 301 change_c0_status(ST0_IM, IE_IRQ1|IE_IRQ3);
310} 302}