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