1 | /* |
2 | * This file is subject to the terms and conditions of the GNU General Public |
3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. |
5 | * |
6 | * Copyright (C) 1992 Linus Torvalds |
7 | * Copyright (C) 1994 - 2000 Ralf Baechle |
8 | * Copyright (C) 2006 Thomas Bogendoerfer |
9 | */ |
10 | #include <linux/delay.h> |
11 | #include <linux/init.h> |
12 | #include <linux/interrupt.h> |
13 | #include <linux/irq.h> |
14 | #include <linux/kernel.h> |
15 | |
16 | #include <asm/i8259.h> |
17 | #include <asm/io.h> |
18 | #include <asm/sni.h> |
19 | #include <asm/irq.h> |
20 | #include <asm/irq_cpu.h> |
21 | |
22 | void (*sni_hwint)(void); |
23 | |
24 | asmlinkage void plat_irq_dispatch(void) |
25 | { |
26 | sni_hwint(); |
27 | } |
28 | |
29 | /* ISA irq handler */ |
30 | irqreturn_t sni_isa_irq_handler(int dummy, void *p) |
31 | { |
32 | int irq; |
33 | |
34 | irq = i8259_irq(); |
35 | if (unlikely(irq < 0)) |
36 | return IRQ_NONE; |
37 | |
38 | generic_handle_irq(irq); |
39 | return IRQ_HANDLED; |
40 | } |
41 | |
42 | /* |
43 | * On systems with i8259-style interrupt controllers we assume for |
44 | * driver compatibility reasons interrupts 0 - 15 to be the i8295 |
45 | * interrupts even if the hardware uses a different interrupt numbering. |
46 | */ |
47 | void __init arch_init_irq(void) |
48 | { |
49 | init_i8259_irqs(); /* Integrated i8259 */ |
50 | switch (sni_brd_type) { |
51 | case SNI_BRD_10: |
52 | case SNI_BRD_10NEW: |
53 | case SNI_BRD_TOWER_OASIC: |
54 | case SNI_BRD_MINITOWER: |
55 | sni_a20r_irq_init(); |
56 | break; |
57 | |
58 | case SNI_BRD_PCI_TOWER: |
59 | sni_pcit_irq_init(); |
60 | break; |
61 | |
62 | case SNI_BRD_PCI_TOWER_CPLUS: |
63 | sni_pcit_cplus_irq_init(); |
64 | break; |
65 | |
66 | case SNI_BRD_RM200: |
67 | sni_rm200_irq_init(); |
68 | break; |
69 | |
70 | case SNI_BRD_PCI_MTOWER: |
71 | case SNI_BRD_PCI_DESKTOP: |
72 | case SNI_BRD_PCI_MTOWER_CPLUS: |
73 | sni_pcimt_irq_init(); |
74 | break; |
75 | } |
76 | } |
77 | |