|
@@ -14,6 +14,13 @@
|
|
|
|
|
|
struct device_node;
|
|
struct device_node;
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * PCI controller operations
|
|
|
|
+ */
|
|
|
|
+struct pci_controller_ops {
|
|
|
|
+ void (*dma_dev_setup)(struct pci_dev *dev);
|
|
|
|
+};
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Structure of a PCI controller (host bridge)
|
|
* Structure of a PCI controller (host bridge)
|
|
*/
|
|
*/
|
|
@@ -46,6 +53,7 @@ struct pci_controller {
|
|
resource_size_t isa_mem_phys;
|
|
resource_size_t isa_mem_phys;
|
|
resource_size_t isa_mem_size;
|
|
resource_size_t isa_mem_size;
|
|
|
|
|
|
|
|
+ struct pci_controller_ops controller_ops;
|
|
struct pci_ops *ops;
|
|
struct pci_ops *ops;
|
|
unsigned int __iomem *cfg_addr;
|
|
unsigned int __iomem *cfg_addr;
|
|
void __iomem *cfg_data;
|
|
void __iomem *cfg_data;
|
|
@@ -260,5 +268,18 @@ static inline int pcibios_vaddr_is_ioport(void __iomem *address)
|
|
}
|
|
}
|
|
#endif /* CONFIG_PCI */
|
|
#endif /* CONFIG_PCI */
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Shims to prefer pci_controller version over ppc_md where available.
|
|
|
|
+ */
|
|
|
|
+static inline void pci_dma_dev_setup(struct pci_dev *dev)
|
|
|
|
+{
|
|
|
|
+ struct pci_controller *phb = pci_bus_to_host(dev->bus);
|
|
|
|
+
|
|
|
|
+ if (phb->controller_ops.dma_dev_setup)
|
|
|
|
+ phb->controller_ops.dma_dev_setup(dev);
|
|
|
|
+ else if (ppc_md.pci_dma_dev_setup)
|
|
|
|
+ ppc_md.pci_dma_dev_setup(dev);
|
|
|
|
+}
|
|
|
|
+
|
|
#endif /* __KERNEL__ */
|
|
#endif /* __KERNEL__ */
|
|
#endif /* _ASM_POWERPC_PCI_BRIDGE_H */
|
|
#endif /* _ASM_POWERPC_PCI_BRIDGE_H */
|