blob: 668319601749b518e02d7b062dffed099c06bd57 [file] [log] [blame]
#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 */