mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
memory/iommu: introduce IOMMUMemoryRegionClass
This finishes QOM'fication of IOMMUMemoryRegion by introducing a IOMMUMemoryRegionClass. This also provides a fastpath analog for IOMMU_MEMORY_REGION_GET_CLASS(). This makes IOMMUMemoryRegion an abstract class. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Message-Id: <20170711035620.4232-3-aik@ozlabs.ru> Acked-by: Cornelia Huck <cohuck@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
3df9d74806
commit
1221a47467
15 changed files with 205 additions and 70 deletions
|
@ -2718,8 +2718,9 @@ VTDAddressSpace *vtd_find_add_as(IntelIOMMUState *s, PCIBus *bus, int devfn)
|
|||
* vtd_sys_alias and intel_iommu regions. IR region is always
|
||||
* enabled.
|
||||
*/
|
||||
memory_region_init_iommu(&vtd_dev_as->iommu, OBJECT(s),
|
||||
&s->iommu_ops, "intel_iommu_dmar",
|
||||
memory_region_init_iommu(&vtd_dev_as->iommu, sizeof(vtd_dev_as->iommu),
|
||||
TYPE_INTEL_IOMMU_MEMORY_REGION, OBJECT(s),
|
||||
"intel_iommu_dmar",
|
||||
UINT64_MAX);
|
||||
memory_region_init_alias(&vtd_dev_as->sys_alias, OBJECT(s),
|
||||
"vtd_sys_alias", get_system_memory(),
|
||||
|
@ -2857,9 +2858,6 @@ static void vtd_init(IntelIOMMUState *s)
|
|||
memset(s->w1cmask, 0, DMAR_REG_SIZE);
|
||||
memset(s->womask, 0, DMAR_REG_SIZE);
|
||||
|
||||
s->iommu_ops.translate = vtd_iommu_translate;
|
||||
s->iommu_ops.notify_flag_changed = vtd_iommu_notify_flag_changed;
|
||||
s->iommu_ops.replay = vtd_iommu_replay;
|
||||
s->root = 0;
|
||||
s->root_extended = false;
|
||||
s->dmar_enabled = false;
|
||||
|
@ -3074,9 +3072,26 @@ static const TypeInfo vtd_info = {
|
|||
.class_init = vtd_class_init,
|
||||
};
|
||||
|
||||
static void vtd_iommu_memory_region_class_init(ObjectClass *klass,
|
||||
void *data)
|
||||
{
|
||||
IOMMUMemoryRegionClass *imrc = IOMMU_MEMORY_REGION_CLASS(klass);
|
||||
|
||||
imrc->translate = vtd_iommu_translate;
|
||||
imrc->notify_flag_changed = vtd_iommu_notify_flag_changed;
|
||||
imrc->replay = vtd_iommu_replay;
|
||||
}
|
||||
|
||||
static const TypeInfo vtd_iommu_memory_region_info = {
|
||||
.parent = TYPE_IOMMU_MEMORY_REGION,
|
||||
.name = TYPE_INTEL_IOMMU_MEMORY_REGION,
|
||||
.class_init = vtd_iommu_memory_region_class_init,
|
||||
};
|
||||
|
||||
static void vtd_register_types(void)
|
||||
{
|
||||
type_register_static(&vtd_info);
|
||||
type_register_static(&vtd_iommu_memory_region_info);
|
||||
}
|
||||
|
||||
type_init(vtd_register_types)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue