| /* 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; |
| } |
| |
| #elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40600 |
| #include <xenctrl.h> |
| #include <xenstore.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; |
| xs_daemon_open(); |
| xc = xc_interface_open(0, 0, 0); |
| xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); |
| xc_gnttab_open(NULL, 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); |
| xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); |
| return 0; |
| } |
| |
| #elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40500 |
| #include <xenctrl.h> |
| #include <xenstore.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; |
| xs_daemon_open(); |
| xc = xc_interface_open(0, 0, 0); |
| xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); |
| xc_gnttab_open(NULL, 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, 0, NULL); |
| return 0; |
| } |
| |
| #elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40200 |
| #include <xenctrl.h> |
| #include <xenstore.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; |
| xs_daemon_open(); |
| xc = xc_interface_open(0, 0, 0); |
| xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); |
| xc_gnttab_open(NULL, 0); |
| xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); |
| xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); |
| return 0; |
| } |
| |
| #else |
| #error invalid CONFIG_XEN_CTRL_INTERFACE_VERSION |
| #endif |