1*1da177e4SLinus Torvalds /* 2*1da177e4SLinus Torvalds * linux/arch/alpha/kernel/sys_wildfire.c 3*1da177e4SLinus Torvalds * 4*1da177e4SLinus Torvalds * Wildfire support. 5*1da177e4SLinus Torvalds * 6*1da177e4SLinus Torvalds * Copyright (C) 2000 Andrea Arcangeli <[email protected]> SuSE 7*1da177e4SLinus Torvalds */ 8*1da177e4SLinus Torvalds 9*1da177e4SLinus Torvalds #include <linux/kernel.h> 10*1da177e4SLinus Torvalds #include <linux/types.h> 11*1da177e4SLinus Torvalds #include <linux/mm.h> 12*1da177e4SLinus Torvalds #include <linux/sched.h> 13*1da177e4SLinus Torvalds #include <linux/pci.h> 14*1da177e4SLinus Torvalds #include <linux/init.h> 15*1da177e4SLinus Torvalds #include <linux/bitops.h> 16*1da177e4SLinus Torvalds 17*1da177e4SLinus Torvalds #include <asm/ptrace.h> 18*1da177e4SLinus Torvalds #include <asm/system.h> 19*1da177e4SLinus Torvalds #include <asm/dma.h> 20*1da177e4SLinus Torvalds #include <asm/irq.h> 21*1da177e4SLinus Torvalds #include <asm/mmu_context.h> 22*1da177e4SLinus Torvalds #include <asm/io.h> 23*1da177e4SLinus Torvalds #include <asm/pgtable.h> 24*1da177e4SLinus Torvalds #include <asm/core_wildfire.h> 25*1da177e4SLinus Torvalds #include <asm/hwrpb.h> 26*1da177e4SLinus Torvalds #include <asm/tlbflush.h> 27*1da177e4SLinus Torvalds 28*1da177e4SLinus Torvalds #include "proto.h" 29*1da177e4SLinus Torvalds #include "irq_impl.h" 30*1da177e4SLinus Torvalds #include "pci_impl.h" 31*1da177e4SLinus Torvalds #include "machvec_impl.h" 32*1da177e4SLinus Torvalds 33*1da177e4SLinus Torvalds static unsigned long cached_irq_mask[WILDFIRE_NR_IRQS/(sizeof(long)*8)]; 34*1da177e4SLinus Torvalds 35*1da177e4SLinus Torvalds DEFINE_SPINLOCK(wildfire_irq_lock); 36*1da177e4SLinus Torvalds 37*1da177e4SLinus Torvalds static int doing_init_irq_hw = 0; 38*1da177e4SLinus Torvalds 39*1da177e4SLinus Torvalds static void 40*1da177e4SLinus Torvalds wildfire_update_irq_hw(unsigned int irq) 41*1da177e4SLinus Torvalds { 42*1da177e4SLinus Torvalds int qbbno = (irq >> 8) & (WILDFIRE_MAX_QBB - 1); 43*1da177e4SLinus Torvalds int pcano = (irq >> 6) & (WILDFIRE_PCA_PER_QBB - 1); 44*1da177e4SLinus Torvalds wildfire_pca *pca; 45*1da177e4SLinus Torvalds volatile unsigned long * enable0; 46*1da177e4SLinus Torvalds 47*1da177e4SLinus Torvalds if (!WILDFIRE_PCA_EXISTS(qbbno, pcano)) { 48*1da177e4SLinus Torvalds if (!doing_init_irq_hw) { 49*1da177e4SLinus Torvalds printk(KERN_ERR "wildfire_update_irq_hw:" 50*1da177e4SLinus Torvalds " got irq %d for non-existent PCA %d" 51*1da177e4SLinus Torvalds " on QBB %d.\n", 52*1da177e4SLinus Torvalds irq, pcano, qbbno); 53*1da177e4SLinus Torvalds } 54*1da177e4SLinus Torvalds return; 55*1da177e4SLinus Torvalds } 56*1da177e4SLinus Torvalds 57*1da177e4SLinus Torvalds pca = WILDFIRE_pca(qbbno, pcano); 58*1da177e4SLinus Torvalds enable0 = (unsigned long *) &pca->pca_int[0].enable; /* ??? */ 59*1da177e4SLinus Torvalds 60*1da177e4SLinus Torvalds *enable0 = cached_irq_mask[qbbno * WILDFIRE_PCA_PER_QBB + pcano]; 61*1da177e4SLinus Torvalds mb(); 62*1da177e4SLinus Torvalds *enable0; 63*1da177e4SLinus Torvalds } 64*1da177e4SLinus Torvalds 65*1da177e4SLinus Torvalds static void __init 66*1da177e4SLinus Torvalds wildfire_init_irq_hw(void) 67*1da177e4SLinus Torvalds { 68*1da177e4SLinus Torvalds #if 0 69*1da177e4SLinus Torvalds register wildfire_pca * pca = WILDFIRE_pca(0, 0); 70*1da177e4SLinus Torvalds volatile unsigned long * enable0, * enable1, * enable2, *enable3; 71*1da177e4SLinus Torvalds volatile unsigned long * target0, * target1, * target2, *target3; 72*1da177e4SLinus Torvalds 73*1da177e4SLinus Torvalds enable0 = (unsigned long *) &pca->pca_int[0].enable; 74*1da177e4SLinus Torvalds enable1 = (unsigned long *) &pca->pca_int[1].enable; 75*1da177e4SLinus Torvalds enable2 = (unsigned long *) &pca->pca_int[2].enable; 76*1da177e4SLinus Torvalds enable3 = (unsigned long *) &pca->pca_int[3].enable; 77*1da177e4SLinus Torvalds 78*1da177e4SLinus Torvalds target0 = (unsigned long *) &pca->pca_int[0].target; 79*1da177e4SLinus Torvalds target1 = (unsigned long *) &pca->pca_int[1].target; 80*1da177e4SLinus Torvalds target2 = (unsigned long *) &pca->pca_int[2].target; 81*1da177e4SLinus Torvalds target3 = (unsigned long *) &pca->pca_int[3].target; 82*1da177e4SLinus Torvalds 83*1da177e4SLinus Torvalds *enable0 = *enable1 = *enable2 = *enable3 = 0; 84*1da177e4SLinus Torvalds 85*1da177e4SLinus Torvalds *target0 = (1UL<<8) | WILDFIRE_QBB(0); 86*1da177e4SLinus Torvalds *target1 = *target2 = *target3 = 0; 87*1da177e4SLinus Torvalds 88*1da177e4SLinus Torvalds mb(); 89*1da177e4SLinus Torvalds 90*1da177e4SLinus Torvalds *enable0; *enable1; *enable2; *enable3; 91*1da177e4SLinus Torvalds *target0; *target1; *target2; *target3; 92*1da177e4SLinus Torvalds 93*1da177e4SLinus Torvalds #else 94*1da177e4SLinus Torvalds int i; 95*1da177e4SLinus Torvalds 96*1da177e4SLinus Torvalds doing_init_irq_hw = 1; 97*1da177e4SLinus Torvalds 98*1da177e4SLinus Torvalds /* Need to update only once for every possible PCA. */ 99*1da177e4SLinus Torvalds for (i = 0; i < WILDFIRE_NR_IRQS; i+=WILDFIRE_IRQ_PER_PCA) 100*1da177e4SLinus Torvalds wildfire_update_irq_hw(i); 101*1da177e4SLinus Torvalds 102*1da177e4SLinus Torvalds doing_init_irq_hw = 0; 103*1da177e4SLinus Torvalds #endif 104*1da177e4SLinus Torvalds } 105*1da177e4SLinus Torvalds 106*1da177e4SLinus Torvalds static void 107*1da177e4SLinus Torvalds wildfire_enable_irq(unsigned int irq) 108*1da177e4SLinus Torvalds { 109*1da177e4SLinus Torvalds if (irq < 16) 110*1da177e4SLinus Torvalds i8259a_enable_irq(irq); 111*1da177e4SLinus Torvalds 112*1da177e4SLinus Torvalds spin_lock(&wildfire_irq_lock); 113*1da177e4SLinus Torvalds set_bit(irq, &cached_irq_mask); 114*1da177e4SLinus Torvalds wildfire_update_irq_hw(irq); 115*1da177e4SLinus Torvalds spin_unlock(&wildfire_irq_lock); 116*1da177e4SLinus Torvalds } 117*1da177e4SLinus Torvalds 118*1da177e4SLinus Torvalds static void 119*1da177e4SLinus Torvalds wildfire_disable_irq(unsigned int irq) 120*1da177e4SLinus Torvalds { 121*1da177e4SLinus Torvalds if (irq < 16) 122*1da177e4SLinus Torvalds i8259a_disable_irq(irq); 123*1da177e4SLinus Torvalds 124*1da177e4SLinus Torvalds spin_lock(&wildfire_irq_lock); 125*1da177e4SLinus Torvalds clear_bit(irq, &cached_irq_mask); 126*1da177e4SLinus Torvalds wildfire_update_irq_hw(irq); 127*1da177e4SLinus Torvalds spin_unlock(&wildfire_irq_lock); 128*1da177e4SLinus Torvalds } 129*1da177e4SLinus Torvalds 130*1da177e4SLinus Torvalds static void 131*1da177e4SLinus Torvalds wildfire_mask_and_ack_irq(unsigned int irq) 132*1da177e4SLinus Torvalds { 133*1da177e4SLinus Torvalds if (irq < 16) 134*1da177e4SLinus Torvalds i8259a_mask_and_ack_irq(irq); 135*1da177e4SLinus Torvalds 136*1da177e4SLinus Torvalds spin_lock(&wildfire_irq_lock); 137*1da177e4SLinus Torvalds clear_bit(irq, &cached_irq_mask); 138*1da177e4SLinus Torvalds wildfire_update_irq_hw(irq); 139*1da177e4SLinus Torvalds spin_unlock(&wildfire_irq_lock); 140*1da177e4SLinus Torvalds } 141*1da177e4SLinus Torvalds 142*1da177e4SLinus Torvalds static unsigned int 143*1da177e4SLinus Torvalds wildfire_startup_irq(unsigned int irq) 144*1da177e4SLinus Torvalds { 145*1da177e4SLinus Torvalds wildfire_enable_irq(irq); 146*1da177e4SLinus Torvalds return 0; /* never anything pending */ 147*1da177e4SLinus Torvalds } 148*1da177e4SLinus Torvalds 149*1da177e4SLinus Torvalds static void 150*1da177e4SLinus Torvalds wildfire_end_irq(unsigned int irq) 151*1da177e4SLinus Torvalds { 152*1da177e4SLinus Torvalds #if 0 153*1da177e4SLinus Torvalds if (!irq_desc[irq].action) 154*1da177e4SLinus Torvalds printk("got irq %d\n", irq); 155*1da177e4SLinus Torvalds #endif 156*1da177e4SLinus Torvalds if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) 157*1da177e4SLinus Torvalds wildfire_enable_irq(irq); 158*1da177e4SLinus Torvalds } 159*1da177e4SLinus Torvalds 160*1da177e4SLinus Torvalds static struct hw_interrupt_type wildfire_irq_type = { 161*1da177e4SLinus Torvalds .typename = "WILDFIRE", 162*1da177e4SLinus Torvalds .startup = wildfire_startup_irq, 163*1da177e4SLinus Torvalds .shutdown = wildfire_disable_irq, 164*1da177e4SLinus Torvalds .enable = wildfire_enable_irq, 165*1da177e4SLinus Torvalds .disable = wildfire_disable_irq, 166*1da177e4SLinus Torvalds .ack = wildfire_mask_and_ack_irq, 167*1da177e4SLinus Torvalds .end = wildfire_end_irq, 168*1da177e4SLinus Torvalds }; 169*1da177e4SLinus Torvalds 170*1da177e4SLinus Torvalds static void __init 171*1da177e4SLinus Torvalds wildfire_init_irq_per_pca(int qbbno, int pcano) 172*1da177e4SLinus Torvalds { 173*1da177e4SLinus Torvalds int i, irq_bias; 174*1da177e4SLinus Torvalds unsigned long io_bias; 175*1da177e4SLinus Torvalds static struct irqaction isa_enable = { 176*1da177e4SLinus Torvalds .handler = no_action, 177*1da177e4SLinus Torvalds .name = "isa_enable", 178*1da177e4SLinus Torvalds }; 179*1da177e4SLinus Torvalds 180*1da177e4SLinus Torvalds irq_bias = qbbno * (WILDFIRE_PCA_PER_QBB * WILDFIRE_IRQ_PER_PCA) 181*1da177e4SLinus Torvalds + pcano * WILDFIRE_IRQ_PER_PCA; 182*1da177e4SLinus Torvalds 183*1da177e4SLinus Torvalds /* Only need the following for first PCI bus per PCA. */ 184*1da177e4SLinus Torvalds io_bias = WILDFIRE_IO(qbbno, pcano<<1) - WILDFIRE_IO_BIAS; 185*1da177e4SLinus Torvalds 186*1da177e4SLinus Torvalds #if 0 187*1da177e4SLinus Torvalds outb(0, DMA1_RESET_REG + io_bias); 188*1da177e4SLinus Torvalds outb(0, DMA2_RESET_REG + io_bias); 189*1da177e4SLinus Torvalds outb(DMA_MODE_CASCADE, DMA2_MODE_REG + io_bias); 190*1da177e4SLinus Torvalds outb(0, DMA2_MASK_REG + io_bias); 191*1da177e4SLinus Torvalds #endif 192*1da177e4SLinus Torvalds 193*1da177e4SLinus Torvalds #if 0 194*1da177e4SLinus Torvalds /* ??? Not sure how to do this, yet... */ 195*1da177e4SLinus Torvalds init_i8259a_irqs(); /* ??? */ 196*1da177e4SLinus Torvalds #endif 197*1da177e4SLinus Torvalds 198*1da177e4SLinus Torvalds for (i = 0; i < 16; ++i) { 199*1da177e4SLinus Torvalds if (i == 2) 200*1da177e4SLinus Torvalds continue; 201*1da177e4SLinus Torvalds irq_desc[i+irq_bias].status = IRQ_DISABLED | IRQ_LEVEL; 202*1da177e4SLinus Torvalds irq_desc[i+irq_bias].handler = &wildfire_irq_type; 203*1da177e4SLinus Torvalds } 204*1da177e4SLinus Torvalds 205*1da177e4SLinus Torvalds irq_desc[36+irq_bias].status = IRQ_DISABLED | IRQ_LEVEL; 206*1da177e4SLinus Torvalds irq_desc[36+irq_bias].handler = &wildfire_irq_type; 207*1da177e4SLinus Torvalds for (i = 40; i < 64; ++i) { 208*1da177e4SLinus Torvalds irq_desc[i+irq_bias].status = IRQ_DISABLED | IRQ_LEVEL; 209*1da177e4SLinus Torvalds irq_desc[i+irq_bias].handler = &wildfire_irq_type; 210*1da177e4SLinus Torvalds } 211*1da177e4SLinus Torvalds 212*1da177e4SLinus Torvalds setup_irq(32+irq_bias, &isa_enable); 213*1da177e4SLinus Torvalds } 214*1da177e4SLinus Torvalds 215*1da177e4SLinus Torvalds static void __init 216*1da177e4SLinus Torvalds wildfire_init_irq(void) 217*1da177e4SLinus Torvalds { 218*1da177e4SLinus Torvalds int qbbno, pcano; 219*1da177e4SLinus Torvalds 220*1da177e4SLinus Torvalds #if 1 221*1da177e4SLinus Torvalds wildfire_init_irq_hw(); 222*1da177e4SLinus Torvalds init_i8259a_irqs(); 223*1da177e4SLinus Torvalds #endif 224*1da177e4SLinus Torvalds 225*1da177e4SLinus Torvalds for (qbbno = 0; qbbno < WILDFIRE_MAX_QBB; qbbno++) { 226*1da177e4SLinus Torvalds if (WILDFIRE_QBB_EXISTS(qbbno)) { 227*1da177e4SLinus Torvalds for (pcano = 0; pcano < WILDFIRE_PCA_PER_QBB; pcano++) { 228*1da177e4SLinus Torvalds if (WILDFIRE_PCA_EXISTS(qbbno, pcano)) { 229*1da177e4SLinus Torvalds wildfire_init_irq_per_pca(qbbno, pcano); 230*1da177e4SLinus Torvalds } 231*1da177e4SLinus Torvalds } 232*1da177e4SLinus Torvalds } 233*1da177e4SLinus Torvalds } 234*1da177e4SLinus Torvalds } 235*1da177e4SLinus Torvalds 236*1da177e4SLinus Torvalds static void 237*1da177e4SLinus Torvalds wildfire_device_interrupt(unsigned long vector, struct pt_regs * regs) 238*1da177e4SLinus Torvalds { 239*1da177e4SLinus Torvalds int irq; 240*1da177e4SLinus Torvalds 241*1da177e4SLinus Torvalds irq = (vector - 0x800) >> 4; 242*1da177e4SLinus Torvalds 243*1da177e4SLinus Torvalds /* 244*1da177e4SLinus Torvalds * bits 10-8: source QBB ID 245*1da177e4SLinus Torvalds * bits 7-6: PCA 246*1da177e4SLinus Torvalds * bits 5-0: irq in PCA 247*1da177e4SLinus Torvalds */ 248*1da177e4SLinus Torvalds 249*1da177e4SLinus Torvalds handle_irq(irq, regs); 250*1da177e4SLinus Torvalds return; 251*1da177e4SLinus Torvalds } 252*1da177e4SLinus Torvalds 253*1da177e4SLinus Torvalds /* 254*1da177e4SLinus Torvalds * PCI Fixup configuration. 255*1da177e4SLinus Torvalds * 256*1da177e4SLinus Torvalds * Summary per PCA (2 PCI or HIPPI buses): 257*1da177e4SLinus Torvalds * 258*1da177e4SLinus Torvalds * Bit Meaning 259*1da177e4SLinus Torvalds * 0-15 ISA 260*1da177e4SLinus Torvalds * 261*1da177e4SLinus Torvalds *32 ISA summary 262*1da177e4SLinus Torvalds *33 SMI 263*1da177e4SLinus Torvalds *34 NMI 264*1da177e4SLinus Torvalds *36 builtin QLogic SCSI (or slot 0 if no IO module) 265*1da177e4SLinus Torvalds *40 Interrupt Line A from slot 2 PCI0 266*1da177e4SLinus Torvalds *41 Interrupt Line B from slot 2 PCI0 267*1da177e4SLinus Torvalds *42 Interrupt Line C from slot 2 PCI0 268*1da177e4SLinus Torvalds *43 Interrupt Line D from slot 2 PCI0 269*1da177e4SLinus Torvalds *44 Interrupt Line A from slot 3 PCI0 270*1da177e4SLinus Torvalds *45 Interrupt Line B from slot 3 PCI0 271*1da177e4SLinus Torvalds *46 Interrupt Line C from slot 3 PCI0 272*1da177e4SLinus Torvalds *47 Interrupt Line D from slot 3 PCI0 273*1da177e4SLinus Torvalds * 274*1da177e4SLinus Torvalds *48 Interrupt Line A from slot 4 PCI1 275*1da177e4SLinus Torvalds *49 Interrupt Line B from slot 4 PCI1 276*1da177e4SLinus Torvalds *50 Interrupt Line C from slot 4 PCI1 277*1da177e4SLinus Torvalds *51 Interrupt Line D from slot 4 PCI1 278*1da177e4SLinus Torvalds *52 Interrupt Line A from slot 5 PCI1 279*1da177e4SLinus Torvalds *53 Interrupt Line B from slot 5 PCI1 280*1da177e4SLinus Torvalds *54 Interrupt Line C from slot 5 PCI1 281*1da177e4SLinus Torvalds *55 Interrupt Line D from slot 5 PCI1 282*1da177e4SLinus Torvalds *56 Interrupt Line A from slot 6 PCI1 283*1da177e4SLinus Torvalds *57 Interrupt Line B from slot 6 PCI1 284*1da177e4SLinus Torvalds *58 Interrupt Line C from slot 6 PCI1 285*1da177e4SLinus Torvalds *50 Interrupt Line D from slot 6 PCI1 286*1da177e4SLinus Torvalds *60 Interrupt Line A from slot 7 PCI1 287*1da177e4SLinus Torvalds *61 Interrupt Line B from slot 7 PCI1 288*1da177e4SLinus Torvalds *62 Interrupt Line C from slot 7 PCI1 289*1da177e4SLinus Torvalds *63 Interrupt Line D from slot 7 PCI1 290*1da177e4SLinus Torvalds * 291*1da177e4SLinus Torvalds * 292*1da177e4SLinus Torvalds * IdSel 293*1da177e4SLinus Torvalds * 0 Cypress Bridge I/O (ISA summary interrupt) 294*1da177e4SLinus Torvalds * 1 64 bit PCI 0 option slot 1 (SCSI QLogic builtin) 295*1da177e4SLinus Torvalds * 2 64 bit PCI 0 option slot 2 296*1da177e4SLinus Torvalds * 3 64 bit PCI 0 option slot 3 297*1da177e4SLinus Torvalds * 4 64 bit PCI 1 option slot 4 298*1da177e4SLinus Torvalds * 5 64 bit PCI 1 option slot 5 299*1da177e4SLinus Torvalds * 6 64 bit PCI 1 option slot 6 300*1da177e4SLinus Torvalds * 7 64 bit PCI 1 option slot 7 301*1da177e4SLinus Torvalds */ 302*1da177e4SLinus Torvalds 303*1da177e4SLinus Torvalds static int __init 304*1da177e4SLinus Torvalds wildfire_map_irq(struct pci_dev *dev, u8 slot, u8 pin) 305*1da177e4SLinus Torvalds { 306*1da177e4SLinus Torvalds static char irq_tab[8][5] __initdata = { 307*1da177e4SLinus Torvalds /*INT INTA INTB INTC INTD */ 308*1da177e4SLinus Torvalds { -1, -1, -1, -1, -1}, /* IdSel 0 ISA Bridge */ 309*1da177e4SLinus Torvalds { 36, 36, 36+1, 36+2, 36+3}, /* IdSel 1 SCSI builtin */ 310*1da177e4SLinus Torvalds { 40, 40, 40+1, 40+2, 40+3}, /* IdSel 2 PCI 0 slot 2 */ 311*1da177e4SLinus Torvalds { 44, 44, 44+1, 44+2, 44+3}, /* IdSel 3 PCI 0 slot 3 */ 312*1da177e4SLinus Torvalds { 48, 48, 48+1, 48+2, 48+3}, /* IdSel 4 PCI 1 slot 4 */ 313*1da177e4SLinus Torvalds { 52, 52, 52+1, 52+2, 52+3}, /* IdSel 5 PCI 1 slot 5 */ 314*1da177e4SLinus Torvalds { 56, 56, 56+1, 56+2, 56+3}, /* IdSel 6 PCI 1 slot 6 */ 315*1da177e4SLinus Torvalds { 60, 60, 60+1, 60+2, 60+3}, /* IdSel 7 PCI 1 slot 7 */ 316*1da177e4SLinus Torvalds }; 317*1da177e4SLinus Torvalds long min_idsel = 0, max_idsel = 7, irqs_per_slot = 5; 318*1da177e4SLinus Torvalds 319*1da177e4SLinus Torvalds struct pci_controller *hose = dev->sysdata; 320*1da177e4SLinus Torvalds int irq = COMMON_TABLE_LOOKUP; 321*1da177e4SLinus Torvalds 322*1da177e4SLinus Torvalds if (irq > 0) { 323*1da177e4SLinus Torvalds int qbbno = hose->index >> 3; 324*1da177e4SLinus Torvalds int pcano = (hose->index >> 1) & 3; 325*1da177e4SLinus Torvalds irq += (qbbno << 8) + (pcano << 6); 326*1da177e4SLinus Torvalds } 327*1da177e4SLinus Torvalds return irq; 328*1da177e4SLinus Torvalds } 329*1da177e4SLinus Torvalds 330*1da177e4SLinus Torvalds 331*1da177e4SLinus Torvalds /* 332*1da177e4SLinus Torvalds * The System Vectors 333*1da177e4SLinus Torvalds */ 334*1da177e4SLinus Torvalds 335*1da177e4SLinus Torvalds struct alpha_machine_vector wildfire_mv __initmv = { 336*1da177e4SLinus Torvalds .vector_name = "WILDFIRE", 337*1da177e4SLinus Torvalds DO_EV6_MMU, 338*1da177e4SLinus Torvalds DO_DEFAULT_RTC, 339*1da177e4SLinus Torvalds DO_WILDFIRE_IO, 340*1da177e4SLinus Torvalds .machine_check = wildfire_machine_check, 341*1da177e4SLinus Torvalds .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, 342*1da177e4SLinus Torvalds .min_io_address = DEFAULT_IO_BASE, 343*1da177e4SLinus Torvalds .min_mem_address = DEFAULT_MEM_BASE, 344*1da177e4SLinus Torvalds 345*1da177e4SLinus Torvalds .nr_irqs = WILDFIRE_NR_IRQS, 346*1da177e4SLinus Torvalds .device_interrupt = wildfire_device_interrupt, 347*1da177e4SLinus Torvalds 348*1da177e4SLinus Torvalds .init_arch = wildfire_init_arch, 349*1da177e4SLinus Torvalds .init_irq = wildfire_init_irq, 350*1da177e4SLinus Torvalds .init_rtc = common_init_rtc, 351*1da177e4SLinus Torvalds .init_pci = common_init_pci, 352*1da177e4SLinus Torvalds .kill_arch = wildfire_kill_arch, 353*1da177e4SLinus Torvalds .pci_map_irq = wildfire_map_irq, 354*1da177e4SLinus Torvalds .pci_swizzle = common_swizzle, 355*1da177e4SLinus Torvalds 356*1da177e4SLinus Torvalds .pa_to_nid = wildfire_pa_to_nid, 357*1da177e4SLinus Torvalds .cpuid_to_nid = wildfire_cpuid_to_nid, 358*1da177e4SLinus Torvalds .node_mem_start = wildfire_node_mem_start, 359*1da177e4SLinus Torvalds .node_mem_size = wildfire_node_mem_size, 360*1da177e4SLinus Torvalds }; 361*1da177e4SLinus Torvalds ALIAS_MV(wildfire) 362