1 #ifndef HW_XEN_HVM_COMMON_H
2 #define HW_XEN_HVM_COMMON_H
4 #include "qemu/units.h"
7 #include "hw/pci/pci.h"
9 #include "hw/xen/xen_native.h"
10 #include "hw/xen/xen-legacy-backend.h"
11 #include "sysemu/runstate.h"
12 #include "sysemu/sysemu.h"
13 #include "sysemu/xen.h"
14 #include "sysemu/xen-mapcache.h"
15 #include "qemu/error-report.h"
16 #include <xen/hvm/ioreq.h>
18 extern MemoryRegion ram_memory
;
19 extern MemoryListener xen_io_listener
;
20 extern DeviceListener xen_device_listener
;
22 //#define DEBUG_XEN_HVM
25 #define DPRINTF(fmt, ...) \
26 do { fprintf(stderr, "xen: " fmt, ## __VA_ARGS__); } while (0)
28 #define DPRINTF(fmt, ...) \
32 static inline uint32_t xen_vcpu_eport(shared_iopage_t
*shared_page
, int i
)
34 return shared_page
->vcpu_ioreq
[i
].vp_eport
;
36 static inline ioreq_t
*xen_vcpu_ioreq(shared_iopage_t
*shared_page
, int vcpu
)
38 return &shared_page
->vcpu_ioreq
[vcpu
];
41 #define BUFFER_IO_MAX_DELAY 100
43 typedef struct XenPhysmap
{
49 QLIST_ENTRY(XenPhysmap
) list
;
52 typedef struct XenPciDevice
{
55 QLIST_ENTRY(XenPciDevice
) entry
;
58 typedef struct XenIOState
{
60 shared_iopage_t
*shared_page
;
61 buffered_iopage_t
*buffered_io_page
;
62 xenforeignmemory_resource_handle
*fres
;
63 QEMUTimer
*buffered_io_timer
;
64 CPUState
**cpu_by_vcpu_id
;
65 /* the evtchn port for polling the notification, */
66 evtchn_port_t
*ioreq_local_port
;
67 /* evtchn remote and local ports for buffered io */
68 evtchn_port_t bufioreq_remote_port
;
69 evtchn_port_t bufioreq_local_port
;
70 /* the evtchn fd for polling */
71 xenevtchn_handle
*xce_handle
;
72 /* which vcpu we are serving */
75 struct xs_handle
*xenstore
;
76 MemoryListener memory_listener
;
77 MemoryListener io_listener
;
78 QLIST_HEAD(, XenPciDevice
) dev_list
;
79 DeviceListener device_listener
;
84 void xen_exit_notifier(Notifier
*n
, void *data
);
86 void xen_region_add(MemoryListener
*listener
, MemoryRegionSection
*section
);
87 void xen_region_del(MemoryListener
*listener
, MemoryRegionSection
*section
);
88 void xen_io_add(MemoryListener
*listener
, MemoryRegionSection
*section
);
89 void xen_io_del(MemoryListener
*listener
, MemoryRegionSection
*section
);
90 void xen_device_realize(DeviceListener
*listener
, DeviceState
*dev
);
91 void xen_device_unrealize(DeviceListener
*listener
, DeviceState
*dev
);
93 void xen_hvm_change_state_handler(void *opaque
, bool running
, RunState rstate
);
94 void xen_register_ioreq(XenIOState
*state
, unsigned int max_cpus
,
95 const MemoryListener
*xen_memory_listener
);
97 void cpu_ioreq_pio(ioreq_t
*req
);
98 #endif /* HW_XEN_HVM_COMMON_H */