]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
intel_iommu: Add an IOMMU index for pre-translated addresses
authorCLEMENT MATHIEU--DRIF <clement.mathieu--drif@eviden.com>
Wed, 29 Oct 2025 10:51:41 +0000 (10:51 +0000)
committerMichael S. Tsirkin <mst@redhat.com>
Thu, 5 Feb 2026 08:18:39 +0000 (03:18 -0500)
Signed-off-by: Clement Mathieu--Drif <clement.mathieu--drif@eviden.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Message-Id: <20251029105137.1097933-2-clement.mathieu--drif@eviden.com>

hw/i386/intel_iommu.c
hw/i386/intel_iommu_internal.h

index e8a6f50a5a03e71b5f6025dce5f9510e0a31f020..80b21a64688154924d34c25460ef864ec5768d42 100644 (file)
@@ -5601,6 +5601,17 @@ static const TypeInfo vtd_info = {
     .class_init    = vtd_class_init,
 };
 
+static int vtd_attrs_to_index(IOMMUMemoryRegion *iommu_mr, MemTxAttrs attrs)
+{
+    return attrs.address_type == PCI_AT_TRANSLATED ?
+            VTD_IDX_TRANSLATED : VTD_IDX_UNTRANSLATED;
+}
+
+static int vtd_num_indexes(IOMMUMemoryRegion *iommu)
+{
+    return VTD_IDX_COUNT;
+}
+
 static void vtd_iommu_memory_region_class_init(ObjectClass *klass,
                                                const void *data)
 {
@@ -5609,6 +5620,8 @@ static void vtd_iommu_memory_region_class_init(ObjectClass *klass,
     imrc->translate = vtd_iommu_translate;
     imrc->notify_flag_changed = vtd_iommu_notify_flag_changed;
     imrc->replay = vtd_iommu_replay;
+    imrc->attrs_to_index = vtd_attrs_to_index;
+    imrc->num_indexes = vtd_num_indexes;
 }
 
 static const TypeInfo vtd_iommu_memory_region_info = {
index a2ca79f925c22928432e4ca7e2381c4f535fbdf0..be757c290d6b4b5c0dcdd4bce1eb87676b7c93c5 100644 (file)
@@ -688,6 +688,13 @@ typedef struct VTDPIOTLBInvInfo {
 /* Bits to decide the offset for each level */
 #define VTD_LEVEL_BITS           9
 
+/* IOMMU Index */
+typedef enum VTDIOMMUIndex {
+    VTD_IDX_UNTRANSLATED = 0, /* Default */
+    VTD_IDX_TRANSLATED = 1,
+    VTD_IDX_COUNT = 2, /* Number of supported indexes */
+} VTDIOMMUIndex;
+
 typedef struct VTDHostIOMMUDevice {
     IntelIOMMUState *iommu_state;
     PCIBus *bus;