| /* |
| * 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 */ |