| /* | |
| * Copyright © 2018, 2021 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 PROXY_H | |
| #define PROXY_H | |
| #include "hw/pci/pci_device.h" | |
| #include "io/channel.h" | |
| #include "hw/remote/proxy-memory-listener.h" | |
| #include "qemu/event_notifier.h" | |
| #define TYPE_PCI_PROXY_DEV "x-pci-proxy-dev" | |
| OBJECT_DECLARE_SIMPLE_TYPE(PCIProxyDev, PCI_PROXY_DEV) | |
| typedef struct ProxyMemoryRegion { | |
| PCIProxyDev *dev; | |
| MemoryRegion mr; | |
| bool memory; | |
| bool present; | |
| uint8_t type; | |
| } ProxyMemoryRegion; | |
| struct PCIProxyDev { | |
| PCIDevice parent_dev; | |
| char *fd; | |
| /* | |
| * Mutex used to protect the QIOChannel fd from | |
| * the concurrent access by the VCPUs since proxy | |
| * blocks while awaiting for the replies from the | |
| * process remote. | |
| */ | |
| QemuMutex io_mutex; | |
| QIOChannel *ioc; | |
| Error *migration_blocker; | |
| ProxyMemoryListener proxy_listener; | |
| int virq; | |
| EventNotifier intr; | |
| EventNotifier resample; | |
| ProxyMemoryRegion region[PCI_NUM_REGIONS]; | |
| }; | |
| #endif /* PROXY_H */ |