|  | #ifndef LINUX_PCI_ATS_H | 
|  | #define LINUX_PCI_ATS_H | 
|  |  | 
|  | /* Address Translation Service */ | 
|  | struct pci_ats { | 
|  | int pos;        /* capability position */ | 
|  | int stu;        /* Smallest Translation Unit */ | 
|  | int qdep;       /* Invalidate Queue Depth */ | 
|  | int ref_cnt;    /* Physical Function reference count */ | 
|  | unsigned int is_enabled:1;      /* Enable bit is set */ | 
|  | }; | 
|  |  | 
|  | #ifdef CONFIG_PCI_IOV | 
|  |  | 
|  | extern int pci_enable_ats(struct pci_dev *dev, int ps); | 
|  | extern void pci_disable_ats(struct pci_dev *dev); | 
|  | extern int pci_ats_queue_depth(struct pci_dev *dev); | 
|  | /** | 
|  | * pci_ats_enabled - query the ATS status | 
|  | * @dev: the PCI device | 
|  | * | 
|  | * Returns 1 if ATS capability is enabled, or 0 if not. | 
|  | */ | 
|  | static inline int pci_ats_enabled(struct pci_dev *dev) | 
|  | { | 
|  | return dev->ats && dev->ats->is_enabled; | 
|  | } | 
|  |  | 
|  | #else /* CONFIG_PCI_IOV */ | 
|  |  | 
|  | static inline int pci_enable_ats(struct pci_dev *dev, int ps) | 
|  | { | 
|  | return -ENODEV; | 
|  | } | 
|  |  | 
|  | static inline void pci_disable_ats(struct pci_dev *dev) | 
|  | { | 
|  | } | 
|  |  | 
|  | static inline int pci_ats_queue_depth(struct pci_dev *dev) | 
|  | { | 
|  | return -ENODEV; | 
|  | } | 
|  |  | 
|  | static inline int pci_ats_enabled(struct pci_dev *dev) | 
|  | { | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | #endif /* CONFIG_PCI_IOV */ | 
|  |  | 
|  | #endif /* LINUX_PCI_ATS_H*/ |