mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 04:06:46 +00:00 
			
		
		
		
	 14efd8d3b5
			
		
	
	
		14efd8d3b5
		
	
	
	
	
		
			
			This is quite a complicated check. I moved all the test programs to a single file in scripts/, picking the right program with #if and a -D flag in meson.build's cc.links() invocation. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
			
				
	
	
		
			204 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			5.6 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;
 | |
|   }
 | |
| 
 | |
| #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
 |