1 #ifndef QEMU_MSIX_H 2 #define QEMU_MSIX_H 3 4 #include "qemu-common.h" 5 #include "hw/pci/pci.h" 6 7 void msix_set_message(PCIDevice *dev, int vector, MSIMessage msg); 8 MSIMessage msix_get_message(PCIDevice *dev, unsigned int vector); 9 int msix_init(PCIDevice *dev, unsigned short nentries, 10 MemoryRegion *table_bar, uint8_t table_bar_nr, 11 unsigned table_offset, MemoryRegion *pba_bar, 12 uint8_t pba_bar_nr, unsigned pba_offset, uint8_t cap_pos, 13 Error **errp); 14 int msix_init_exclusive_bar(PCIDevice *dev, unsigned short nentries, 15 uint8_t bar_nr, Error **errp); 16 17 void msix_write_config(PCIDevice *dev, uint32_t address, uint32_t val, int len); 18 19 void msix_uninit(PCIDevice *dev, MemoryRegion *table_bar, 20 MemoryRegion *pba_bar); 21 void msix_uninit_exclusive_bar(PCIDevice *dev); 22 23 unsigned int msix_nr_vectors_allocated(const PCIDevice *dev); 24 25 void msix_save(PCIDevice *dev, QEMUFile *f); 26 void msix_load(PCIDevice *dev, QEMUFile *f); 27 28 int msix_enabled(PCIDevice *dev); 29 int msix_present(PCIDevice *dev); 30 31 bool msix_is_masked(PCIDevice *dev, unsigned vector); 32 void msix_set_pending(PCIDevice *dev, unsigned vector); 33 void msix_clr_pending(PCIDevice *dev, int vector); 34 35 int msix_vector_use(PCIDevice *dev, unsigned vector); 36 void msix_vector_unuse(PCIDevice *dev, unsigned vector); 37 void msix_unuse_all_vectors(PCIDevice *dev); 38 39 void msix_notify(PCIDevice *dev, unsigned vector); 40 41 void msix_reset(PCIDevice *dev); 42 43 int msix_set_vector_notifiers(PCIDevice *dev, 44 MSIVectorUseNotifier use_notifier, 45 MSIVectorReleaseNotifier release_notifier, 46 MSIVectorPollNotifier poll_notifier); 47 void msix_unset_vector_notifiers(PCIDevice *dev); 48 49 extern const VMStateDescription vmstate_msix; 50 51 #define VMSTATE_MSIX_TEST(_field, _state, _test) { \ 52 .name = (stringify(_field)), \ 53 .size = sizeof(PCIDevice), \ 54 .vmsd = &vmstate_msix, \ 55 .flags = VMS_STRUCT, \ 56 .offset = vmstate_offset_value(_state, _field, PCIDevice), \ 57 .field_exists = (_test) \ 58 } 59 60 #define VMSTATE_MSIX(_f, _s) \ 61 VMSTATE_MSIX_TEST(_f, _s, NULL) 62 63 #endif 64