2010-03-18 16:31:34 -04:00
# ifndef _ASM_X86_XEN_PCI_H
# define _ASM_X86_XEN_PCI_H
# if defined(CONFIG_PCI_XEN)
extern int __init pci_xen_init ( void ) ;
2010-06-24 17:50:18 +01:00
extern int __init pci_xen_hvm_init ( void ) ;
2010-03-18 16:31:34 -04:00
# define pci_xen 1
# else
# define pci_xen 0
# define pci_xen_init (0)
2010-06-24 17:50:18 +01:00
static inline int pci_xen_hvm_init ( void )
{
return - 1 ;
}
2010-03-18 16:31:34 -04:00
# endif
2010-09-02 14:51:39 +01:00
# if defined(CONFIG_XEN_DOM0)
2011-06-09 09:49:13 -04:00
int __init pci_xen_initial_domain ( void ) ;
2010-11-08 14:13:35 -05:00
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 ) ;
2010-09-02 14:51:39 +01:00
# else
2011-06-09 09:49:13 -04:00
static inline int __init pci_xen_initial_domain ( void )
2010-09-02 14:51:39 +01:00
{
2011-06-09 09:49:13 -04:00
return - 1 ;
2010-09-02 14:51:39 +01:00
}
2010-11-08 14:13:35 -05:00
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 ;
}
2010-09-02 14:51:39 +01:00
# endif
2010-03-18 16:31:34 -04:00
# if defined(CONFIG_PCI_MSI)
# if defined(CONFIG_PCI_XEN)
/* The drivers/pci/xen-pcifront.c sets this structure to
* its own functions .
*/
struct xen_pci_frontend_ops {
2011-02-17 12:02:23 -05:00
int ( * enable_msi ) ( struct pci_dev * dev , int vectors [ ] ) ;
2010-03-18 16:31:34 -04:00
void ( * disable_msi ) ( struct pci_dev * dev ) ;
2011-02-17 12:02:23 -05:00
int ( * enable_msix ) ( struct pci_dev * dev , int vectors [ ] , int nvec ) ;
2010-03-18 16:31:34 -04:00
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 ,
2011-02-17 12:02:23 -05:00
int vectors [ ] )
2010-03-18 16:31:34 -04:00
{
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 ,
2011-02-17 12:02:23 -05:00
int vectors [ ] , int nvec )
2010-03-18 16:31:34 -04:00
{
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 ) ;
}
# endif /* CONFIG_PCI_XEN */
# endif /* CONFIG_PCI_MSI */
# endif /* _ASM_X86_XEN_PCI_H */