123456789101112131415161718192021222324252627282930313233343536373839404142 |
- /*
- * IO Hub for remote device
- *
- * Copyright © 2018, 2021 Oracle and/or its affiliates.
- *
- * This work is licensed under the terms of the GNU GPL, version 2 or later.
- * See the COPYING file in the top-level directory.
- *
- */
- #ifndef REMOTE_IOHUB_H
- #define REMOTE_IOHUB_H
- #include "hw/pci/pci_device.h"
- #include "qemu/event_notifier.h"
- #include "qemu/thread-posix.h"
- #include "hw/remote/mpqemu-link.h"
- #define REMOTE_IOHUB_NB_PIRQS PCI_DEVFN_MAX
- typedef struct ResampleToken {
- void *iohub;
- int pirq;
- } ResampleToken;
- typedef struct RemoteIOHubState {
- PCIDevice d;
- EventNotifier irqfds[REMOTE_IOHUB_NB_PIRQS];
- EventNotifier resamplefds[REMOTE_IOHUB_NB_PIRQS];
- unsigned int irq_level[REMOTE_IOHUB_NB_PIRQS];
- ResampleToken token[REMOTE_IOHUB_NB_PIRQS];
- QemuMutex irq_level_lock[REMOTE_IOHUB_NB_PIRQS];
- } RemoteIOHubState;
- int remote_iohub_map_irq(PCIDevice *pci_dev, int intx);
- void remote_iohub_set_irq(void *opaque, int pirq, int level);
- void process_set_irqfd_msg(PCIDevice *pci_dev, MPQemuMsg *msg);
- void remote_iohub_init(RemoteIOHubState *iohub);
- void remote_iohub_finalize(RemoteIOHubState *iohub);
- #endif
|