11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * linux/arch/arm/mach-footbridge/ebsa285-pci.c
31da177e4SLinus Torvalds  *
41da177e4SLinus Torvalds  * PCI bios-type initialisation for PCI machines
51da177e4SLinus Torvalds  *
61da177e4SLinus Torvalds  * Bits taken from various places.
71da177e4SLinus Torvalds  */
81da177e4SLinus Torvalds #include <linux/kernel.h>
91da177e4SLinus Torvalds #include <linux/pci.h>
101da177e4SLinus Torvalds #include <linux/init.h>
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #include <asm/irq.h>
131da177e4SLinus Torvalds #include <asm/mach/pci.h>
141da177e4SLinus Torvalds #include <asm/mach-types.h>
151da177e4SLinus Torvalds 
161da177e4SLinus Torvalds static int irqmap_ebsa285[] __initdata = { IRQ_IN3, IRQ_IN1, IRQ_IN0, IRQ_PCI };
171da177e4SLinus Torvalds 
181da177e4SLinus Torvalds static int __init ebsa285_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
191da177e4SLinus Torvalds {
201da177e4SLinus Torvalds 	if (dev->vendor == PCI_VENDOR_ID_CONTAQ &&
211da177e4SLinus Torvalds 	    dev->device == PCI_DEVICE_ID_CONTAQ_82C693)
221da177e4SLinus Torvalds 		switch (PCI_FUNC(dev->devfn)) {
231da177e4SLinus Torvalds 			case 1:	return 14;
241da177e4SLinus Torvalds 			case 2:	return 15;
251da177e4SLinus Torvalds 			case 3:	return 12;
261da177e4SLinus Torvalds 		}
271da177e4SLinus Torvalds 
281da177e4SLinus Torvalds 	return irqmap_ebsa285[(slot + pin) & 3];
291da177e4SLinus Torvalds }
301da177e4SLinus Torvalds 
311da177e4SLinus Torvalds static struct hw_pci ebsa285_pci __initdata = {
321da177e4SLinus Torvalds 	.swizzle		= pci_std_swizzle,
331da177e4SLinus Torvalds 	.map_irq		= ebsa285_map_irq,
341da177e4SLinus Torvalds 	.nr_controllers		= 1,
351da177e4SLinus Torvalds 	.setup			= dc21285_setup,
361da177e4SLinus Torvalds 	.scan			= dc21285_scan_bus,
371da177e4SLinus Torvalds 	.preinit		= dc21285_preinit,
381da177e4SLinus Torvalds 	.postinit		= dc21285_postinit,
391da177e4SLinus Torvalds };
401da177e4SLinus Torvalds 
411da177e4SLinus Torvalds static int __init ebsa285_init_pci(void)
421da177e4SLinus Torvalds {
431da177e4SLinus Torvalds 	if (machine_is_ebsa285())
441da177e4SLinus Torvalds 		pci_common_init(&ebsa285_pci);
451da177e4SLinus Torvalds 	return 0;
461da177e4SLinus Torvalds }
471da177e4SLinus Torvalds 
481da177e4SLinus Torvalds subsys_initcall(ebsa285_init_pci);
49