| /** |
| * Copyright © 2022 Oracle and/or its affiliates. |
| * |
| * This work is licensed under the terms of the GNU GPL, version 2 or later. |
| * See the COPYING file in the top-level directory. |
| * |
| */ |
| |
| #ifndef REMOTE_IOMMU_H |
| #define REMOTE_IOMMU_H |
| |
| #include "hw/pci/pci_bus.h" |
| #include "hw/pci/pci.h" |
| |
| #ifndef INT2VOIDP |
| #define INT2VOIDP(i) (void *)(uintptr_t)(i) |
| #endif |
| |
| typedef struct RemoteIommuElem { |
| MemoryRegion *mr; |
| |
| AddressSpace as; |
| } RemoteIommuElem; |
| |
| #define TYPE_REMOTE_IOMMU "x-remote-iommu" |
| OBJECT_DECLARE_SIMPLE_TYPE(RemoteIommu, REMOTE_IOMMU) |
| |
| struct RemoteIommu { |
| Object parent; |
| |
| GHashTable *elem_by_devfn; |
| |
| QemuMutex lock; |
| }; |
| |
| void remote_iommu_setup(PCIBus *pci_bus); |
| |
| void remote_iommu_unplug_dev(PCIDevice *pci_dev); |
| |
| #endif |