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