import of upstream 2.4.34.4 from kernel.org
[linux-2.4.git] / arch / arm / mach-ebsa110 / irq.c
1 /*
2  *  linux/arch/arm/mach-ebsa110/irq.c
3  *
4  *  Copyright (C) 1996-1998 Russell King
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  *  Changelog:
11  *   22-08-1998 RMK     Restructured IRQ routines
12  */
13 #include <linux/init.h>
14 #include <linux/stddef.h>
15 #include <linux/list.h>
16 #include <linux/timer.h>
17
18 #include <asm/mach/irq.h>
19 #include <asm/hardware.h>
20 #include <asm/io.h>
21 #include <asm/irq.h>
22 #include <asm/system.h>
23
24 #include "hardware.h"
25
26 static void ebsa110_mask_irq(unsigned int irq)
27 {
28         __raw_writeb(1 << irq, IRQ_MCLR);
29 }
30
31 static void ebsa110_unmask_irq(unsigned int irq)
32 {
33         __raw_writeb(1 << irq, IRQ_MSET);
34 }
35  
36 void __init ebsa110_init_irq(void)
37 {
38         unsigned long flags;
39         int irq;
40
41         local_irq_save(flags);
42         __raw_writeb(0xff, IRQ_MCLR);
43         __raw_writeb(0x55, IRQ_MSET);
44         __raw_writeb(0x00, IRQ_MSET);
45         if (__raw_readb(IRQ_MASK) != 0x55)
46                 while (1);
47         __raw_writeb(0xff, IRQ_MCLR);   /* clear all interrupt enables */
48         local_irq_restore(flags);
49
50         for (irq = 0; irq < NR_IRQS; irq++) {
51                 irq_desc[irq].valid     = 1;
52                 irq_desc[irq].probe_ok  = 1;
53                 irq_desc[irq].mask_ack  = ebsa110_mask_irq;
54                 irq_desc[irq].mask      = ebsa110_mask_irq;
55                 irq_desc[irq].unmask    = ebsa110_unmask_irq;
56         }
57 }
58