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
|
@ -17,6 +17,7 @@
|
|||
|
||||
|
||||
#define TYPE_TYPHOON_PCI_HOST_BRIDGE "typhoon-pcihost"
|
||||
#define TYPE_TYPHOON_IOMMU_MEMORY_REGION "typhoon-iommu-memory-region"
|
||||
|
||||
typedef struct TyphoonCchip {
|
||||
MemoryRegion region;
|
||||
|
@ -725,10 +726,6 @@ static IOMMUTLBEntry typhoon_translate_iommu(IOMMUMemoryRegion *iommu,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static const MemoryRegionIOMMUOps typhoon_iommu_ops = {
|
||||
.translate = typhoon_translate_iommu,
|
||||
};
|
||||
|
||||
static AddressSpace *typhoon_pci_dma_iommu(PCIBus *bus, void *opaque, int devfn)
|
||||
{
|
||||
TyphoonState *s = opaque;
|
||||
|
@ -892,7 +889,8 @@ PCIBus *typhoon_init(ram_addr_t ram_size, ISABus **isa_bus,
|
|||
qdev_init_nofail(dev);
|
||||
|
||||
/* Host memory as seen from the PCI side, via the IOMMU. */
|
||||
memory_region_init_iommu(&s->pchip.iommu, OBJECT(s), &typhoon_iommu_ops,
|
||||
memory_region_init_iommu(&s->pchip.iommu, sizeof(s->pchip.iommu),
|
||||
TYPE_TYPHOON_IOMMU_MEMORY_REGION, OBJECT(s),
|
||||
"iommu-typhoon", UINT64_MAX);
|
||||
address_space_init(&s->pchip.iommu_as, MEMORY_REGION(&s->pchip.iommu),
|
||||
"pchip0-pci");
|
||||
|
@ -953,9 +951,24 @@ static const TypeInfo typhoon_pcihost_info = {
|
|||
.class_init = typhoon_pcihost_class_init,
|
||||
};
|
||||
|
||||
static void typhoon_iommu_memory_region_class_init(ObjectClass *klass,
|
||||
void *data)
|
||||
{
|
||||
IOMMUMemoryRegionClass *imrc = IOMMU_MEMORY_REGION_CLASS(klass);
|
||||
|
||||
imrc->translate = typhoon_translate_iommu;
|
||||
}
|
||||
|
||||
static const TypeInfo typhoon_iommu_memory_region_info = {
|
||||
.parent = TYPE_IOMMU_MEMORY_REGION,
|
||||
.name = TYPE_TYPHOON_IOMMU_MEMORY_REGION,
|
||||
.class_init = typhoon_iommu_memory_region_class_init,
|
||||
};
|
||||
|
||||
static void typhoon_register_types(void)
|
||||
{
|
||||
type_register_static(&typhoon_pcihost_info);
|
||||
type_register_static(&typhoon_iommu_memory_region_info);
|
||||
}
|
||||
|
||||
type_init(typhoon_register_types)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue