11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * linux/arch/arm/mach-footbridge/netwinder-pci.c 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PCI bios-type initialisation for PCI machines 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Bits taken from various places. 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/kernel.h> 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/pci.h> 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/init.h> 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/irq.h> 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mach/pci.h> 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mach-types.h> 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * We now use the slot ID instead of the device identifiers to select 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * which interrupt is routed where. 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 20d5341942d784134f2997b3ff82cd63cf71d1f932Ralf Baechlestatic int __init netwinder_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds switch (slot) { 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds case 0: /* host bridge */ 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return 0; 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds case 9: /* CyberPro */ 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return IRQ_NETWINDER_VGA; 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds case 10: /* DC21143 */ 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return IRQ_NETWINDER_ETHER100; 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds case 12: /* Winbond 553 */ 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return IRQ_ISA_HARDDISK1; 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds case 13: /* Winbond 89C940F */ 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return IRQ_NETWINDER_ETHER10; 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds default: 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds printk(KERN_ERR "PCI: unknown device in slot %s\n", 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pci_name(dev)); 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return 0; 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct hw_pci netwinder_pci __initdata = { 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .map_irq = netwinder_map_irq, 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .nr_controllers = 1, 48c23bfc3835173f5229b2503e3b616001a28affadRussell King .ops = &dc21285_ops, 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .setup = dc21285_setup, 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .preinit = dc21285_preinit, 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .postinit = dc21285_postinit, 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int __init netwinder_pci_init(void) 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (machine_is_netwinder()) 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pci_common_init(&netwinder_pci); 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return 0; 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldssubsys_initcall(netwinder_pci_init); 62