blob: aa86209891622f1a871970cc758efc8ea28f935a [file] [log] [blame]
Alex Nixonb5401a92010-03-18 16:31:34 -04001#ifndef _ASM_X86_XEN_PCI_H
2#define _ASM_X86_XEN_PCI_H
3
4#if defined(CONFIG_PCI_XEN)
5extern int __init pci_xen_init(void);
Stefano Stabellini3942b742010-06-24 17:50:18 +01006extern int __init pci_xen_hvm_init(void);
Alex Nixonb5401a92010-03-18 16:31:34 -04007#define pci_xen 1
8#else
9#define pci_xen 0
10#define pci_xen_init (0)
Stefano Stabellini3942b742010-06-24 17:50:18 +010011static inline int pci_xen_hvm_init(void)
12{
13 return -1;
14}
Alex Nixonb5401a92010-03-18 16:31:34 -040015#endif
Jeremy Fitzhardinge38aa66f2010-09-02 14:51:39 +010016#if defined(CONFIG_XEN_DOM0)
17void __init xen_setup_pirqs(void);
18#else
19static inline void __init xen_setup_pirqs(void)
20{
21}
22#endif
Alex Nixonb5401a92010-03-18 16:31:34 -040023
24#if defined(CONFIG_PCI_MSI)
25#if defined(CONFIG_PCI_XEN)
26/* The drivers/pci/xen-pcifront.c sets this structure to
27 * its own functions.
28 */
29struct xen_pci_frontend_ops {
Konrad Rzeszutek Wilkcc0f89c2011-02-17 12:02:23 -050030 int (*enable_msi)(struct pci_dev *dev, int vectors[]);
Alex Nixonb5401a92010-03-18 16:31:34 -040031 void (*disable_msi)(struct pci_dev *dev);
Konrad Rzeszutek Wilkcc0f89c2011-02-17 12:02:23 -050032 int (*enable_msix)(struct pci_dev *dev, int vectors[], int nvec);
Alex Nixonb5401a92010-03-18 16:31:34 -040033 void (*disable_msix)(struct pci_dev *dev);
34};
35
36extern struct xen_pci_frontend_ops *xen_pci_frontend;
37
38static inline int xen_pci_frontend_enable_msi(struct pci_dev *dev,
Konrad Rzeszutek Wilkcc0f89c2011-02-17 12:02:23 -050039 int vectors[])
Alex Nixonb5401a92010-03-18 16:31:34 -040040{
41 if (xen_pci_frontend && xen_pci_frontend->enable_msi)
42 return xen_pci_frontend->enable_msi(dev, vectors);
43 return -ENODEV;
44}
45static inline void xen_pci_frontend_disable_msi(struct pci_dev *dev)
46{
47 if (xen_pci_frontend && xen_pci_frontend->disable_msi)
48 xen_pci_frontend->disable_msi(dev);
49}
50static inline int xen_pci_frontend_enable_msix(struct pci_dev *dev,
Konrad Rzeszutek Wilkcc0f89c2011-02-17 12:02:23 -050051 int vectors[], int nvec)
Alex Nixonb5401a92010-03-18 16:31:34 -040052{
53 if (xen_pci_frontend && xen_pci_frontend->enable_msix)
54 return xen_pci_frontend->enable_msix(dev, vectors, nvec);
55 return -ENODEV;
56}
57static inline void xen_pci_frontend_disable_msix(struct pci_dev *dev)
58{
59 if (xen_pci_frontend && xen_pci_frontend->disable_msix)
60 xen_pci_frontend->disable_msix(dev);
61}
62#endif /* CONFIG_PCI_XEN */
63#endif /* CONFIG_PCI_MSI */
64
65#endif /* _ASM_X86_XEN_PCI_H */