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