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