xref: /qemu/include/hw/remote/proxy.h (revision c746b74a7d881c7da4afdd7b29353a90c445a8ab)
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