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 2472f293deSShuo Liu #define HC_ID_IOREQ_BASE 0x30UL 2572f293deSShuo Liu #define HC_SET_IOREQ_BUFFER _HC_ID(HC_ID, HC_ID_IOREQ_BASE + 0x00) 2672f293deSShuo Liu #define HC_NOTIFY_REQUEST_FINISH _HC_ID(HC_ID, HC_ID_IOREQ_BASE + 0x01) 2772f293deSShuo 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 31*ce011e13SShuo Liu #define HC_ID_PCI_BASE 0x50UL 32*ce011e13SShuo Liu #define HC_SET_PTDEV_INTR _HC_ID(HC_ID, HC_ID_PCI_BASE + 0x03) 33*ce011e13SShuo Liu #define HC_RESET_PTDEV_INTR _HC_ID(HC_ID, HC_ID_PCI_BASE + 0x04) 34*ce011e13SShuo Liu #define HC_ASSIGN_PCIDEV _HC_ID(HC_ID, HC_ID_PCI_BASE + 0x05) 35*ce011e13SShuo Liu #define HC_DEASSIGN_PCIDEV _HC_ID(HC_ID, HC_ID_PCI_BASE + 0x06) 36*ce011e13SShuo Liu 379c5137aeSShuo Liu /** 389c5137aeSShuo Liu * hcall_create_vm() - Create a User VM 399c5137aeSShuo Liu * @vminfo: Service VM GPA of info of User VM creation 409c5137aeSShuo Liu * 419c5137aeSShuo Liu * Return: 0 on success, <0 on failure 429c5137aeSShuo Liu */ 439c5137aeSShuo Liu static inline long hcall_create_vm(u64 vminfo) 449c5137aeSShuo Liu { 459c5137aeSShuo Liu return acrn_hypercall1(HC_CREATE_VM, vminfo); 469c5137aeSShuo Liu } 479c5137aeSShuo Liu 489c5137aeSShuo Liu /** 499c5137aeSShuo Liu * hcall_start_vm() - Start a User VM 509c5137aeSShuo Liu * @vmid: User VM ID 519c5137aeSShuo Liu * 529c5137aeSShuo Liu * Return: 0 on success, <0 on failure 539c5137aeSShuo Liu */ 549c5137aeSShuo Liu static inline long hcall_start_vm(u64 vmid) 559c5137aeSShuo Liu { 569c5137aeSShuo Liu return acrn_hypercall1(HC_START_VM, vmid); 579c5137aeSShuo Liu } 589c5137aeSShuo Liu 599c5137aeSShuo Liu /** 609c5137aeSShuo Liu * hcall_pause_vm() - Pause a User VM 619c5137aeSShuo Liu * @vmid: User VM ID 629c5137aeSShuo Liu * 639c5137aeSShuo Liu * Return: 0 on success, <0 on failure 649c5137aeSShuo Liu */ 659c5137aeSShuo Liu static inline long hcall_pause_vm(u64 vmid) 669c5137aeSShuo Liu { 679c5137aeSShuo Liu return acrn_hypercall1(HC_PAUSE_VM, vmid); 689c5137aeSShuo Liu } 699c5137aeSShuo Liu 709c5137aeSShuo Liu /** 719c5137aeSShuo Liu * hcall_destroy_vm() - Destroy a User VM 729c5137aeSShuo Liu * @vmid: User VM ID 739c5137aeSShuo Liu * 749c5137aeSShuo Liu * Return: 0 on success, <0 on failure 759c5137aeSShuo Liu */ 769c5137aeSShuo Liu static inline long hcall_destroy_vm(u64 vmid) 779c5137aeSShuo Liu { 789c5137aeSShuo Liu return acrn_hypercall1(HC_DESTROY_VM, vmid); 799c5137aeSShuo Liu } 809c5137aeSShuo Liu 819c5137aeSShuo Liu /** 829c5137aeSShuo Liu * hcall_reset_vm() - Reset a User VM 839c5137aeSShuo Liu * @vmid: User VM ID 849c5137aeSShuo Liu * 859c5137aeSShuo Liu * Return: 0 on success, <0 on failure 869c5137aeSShuo Liu */ 879c5137aeSShuo Liu static inline long hcall_reset_vm(u64 vmid) 889c5137aeSShuo Liu { 899c5137aeSShuo Liu return acrn_hypercall1(HC_RESET_VM, vmid); 909c5137aeSShuo Liu } 919c5137aeSShuo Liu 922ad2aaeeSShuo Liu /** 932ad2aaeeSShuo Liu * hcall_set_vcpu_regs() - Set up registers of virtual CPU of a User VM 942ad2aaeeSShuo Liu * @vmid: User VM ID 952ad2aaeeSShuo Liu * @regs_state: Service VM GPA of registers state 962ad2aaeeSShuo Liu * 972ad2aaeeSShuo Liu * Return: 0 on success, <0 on failure 982ad2aaeeSShuo Liu */ 992ad2aaeeSShuo Liu static inline long hcall_set_vcpu_regs(u64 vmid, u64 regs_state) 1002ad2aaeeSShuo Liu { 1012ad2aaeeSShuo Liu return acrn_hypercall2(HC_SET_VCPU_REGS, vmid, regs_state); 1022ad2aaeeSShuo Liu } 1032ad2aaeeSShuo Liu 10488f537d5SShuo Liu /** 10572f293deSShuo Liu * hcall_set_ioreq_buffer() - Set up the shared buffer for I/O Requests. 10672f293deSShuo Liu * @vmid: User VM ID 10772f293deSShuo Liu * @buffer: Service VM GPA of the shared buffer 10872f293deSShuo Liu * 10972f293deSShuo Liu * Return: 0 on success, <0 on failure 11072f293deSShuo Liu */ 11172f293deSShuo Liu static inline long hcall_set_ioreq_buffer(u64 vmid, u64 buffer) 11272f293deSShuo Liu { 11372f293deSShuo Liu return acrn_hypercall2(HC_SET_IOREQ_BUFFER, vmid, buffer); 11472f293deSShuo Liu } 11572f293deSShuo Liu 11672f293deSShuo Liu /** 11772f293deSShuo Liu * hcall_notify_req_finish() - Notify ACRN Hypervisor of I/O request completion. 11872f293deSShuo Liu * @vmid: User VM ID 11972f293deSShuo Liu * @vcpu: The vCPU which initiated the I/O request 12072f293deSShuo Liu * 12172f293deSShuo Liu * Return: 0 on success, <0 on failure 12272f293deSShuo Liu */ 12372f293deSShuo Liu static inline long hcall_notify_req_finish(u64 vmid, u64 vcpu) 12472f293deSShuo Liu { 12572f293deSShuo Liu return acrn_hypercall2(HC_NOTIFY_REQUEST_FINISH, vmid, vcpu); 12672f293deSShuo Liu } 12772f293deSShuo Liu 12872f293deSShuo Liu /** 12988f537d5SShuo Liu * hcall_set_memory_regions() - Inform the hypervisor to set up EPT mappings 13088f537d5SShuo Liu * @regions_pa: Service VM GPA of &struct vm_memory_region_batch 13188f537d5SShuo Liu * 13288f537d5SShuo Liu * Return: 0 on success, <0 on failure 13388f537d5SShuo Liu */ 13488f537d5SShuo Liu static inline long hcall_set_memory_regions(u64 regions_pa) 13588f537d5SShuo Liu { 13688f537d5SShuo Liu return acrn_hypercall1(HC_VM_SET_MEMORY_REGIONS, regions_pa); 13788f537d5SShuo Liu } 13888f537d5SShuo Liu 139*ce011e13SShuo Liu /** 140*ce011e13SShuo Liu * hcall_assign_pcidev() - Assign a PCI device to a User VM 141*ce011e13SShuo Liu * @vmid: User VM ID 142*ce011e13SShuo Liu * @addr: Service VM GPA of the &struct acrn_pcidev 143*ce011e13SShuo Liu * 144*ce011e13SShuo Liu * Return: 0 on success, <0 on failure 145*ce011e13SShuo Liu */ 146*ce011e13SShuo Liu static inline long hcall_assign_pcidev(u64 vmid, u64 addr) 147*ce011e13SShuo Liu { 148*ce011e13SShuo Liu return acrn_hypercall2(HC_ASSIGN_PCIDEV, vmid, addr); 149*ce011e13SShuo Liu } 150*ce011e13SShuo Liu 151*ce011e13SShuo Liu /** 152*ce011e13SShuo Liu * hcall_deassign_pcidev() - De-assign a PCI device from a User VM 153*ce011e13SShuo Liu * @vmid: User VM ID 154*ce011e13SShuo Liu * @addr: Service VM GPA of the &struct acrn_pcidev 155*ce011e13SShuo Liu * 156*ce011e13SShuo Liu * Return: 0 on success, <0 on failure 157*ce011e13SShuo Liu */ 158*ce011e13SShuo Liu static inline long hcall_deassign_pcidev(u64 vmid, u64 addr) 159*ce011e13SShuo Liu { 160*ce011e13SShuo Liu return acrn_hypercall2(HC_DEASSIGN_PCIDEV, vmid, addr); 161*ce011e13SShuo Liu } 162*ce011e13SShuo Liu 163*ce011e13SShuo Liu /** 164*ce011e13SShuo Liu * hcall_set_ptdev_intr() - Configure an interrupt for an assigned PCI device. 165*ce011e13SShuo Liu * @vmid: User VM ID 166*ce011e13SShuo Liu * @irq: Service VM GPA of the &struct acrn_ptdev_irq 167*ce011e13SShuo Liu * 168*ce011e13SShuo Liu * Return: 0 on success, <0 on failure 169*ce011e13SShuo Liu */ 170*ce011e13SShuo Liu static inline long hcall_set_ptdev_intr(u64 vmid, u64 irq) 171*ce011e13SShuo Liu { 172*ce011e13SShuo Liu return acrn_hypercall2(HC_SET_PTDEV_INTR, vmid, irq); 173*ce011e13SShuo Liu } 174*ce011e13SShuo Liu 175*ce011e13SShuo Liu /** 176*ce011e13SShuo Liu * hcall_reset_ptdev_intr() - Reset an interrupt for an assigned PCI device. 177*ce011e13SShuo Liu * @vmid: User VM ID 178*ce011e13SShuo Liu * @irq: Service VM GPA of the &struct acrn_ptdev_irq 179*ce011e13SShuo Liu * 180*ce011e13SShuo Liu * Return: 0 on success, <0 on failure 181*ce011e13SShuo Liu */ 182*ce011e13SShuo Liu static inline long hcall_reset_ptdev_intr(u64 vmid, u64 irq) 183*ce011e13SShuo Liu { 184*ce011e13SShuo Liu return acrn_hypercall2(HC_RESET_PTDEV_INTR, vmid, irq); 185*ce011e13SShuo Liu } 186*ce011e13SShuo Liu 1879c5137aeSShuo Liu #endif /* __ACRN_HSM_HYPERCALL_H */ 188