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