Loading arch/powerpc/include/asm/device.h +6 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,9 @@ struct dma_map_ops; struct device_node; #ifdef CONFIG_PPC64 struct pci_dn; #endif /* * Arch extensions to struct device. Loading @@ -34,6 +37,9 @@ struct dev_archdata { #ifdef CONFIG_SWIOTLB dma_addr_t max_direct_dma_addr; #endif #ifdef CONFIG_PPC64 struct pci_dn *pci_data; #endif #ifdef CONFIG_EEH struct eeh_dev *edev; #endif Loading arch/powerpc/include/asm/eeh.h +14 −15 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ struct pci_dev; struct pci_bus; struct device_node; struct pci_dn; #ifdef CONFIG_EEH Loading Loading @@ -136,14 +136,14 @@ struct eeh_dev { struct eeh_pe *pe; /* Associated PE */ struct list_head list; /* Form link list in the PE */ struct pci_controller *phb; /* Associated PHB */ struct device_node *dn; /* Associated device node */ struct pci_dn *pdn; /* Associated PCI device node */ struct pci_dev *pdev; /* Associated PCI device */ struct pci_bus *bus; /* PCI bus for partial hotplug */ }; static inline struct device_node *eeh_dev_to_of_node(struct eeh_dev *edev) static inline struct pci_dn *eeh_dev_to_pdn(struct eeh_dev *edev) { return edev ? edev->dn : NULL; return edev ? edev->pdn : NULL; } static inline struct pci_dev *eeh_dev_to_pci_dev(struct eeh_dev *edev) Loading Loading @@ -200,8 +200,7 @@ struct eeh_ops { char *name; int (*init)(void); int (*post_init)(void); void* (*of_probe)(struct device_node *dn, void *flag); int (*dev_probe)(struct pci_dev *dev, void *flag); void* (*probe)(struct pci_dn *pdn, void *data); int (*set_option)(struct eeh_pe *pe, int option); int (*get_pe_addr)(struct eeh_pe *pe); int (*get_state)(struct eeh_pe *pe, int *state); Loading @@ -211,10 +210,10 @@ struct eeh_ops { int (*configure_bridge)(struct eeh_pe *pe); int (*err_inject)(struct eeh_pe *pe, int type, int func, unsigned long addr, unsigned long mask); int (*read_config)(struct device_node *dn, int where, int size, u32 *val); int (*write_config)(struct device_node *dn, int where, int size, u32 val); int (*read_config)(struct pci_dn *pdn, int where, int size, u32 *val); int (*write_config)(struct pci_dn *pdn, int where, int size, u32 val); int (*next_error)(struct eeh_pe **pe); int (*restore_config)(struct device_node *dn); int (*restore_config)(struct pci_dn *pdn); }; extern int eeh_subsystem_flags; Loading Loading @@ -272,7 +271,7 @@ void eeh_pe_restore_bars(struct eeh_pe *pe); const char *eeh_pe_loc_get(struct eeh_pe *pe); struct pci_bus *eeh_pe_bus_get(struct eeh_pe *pe); void *eeh_dev_init(struct device_node *dn, void *data); void *eeh_dev_init(struct pci_dn *pdn, void *data); void eeh_dev_phb_init_dynamic(struct pci_controller *phb); int eeh_init(void); int __init eeh_ops_register(struct eeh_ops *ops); Loading @@ -280,8 +279,8 @@ int __exit eeh_ops_unregister(const char *name); int eeh_check_failure(const volatile void __iomem *token); int eeh_dev_check_failure(struct eeh_dev *edev); void eeh_addr_cache_build(void); void eeh_add_device_early(struct device_node *); void eeh_add_device_tree_early(struct device_node *); void eeh_add_device_early(struct pci_dn *); void eeh_add_device_tree_early(struct pci_dn *); void eeh_add_device_late(struct pci_dev *); void eeh_add_device_tree_late(struct pci_bus *); void eeh_add_sysfs_files(struct pci_bus *); Loading Loading @@ -323,7 +322,7 @@ static inline int eeh_init(void) return 0; } static inline void *eeh_dev_init(struct device_node *dn, void *data) static inline void *eeh_dev_init(struct pci_dn *pdn, void *data) { return NULL; } Loading @@ -339,9 +338,9 @@ static inline int eeh_check_failure(const volatile void __iomem *token) static inline void eeh_addr_cache_build(void) { } static inline void eeh_add_device_early(struct device_node *dn) { } static inline void eeh_add_device_early(struct pci_dn *pdn) { } static inline void eeh_add_device_tree_early(struct device_node *dn) { } static inline void eeh_add_device_tree_early(struct pci_dn *pdn) { } static inline void eeh_add_device_late(struct pci_dev *dev) { } Loading arch/powerpc/include/asm/machdep.h +1 −1 Original line number Diff line number Diff line Loading @@ -125,7 +125,7 @@ struct machdep_calls { unsigned int (*get_irq)(void); /* PCI stuff */ /* Called after scanning the bus, before allocating resources */ /* Called after allocating resources */ void (*pcibios_fixup)(void); int (*pci_probe_mode)(struct pci_bus *); void (*pci_irq_fixup)(struct pci_dev *dev); Loading arch/powerpc/include/asm/pci-bridge.h +15 −13 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ struct pci_controller { #ifdef CONFIG_PPC64 unsigned long buid; struct pci_dn *pci_data; #endif /* CONFIG_PPC64 */ void *private_data; Loading Loading @@ -154,9 +155,15 @@ static inline int isa_vaddr_is_ioport(void __iomem *address) struct iommu_table; struct pci_dn { int flags; int busno; /* pci bus number */ int devfn; /* pci device and function number */ int vendor_id; /* Vendor ID */ int device_id; /* Device ID */ int class_code; /* Device class code */ struct pci_dn *parent; struct pci_controller *phb; /* for pci devices */ struct iommu_table *iommu_table; /* for phb's or bridges */ struct device_node *node; /* back-pointer to the device_node */ Loading @@ -171,13 +178,16 @@ struct pci_dn { #ifdef CONFIG_PPC_POWERNV int pe_number; #endif struct list_head child_list; struct list_head list; }; /* Get the pointer to a device_node's pci_dn */ #define PCI_DN(dn) ((struct pci_dn *) (dn)->data) extern struct pci_dn *pci_get_pdn_by_devfn(struct pci_bus *bus, int devfn); extern struct pci_dn *pci_get_pdn(struct pci_dev *pdev); extern void *update_dn_pci_info(struct device_node *dn, void *data); static inline int pci_device_from_OF_node(struct device_node *np, Loading @@ -191,20 +201,12 @@ static inline int pci_device_from_OF_node(struct device_node *np, } #if defined(CONFIG_EEH) static inline struct eeh_dev *of_node_to_eeh_dev(struct device_node *dn) static inline struct eeh_dev *pdn_to_eeh_dev(struct pci_dn *pdn) { /* * For those OF nodes whose parent isn't PCI bridge, they * don't have PCI_DN actually. So we have to skip them for * any EEH operations. */ if (!dn || !PCI_DN(dn)) return NULL; return PCI_DN(dn)->edev; return pdn ? pdn->edev : NULL; } #else #define of_node_to_eeh_dev(x) (NULL) #define pdn_to_eeh_dev(x) (NULL) #endif /** Find the bus corresponding to the indicated device node */ Loading arch/powerpc/include/asm/ppc-pci.h +5 −0 Original line number Diff line number Diff line Loading @@ -33,9 +33,14 @@ extern struct pci_dev *isa_bridge_pcidev; /* may be NULL if no ISA bus */ /* PCI device_node operations */ struct device_node; struct pci_dn; typedef void *(*traverse_func)(struct device_node *me, void *data); void *traverse_pci_devices(struct device_node *start, traverse_func pre, void *data); void *traverse_pci_dn(struct pci_dn *root, void *(*fn)(struct pci_dn *, void *), void *data); extern void pci_devs_phb_init(void); extern void pci_devs_phb_init_dynamic(struct pci_controller *phb); Loading Loading
arch/powerpc/include/asm/device.h +6 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,9 @@ struct dma_map_ops; struct device_node; #ifdef CONFIG_PPC64 struct pci_dn; #endif /* * Arch extensions to struct device. Loading @@ -34,6 +37,9 @@ struct dev_archdata { #ifdef CONFIG_SWIOTLB dma_addr_t max_direct_dma_addr; #endif #ifdef CONFIG_PPC64 struct pci_dn *pci_data; #endif #ifdef CONFIG_EEH struct eeh_dev *edev; #endif Loading
arch/powerpc/include/asm/eeh.h +14 −15 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ struct pci_dev; struct pci_bus; struct device_node; struct pci_dn; #ifdef CONFIG_EEH Loading Loading @@ -136,14 +136,14 @@ struct eeh_dev { struct eeh_pe *pe; /* Associated PE */ struct list_head list; /* Form link list in the PE */ struct pci_controller *phb; /* Associated PHB */ struct device_node *dn; /* Associated device node */ struct pci_dn *pdn; /* Associated PCI device node */ struct pci_dev *pdev; /* Associated PCI device */ struct pci_bus *bus; /* PCI bus for partial hotplug */ }; static inline struct device_node *eeh_dev_to_of_node(struct eeh_dev *edev) static inline struct pci_dn *eeh_dev_to_pdn(struct eeh_dev *edev) { return edev ? edev->dn : NULL; return edev ? edev->pdn : NULL; } static inline struct pci_dev *eeh_dev_to_pci_dev(struct eeh_dev *edev) Loading Loading @@ -200,8 +200,7 @@ struct eeh_ops { char *name; int (*init)(void); int (*post_init)(void); void* (*of_probe)(struct device_node *dn, void *flag); int (*dev_probe)(struct pci_dev *dev, void *flag); void* (*probe)(struct pci_dn *pdn, void *data); int (*set_option)(struct eeh_pe *pe, int option); int (*get_pe_addr)(struct eeh_pe *pe); int (*get_state)(struct eeh_pe *pe, int *state); Loading @@ -211,10 +210,10 @@ struct eeh_ops { int (*configure_bridge)(struct eeh_pe *pe); int (*err_inject)(struct eeh_pe *pe, int type, int func, unsigned long addr, unsigned long mask); int (*read_config)(struct device_node *dn, int where, int size, u32 *val); int (*write_config)(struct device_node *dn, int where, int size, u32 val); int (*read_config)(struct pci_dn *pdn, int where, int size, u32 *val); int (*write_config)(struct pci_dn *pdn, int where, int size, u32 val); int (*next_error)(struct eeh_pe **pe); int (*restore_config)(struct device_node *dn); int (*restore_config)(struct pci_dn *pdn); }; extern int eeh_subsystem_flags; Loading Loading @@ -272,7 +271,7 @@ void eeh_pe_restore_bars(struct eeh_pe *pe); const char *eeh_pe_loc_get(struct eeh_pe *pe); struct pci_bus *eeh_pe_bus_get(struct eeh_pe *pe); void *eeh_dev_init(struct device_node *dn, void *data); void *eeh_dev_init(struct pci_dn *pdn, void *data); void eeh_dev_phb_init_dynamic(struct pci_controller *phb); int eeh_init(void); int __init eeh_ops_register(struct eeh_ops *ops); Loading @@ -280,8 +279,8 @@ int __exit eeh_ops_unregister(const char *name); int eeh_check_failure(const volatile void __iomem *token); int eeh_dev_check_failure(struct eeh_dev *edev); void eeh_addr_cache_build(void); void eeh_add_device_early(struct device_node *); void eeh_add_device_tree_early(struct device_node *); void eeh_add_device_early(struct pci_dn *); void eeh_add_device_tree_early(struct pci_dn *); void eeh_add_device_late(struct pci_dev *); void eeh_add_device_tree_late(struct pci_bus *); void eeh_add_sysfs_files(struct pci_bus *); Loading Loading @@ -323,7 +322,7 @@ static inline int eeh_init(void) return 0; } static inline void *eeh_dev_init(struct device_node *dn, void *data) static inline void *eeh_dev_init(struct pci_dn *pdn, void *data) { return NULL; } Loading @@ -339,9 +338,9 @@ static inline int eeh_check_failure(const volatile void __iomem *token) static inline void eeh_addr_cache_build(void) { } static inline void eeh_add_device_early(struct device_node *dn) { } static inline void eeh_add_device_early(struct pci_dn *pdn) { } static inline void eeh_add_device_tree_early(struct device_node *dn) { } static inline void eeh_add_device_tree_early(struct pci_dn *pdn) { } static inline void eeh_add_device_late(struct pci_dev *dev) { } Loading
arch/powerpc/include/asm/machdep.h +1 −1 Original line number Diff line number Diff line Loading @@ -125,7 +125,7 @@ struct machdep_calls { unsigned int (*get_irq)(void); /* PCI stuff */ /* Called after scanning the bus, before allocating resources */ /* Called after allocating resources */ void (*pcibios_fixup)(void); int (*pci_probe_mode)(struct pci_bus *); void (*pci_irq_fixup)(struct pci_dev *dev); Loading
arch/powerpc/include/asm/pci-bridge.h +15 −13 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ struct pci_controller { #ifdef CONFIG_PPC64 unsigned long buid; struct pci_dn *pci_data; #endif /* CONFIG_PPC64 */ void *private_data; Loading Loading @@ -154,9 +155,15 @@ static inline int isa_vaddr_is_ioport(void __iomem *address) struct iommu_table; struct pci_dn { int flags; int busno; /* pci bus number */ int devfn; /* pci device and function number */ int vendor_id; /* Vendor ID */ int device_id; /* Device ID */ int class_code; /* Device class code */ struct pci_dn *parent; struct pci_controller *phb; /* for pci devices */ struct iommu_table *iommu_table; /* for phb's or bridges */ struct device_node *node; /* back-pointer to the device_node */ Loading @@ -171,13 +178,16 @@ struct pci_dn { #ifdef CONFIG_PPC_POWERNV int pe_number; #endif struct list_head child_list; struct list_head list; }; /* Get the pointer to a device_node's pci_dn */ #define PCI_DN(dn) ((struct pci_dn *) (dn)->data) extern struct pci_dn *pci_get_pdn_by_devfn(struct pci_bus *bus, int devfn); extern struct pci_dn *pci_get_pdn(struct pci_dev *pdev); extern void *update_dn_pci_info(struct device_node *dn, void *data); static inline int pci_device_from_OF_node(struct device_node *np, Loading @@ -191,20 +201,12 @@ static inline int pci_device_from_OF_node(struct device_node *np, } #if defined(CONFIG_EEH) static inline struct eeh_dev *of_node_to_eeh_dev(struct device_node *dn) static inline struct eeh_dev *pdn_to_eeh_dev(struct pci_dn *pdn) { /* * For those OF nodes whose parent isn't PCI bridge, they * don't have PCI_DN actually. So we have to skip them for * any EEH operations. */ if (!dn || !PCI_DN(dn)) return NULL; return PCI_DN(dn)->edev; return pdn ? pdn->edev : NULL; } #else #define of_node_to_eeh_dev(x) (NULL) #define pdn_to_eeh_dev(x) (NULL) #endif /** Find the bus corresponding to the indicated device node */ Loading
arch/powerpc/include/asm/ppc-pci.h +5 −0 Original line number Diff line number Diff line Loading @@ -33,9 +33,14 @@ extern struct pci_dev *isa_bridge_pcidev; /* may be NULL if no ISA bus */ /* PCI device_node operations */ struct device_node; struct pci_dn; typedef void *(*traverse_func)(struct device_node *me, void *data); void *traverse_pci_devices(struct device_node *start, traverse_func pre, void *data); void *traverse_pci_dn(struct pci_dn *root, void *(*fn)(struct pci_dn *, void *), void *data); extern void pci_devs_phb_init(void); extern void pci_devs_phb_init_dynamic(struct pci_controller *phb); Loading