19c5137aeSShuo Liu /* SPDX-License-Identifier: GPL-2.0 */ 29c5137aeSShuo Liu /* 39c5137aeSShuo Liu * ACRN HSM: hypercalls of ACRN Hypervisor 49c5137aeSShuo Liu */ 59c5137aeSShuo Liu #ifndef __ACRN_HSM_HYPERCALL_H 69c5137aeSShuo Liu #define __ACRN_HSM_HYPERCALL_H 79c5137aeSShuo Liu #include <asm/acrn.h> 89c5137aeSShuo Liu 99c5137aeSShuo Liu /* 109c5137aeSShuo Liu * Hypercall IDs of the ACRN Hypervisor 119c5137aeSShuo Liu */ 129c5137aeSShuo Liu #define _HC_ID(x, y) (((x) << 24) | (y)) 139c5137aeSShuo Liu 149c5137aeSShuo Liu #define HC_ID 0x80UL 159c5137aeSShuo Liu 169c5137aeSShuo Liu #define HC_ID_VM_BASE 0x10UL 179c5137aeSShuo Liu #define HC_CREATE_VM _HC_ID(HC_ID, HC_ID_VM_BASE + 0x00) 189c5137aeSShuo Liu #define HC_DESTROY_VM _HC_ID(HC_ID, HC_ID_VM_BASE + 0x01) 199c5137aeSShuo Liu #define HC_START_VM _HC_ID(HC_ID, HC_ID_VM_BASE + 0x02) 209c5137aeSShuo Liu #define HC_PAUSE_VM _HC_ID(HC_ID, HC_ID_VM_BASE + 0x03) 219c5137aeSShuo Liu #define HC_RESET_VM _HC_ID(HC_ID, HC_ID_VM_BASE + 0x05) 222ad2aaeeSShuo Liu #define HC_SET_VCPU_REGS _HC_ID(HC_ID, HC_ID_VM_BASE + 0x06) 239c5137aeSShuo Liu 24*72f293deSShuo Liu #define HC_ID_IOREQ_BASE 0x30UL 25*72f293deSShuo Liu #define HC_SET_IOREQ_BUFFER _HC_ID(HC_ID, HC_ID_IOREQ_BASE + 0x00) 26*72f293deSShuo Liu #define HC_NOTIFY_REQUEST_FINISH _HC_ID(HC_ID, HC_ID_IOREQ_BASE + 0x01) 27*72f293deSShuo Liu 2888f537d5SShuo Liu #define HC_ID_MEM_BASE 0x40UL 2988f537d5SShuo Liu #define HC_VM_SET_MEMORY_REGIONS _HC_ID(HC_ID, HC_ID_MEM_BASE + 0x02) 3088f537d5SShuo Liu 319c5137aeSShuo Liu /** 329c5137aeSShuo Liu * hcall_create_vm() - Create a User VM 339c5137aeSShuo Liu * @vminfo: Service VM GPA of info of User VM creation 349c5137aeSShuo Liu * 359c5137aeSShuo Liu * Return: 0 on success, <0 on failure 369c5137aeSShuo Liu */ 379c5137aeSShuo Liu static inline long hcall_create_vm(u64 vminfo) 389c5137aeSShuo Liu { 399c5137aeSShuo Liu return acrn_hypercall1(HC_CREATE_VM, vminfo); 409c5137aeSShuo Liu } 419c5137aeSShuo Liu 429c5137aeSShuo Liu /** 439c5137aeSShuo Liu * hcall_start_vm() - Start a User VM 449c5137aeSShuo Liu * @vmid: User VM ID 459c5137aeSShuo Liu * 469c5137aeSShuo Liu * Return: 0 on success, <0 on failure 479c5137aeSShuo Liu */ 489c5137aeSShuo Liu static inline long hcall_start_vm(u64 vmid) 499c5137aeSShuo Liu { 509c5137aeSShuo Liu return acrn_hypercall1(HC_START_VM, vmid); 519c5137aeSShuo Liu } 529c5137aeSShuo Liu 539c5137aeSShuo Liu /** 549c5137aeSShuo Liu * hcall_pause_vm() - Pause a User VM 559c5137aeSShuo Liu * @vmid: User VM ID 569c5137aeSShuo Liu * 579c5137aeSShuo Liu * Return: 0 on success, <0 on failure 589c5137aeSShuo Liu */ 599c5137aeSShuo Liu static inline long hcall_pause_vm(u64 vmid) 609c5137aeSShuo Liu { 619c5137aeSShuo Liu return acrn_hypercall1(HC_PAUSE_VM, vmid); 629c5137aeSShuo Liu } 639c5137aeSShuo Liu 649c5137aeSShuo Liu /** 659c5137aeSShuo Liu * hcall_destroy_vm() - Destroy a User VM 669c5137aeSShuo Liu * @vmid: User VM ID 679c5137aeSShuo Liu * 689c5137aeSShuo Liu * Return: 0 on success, <0 on failure 699c5137aeSShuo Liu */ 709c5137aeSShuo Liu static inline long hcall_destroy_vm(u64 vmid) 719c5137aeSShuo Liu { 729c5137aeSShuo Liu return acrn_hypercall1(HC_DESTROY_VM, vmid); 739c5137aeSShuo Liu } 749c5137aeSShuo Liu 759c5137aeSShuo Liu /** 769c5137aeSShuo Liu * hcall_reset_vm() - Reset a User VM 779c5137aeSShuo Liu * @vmid: User VM ID 789c5137aeSShuo Liu * 799c5137aeSShuo Liu * Return: 0 on success, <0 on failure 809c5137aeSShuo Liu */ 819c5137aeSShuo Liu static inline long hcall_reset_vm(u64 vmid) 829c5137aeSShuo Liu { 839c5137aeSShuo Liu return acrn_hypercall1(HC_RESET_VM, vmid); 849c5137aeSShuo Liu } 859c5137aeSShuo Liu 862ad2aaeeSShuo Liu /** 872ad2aaeeSShuo Liu * hcall_set_vcpu_regs() - Set up registers of virtual CPU of a User VM 882ad2aaeeSShuo Liu * @vmid: User VM ID 892ad2aaeeSShuo Liu * @regs_state: Service VM GPA of registers state 902ad2aaeeSShuo Liu * 912ad2aaeeSShuo Liu * Return: 0 on success, <0 on failure 922ad2aaeeSShuo Liu */ 932ad2aaeeSShuo Liu static inline long hcall_set_vcpu_regs(u64 vmid, u64 regs_state) 942ad2aaeeSShuo Liu { 952ad2aaeeSShuo Liu return acrn_hypercall2(HC_SET_VCPU_REGS, vmid, regs_state); 962ad2aaeeSShuo Liu } 972ad2aaeeSShuo Liu 9888f537d5SShuo Liu /** 99*72f293deSShuo Liu * hcall_set_ioreq_buffer() - Set up the shared buffer for I/O Requests. 100*72f293deSShuo Liu * @vmid: User VM ID 101*72f293deSShuo Liu * @buffer: Service VM GPA of the shared buffer 102*72f293deSShuo Liu * 103*72f293deSShuo Liu * Return: 0 on success, <0 on failure 104*72f293deSShuo Liu */ 105*72f293deSShuo Liu static inline long hcall_set_ioreq_buffer(u64 vmid, u64 buffer) 106*72f293deSShuo Liu { 107*72f293deSShuo Liu return acrn_hypercall2(HC_SET_IOREQ_BUFFER, vmid, buffer); 108*72f293deSShuo Liu } 109*72f293deSShuo Liu 110*72f293deSShuo Liu /** 111*72f293deSShuo Liu * hcall_notify_req_finish() - Notify ACRN Hypervisor of I/O request completion. 112*72f293deSShuo Liu * @vmid: User VM ID 113*72f293deSShuo Liu * @vcpu: The vCPU which initiated the I/O request 114*72f293deSShuo Liu * 115*72f293deSShuo Liu * Return: 0 on success, <0 on failure 116*72f293deSShuo Liu */ 117*72f293deSShuo Liu static inline long hcall_notify_req_finish(u64 vmid, u64 vcpu) 118*72f293deSShuo Liu { 119*72f293deSShuo Liu return acrn_hypercall2(HC_NOTIFY_REQUEST_FINISH, vmid, vcpu); 120*72f293deSShuo Liu } 121*72f293deSShuo Liu 122*72f293deSShuo Liu /** 12388f537d5SShuo Liu * hcall_set_memory_regions() - Inform the hypervisor to set up EPT mappings 12488f537d5SShuo Liu * @regions_pa: Service VM GPA of &struct vm_memory_region_batch 12588f537d5SShuo Liu * 12688f537d5SShuo Liu * Return: 0 on success, <0 on failure 12788f537d5SShuo Liu */ 12888f537d5SShuo Liu static inline long hcall_set_memory_regions(u64 regions_pa) 12988f537d5SShuo Liu { 13088f537d5SShuo Liu return acrn_hypercall1(HC_VM_SET_MEMORY_REGIONS, regions_pa); 13188f537d5SShuo Liu } 13288f537d5SShuo Liu 1339c5137aeSShuo Liu #endif /* __ACRN_HSM_HYPERCALL_H */ 134