|
@@ -31,19 +31,19 @@
|
|
|
|
|
|
static int i8259A_auto_eoi = -1;
|
|
|
DEFINE_RAW_SPINLOCK(i8259A_lock);
|
|
|
-static void disable_8259A_irq(unsigned int irq);
|
|
|
-static void enable_8259A_irq(unsigned int irq);
|
|
|
-static void mask_and_ack_8259A(unsigned int irq);
|
|
|
+static void disable_8259A_irq(struct irq_data *d);
|
|
|
+static void enable_8259A_irq(struct irq_data *d);
|
|
|
+static void mask_and_ack_8259A(struct irq_data *d);
|
|
|
static void init_8259A(int auto_eoi);
|
|
|
|
|
|
static struct irq_chip i8259A_chip = {
|
|
|
- .name = "XT-PIC",
|
|
|
- .mask = disable_8259A_irq,
|
|
|
- .disable = disable_8259A_irq,
|
|
|
- .unmask = enable_8259A_irq,
|
|
|
- .mask_ack = mask_and_ack_8259A,
|
|
|
+ .name = "XT-PIC",
|
|
|
+ .irq_mask = disable_8259A_irq,
|
|
|
+ .irq_disable = disable_8259A_irq,
|
|
|
+ .irq_unmask = enable_8259A_irq,
|
|
|
+ .irq_mask_ack = mask_and_ack_8259A,
|
|
|
#ifdef CONFIG_MIPS_MT_SMTC_IRQAFF
|
|
|
- .set_affinity = plat_set_irq_affinity,
|
|
|
+ .irq_set_affinity = plat_set_irq_affinity,
|
|
|
#endif /* CONFIG_MIPS_MT_SMTC_IRQAFF */
|
|
|
};
|
|
|
|
|
@@ -59,12 +59,11 @@ static unsigned int cached_irq_mask = 0xffff;
|
|
|
#define cached_master_mask (cached_irq_mask)
|
|
|
#define cached_slave_mask (cached_irq_mask >> 8)
|
|
|
|
|
|
-static void disable_8259A_irq(unsigned int irq)
|
|
|
+static void disable_8259A_irq(struct irq_data *d)
|
|
|
{
|
|
|
- unsigned int mask;
|
|
|
+ unsigned int mask, irq = d->irq - I8259A_IRQ_BASE;
|
|
|
unsigned long flags;
|
|
|
|
|
|
- irq -= I8259A_IRQ_BASE;
|
|
|
mask = 1 << irq;
|
|
|
raw_spin_lock_irqsave(&i8259A_lock, flags);
|
|
|
cached_irq_mask |= mask;
|
|
@@ -75,12 +74,11 @@ static void disable_8259A_irq(unsigned int irq)
|
|
|
raw_spin_unlock_irqrestore(&i8259A_lock, flags);
|
|
|
}
|
|
|
|
|
|
-static void enable_8259A_irq(unsigned int irq)
|
|
|
+static void enable_8259A_irq(struct irq_data *d)
|
|
|
{
|
|
|
- unsigned int mask;
|
|
|
+ unsigned int mask, irq = d->irq - I8259A_IRQ_BASE;
|
|
|
unsigned long flags;
|
|
|
|
|
|
- irq -= I8259A_IRQ_BASE;
|
|
|
mask = ~(1 << irq);
|
|
|
raw_spin_lock_irqsave(&i8259A_lock, flags);
|
|
|
cached_irq_mask &= mask;
|
|
@@ -145,12 +143,11 @@ static inline int i8259A_irq_real(unsigned int irq)
|
|
|
* first, _then_ send the EOI, and the order of EOI
|
|
|
* to the two 8259s is important!
|
|
|
*/
|
|
|
-static void mask_and_ack_8259A(unsigned int irq)
|
|
|
+static void mask_and_ack_8259A(struct irq_data *d)
|
|
|
{
|
|
|
- unsigned int irqmask;
|
|
|
+ unsigned int irqmask, irq = d->irq - I8259A_IRQ_BASE;
|
|
|
unsigned long flags;
|
|
|
|
|
|
- irq -= I8259A_IRQ_BASE;
|
|
|
irqmask = 1 << irq;
|
|
|
raw_spin_lock_irqsave(&i8259A_lock, flags);
|
|
|
/*
|
|
@@ -290,9 +287,9 @@ static void init_8259A(int auto_eoi)
|
|
|
* In AEOI mode we just have to mask the interrupt
|
|
|
* when acking.
|
|
|
*/
|
|
|
- i8259A_chip.mask_ack = disable_8259A_irq;
|
|
|
+ i8259A_chip.irq_mask_ack = disable_8259A_irq;
|
|
|
else
|
|
|
- i8259A_chip.mask_ack = mask_and_ack_8259A;
|
|
|
+ i8259A_chip.irq_mask_ack = mask_and_ack_8259A;
|
|
|
|
|
|
udelay(100); /* wait for 8259A to initialize */
|
|
|
|