mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
intel_iommu: scalable mode emulation
Intel(R) VT-d 3.0 spec introduces scalable mode address translation to replace extended context mode. This patch extends current emulator to support Scalable Mode which includes root table, context table and new pasid table format change. Now intel_iommu emulates both legacy mode and scalable mode (with legacy-equivalent capability set). The key points are below: 1. Extend root table operations to support both legacy mode and scalable mode. 2. Extend context table operations to support both legacy mode and scalable mode. 3. Add pasid tabled operations to support scalable mode. Signed-off-by: Liu, Yi L <yi.l.liu@intel.com> [Yi Sun is co-developer to contribute much to refine the whole commit.] Signed-off-by: Yi Sun <yi.y.sun@linux.intel.com> Message-Id: <1551753295-30167-2-git-send-email-yi.y.sun@linux.intel.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
parent
b13919ab64
commit
fb43cf739e
4 changed files with 466 additions and 99 deletions
|
@ -66,11 +66,20 @@ typedef struct VTDIOTLBEntry VTDIOTLBEntry;
|
|||
typedef struct VTDBus VTDBus;
|
||||
typedef union VTD_IR_TableEntry VTD_IR_TableEntry;
|
||||
typedef union VTD_IR_MSIAddress VTD_IR_MSIAddress;
|
||||
typedef struct VTDPASIDDirEntry VTDPASIDDirEntry;
|
||||
typedef struct VTDPASIDEntry VTDPASIDEntry;
|
||||
|
||||
/* Context-Entry */
|
||||
struct VTDContextEntry {
|
||||
uint64_t lo;
|
||||
uint64_t hi;
|
||||
union {
|
||||
struct {
|
||||
uint64_t lo;
|
||||
uint64_t hi;
|
||||
};
|
||||
struct {
|
||||
uint64_t val[4];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
struct VTDContextCacheEntry {
|
||||
|
@ -81,6 +90,16 @@ struct VTDContextCacheEntry {
|
|||
struct VTDContextEntry context_entry;
|
||||
};
|
||||
|
||||
/* PASID Directory Entry */
|
||||
struct VTDPASIDDirEntry {
|
||||
uint64_t val;
|
||||
};
|
||||
|
||||
/* PASID Table Entry */
|
||||
struct VTDPASIDEntry {
|
||||
uint64_t val[8];
|
||||
};
|
||||
|
||||
struct VTDAddressSpace {
|
||||
PCIBus *bus;
|
||||
uint8_t devfn;
|
||||
|
@ -212,6 +231,7 @@ struct IntelIOMMUState {
|
|||
|
||||
dma_addr_t root; /* Current root table pointer */
|
||||
bool root_extended; /* Type of root table (extended or not) */
|
||||
bool root_scalable; /* Type of root table (scalable or not) */
|
||||
bool dmar_enabled; /* Set if DMA remapping is enabled */
|
||||
|
||||
uint16_t iq_head; /* Current invalidation queue head */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue