11 #include <linux/kernel.h>
12 #include <linux/types.h>
14 #include <linux/sched.h>
15 #include <linux/pci.h>
17 #include <linux/bitops.h>
19 #include <asm/ptrace.h>
22 #include <asm/mmu_context.h>
24 #include <asm/pgtable.h>
26 #include <asm/tlbflush.h>
35 static unsigned long cached_irq_mask;
38 rx164_update_irq_hw(
unsigned long mask)
40 volatile unsigned int *irq_mask;
51 rx164_update_irq_hw(cached_irq_mask |= 1
UL << (d->
irq - 16));
55 rx164_disable_irq(
struct irq_data *d)
57 rx164_update_irq_hw(cached_irq_mask &= ~(1
UL << (d->
irq - 16)));
60 static struct irq_chip rx164_irq_type = {
62 .irq_unmask = rx164_enable_irq,
63 .irq_mask = rx164_disable_irq,
64 .irq_mask_ack = rx164_disable_irq,
68 rx164_device_interrupt(
unsigned long vector)
71 volatile unsigned int *dirr;
99 rx164_update_irq_hw(0);
100 for (i = 16; i < 40; ++
i) {
149 static char irq_tab_pass1[6][5]
__initdata = {
151 { 16+3, 16+3, 16+8, 16+13, 16+18},
152 { 16+5, 16+5, 16+10, 16+15, 16+20},
153 { 16+4, 16+4, 16+9, 16+14, 16+19},
154 { -1, -1, -1, -1, -1},
155 { 16+2, 16+2, 16+7, 16+12, 16+17},
156 { 16+1, 16+1, 16+6, 16+11, 16+16},
159 static char irq_tab[6][5] __initdata = {
161 { 16+0, 16+0, 16+6, 16+11, 16+16},
162 { 16+1, 16+1, 16+7, 16+12, 16+17},
163 { -1, -1, -1, -1, -1},
164 { 16+2, 16+2, 16+8, 16+13, 16+18},
165 { 16+3, 16+3, 16+9, 16+14, 16+19},
166 { 16+4, 16+4, 16+10, 16+15, 16+5},
169 const long min_idsel = 5, max_idsel = 10, irqs_per_slot = 5;
182 .vector_name =
"RX164",
192 .device_interrupt = rx164_device_interrupt,
195 .init_irq = rx164_init_irq,
199 .pci_map_irq = rx164_map_irq,