diff options
| author | Peter Maydell <peter.maydell@linaro.org> | 2018-06-15 14:57:15 +0100 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2018-06-15 15:23:34 +0100 |
| commit | 21f402093c5ee7363f5ba56916cd5c651b424fef (patch) | |
| tree | b56a82c598acb6bc9a099774e3e575f63f17eb59 /memory.c | |
| parent | 2151b044fdca74a4fe7148f302ba9d6191516744 (diff) | |
| download | focaccia-qemu-21f402093c5ee7363f5ba56916cd5c651b424fef.tar.gz focaccia-qemu-21f402093c5ee7363f5ba56916cd5c651b424fef.zip | |
iommu: Add IOMMU index concept to IOMMU API
If an IOMMU supports mappings that care about the memory transaction attributes, then it no longer has a unique address -> output mapping, but more than one. We can represent these using an IOMMU index, analogous to TCG's mmu indexes. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Message-id: 20180604152941.20374-2-peter.maydell@linaro.org
Diffstat (limited to '')
| -rw-r--r-- | memory.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/memory.c b/memory.c index 3212acc7f4..64f4a55d54 100644 --- a/memory.c +++ b/memory.c @@ -1915,6 +1915,29 @@ int memory_region_iommu_get_attr(IOMMUMemoryRegion *iommu_mr, return imrc->get_attr(iommu_mr, attr, data); } +int memory_region_iommu_attrs_to_index(IOMMUMemoryRegion *iommu_mr, + MemTxAttrs attrs) +{ + IOMMUMemoryRegionClass *imrc = IOMMU_MEMORY_REGION_GET_CLASS(iommu_mr); + + if (!imrc->attrs_to_index) { + return 0; + } + + return imrc->attrs_to_index(iommu_mr, attrs); +} + +int memory_region_iommu_num_indexes(IOMMUMemoryRegion *iommu_mr) +{ + IOMMUMemoryRegionClass *imrc = IOMMU_MEMORY_REGION_GET_CLASS(iommu_mr); + + if (!imrc->num_indexes) { + return 1; + } + + return imrc->num_indexes(iommu_mr); +} + void memory_region_set_log(MemoryRegion *mr, bool log, unsigned client) { uint8_t mask = 1 << client; |