xen.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _XEN_XEN_H
  3. #define _XEN_XEN_H
  4. enum xen_domain_type {
  5. XEN_NATIVE, /* running on bare hardware */
  6. XEN_PV_DOMAIN, /* running in a PV domain */
  7. XEN_HVM_DOMAIN, /* running in a Xen hvm domain */
  8. };
  9. #ifdef CONFIG_XEN
  10. extern enum xen_domain_type xen_domain_type;
  11. #else
  12. #define xen_domain_type XEN_NATIVE
  13. #endif
  14. #ifdef CONFIG_XEN_PVH
  15. extern bool xen_pvh;
  16. #else
  17. #define xen_pvh 0
  18. #endif
  19. #define xen_domain() (xen_domain_type != XEN_NATIVE)
  20. #define xen_pv_domain() (xen_domain_type == XEN_PV_DOMAIN)
  21. #define xen_hvm_domain() (xen_domain_type == XEN_HVM_DOMAIN)
  22. #define xen_pvh_domain() (xen_pvh)
  23. #include <linux/types.h>
  24. extern uint32_t xen_start_flags;
  25. #include <xen/interface/hvm/start_info.h>
  26. extern struct hvm_start_info pvh_start_info;
  27. #ifdef CONFIG_XEN_DOM0
  28. #include <xen/interface/xen.h>
  29. #include <asm/xen/hypervisor.h>
  30. #define xen_initial_domain() (xen_domain() && \
  31. (xen_start_flags & SIF_INITDOMAIN))
  32. #else /* !CONFIG_XEN_DOM0 */
  33. #define xen_initial_domain() (0)
  34. #endif /* CONFIG_XEN_DOM0 */
  35. struct bio_vec;
  36. struct page;
  37. bool xen_biovec_phys_mergeable(const struct bio_vec *vec1,
  38. const struct page *page);
  39. #if defined(CONFIG_MEMORY_HOTPLUG) && defined(CONFIG_XEN_BALLOON)
  40. extern u64 xen_saved_max_mem_size;
  41. #endif
  42. #ifdef CONFIG_XEN_UNPOPULATED_ALLOC
  43. int xen_alloc_unpopulated_pages(unsigned int nr_pages, struct page **pages);
  44. void xen_free_unpopulated_pages(unsigned int nr_pages, struct page **pages);
  45. #include <linux/ioport.h>
  46. int arch_xen_unpopulated_init(struct resource **res);
  47. #else
  48. #include <xen/balloon.h>
  49. static inline int xen_alloc_unpopulated_pages(unsigned int nr_pages,
  50. struct page **pages)
  51. {
  52. return xen_alloc_ballooned_pages(nr_pages, pages);
  53. }
  54. static inline void xen_free_unpopulated_pages(unsigned int nr_pages,
  55. struct page **pages)
  56. {
  57. xen_free_ballooned_pages(nr_pages, pages);
  58. }
  59. #endif
  60. #if defined(CONFIG_XEN_DOM0) && defined(CONFIG_ACPI) && defined(CONFIG_X86)
  61. bool __init xen_processor_present(uint32_t acpi_id);
  62. #else
  63. #include <linux/bug.h>
  64. static inline bool xen_processor_present(uint32_t acpi_id)
  65. {
  66. BUG();
  67. return false;
  68. }
  69. #endif
  70. #endif /* _XEN_XEN_H */