1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#ifndef QEMU_MSI_H
22#define QEMU_MSI_H
23
24#include "qemu-common.h"
25#include "hw/pci/pci.h"
26
27struct MSIMessage {
28 uint64_t address;
29 uint32_t data;
30};
31
32extern bool msi_supported;
33
34void msi_set_message(PCIDevice *dev, MSIMessage msg);
35MSIMessage msi_get_message(PCIDevice *dev, unsigned int vector);
36bool msi_enabled(const PCIDevice *dev);
37int msi_init(struct PCIDevice *dev, uint8_t offset,
38 unsigned int nr_vectors, bool msi64bit, bool msi_per_vector_mask);
39void msi_uninit(struct PCIDevice *dev);
40void msi_reset(PCIDevice *dev);
41void msi_notify(PCIDevice *dev, unsigned int vector);
42void msi_write_config(PCIDevice *dev, uint32_t addr, uint32_t val, int len);
43unsigned int msi_nr_vectors_allocated(const PCIDevice *dev);
44
45static inline bool msi_present(const PCIDevice *dev)
46{
47 return dev->cap_present & QEMU_PCI_CAP_MSI;
48}
49
50#endif
51