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