hvgdk_ext.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Type definitions for the Microsoft Hypervisor.
  4. */
  5. #ifndef _HV_HVGDK_EXT_H
  6. #define _HV_HVGDK_EXT_H
  7. #include "hvgdk_mini.h"
  8. /* Extended hypercalls */
  9. #define HV_EXT_CALL_QUERY_CAPABILITIES 0x8001
  10. #define HV_EXT_CALL_MEMORY_HEAT_HINT 0x8003
  11. /* Extended hypercalls */
  12. enum { /* HV_EXT_CALL */
  13. HV_EXTCALL_QUERY_CAPABILITIES = 0x8001,
  14. HV_EXTCALL_MEMORY_HEAT_HINT = 0x8003,
  15. };
  16. /* HV_EXT_OUTPUT_QUERY_CAPABILITIES */
  17. #define HV_EXT_CAPABILITY_MEMORY_COLD_DISCARD_HINT BIT(8)
  18. enum { /* HV_EXT_MEMORY_HEAT_HINT_TYPE */
  19. HV_EXTMEM_HEAT_HINT_COLD = 0,
  20. HV_EXTMEM_HEAT_HINT_HOT = 1,
  21. HV_EXTMEM_HEAT_HINT_COLD_DISCARD = 2,
  22. HV_EXTMEM_HEAT_HINT_MAX
  23. };
  24. /*
  25. * The whole argument should fit in a page to be able to pass to the hypervisor
  26. * in one hypercall.
  27. */
  28. #define HV_MEMORY_HINT_MAX_GPA_PAGE_RANGES \
  29. ((HV_HYP_PAGE_SIZE - sizeof(struct hv_memory_hint)) / \
  30. sizeof(union hv_gpa_page_range))
  31. /* HvExtCallMemoryHeatHint hypercall */
  32. #define HV_EXT_MEMORY_HEAT_HINT_TYPE_COLD_DISCARD 2
  33. struct hv_memory_hint { /* HV_EXT_INPUT_MEMORY_HEAT_HINT */
  34. u64 heat_type : 2; /* HV_EXTMEM_HEAT_HINT_* */
  35. u64 reserved : 62;
  36. union hv_gpa_page_range ranges[];
  37. } __packed;
  38. #endif /* _HV_HVGDK_EXT_H */