#ifndef _ASM_X86_XEN_PCI_H
#define _ASM_X86_XEN_PCI_H

#if defined(CONFIG_PCI_MSI)
#if defined(CONFIG_PCI_XEN)
int xen_register_pirq(u32 gsi, int triggering);
int xen_register_gsi(u32 gsi, int triggering, int polarity);
int xen_create_msi_irq(struct pci_dev *dev,
			struct msi_desc *msidesc,
			int type);
void xen_pci_teardown_msi_dev(struct pci_dev *dev);
void xen_pci_teardown_msi_irq(int irq);
int xen_pci_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);

/* The drivers/pci/xen-pcifront.c sets this structure to
 * its own functions.
 */
struct xen_pci_frontend_ops {
	int (*enable_msi)(struct pci_dev *dev, int **vectors);
	void (*disable_msi)(struct pci_dev *dev);
	int (*enable_msix)(struct pci_dev *dev, int **vectors, int nvec);
	void (*disable_msix)(struct pci_dev *dev);
};

extern struct xen_pci_frontend_ops *xen_pci_frontend;
	
static inline int xen_pci_frontend_enable_msi(struct pci_dev *dev,
					      int **vectors)
{
	if (xen_pci_frontend && xen_pci_frontend->enable_msi)
		return xen_pci_frontend->enable_msi(dev, vectors);
	return -ENODEV;
}
static inline void xen_pci_frontend_disable_msi(struct pci_dev *dev)
{
	if (xen_pci_frontend && xen_pci_frontend->disable_msi)
			xen_pci_frontend->disable_msi(dev);
}
static inline int xen_pci_frontend_enable_msix(struct pci_dev *dev,
					       int **vectors, int nvec)
{
	if (xen_pci_frontend && xen_pci_frontend->enable_msix)
		return xen_pci_frontend->enable_msix(dev, vectors, nvec);
	return -ENODEV;
}
static inline void xen_pci_frontend_disable_msix(struct pci_dev *dev)
{
	if (xen_pci_frontend && xen_pci_frontend->disable_msix)
			xen_pci_frontend->disable_msix(dev);
}
#else
static inline int xen_create_msi_irq(struct pci_dev *dev,
				struct msi_desc *msidesc,
				int type)
{
	return -1;
}
static inline void xen_pci_teardown_msi_dev(struct pci_dev *dev) { }
static inline void xen_pci_teardown_msi_irq(int irq) { }
static inline int xen_pci_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
{
	return -ENODEV;
}
#endif /* CONFIG_PCI_XEN */

#endif /* CONFIG_PCI_MSI */

#ifdef CONFIG_XEN_DOM0_PCI
int xen_register_gsi(u32 gsi, int triggering, int polarity);
int xen_find_device_domain_owner(struct pci_dev *dev);
int xen_register_device_domain_owner(struct pci_dev *dev, uint16_t domain);
int xen_unregister_device_domain_owner(struct pci_dev *dev);

#else
static inline int xen_register_gsi(u32 gsi, int triggering, int polarity)
{
	return -1;
}

static inline int xen_find_device_domain_owner(struct pci_dev *dev)
{
	return -1;
}
static inline int xen_register_device_domain_owner(struct pci_dev *dev,
						   uint16_t domain)
{
 	return -1;
}
static inline int xen_unregister_device_domain_owner(struct pci_dev *dev)
{
 	return -1;
}
#endif

#if defined(CONFIG_PCI_MSI) && defined(CONFIG_XEN_DOM0_PCI)
int xen_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
#else
static inline int xen_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
{
	return -1;
}
#endif

#endif	/* _ASM_X86_XEN_PCI_H */
