#define xendevicemodel_inject_msi(h, a, d) \
xc_hvm_inject_msi(h, xen_domid, a, d)
+#if CONFIG_XEN_CTRL_INTERFACE_VERSION >= 450
+
+#define xendevicemodel_create_ioreq_server(h, b, i) \
+ xc_hvm_create_ioreq_server(h, xen_domid, \
+ b ? HVM_IOREQSRV_BUFIOREQ_ATOMIC : HVM_IOREQSRV_BUFIOREQ_OFF, i)
+#define xendevicemodel_get_ioreq_server_info(h, i, ipfn, bpfn, bprt) \
+ xc_hvm_get_ioreq_server_info(h, xen_domid, i, ipfn, bpfn, bprt)
+#define xendevicemodel_set_ioreq_server_state(h, i, e) \
+ xc_hvm_set_ioreq_server_state(h, xen_domid, i, e)
+#define xendevicemodel_map_io_range_to_ioreq_server(h, i, m, s, e) \
+ xc_hvm_map_io_range_to_ioreq_server(h, xen_domid, i, m, s, e)
+#define xendevicemodel_unmap_io_range_from_ioreq_server(h, i, m, s, e) \
+ xc_hvm_unmap_io_range_from_ioreq_server(h, xen_domid, i, m, s, e)
+#define xendevicemodel_map_pcidev_to_ioreq_server(h, i, s, b, d, f) \
+ xc_hvm_map_pcidev_to_ioreq_server(h, xen_domid, i, s, b, d, f)
+#define xendevicemodel_unmap_pcidev_from_ioreq_server(h, i, s, b, d, f) \
+ xc_hvm_unmap_pcidev_from_ioreq_server(h, xen_domid, i, s, b, d, f)
+#define xendevicemodel_destroy_ioreq_server(h, i) \
+ xc_hvm_destroy_ioreq_server(h, xen_domid, i)
+
+#endif
+
#endif
/* Xen before 4.6 */
typedef uint16_t ioservid_t;
-static inline void xen_map_memory_section(xc_interface *xc, domid_t dom,
+static inline void xen_map_memory_section(xendevicemodel_handle *dm,
ioservid_t ioservid,
MemoryRegionSection *section)
{
}
-static inline void xen_unmap_memory_section(xc_interface *xc, domid_t dom,
+static inline void xen_unmap_memory_section(xendevicemodel_handle *dm,
ioservid_t ioservid,
MemoryRegionSection *section)
{
}
-static inline void xen_map_io_section(xc_interface *xc, domid_t dom,
+static inline void xen_map_io_section(xendevicemodel_handle *dm,
ioservid_t ioservid,
MemoryRegionSection *section)
{
}
-static inline void xen_unmap_io_section(xc_interface *xc, domid_t dom,
+static inline void xen_unmap_io_section(xendevicemodel_handle *dm,
ioservid_t ioservid,
MemoryRegionSection *section)
{
}
-static inline void xen_map_pcidev(xc_interface *xc, domid_t dom,
+static inline void xen_map_pcidev(xendevicemodel_handle *dm,
ioservid_t ioservid,
PCIDevice *pci_dev)
{
}
-static inline void xen_unmap_pcidev(xc_interface *xc, domid_t dom,
+static inline void xen_unmap_pcidev(xendevicemodel_handle *dm,
ioservid_t ioservid,
PCIDevice *pci_dev)
{
}
-static inline int xen_create_ioreq_server(xc_interface *xc, domid_t dom,
+static inline int xen_create_ioreq_server(xendevicemodel_handle *dm,
ioservid_t *ioservid)
{
return 0;
}
-static inline void xen_destroy_ioreq_server(xc_interface *xc, domid_t dom,
+static inline void xen_destroy_ioreq_server(xendevicemodel_handle *dm,
ioservid_t ioservid)
{
}
-static inline int xen_get_ioreq_server_info(xc_interface *xc, domid_t dom,
+static inline int xen_get_ioreq_server_info(xendevicemodel_handle *h,
ioservid_t ioservid,
xen_pfn_t *ioreq_pfn,
xen_pfn_t *bufioreq_pfn,
unsigned long param;
int rc;
- rc = xc_get_hvm_param(xc, dom, HVM_PARAM_IOREQ_PFN, ¶m);
+ rc = xc_get_hvm_param(h, xen_domid, HVM_PARAM_IOREQ_PFN, ¶m);
if (rc < 0) {
fprintf(stderr, "failed to get HVM_PARAM_IOREQ_PFN\n");
return -1;
*ioreq_pfn = param;
- rc = xc_get_hvm_param(xc, dom, HVM_PARAM_BUFIOREQ_PFN, ¶m);
+ rc = xc_get_hvm_param(h, xen_domid, HVM_PARAM_BUFIOREQ_PFN, ¶m);
if (rc < 0) {
fprintf(stderr, "failed to get HVM_PARAM_BUFIOREQ_PFN\n");
return -1;
*bufioreq_pfn = param;
- rc = xc_get_hvm_param(xc, dom, HVM_PARAM_BUFIOREQ_EVTCHN,
+ rc = xc_get_hvm_param(h, xen_domid, HVM_PARAM_BUFIOREQ_EVTCHN,
¶m);
if (rc < 0) {
fprintf(stderr, "failed to get HVM_PARAM_BUFIOREQ_EVTCHN\n");
return 0;
}
-static inline int xen_set_ioreq_server_state(xc_interface *xc, domid_t dom,
+static inline int xen_set_ioreq_server_state(xendevicemodel_handle *h,
ioservid_t ioservid,
bool enable)
{
/* Xen 4.5 */
#else
-static inline void xen_map_memory_section(xc_interface *xc, domid_t dom,
+static inline void xen_map_memory_section(xendevicemodel_handle *dm,
ioservid_t ioservid,
MemoryRegionSection *section)
{
hwaddr end_addr = start_addr + size - 1;
trace_xen_map_mmio_range(ioservid, start_addr, end_addr);
- xc_hvm_map_io_range_to_ioreq_server(xc, dom, ioservid, 1,
- start_addr, end_addr);
+ xendevicemodel_map_io_range_to_ioreq_server(dm, ioservid, true,
+ start_addr, end_addr);
}
-static inline void xen_unmap_memory_section(xc_interface *xc, domid_t dom,
+static inline void xen_unmap_memory_section(xendevicemodel_handle *dm,
ioservid_t ioservid,
MemoryRegionSection *section)
{
hwaddr end_addr = start_addr + size - 1;
trace_xen_unmap_mmio_range(ioservid, start_addr, end_addr);
- xc_hvm_unmap_io_range_from_ioreq_server(xc, dom, ioservid, 1,
- start_addr, end_addr);
+ xendevicemodel_unmap_io_range_from_ioreq_server(dm, ioservid, true,
+ start_addr, end_addr);
}
-static inline void xen_map_io_section(xc_interface *xc, domid_t dom,
+static inline void xen_map_io_section(xendevicemodel_handle *dm,
ioservid_t ioservid,
MemoryRegionSection *section)
{
hwaddr end_addr = start_addr + size - 1;
trace_xen_map_portio_range(ioservid, start_addr, end_addr);
- xc_hvm_map_io_range_to_ioreq_server(xc, dom, ioservid, 0,
- start_addr, end_addr);
+ xendevicemodel_map_io_range_to_ioreq_server(dm, ioservid, false,
+ start_addr, end_addr);
}
-static inline void xen_unmap_io_section(xc_interface *xc, domid_t dom,
+static inline void xen_unmap_io_section(xendevicemodel_handle *dm,
ioservid_t ioservid,
MemoryRegionSection *section)
{
hwaddr end_addr = start_addr + size - 1;
trace_xen_unmap_portio_range(ioservid, start_addr, end_addr);
- xc_hvm_unmap_io_range_from_ioreq_server(xc, dom, ioservid, 0,
- start_addr, end_addr);
+ xendevicemodel_unmap_io_range_from_ioreq_server(dm, ioservid, false,
+ start_addr, end_addr);
}
-static inline void xen_map_pcidev(xc_interface *xc, domid_t dom,
+static inline void xen_map_pcidev(xendevicemodel_handle *dm,
ioservid_t ioservid,
PCIDevice *pci_dev)
{
trace_xen_map_pcidev(ioservid, pci_bus_num(pci_dev->bus),
PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn));
- xc_hvm_map_pcidev_to_ioreq_server(xc, dom, ioservid,
+ xendevicemodel_map_pcidev_to_ioreq_server(dm, ioservid,
0, pci_bus_num(pci_dev->bus),
PCI_SLOT(pci_dev->devfn),
PCI_FUNC(pci_dev->devfn));
}
-static inline void xen_unmap_pcidev(xc_interface *xc, domid_t dom,
+static inline void xen_unmap_pcidev(xendevicemodel_handle *dm,
ioservid_t ioservid,
PCIDevice *pci_dev)
{
trace_xen_unmap_pcidev(ioservid, pci_bus_num(pci_dev->bus),
PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn));
- xc_hvm_unmap_pcidev_from_ioreq_server(xc, dom, ioservid,
- 0, pci_bus_num(pci_dev->bus),
- PCI_SLOT(pci_dev->devfn),
- PCI_FUNC(pci_dev->devfn));
+ xendevicemodel_unmap_pcidev_from_ioreq_server(dm, ioservid,
+ 0, pci_bus_num(pci_dev->bus),
+ PCI_SLOT(pci_dev->devfn),
+ PCI_FUNC(pci_dev->devfn));
}
-static inline int xen_create_ioreq_server(xc_interface *xc, domid_t dom,
+static inline int xen_create_ioreq_server(xendevicemodel_handle *dm,
ioservid_t *ioservid)
{
- int rc = xc_hvm_create_ioreq_server(xc, dom, HVM_IOREQSRV_BUFIOREQ_ATOMIC,
- ioservid);
+ int rc = xendevicemodel_create_ioreq_server(dm, true, ioservid);
if (rc == 0) {
trace_xen_ioreq_server_create(*ioservid);
return rc;
}
-static inline void xen_destroy_ioreq_server(xc_interface *xc, domid_t dom,
+static inline void xen_destroy_ioreq_server(xendevicemodel_handle *dm,
ioservid_t ioservid)
{
trace_xen_ioreq_server_destroy(ioservid);
- xc_hvm_destroy_ioreq_server(xc, dom, ioservid);
+ xendevicemodel_destroy_ioreq_server(dm, ioservid);
}
-static inline int xen_get_ioreq_server_info(xc_interface *xc, domid_t dom,
+static inline int xen_get_ioreq_server_info(xendevicemodel_handle *dm,
ioservid_t ioservid,
xen_pfn_t *ioreq_pfn,
xen_pfn_t *bufioreq_pfn,
evtchn_port_t *bufioreq_evtchn)
{
- return xc_hvm_get_ioreq_server_info(xc, dom, ioservid,
+ return xendevicemodel_get_ioreq_server_info(dm, ioservid,
ioreq_pfn, bufioreq_pfn,
bufioreq_evtchn);
}
-static inline int xen_set_ioreq_server_state(xc_interface *xc, domid_t dom,
+static inline int xen_set_ioreq_server_state(xendevicemodel_handle *dm,
ioservid_t ioservid,
bool enable)
{
trace_xen_ioreq_server_state(ioservid, enable);
- return xc_hvm_set_ioreq_server_state(xc, dom, ioservid, enable);
+ return xendevicemodel_set_ioreq_server_state(dm, ioservid, enable);
}
#endif
return;
} else {
if (add) {
- xen_map_memory_section(xen_xc, xen_domid, state->ioservid,
- section);
+ xen_map_memory_section(xen_dm, state->ioservid, section);
} else {
- xen_unmap_memory_section(xen_xc, xen_domid, state->ioservid,
- section);
+ xen_unmap_memory_section(xen_dm, state->ioservid, section);
}
}
memory_region_ref(section->mr);
- xen_map_io_section(xen_xc, xen_domid, state->ioservid, section);
+ xen_map_io_section(xen_dm, state->ioservid, section);
}
static void xen_io_del(MemoryListener *listener,
{
XenIOState *state = container_of(listener, XenIOState, io_listener);
- xen_unmap_io_section(xen_xc, xen_domid, state->ioservid, section);
+ xen_unmap_io_section(xen_dm, state->ioservid, section);
memory_region_unref(section->mr);
}
if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
PCIDevice *pci_dev = PCI_DEVICE(dev);
- xen_map_pcidev(xen_xc, xen_domid, state->ioservid, pci_dev);
+ xen_map_pcidev(xen_dm, state->ioservid, pci_dev);
}
}
if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
PCIDevice *pci_dev = PCI_DEVICE(dev);
- xen_unmap_pcidev(xen_xc, xen_domid, state->ioservid, pci_dev);
+ xen_unmap_pcidev(xen_dm, state->ioservid, pci_dev);
}
}
xen_main_loop_prepare(state);
}
- xen_set_ioreq_server_state(xen_xc, xen_domid,
- state->ioservid,
+ xen_set_ioreq_server_state(xen_dm, state->ioservid,
(rstate == RUN_STATE_RUNNING));
}
xen_restrict_target_failure_is_fatal("xendevicemodel", dm_restrict_errno))
goto err;
- rc = xen_create_ioreq_server(xen_xc, xen_domid, &state->ioservid);
+ rc = xen_create_ioreq_server(xen_dm, &state->ioservid);
if (rc < 0) {
perror("xen: ioreq server create");
goto err;
state->wakeup.notify = xen_wakeup_notifier;
qemu_register_wakeup_notifier(&state->wakeup);
- rc = xen_get_ioreq_server_info(xen_xc, xen_domid, state->ioservid,
+ rc = xen_get_ioreq_server_info(xen_dm, state->ioservid,
&ioreq_pfn, &bufioreq_pfn,
&bufioreq_evtchn);
if (rc < 0) {
/* Note: cpus is empty at this point in init */
state->cpu_by_vcpu_id = g_malloc0(max_cpus * sizeof(CPUState *));
- rc = xen_set_ioreq_server_state(xen_xc, xen_domid, state->ioservid, true);
+ rc = xen_set_ioreq_server_state(xen_dm, state->ioservid, true);
if (rc < 0) {
error_report("failed to enable ioreq server info: error %d handle=%p",
errno, xen_xc);