
Return the PRG Response PASID Required bit in the Page Request Status Register. As per PCIe spec r4.0, sec 10.5.2.3, if this bit is Set, the device expects a PASID TLP Prefix on PRG Response Messages when the corresponding Page Requests had a PASID TLP Prefix. If Clear, the device does not expect PASID TLP Prefixes on any PRG Response Message, and the device behavior is undefined if the device receives a PRG Response Message with a PASID TLP Prefix. Also the device behavior is undefined if this bit is Set and the device receives a PRG Response Message with no PASID TLP Prefix when the corresponding Page Requests had a PASID TLP Prefix. This function will be used by drivers like IOMMU, if it is required to check the status of the PRG Response PASID Required bit before enabling the PASID support of the device. Cc: Ashok Raj <ashok.raj@intel.com> Cc: Jacob Pan <jacob.jun.pan@linux.intel.com> Cc: Keith Busch <keith.busch@intel.com> Suggested-by: Ashok Raj <ashok.raj@intel.com> Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
78 lines
1.5 KiB
C
78 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef LINUX_PCI_ATS_H
|
|
#define LINUX_PCI_ATS_H
|
|
|
|
#include <linux/pci.h>
|
|
|
|
#ifdef CONFIG_PCI_PRI
|
|
|
|
int pci_enable_pri(struct pci_dev *pdev, u32 reqs);
|
|
void pci_disable_pri(struct pci_dev *pdev);
|
|
void pci_restore_pri_state(struct pci_dev *pdev);
|
|
int pci_reset_pri(struct pci_dev *pdev);
|
|
|
|
#else /* CONFIG_PCI_PRI */
|
|
|
|
static inline int pci_enable_pri(struct pci_dev *pdev, u32 reqs)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
|
|
static inline void pci_disable_pri(struct pci_dev *pdev)
|
|
{
|
|
}
|
|
|
|
static inline void pci_restore_pri_state(struct pci_dev *pdev)
|
|
{
|
|
}
|
|
|
|
static inline int pci_reset_pri(struct pci_dev *pdev)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
|
|
#endif /* CONFIG_PCI_PRI */
|
|
|
|
#ifdef CONFIG_PCI_PASID
|
|
|
|
int pci_enable_pasid(struct pci_dev *pdev, int features);
|
|
void pci_disable_pasid(struct pci_dev *pdev);
|
|
void pci_restore_pasid_state(struct pci_dev *pdev);
|
|
int pci_pasid_features(struct pci_dev *pdev);
|
|
int pci_max_pasids(struct pci_dev *pdev);
|
|
int pci_prg_resp_pasid_required(struct pci_dev *pdev);
|
|
|
|
#else /* CONFIG_PCI_PASID */
|
|
|
|
static inline int pci_enable_pasid(struct pci_dev *pdev, int features)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
static inline void pci_disable_pasid(struct pci_dev *pdev)
|
|
{
|
|
}
|
|
|
|
static inline void pci_restore_pasid_state(struct pci_dev *pdev)
|
|
{
|
|
}
|
|
|
|
static inline int pci_pasid_features(struct pci_dev *pdev)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
static inline int pci_max_pasids(struct pci_dev *pdev)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
static int pci_prg_resp_pasid_required(struct pci_dev *pdev)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif /* CONFIG_PCI_PASID */
|
|
|
|
|
|
#endif /* LINUX_PCI_ATS_H*/
|