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 129f811207SElena Ufimtseva #include "hw/pci/pci.h" 139f811207SElena Ufimtseva #include "io/channel.h" 14*c746b74aSJagannathan Raman #include "hw/remote/proxy-memory-listener.h" 159f811207SElena Ufimtseva 169f811207SElena Ufimtseva #define TYPE_PCI_PROXY_DEV "x-pci-proxy-dev" 179f811207SElena Ufimtseva OBJECT_DECLARE_SIMPLE_TYPE(PCIProxyDev, PCI_PROXY_DEV) 189f811207SElena Ufimtseva 197ee3f823SJagannathan Raman typedef struct ProxyMemoryRegion { 207ee3f823SJagannathan Raman PCIProxyDev *dev; 217ee3f823SJagannathan Raman MemoryRegion mr; 227ee3f823SJagannathan Raman bool memory; 237ee3f823SJagannathan Raman bool present; 247ee3f823SJagannathan Raman uint8_t type; 257ee3f823SJagannathan Raman } ProxyMemoryRegion; 267ee3f823SJagannathan Raman 279f811207SElena Ufimtseva struct PCIProxyDev { 289f811207SElena Ufimtseva PCIDevice parent_dev; 299f811207SElena Ufimtseva char *fd; 309f811207SElena Ufimtseva 319f811207SElena Ufimtseva /* 329f811207SElena Ufimtseva * Mutex used to protect the QIOChannel fd from 339f811207SElena Ufimtseva * the concurrent access by the VCPUs since proxy 349f811207SElena Ufimtseva * blocks while awaiting for the replies from the 359f811207SElena Ufimtseva * process remote. 369f811207SElena Ufimtseva */ 379f811207SElena Ufimtseva QemuMutex io_mutex; 389f811207SElena Ufimtseva QIOChannel *ioc; 399f811207SElena Ufimtseva Error *migration_blocker; 40*c746b74aSJagannathan Raman ProxyMemoryListener proxy_listener; 417ee3f823SJagannathan Raman ProxyMemoryRegion region[PCI_NUM_REGIONS]; 429f811207SElena Ufimtseva }; 439f811207SElena Ufimtseva 449f811207SElena Ufimtseva #endif /* PROXY_H */ 45