19f811207SElena Ufimtseva /* 29f811207SElena Ufimtseva * Copyright © 2018, 2021 Oracle and/or its affiliates. 39f811207SElena Ufimtseva * 49f811207SElena Ufimtseva * This work is licensed under the terms of the GNU GPL, version 2 or later. 59f811207SElena Ufimtseva * See the COPYING file in the top-level directory. 69f811207SElena Ufimtseva * 79f811207SElena Ufimtseva */ 89f811207SElena Ufimtseva 99f811207SElena Ufimtseva #ifndef PROXY_H 109f811207SElena Ufimtseva #define PROXY_H 119f811207SElena Ufimtseva 12*edf5ca5dSMarkus Armbruster #include "hw/pci/pci_device.h" 139f811207SElena Ufimtseva #include "io/channel.h" 14c746b74aSJagannathan Raman #include "hw/remote/proxy-memory-listener.h" 15bd36adb8SJagannathan Raman #include "qemu/event_notifier.h" 169f811207SElena Ufimtseva 179f811207SElena Ufimtseva #define TYPE_PCI_PROXY_DEV "x-pci-proxy-dev" 189f811207SElena Ufimtseva OBJECT_DECLARE_SIMPLE_TYPE(PCIProxyDev, PCI_PROXY_DEV) 199f811207SElena Ufimtseva 207ee3f823SJagannathan Raman typedef struct ProxyMemoryRegion { 217ee3f823SJagannathan Raman PCIProxyDev *dev; 227ee3f823SJagannathan Raman MemoryRegion mr; 237ee3f823SJagannathan Raman bool memory; 247ee3f823SJagannathan Raman bool present; 257ee3f823SJagannathan Raman uint8_t type; 267ee3f823SJagannathan Raman } ProxyMemoryRegion; 277ee3f823SJagannathan Raman 289f811207SElena Ufimtseva struct PCIProxyDev { 299f811207SElena Ufimtseva PCIDevice parent_dev; 309f811207SElena Ufimtseva char *fd; 319f811207SElena Ufimtseva 329f811207SElena Ufimtseva /* 339f811207SElena Ufimtseva * Mutex used to protect the QIOChannel fd from 349f811207SElena Ufimtseva * the concurrent access by the VCPUs since proxy 359f811207SElena Ufimtseva * blocks while awaiting for the replies from the 369f811207SElena Ufimtseva * process remote. 379f811207SElena Ufimtseva */ 389f811207SElena Ufimtseva QemuMutex io_mutex; 399f811207SElena Ufimtseva QIOChannel *ioc; 409f811207SElena Ufimtseva Error *migration_blocker; 41c746b74aSJagannathan Raman ProxyMemoryListener proxy_listener; 42bd36adb8SJagannathan Raman int virq; 43bd36adb8SJagannathan Raman EventNotifier intr; 44bd36adb8SJagannathan Raman EventNotifier resample; 457ee3f823SJagannathan Raman ProxyMemoryRegion region[PCI_NUM_REGIONS]; 469f811207SElena Ufimtseva }; 479f811207SElena Ufimtseva 489f811207SElena Ufimtseva #endif /* PROXY_H */ 49