|
@@ -155,12 +155,11 @@ static __iomem u8 *rm200_pic_slave;
|
|
|
#define cached_master_mask (rm200_cached_irq_mask)
|
|
|
#define cached_slave_mask (rm200_cached_irq_mask >> 8)
|
|
|
|
|
|
-static void sni_rm200_disable_8259A_irq(unsigned int irq)
|
|
|
+static void sni_rm200_disable_8259A_irq(struct irq_data *d)
|
|
|
{
|
|
|
- unsigned int mask;
|
|
|
+ unsigned int mask, irq = d->irq - RM200_I8259A_IRQ_BASE;
|
|
|
unsigned long flags;
|
|
|
|
|
|
- irq -= RM200_I8259A_IRQ_BASE;
|
|
|
mask = 1 << irq;
|
|
|
raw_spin_lock_irqsave(&sni_rm200_i8259A_lock, flags);
|
|
|
rm200_cached_irq_mask |= mask;
|
|
@@ -171,12 +170,11 @@ static void sni_rm200_disable_8259A_irq(unsigned int irq)
|
|
|
raw_spin_unlock_irqrestore(&sni_rm200_i8259A_lock, flags);
|
|
|
}
|
|
|
|
|
|
-static void sni_rm200_enable_8259A_irq(unsigned int irq)
|
|
|
+static void sni_rm200_enable_8259A_irq(struct irq_data *d)
|
|
|
{
|
|
|
- unsigned int mask;
|
|
|
+ unsigned int mask, irq = d->irq - RM200_I8259A_IRQ_BASE;
|
|
|
unsigned long flags;
|
|
|
|
|
|
- irq -= RM200_I8259A_IRQ_BASE;
|
|
|
mask = ~(1 << irq);
|
|
|
raw_spin_lock_irqsave(&sni_rm200_i8259A_lock, flags);
|
|
|
rm200_cached_irq_mask &= mask;
|
|
@@ -210,12 +208,11 @@ static inline int sni_rm200_i8259A_irq_real(unsigned int irq)
|
|
|
* first, _then_ send the EOI, and the order of EOI
|
|
|
* to the two 8259s is important!
|
|
|
*/
|
|
|
-void sni_rm200_mask_and_ack_8259A(unsigned int irq)
|
|
|
+void sni_rm200_mask_and_ack_8259A(struct irq_data *d)
|
|
|
{
|
|
|
- unsigned int irqmask;
|
|
|
+ unsigned int irqmask, irq = d->irq - RM200_I8259A_IRQ_BASE;
|
|
|
unsigned long flags;
|
|
|
|
|
|
- irq -= RM200_I8259A_IRQ_BASE;
|
|
|
irqmask = 1 << irq;
|
|
|
raw_spin_lock_irqsave(&sni_rm200_i8259A_lock, flags);
|
|
|
/*
|
|
@@ -285,9 +282,9 @@ spurious_8259A_irq:
|
|
|
|
|
|
static struct irq_chip sni_rm200_i8259A_chip = {
|
|
|
.name = "RM200-XT-PIC",
|
|
|
- .mask = sni_rm200_disable_8259A_irq,
|
|
|
- .unmask = sni_rm200_enable_8259A_irq,
|
|
|
- .mask_ack = sni_rm200_mask_and_ack_8259A,
|
|
|
+ .irq_mask = sni_rm200_disable_8259A_irq,
|
|
|
+ .irq_unmask = sni_rm200_enable_8259A_irq,
|
|
|
+ .irq_mask_ack = sni_rm200_mask_and_ack_8259A,
|
|
|
};
|
|
|
|
|
|
/*
|
|
@@ -429,33 +426,24 @@ void __init sni_rm200_i8259_irqs(void)
|
|
|
#define SNI_RM200_INT_START 24
|
|
|
#define SNI_RM200_INT_END 28
|
|
|
|
|
|
-static void enable_rm200_irq(unsigned int irq)
|
|
|
+static void enable_rm200_irq(struct irq_data *d)
|
|
|
{
|
|
|
- unsigned int mask = 1 << (irq - SNI_RM200_INT_START);
|
|
|
+ unsigned int mask = 1 << (d->irq - SNI_RM200_INT_START);
|
|
|
|
|
|
*(volatile u8 *)SNI_RM200_INT_ENA_REG &= ~mask;
|
|
|
}
|
|
|
|
|
|
-void disable_rm200_irq(unsigned int irq)
|
|
|
+void disable_rm200_irq(struct irq_data *d)
|
|
|
{
|
|
|
- unsigned int mask = 1 << (irq - SNI_RM200_INT_START);
|
|
|
+ unsigned int mask = 1 << (d->irq - SNI_RM200_INT_START);
|
|
|
|
|
|
*(volatile u8 *)SNI_RM200_INT_ENA_REG |= mask;
|
|
|
}
|
|
|
|
|
|
-void end_rm200_irq(unsigned int irq)
|
|
|
-{
|
|
|
- if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
|
|
|
- enable_rm200_irq(irq);
|
|
|
-}
|
|
|
-
|
|
|
static struct irq_chip rm200_irq_type = {
|
|
|
.name = "RM200",
|
|
|
- .ack = disable_rm200_irq,
|
|
|
- .mask = disable_rm200_irq,
|
|
|
- .mask_ack = disable_rm200_irq,
|
|
|
- .unmask = enable_rm200_irq,
|
|
|
- .end = end_rm200_irq,
|
|
|
+ .irq_mask = disable_rm200_irq,
|
|
|
+ .irq_unmask = enable_rm200_irq,
|
|
|
};
|
|
|
|
|
|
static void sni_rm200_hwint(void)
|