| 
									
										
										
										
											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 */
 |