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