summary refs log tree commit diff stats
path: root/hw/i386/intel_iommu_internal.h
diff options
context:
space:
mode:
authorLe Tan <tamlokveer@gmail.com>2014-08-16 13:55:42 +0800
committerMichael S. Tsirkin <mst@redhat.com>2014-08-28 23:10:22 +0200
commited7b8fbcfb888716c850c8f908f5b5329de46d7c (patch)
tree54fdb4cd840442d09ceb8cff588ab02929745ca3 /hw/i386/intel_iommu_internal.h
parentac40aa1540baffb4984c80822da618ebb3180a4d (diff)
downloadfocaccia-qemu-ed7b8fbcfb888716c850c8f908f5b5329de46d7c.tar.gz
focaccia-qemu-ed7b8fbcfb888716c850c8f908f5b5329de46d7c.zip
intel-iommu: add supports for queued invalidation interface
Add supports for queued invalidation interface, an expended invalidation
interface with extended capabilities.

Signed-off-by: Le Tan <tamlokveer@gmail.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw/i386/intel_iommu_internal.h')
-rw-r--r--hw/i386/intel_iommu_internal.h27
1 files changed, 21 insertions, 6 deletions
diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h
index 7ca034d8e6..cbcc8d1e3b 100644
--- a/hw/i386/intel_iommu_internal.h
+++ b/hw/i386/intel_iommu_internal.h
@@ -255,12 +255,27 @@ typedef enum VTDFaultReason {
     VTD_FR_MAX,                 /* Guard */
 } VTDFaultReason;
 
-/* Masks for Queued Invalidation Descriptor */
-#define VTD_INV_DESC_TYPE           0xf
-#define VTD_INV_DESC_CC             0x1 /* Context-cache Invalidate Desc */
-#define VTD_INV_DESC_IOTLB          0x2
-#define VTD_INV_DESC_WAIT           0x5 /* Invalidation Wait Descriptor */
-#define VTD_INV_DESC_NONE           0   /* Not an Invalidate Descriptor */
+/* Queued Invalidation Descriptor */
+struct VTDInvDesc {
+    uint64_t lo;
+    uint64_t hi;
+};
+typedef struct VTDInvDesc VTDInvDesc;
+
+/* Masks for struct VTDInvDesc */
+#define VTD_INV_DESC_TYPE               0xf
+#define VTD_INV_DESC_CC                 0x1 /* Context-cache Invalidate Desc */
+#define VTD_INV_DESC_IOTLB              0x2
+#define VTD_INV_DESC_WAIT               0x5 /* Invalidation Wait Descriptor */
+#define VTD_INV_DESC_NONE               0   /* Not an Invalidate Descriptor */
+
+/* Masks for Invalidation Wait Descriptor*/
+#define VTD_INV_DESC_WAIT_SW            (1ULL << 5)
+#define VTD_INV_DESC_WAIT_IF            (1ULL << 4)
+#define VTD_INV_DESC_WAIT_FN            (1ULL << 6)
+#define VTD_INV_DESC_WAIT_DATA_SHIFT    32
+#define VTD_INV_DESC_WAIT_RSVD_LO       0Xffffff80ULL
+#define VTD_INV_DESC_WAIT_RSVD_HI       3ULL
 
 /* Pagesize of VTD paging structures, including root and context tables */
 #define VTD_PAGE_SHIFT              12