mirror of
https://github.com/qemu/qemu.git
synced 2024-12-17 09:13:44 +08:00
144 lines
3.8 KiB
C
144 lines
3.8 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||
|
|
||
|
/* Test programs for various Xen versions that QEMU supports. */
|
||
|
#if CONFIG_XEN_CTRL_INTERFACE_VERSION == 41100
|
||
|
#undef XC_WANT_COMPAT_DEVICEMODEL_API
|
||
|
#define __XEN_TOOLS__
|
||
|
#include <xendevicemodel.h>
|
||
|
#include <xenforeignmemory.h>
|
||
|
int main(void) {
|
||
|
xendevicemodel_handle *xd;
|
||
|
xenforeignmemory_handle *xfmem;
|
||
|
|
||
|
xd = xendevicemodel_open(0, 0);
|
||
|
xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
|
||
|
|
||
|
xfmem = xenforeignmemory_open(0, 0);
|
||
|
xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 41000
|
||
|
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
|
||
|
#include <xenforeignmemory.h>
|
||
|
#include <xentoolcore.h>
|
||
|
int main(void) {
|
||
|
xenforeignmemory_handle *xfmem;
|
||
|
|
||
|
xfmem = xenforeignmemory_open(0, 0);
|
||
|
xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
|
||
|
xentoolcore_restrict_all(0);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40900
|
||
|
#undef XC_WANT_COMPAT_DEVICEMODEL_API
|
||
|
#define __XEN_TOOLS__
|
||
|
#include <xendevicemodel.h>
|
||
|
int main(void) {
|
||
|
xendevicemodel_handle *xd;
|
||
|
|
||
|
xd = xendevicemodel_open(0, 0);
|
||
|
xendevicemodel_close(xd);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40800
|
||
|
/*
|
||
|
* If we have stable libs the we don't want the libxc compat
|
||
|
* layers, regardless of what CFLAGS we may have been given.
|
||
|
*
|
||
|
* Also, check if xengnttab_grant_copy_segment_t is defined and
|
||
|
* grant copy operation is implemented.
|
||
|
*/
|
||
|
#undef XC_WANT_COMPAT_EVTCHN_API
|
||
|
#undef XC_WANT_COMPAT_GNTTAB_API
|
||
|
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
|
||
|
#include <xenctrl.h>
|
||
|
#include <xenstore.h>
|
||
|
#include <xenevtchn.h>
|
||
|
#include <xengnttab.h>
|
||
|
#include <xenforeignmemory.h>
|
||
|
#include <stdint.h>
|
||
|
#include <xen/hvm/hvm_info_table.h>
|
||
|
#if !defined(HVM_MAX_VCPUS)
|
||
|
# error HVM_MAX_VCPUS not defined
|
||
|
#endif
|
||
|
int main(void) {
|
||
|
xc_interface *xc = NULL;
|
||
|
xenforeignmemory_handle *xfmem;
|
||
|
xenevtchn_handle *xe;
|
||
|
xengnttab_handle *xg;
|
||
|
xengnttab_grant_copy_segment_t* seg = NULL;
|
||
|
|
||
|
xs_daemon_open();
|
||
|
|
||
|
xc = xc_interface_open(0, 0, 0);
|
||
|
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
|
||
|
xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
|
||
|
xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
|
||
|
xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
|
||
|
|
||
|
xfmem = xenforeignmemory_open(0, 0);
|
||
|
xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
|
||
|
|
||
|
xe = xenevtchn_open(0, 0);
|
||
|
xenevtchn_fd(xe);
|
||
|
|
||
|
xg = xengnttab_open(0, 0);
|
||
|
xengnttab_grant_copy(xg, 0, seg);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40701
|
||
|
/*
|
||
|
* If we have stable libs the we don't want the libxc compat
|
||
|
* layers, regardless of what CFLAGS we may have been given.
|
||
|
*/
|
||
|
#undef XC_WANT_COMPAT_EVTCHN_API
|
||
|
#undef XC_WANT_COMPAT_GNTTAB_API
|
||
|
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
|
||
|
#include <xenctrl.h>
|
||
|
#include <xenstore.h>
|
||
|
#include <xenevtchn.h>
|
||
|
#include <xengnttab.h>
|
||
|
#include <xenforeignmemory.h>
|
||
|
#include <stdint.h>
|
||
|
#include <xen/hvm/hvm_info_table.h>
|
||
|
#if !defined(HVM_MAX_VCPUS)
|
||
|
# error HVM_MAX_VCPUS not defined
|
||
|
#endif
|
||
|
int main(void) {
|
||
|
xc_interface *xc = NULL;
|
||
|
xenforeignmemory_handle *xfmem;
|
||
|
xenevtchn_handle *xe;
|
||
|
xengnttab_handle *xg;
|
||
|
|
||
|
xs_daemon_open();
|
||
|
|
||
|
xc = xc_interface_open(0, 0, 0);
|
||
|
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
|
||
|
xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
|
||
|
xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
|
||
|
xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
|
||
|
|
||
|
xfmem = xenforeignmemory_open(0, 0);
|
||
|
xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
|
||
|
|
||
|
xe = xenevtchn_open(0, 0);
|
||
|
xenevtchn_fd(xe);
|
||
|
|
||
|
xg = xengnttab_open(0, 0);
|
||
|
xengnttab_map_grant_ref(xg, 0, 0, 0);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
#else
|
||
|
#error invalid CONFIG_XEN_CTRL_INTERFACE_VERSION
|
||
|
#endif
|