xref: /qemu/include/hw/remote/iommu.h (revision 9ac873a46963098441be920ef7a2eaf244a3352d)
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