xen-detect.c 5.6 KB

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