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 #ifndef __ASM_MACH_PCI_H 12 #define __ASM_MACH_PCI_H 13 14 struct pci_sys_data; 15 struct pci_ops; 16 struct pci_bus; 17 18 struct hw_pci { 19 #ifdef CONFIG_PCI_DOMAINS 20 int domain; 21 #endif 22 struct pci_ops *ops; 23 int nr_controllers; 24 int (*setup)(int nr, struct pci_sys_data *); 25 struct pci_bus *(*scan)(int nr, struct pci_sys_data *); 26 void (*preinit)(void); 27 void (*postinit)(void); 28 u8 (*swizzle)(struct pci_dev *dev, u8 *pin); 29 int (*map_irq)(const struct pci_dev *dev, u8 slot, u8 pin); 30 }; 31 32 /* 33 * Per-controller structure 34 */ 35 struct pci_sys_data { 36 #ifdef CONFIG_PCI_DOMAINS 37 int domain; 38 #endif 39 struct list_head node; 40 int busnr; /* primary bus number */ 41 u64 mem_offset; /* bus->cpu memory mapping offset */ 42 unsigned long io_offset; /* bus->cpu IO mapping offset */ 43 struct pci_bus *bus; /* PCI bus */ 44 struct list_head resources; /* root bus resources (apertures) */ 45 /* Bridge swizzling */ 46 u8 (*swizzle)(struct pci_dev *, u8 *); 47 /* IRQ mapping */ 48 int (*map_irq)(const struct pci_dev *, u8, u8); 49 void *private_data; /* platform controller private data */ 50 }; 51 52 /* 53 * Call this with your hw_pci struct to initialise the PCI system. 54 */ 55 void pci_common_init(struct hw_pci *); 56 57 /* 58 * PCI controllers 59 */ 60 extern struct pci_ops iop3xx_ops; 61 extern int iop3xx_pci_setup(int nr, struct pci_sys_data *); 62 extern void iop3xx_pci_preinit(void); 63 extern void iop3xx_pci_preinit_cond(void); 64 65 extern struct pci_ops dc21285_ops; 66 extern int dc21285_setup(int nr, struct pci_sys_data *); 67 extern void dc21285_preinit(void); 68 extern void dc21285_postinit(void); 69 70 extern struct pci_ops via82c505_ops; 71 extern int via82c505_setup(int nr, struct pci_sys_data *); 72 extern void via82c505_init(void *sysdata); 73 74 extern struct pci_ops pci_v3_ops; 75 extern int pci_v3_setup(int nr, struct pci_sys_data *); 76 extern void pci_v3_preinit(void); 77 extern void pci_v3_postinit(void); 78 79 #endif /* __ASM_MACH_PCI_H */ 80