1bd36adb8SJagannathan Raman /* 2bd36adb8SJagannathan Raman * IO Hub for remote device 3bd36adb8SJagannathan Raman * 4bd36adb8SJagannathan Raman * Copyright © 2018, 2021 Oracle and/or its affiliates. 5bd36adb8SJagannathan Raman * 6bd36adb8SJagannathan Raman * This work is licensed under the terms of the GNU GPL, version 2 or later. 7bd36adb8SJagannathan Raman * See the COPYING file in the top-level directory. 8bd36adb8SJagannathan Raman * 9bd36adb8SJagannathan Raman */ 10bd36adb8SJagannathan Raman 11bd36adb8SJagannathan Raman #ifndef REMOTE_IOHUB_H 12bd36adb8SJagannathan Raman #define REMOTE_IOHUB_H 13bd36adb8SJagannathan Raman 14*edf5ca5dSMarkus Armbruster #include "hw/pci/pci_device.h" 15bd36adb8SJagannathan Raman #include "qemu/event_notifier.h" 16bd36adb8SJagannathan Raman #include "qemu/thread-posix.h" 17bd36adb8SJagannathan Raman #include "hw/remote/mpqemu-link.h" 18bd36adb8SJagannathan Raman 19bd36adb8SJagannathan Raman #define REMOTE_IOHUB_NB_PIRQS PCI_DEVFN_MAX 20bd36adb8SJagannathan Raman 21bd36adb8SJagannathan Raman typedef struct ResampleToken { 22bd36adb8SJagannathan Raman void *iohub; 23bd36adb8SJagannathan Raman int pirq; 24bd36adb8SJagannathan Raman } ResampleToken; 25bd36adb8SJagannathan Raman 26bd36adb8SJagannathan Raman typedef struct RemoteIOHubState { 27bd36adb8SJagannathan Raman PCIDevice d; 28bd36adb8SJagannathan Raman EventNotifier irqfds[REMOTE_IOHUB_NB_PIRQS]; 29bd36adb8SJagannathan Raman EventNotifier resamplefds[REMOTE_IOHUB_NB_PIRQS]; 30bd36adb8SJagannathan Raman unsigned int irq_level[REMOTE_IOHUB_NB_PIRQS]; 31bd36adb8SJagannathan Raman ResampleToken token[REMOTE_IOHUB_NB_PIRQS]; 32bd36adb8SJagannathan Raman QemuMutex irq_level_lock[REMOTE_IOHUB_NB_PIRQS]; 33bd36adb8SJagannathan Raman } RemoteIOHubState; 34bd36adb8SJagannathan Raman 35bd36adb8SJagannathan Raman int remote_iohub_map_irq(PCIDevice *pci_dev, int intx); 36bd36adb8SJagannathan Raman void remote_iohub_set_irq(void *opaque, int pirq, int level); 37bd36adb8SJagannathan Raman void process_set_irqfd_msg(PCIDevice *pci_dev, MPQemuMsg *msg); 38bd36adb8SJagannathan Raman 39bd36adb8SJagannathan Raman void remote_iohub_init(RemoteIOHubState *iohub); 40bd36adb8SJagannathan Raman void remote_iohub_finalize(RemoteIOHubState *iohub); 41bd36adb8SJagannathan Raman 42bd36adb8SJagannathan Raman #endif 43