[MIPS] Make I8259A_IRQ_BASE customizable
Move I8259A_IRQ_BASE from asm/i8259.h to asm/mach-generic/irq.h and make it really customizable. And remove I8259_IRQ_BASE declared on some platforms. Currently only NEC_CMBVR4133 is using custom I8259A_IRQ_BASE value. Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:

committed by
Ralf Baechle

parent
97dcb82de6
commit
2fa7937bd8
@@ -21,60 +21,16 @@
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/i8259.h>
|
||||
#include <asm/vr41xx/cmbvr4133.h>
|
||||
|
||||
extern void enable_8259A_irq(unsigned int irq);
|
||||
extern void disable_8259A_irq(unsigned int irq);
|
||||
extern void mask_and_ack_8259A(unsigned int irq);
|
||||
extern void init_8259A(int hoge);
|
||||
|
||||
extern int vr4133_rockhopper;
|
||||
|
||||
static void enable_i8259_irq(unsigned int irq)
|
||||
{
|
||||
enable_8259A_irq(irq - I8259_IRQ_BASE);
|
||||
}
|
||||
|
||||
static void disable_i8259_irq(unsigned int irq)
|
||||
{
|
||||
disable_8259A_irq(irq - I8259_IRQ_BASE);
|
||||
}
|
||||
|
||||
static void ack_i8259_irq(unsigned int irq)
|
||||
{
|
||||
mask_and_ack_8259A(irq - I8259_IRQ_BASE);
|
||||
}
|
||||
|
||||
static struct irq_chip i8259_irq_type = {
|
||||
.typename = "XT-PIC",
|
||||
.ack = ack_i8259_irq,
|
||||
.mask = disable_i8259_irq,
|
||||
.mask_ack = ack_i8259_irq,
|
||||
.unmask = enable_i8259_irq,
|
||||
};
|
||||
|
||||
static int i8259_get_irq_number(int irq)
|
||||
{
|
||||
unsigned long isr;
|
||||
|
||||
isr = inb(0x20);
|
||||
irq = ffz(~isr);
|
||||
if (irq == 2) {
|
||||
isr = inb(0xa0);
|
||||
irq = 8 + ffz(~isr);
|
||||
}
|
||||
|
||||
if (irq < 0 || irq > 15)
|
||||
return -EINVAL;
|
||||
|
||||
return I8259_IRQ_BASE + irq;
|
||||
return i8259_irq();
|
||||
}
|
||||
|
||||
static struct irqaction i8259_slave_cascade = {
|
||||
.handler = &no_action,
|
||||
.name = "cascade",
|
||||
};
|
||||
|
||||
void __init rockhopper_init_irq(void)
|
||||
{
|
||||
int i;
|
||||
@@ -84,11 +40,6 @@ void __init rockhopper_init_irq(void)
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = I8259_IRQ_BASE; i <= I8259_IRQ_LAST; i++)
|
||||
set_irq_chip_and_handler(i, &i8259_irq_type, handle_level_irq);
|
||||
|
||||
setup_irq(I8259_SLAVE_IRQ, &i8259_slave_cascade);
|
||||
|
||||
vr41xx_set_irq_trigger(CMBVR41XX_INTC_PIN, TRIGGER_LEVEL, SIGNAL_THROUGH);
|
||||
vr41xx_set_irq_level(CMBVR41XX_INTC_PIN, LEVEL_HIGH);
|
||||
vr41xx_cascade_irq(CMBVR41XX_INTC_IRQ, i8259_get_irq_number);
|
||||
|
Reference in New Issue
Block a user