1*253007d1SJagannathan Raman /** 2*253007d1SJagannathan Raman * Copyright © 2022 Oracle and/or its affiliates. 3*253007d1SJagannathan Raman * 4*253007d1SJagannathan Raman * This work is licensed under the terms of the GNU GPL, version 2 or later. 5*253007d1SJagannathan Raman * See the COPYING file in the top-level directory. 6*253007d1SJagannathan Raman * 7*253007d1SJagannathan Raman */ 8*253007d1SJagannathan Raman 9*253007d1SJagannathan Raman #ifndef REMOTE_IOMMU_H 10*253007d1SJagannathan Raman #define REMOTE_IOMMU_H 11*253007d1SJagannathan Raman 12*253007d1SJagannathan Raman #include "hw/pci/pci_bus.h" 13*253007d1SJagannathan Raman #include "hw/pci/pci.h" 14*253007d1SJagannathan Raman 15*253007d1SJagannathan Raman #ifndef INT2VOIDP 16*253007d1SJagannathan Raman #define INT2VOIDP(i) (void *)(uintptr_t)(i) 17*253007d1SJagannathan Raman #endif 18*253007d1SJagannathan Raman 19*253007d1SJagannathan Raman typedef struct RemoteIommuElem { 20*253007d1SJagannathan Raman MemoryRegion *mr; 21*253007d1SJagannathan Raman 22*253007d1SJagannathan Raman AddressSpace as; 23*253007d1SJagannathan Raman } RemoteIommuElem; 24*253007d1SJagannathan Raman 25*253007d1SJagannathan Raman #define TYPE_REMOTE_IOMMU "x-remote-iommu" 26*253007d1SJagannathan Raman OBJECT_DECLARE_SIMPLE_TYPE(RemoteIommu, REMOTE_IOMMU) 27*253007d1SJagannathan Raman 28*253007d1SJagannathan Raman struct RemoteIommu { 29*253007d1SJagannathan Raman Object parent; 30*253007d1SJagannathan Raman 31*253007d1SJagannathan Raman GHashTable *elem_by_devfn; 32*253007d1SJagannathan Raman 33*253007d1SJagannathan Raman QemuMutex lock; 34*253007d1SJagannathan Raman }; 35*253007d1SJagannathan Raman 36*253007d1SJagannathan Raman void remote_iommu_setup(PCIBus *pci_bus); 37*253007d1SJagannathan Raman 38*253007d1SJagannathan Raman void remote_iommu_unplug_dev(PCIDevice *pci_dev); 39*253007d1SJagannathan Raman 40*253007d1SJagannathan Raman #endif 41