pci: Add an API to get IOMMU's min page size and virtual address width

This kind of information is needed by devices implementing ATS in order
to initialize their translation cache.

Signed-off-by: Clement Mathieu--Drif <clement.mathieu--drif@eviden.com>
Message-Id: <20250520071823.764266-8-clement.mathieu--drif@eviden.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
CLEMENT MATHIEU--DRIF 2025-05-20 07:18:59 +00:00 committed by Michael S. Tsirkin
parent 8ff9e1def0
commit 042cbc9aec
2 changed files with 43 additions and 0 deletions

View file

@ -429,6 +429,19 @@ typedef struct PCIIOMMUOps {
* @devfn: device and function number of the PCI device.
*/
void (*unset_iommu_device)(PCIBus *bus, void *opaque, int devfn);
/**
* @get_iotlb_info: get properties required to initialize a device IOTLB.
*
* Callback required if devices are allowed to cache translations.
*
* @opaque: the data passed to pci_setup_iommu().
*
* @addr_width: the address width of the IOMMU (output parameter).
*
* @min_page_size: the page size of the IOMMU (output parameter).
*/
void (*get_iotlb_info)(void *opaque, uint8_t *addr_width,
uint32_t *min_page_size);
} PCIIOMMUOps;
AddressSpace *pci_device_iommu_address_space(PCIDevice *dev);
@ -436,6 +449,19 @@ bool pci_device_set_iommu_device(PCIDevice *dev, HostIOMMUDevice *hiod,
Error **errp);
void pci_device_unset_iommu_device(PCIDevice *dev);
/**
* pci_iommu_get_iotlb_info: get properties required to initialize a
* device IOTLB.
*
* Returns 0 on success, or a negative errno otherwise.
*
* @dev: the device that wants to get the information.
* @addr_width: the address width of the IOMMU (output parameter).
* @min_page_size: the page size of the IOMMU (output parameter).
*/
int pci_iommu_get_iotlb_info(PCIDevice *dev, uint8_t *addr_width,
uint32_t *min_page_size);
/**
* pci_setup_iommu: Initialize specific IOMMU handlers for a PCIBus
*