Files
xen/tools/libxc/xc_devicemodel_compat.c
T
Paul Durrant 6902cb00e0 tools/libxendevicemodel: extract functions and add a compat layer
This patch extracts all functions resulting in a dm_op hypercall from
libxenctrl and moves them into libxendevicemodel. It also adds a compat
layer into libxenctrl, which can be selected by defining
XC_WANT_COMPAT_DEVICEMODEL_API to 1 before including xenctrl.h.

With this patch the core of libxendevicemodel still uses libxencall to
issue the dm_op hypercalls, but this is done by calling through code that
can be modified on a per-OS basis. A subsequent patch will add a Linux-
specific variant.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
2017-02-23 11:57:40 +00:00

140 lines
4.6 KiB
C

/*
* Compat shims for use of 3rd party consumers of libxenctrl device model
* functionality which has been split into separate libraries.
*/
#define XC_WANT_COMPAT_DEVICEMODEL_API
#include "xc_private.h"
int xc_hvm_create_ioreq_server(
xc_interface *xch, domid_t domid, int handle_bufioreq,
ioservid_t *id)
{
return xendevicemodel_create_ioreq_server(xch->dmod, domid,
handle_bufioreq, id);
}
int xc_hvm_get_ioreq_server_info(
xc_interface *xch, domid_t domid, ioservid_t id, xen_pfn_t *ioreq_pfn,
xen_pfn_t *bufioreq_pfn, evtchn_port_t *bufioreq_port)
{
return xendevicemodel_get_ioreq_server_info(xch->dmod, domid, id,
ioreq_pfn, bufioreq_pfn,
bufioreq_port);
}
int xc_hvm_map_io_range_to_ioreq_server(
xc_interface *xch, domid_t domid, ioservid_t id, int is_mmio,
uint64_t start, uint64_t end)
{
return xendevicemodel_map_io_range_to_ioreq_server(xch->dmod, domid,
id, is_mmio, start,
end);
}
int xc_hvm_unmap_io_range_from_ioreq_server(
xc_interface *xch, domid_t domid, ioservid_t id, int is_mmio,
uint64_t start, uint64_t end)
{
return xendevicemodel_unmap_io_range_from_ioreq_server(xch->dmod, domid,
id, is_mmio,
start, end);
}
int xc_hvm_map_pcidev_to_ioreq_server(
xc_interface *xch, domid_t domid, ioservid_t id, uint16_t segment,
uint8_t bus, uint8_t device, uint8_t function)
{
return xendevicemodel_map_pcidev_to_ioreq_server(xch->dmod, domid, id,
segment, bus, device,
function);
}
int xc_hvm_unmap_pcidev_from_ioreq_server(
xc_interface *xch, domid_t domid, ioservid_t id, uint16_t segment,
uint8_t bus, uint8_t device, uint8_t function)
{
return xendevicemodel_unmap_pcidev_from_ioreq_server(xch->dmod, domid,
id, segment, bus,
device, function);
}
int xc_hvm_destroy_ioreq_server(
xc_interface *xch, domid_t domid, ioservid_t id)
{
return xendevicemodel_destroy_ioreq_server(xch->dmod, domid, id);
}
int xc_hvm_set_ioreq_server_state(
xc_interface *xch, domid_t domid, ioservid_t id, int enabled)
{
return xendevicemodel_set_ioreq_server_state(xch->dmod, domid, id,
enabled);
}
int xc_hvm_set_pci_intx_level(
xc_interface *xch, domid_t domid, uint16_t segment, uint8_t bus,
uint8_t device, uint8_t intx, unsigned int level)
{
return xendevicemodel_set_pci_intx_level(xch->dmod, domid, segment,
bus, device, intx, level);
}
int xc_hvm_set_isa_irq_level(
xc_interface *xch, domid_t domid, uint8_t irq, unsigned int level)
{
return xendevicemodel_set_isa_irq_level(xch->dmod, domid, irq, level);
}
int xc_hvm_set_pci_link_route(
xc_interface *xch, domid_t domid, uint8_t link, uint8_t irq)
{
return xendevicemodel_set_pci_link_route(xch->dmod, domid, link, irq);
}
int xc_hvm_inject_msi(
xc_interface *xch, domid_t domid, uint64_t msi_addr, uint32_t msi_data)
{
return xendevicemodel_inject_msi(xch->dmod, domid, msi_addr, msi_data);
}
int xc_hvm_track_dirty_vram(
xc_interface *xch, domid_t domid, uint64_t first_pfn, uint32_t nr,
unsigned long *dirty_bitmap)
{
return xendevicemodel_track_dirty_vram(xch->dmod, domid, first_pfn,
nr, dirty_bitmap);
}
int xc_hvm_modified_memory(
xc_interface *xch, domid_t domid, uint64_t first_pfn, uint32_t nr)
{
return xendevicemodel_modified_memory(xch->dmod, domid, first_pfn, nr);
}
int xc_hvm_set_mem_type(
xc_interface *xch, domid_t domid, hvmmem_type_t type,
uint64_t first_pfn, uint32_t nr)
{
return xendevicemodel_set_mem_type(xch->dmod, domid, type, first_pfn,
nr);
}
int xc_hvm_inject_trap(
xc_interface *xch, domid_t domid, int vcpu, uint8_t vector,
uint8_t type, uint32_t error_code, uint8_t insn_len, uint64_t cr2)
{
return xendevicemodel_inject_event(xch->dmod, domid, vcpu, vector,
type, error_code, insn_len, cr2);
}
/*
* Local variables:
* mode: C
* c-file-style: "BSD"
* c-basic-offset: 4
* tab-width: 4
* indent-tabs-mode: nil
* End:
*/