1 /* 2 * arch/arm/include/asm/mach/pci.h 3 * 4 * Copyright (C) 2000 Russell King 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10 11 struct pci_sys_data; 12 struct pci_bus; 13 14 struct hw_pci { 15 struct list_head buses; 16 int nr_controllers; 17 int (*setup)(int nr, struct pci_sys_data *); 18 struct pci_bus *(*scan)(int nr, struct pci_sys_data *); 19 void (*preinit)(void); 20 void (*postinit)(void); 21 u8 (*swizzle)(struct pci_dev *dev, u8 *pin); 22 int (*map_irq)(struct pci_dev *dev, u8 slot, u8 pin); 23 }; 24 25 /* 26 * Per-controller structure 27 */ 28 struct pci_sys_data { 29 struct list_head node; 30 int busnr; /* primary bus number */ 31 u64 mem_offset; /* bus->cpu memory mapping offset */ 32 unsigned long io_offset; /* bus->cpu IO mapping offset */ 33 struct pci_bus *bus; /* PCI bus */ 34 struct resource *resource[3]; /* Primary PCI bus resources */ 35 /* Bridge swizzling */ 36 u8 (*swizzle)(struct pci_dev *, u8 *); 37 /* IRQ mapping */ 38 int (*map_irq)(struct pci_dev *, u8, u8); 39 struct hw_pci *hw; 40 }; 41 42 /* 43 * This is the standard PCI-PCI bridge swizzling algorithm. 44 */ 45 #define pci_std_swizzle pci_common_swizzle 46 47 /* 48 * Call this with your hw_pci struct to initialise the PCI system. 49 */ 50 void pci_common_init(struct hw_pci *); 51 52 /* 53 * PCI controllers 54 */ 55 extern int iop3xx_pci_setup(int nr, struct pci_sys_data *); 56 extern struct pci_bus *iop3xx_pci_scan_bus(int nr, struct pci_sys_data *); 57 extern void iop3xx_pci_preinit(void); 58 extern void iop3xx_pci_preinit_cond(void); 59 60 extern int dc21285_setup(int nr, struct pci_sys_data *); 61 extern struct pci_bus *dc21285_scan_bus(int nr, struct pci_sys_data *); 62 extern void dc21285_preinit(void); 63 extern void dc21285_postinit(void); 64 65 extern int via82c505_setup(int nr, struct pci_sys_data *); 66 extern struct pci_bus *via82c505_scan_bus(int nr, struct pci_sys_data *); 67 extern void via82c505_init(void *sysdata); 68 69 extern int pci_v3_setup(int nr, struct pci_sys_data *); 70 extern struct pci_bus *pci_v3_scan_bus(int nr, struct pci_sys_data *); 71 extern void pci_v3_preinit(void); 72 extern void pci_v3_postinit(void); 73