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