161305a96SBenjamin Herrenschmidt #ifndef __POWERNV_PCI_H 261305a96SBenjamin Herrenschmidt #define __POWERNV_PCI_H 361305a96SBenjamin Herrenschmidt 461305a96SBenjamin Herrenschmidt struct pci_dn; 561305a96SBenjamin Herrenschmidt 661305a96SBenjamin Herrenschmidt enum pnv_phb_type { 761305a96SBenjamin Herrenschmidt PNV_PHB_P5IOC2, 861305a96SBenjamin Herrenschmidt PNV_PHB_IODA1, 961305a96SBenjamin Herrenschmidt PNV_PHB_IODA2, 1061305a96SBenjamin Herrenschmidt }; 1161305a96SBenjamin Herrenschmidt 1261305a96SBenjamin Herrenschmidt struct pnv_phb { 1361305a96SBenjamin Herrenschmidt struct pci_controller *hose; 1461305a96SBenjamin Herrenschmidt enum pnv_phb_type type; 1561305a96SBenjamin Herrenschmidt u64 opal_id; 1661305a96SBenjamin Herrenschmidt void __iomem *regs; 1761305a96SBenjamin Herrenschmidt spinlock_t lock; 1861305a96SBenjamin Herrenschmidt 19c1a2562aSBenjamin Herrenschmidt #ifdef CONFIG_PCI_MSI 20c1a2562aSBenjamin Herrenschmidt unsigned long *msi_map; 21c1a2562aSBenjamin Herrenschmidt unsigned int msi_base; 22c1a2562aSBenjamin Herrenschmidt unsigned int msi_count; 23c1a2562aSBenjamin Herrenschmidt unsigned int msi_next; 24c1a2562aSBenjamin Herrenschmidt unsigned int msi32_support; 25c1a2562aSBenjamin Herrenschmidt #endif 26c1a2562aSBenjamin Herrenschmidt int (*msi_setup)(struct pnv_phb *phb, struct pci_dev *dev, 27c1a2562aSBenjamin Herrenschmidt unsigned int hwirq, unsigned int is_64, 28c1a2562aSBenjamin Herrenschmidt struct msi_msg *msg); 2961305a96SBenjamin Herrenschmidt void (*dma_dev_setup)(struct pnv_phb *phb, struct pci_dev *pdev); 3061305a96SBenjamin Herrenschmidt void (*fixup_phb)(struct pci_controller *hose); 3161305a96SBenjamin Herrenschmidt u32 (*bdfn_to_pe)(struct pnv_phb *phb, struct pci_bus *bus, u32 devfn); 3261305a96SBenjamin Herrenschmidt 3361305a96SBenjamin Herrenschmidt union { 3461305a96SBenjamin Herrenschmidt struct { 3561305a96SBenjamin Herrenschmidt struct iommu_table iommu_table; 3661305a96SBenjamin Herrenschmidt } p5ioc2; 3761305a96SBenjamin Herrenschmidt }; 3861305a96SBenjamin Herrenschmidt }; 3961305a96SBenjamin Herrenschmidt 4061305a96SBenjamin Herrenschmidt extern struct pci_ops pnv_pci_ops; 4161305a96SBenjamin Herrenschmidt 4261305a96SBenjamin Herrenschmidt extern void pnv_pci_setup_iommu_table(struct iommu_table *tbl, 4361305a96SBenjamin Herrenschmidt void *tce_mem, u64 tce_size, 4461305a96SBenjamin Herrenschmidt u64 dma_offset); 4561305a96SBenjamin Herrenschmidt extern void pnv_pci_init_p5ioc2_hub(struct device_node *np); 4661305a96SBenjamin Herrenschmidt 4761305a96SBenjamin Herrenschmidt 4861305a96SBenjamin Herrenschmidt #endif /* __POWERNV_PCI_H */ 49