diff options
author | Le Tan <tamlokveer@gmail.com> | 2014-08-16 13:55:44 +0800 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2014-08-28 23:10:22 +0200 |
commit | b5a280c00840f4ebc2f40afb4f74e37e34d19f7c (patch) | |
tree | c087ab3c5467136fad9c072b090af88cc1e64b35 /include/hw/i386/intel_iommu.h | |
parent | d92fa2dc6e42e8bd8470e69d85141176f98feaea (diff) |
intel-iommu: add IOTLB using hash table
Add IOTLB to cache information about the translation of input-addresses. IOTLB
use a GHashTable as cache. The key of the hash table is the logical-OR of gfn
and source id after left-shifting.
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 'include/hw/i386/intel_iommu.h')
-rw-r--r-- | include/hw/i386/intel_iommu.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.h index d9a5215a15..f4701e1c60 100644 --- a/include/hw/i386/intel_iommu.h +++ b/include/hw/i386/intel_iommu.h @@ -48,7 +48,7 @@ typedef struct VTDContextEntry VTDContextEntry; typedef struct VTDContextCacheEntry VTDContextCacheEntry; typedef struct IntelIOMMUState IntelIOMMUState; typedef struct VTDAddressSpace VTDAddressSpace; - +typedef struct VTDIOTLBEntry VTDIOTLBEntry; /* Context-Entry */ struct VTDContextEntry { @@ -73,6 +73,14 @@ struct VTDAddressSpace { VTDContextCacheEntry context_cache_entry; }; +struct VTDIOTLBEntry { + uint64_t gfn; + uint16_t domain_id; + uint64_t slpte; + bool read_flags; + bool write_flags; +}; + /* The iommu (DMAR) device state struct */ struct IntelIOMMUState { SysBusDevice busdev; @@ -103,6 +111,7 @@ struct IntelIOMMUState { uint64_t ecap; /* The value of extended capability reg */ uint32_t context_cache_gen; /* Should be in [1,MAX] */ + GHashTable *iotlb; /* IOTLB */ MemoryRegionIOMMUOps iommu_ops; VTDAddressSpace **address_spaces[VTD_PCI_BUS_MAX]; |