qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

xen-detect.c (5741B)


      1 /* SPDX-License-Identifier: GPL-2.0-or-later */
      2 
      3 /* Test programs for various Xen versions that QEMU supports.  */
      4 #if CONFIG_XEN_CTRL_INTERFACE_VERSION == 41100
      5   #undef XC_WANT_COMPAT_DEVICEMODEL_API
      6   #define __XEN_TOOLS__
      7   #include <xendevicemodel.h>
      8   #include <xenforeignmemory.h>
      9   int main(void) {
     10     xendevicemodel_handle *xd;
     11     xenforeignmemory_handle *xfmem;
     12 
     13     xd = xendevicemodel_open(0, 0);
     14     xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
     15 
     16     xfmem = xenforeignmemory_open(0, 0);
     17     xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
     18 
     19     return 0;
     20   }
     21 
     22 #elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 41000
     23   #undef XC_WANT_COMPAT_MAP_FOREIGN_API
     24   #include <xenforeignmemory.h>
     25   #include <xentoolcore.h>
     26   int main(void) {
     27     xenforeignmemory_handle *xfmem;
     28 
     29     xfmem = xenforeignmemory_open(0, 0);
     30     xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
     31     xentoolcore_restrict_all(0);
     32 
     33     return 0;
     34   }
     35 
     36 #elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40900
     37   #undef XC_WANT_COMPAT_DEVICEMODEL_API
     38   #define __XEN_TOOLS__
     39   #include <xendevicemodel.h>
     40   int main(void) {
     41     xendevicemodel_handle *xd;
     42 
     43     xd = xendevicemodel_open(0, 0);
     44     xendevicemodel_close(xd);
     45 
     46     return 0;
     47   }
     48 
     49 #elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40800
     50   /*
     51    * If we have stable libs the we don't want the libxc compat
     52    * layers, regardless of what CFLAGS we may have been given.
     53    *
     54    * Also, check if xengnttab_grant_copy_segment_t is defined and
     55    * grant copy operation is implemented.
     56    */
     57   #undef XC_WANT_COMPAT_EVTCHN_API
     58   #undef XC_WANT_COMPAT_GNTTAB_API
     59   #undef XC_WANT_COMPAT_MAP_FOREIGN_API
     60   #include <xenctrl.h>
     61   #include <xenstore.h>
     62   #include <xenevtchn.h>
     63   #include <xengnttab.h>
     64   #include <xenforeignmemory.h>
     65   #include <stdint.h>
     66   #include <xen/hvm/hvm_info_table.h>
     67   #if !defined(HVM_MAX_VCPUS)
     68   # error HVM_MAX_VCPUS not defined
     69   #endif
     70   int main(void) {
     71     xc_interface *xc = NULL;
     72     xenforeignmemory_handle *xfmem;
     73     xenevtchn_handle *xe;
     74     xengnttab_handle *xg;
     75     xengnttab_grant_copy_segment_t* seg = NULL;
     76 
     77     xs_daemon_open();
     78 
     79     xc = xc_interface_open(0, 0, 0);
     80     xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
     81     xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
     82     xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
     83     xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
     84 
     85     xfmem = xenforeignmemory_open(0, 0);
     86     xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
     87 
     88     xe = xenevtchn_open(0, 0);
     89     xenevtchn_fd(xe);
     90 
     91     xg = xengnttab_open(0, 0);
     92     xengnttab_grant_copy(xg, 0, seg);
     93 
     94     return 0;
     95   }
     96 
     97 #elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40701
     98   /*
     99    * If we have stable libs the we don't want the libxc compat
    100    * layers, regardless of what CFLAGS we may have been given.
    101    */
    102   #undef XC_WANT_COMPAT_EVTCHN_API
    103   #undef XC_WANT_COMPAT_GNTTAB_API
    104   #undef XC_WANT_COMPAT_MAP_FOREIGN_API
    105   #include <xenctrl.h>
    106   #include <xenstore.h>
    107   #include <xenevtchn.h>
    108   #include <xengnttab.h>
    109   #include <xenforeignmemory.h>
    110   #include <stdint.h>
    111   #include <xen/hvm/hvm_info_table.h>
    112   #if !defined(HVM_MAX_VCPUS)
    113   # error HVM_MAX_VCPUS not defined
    114   #endif
    115   int main(void) {
    116     xc_interface *xc = NULL;
    117     xenforeignmemory_handle *xfmem;
    118     xenevtchn_handle *xe;
    119     xengnttab_handle *xg;
    120 
    121     xs_daemon_open();
    122 
    123     xc = xc_interface_open(0, 0, 0);
    124     xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
    125     xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
    126     xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
    127     xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
    128 
    129     xfmem = xenforeignmemory_open(0, 0);
    130     xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
    131 
    132     xe = xenevtchn_open(0, 0);
    133     xenevtchn_fd(xe);
    134 
    135     xg = xengnttab_open(0, 0);
    136     xengnttab_map_grant_ref(xg, 0, 0, 0);
    137 
    138     return 0;
    139   }
    140 
    141 #elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40600
    142   #include <xenctrl.h>
    143   #include <xenstore.h>
    144   #include <stdint.h>
    145   #include <xen/hvm/hvm_info_table.h>
    146   #if !defined(HVM_MAX_VCPUS)
    147   # error HVM_MAX_VCPUS not defined
    148   #endif
    149   int main(void) {
    150     xc_interface *xc;
    151     xs_daemon_open();
    152     xc = xc_interface_open(0, 0, 0);
    153     xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
    154     xc_gnttab_open(NULL, 0);
    155     xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
    156     xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
    157     xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
    158     xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
    159     return 0;
    160   }
    161 
    162 #elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40500
    163   #include <xenctrl.h>
    164   #include <xenstore.h>
    165   #include <stdint.h>
    166   #include <xen/hvm/hvm_info_table.h>
    167   #if !defined(HVM_MAX_VCPUS)
    168   # error HVM_MAX_VCPUS not defined
    169   #endif
    170   int main(void) {
    171     xc_interface *xc;
    172     xs_daemon_open();
    173     xc = xc_interface_open(0, 0, 0);
    174     xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
    175     xc_gnttab_open(NULL, 0);
    176     xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
    177     xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
    178     xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
    179     return 0;
    180   }
    181 
    182 #elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40200
    183   #include <xenctrl.h>
    184   #include <xenstore.h>
    185   #include <stdint.h>
    186   #include <xen/hvm/hvm_info_table.h>
    187   #if !defined(HVM_MAX_VCPUS)
    188   # error HVM_MAX_VCPUS not defined
    189   #endif
    190   int main(void) {
    191     xc_interface *xc;
    192     xs_daemon_open();
    193     xc = xc_interface_open(0, 0, 0);
    194     xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
    195     xc_gnttab_open(NULL, 0);
    196     xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
    197     xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
    198     return 0;
    199   }
    200 
    201 #else
    202 #error invalid CONFIG_XEN_CTRL_INTERFACE_VERSION
    203 #endif