mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-23 09:47:44 +00:00
refine hypercall
-- use an array to fast locate the hypercall handler to replace switch case. -- uniform hypercall handler as below: int32_t (*handler)(sos_vm, target_vm, param1, param2) Tracked-On: #4958 Signed-off-by: Mingqiang Chi <mingqiang.chi@intel.com> Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com> Reviewed-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
@@ -225,7 +225,6 @@ bool is_created_vm(const struct acrn_vm *vm);
|
||||
bool is_paused_vm(const struct acrn_vm *vm);
|
||||
bool is_sos_vm(const struct acrn_vm *vm);
|
||||
bool is_postlaunched_vm(const struct acrn_vm *vm);
|
||||
bool is_valid_postlaunched_vmid(uint16_t vm_id);
|
||||
bool is_prelaunched_vm(const struct acrn_vm *vm);
|
||||
uint16_t get_vmid_by_uuid(const uint8_t *uuid);
|
||||
struct acrn_vm *get_vm_from_vmid(uint16_t vm_id);
|
||||
|
@@ -28,12 +28,14 @@ bool is_hypercall_from_ring0(void);
|
||||
* The function offline specific vcpu from SOS.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param lapicid lapic id of the vcpu which wants to offline
|
||||
* @param target_vm not used
|
||||
* @param param1 lapic id of the vcpu which wants to offline
|
||||
* @param param2 not used
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_sos_offline_cpu(struct acrn_vm *vm, uint64_t lapicid);
|
||||
int32_t hcall_sos_offline_cpu(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Get hypervisor api version
|
||||
@@ -41,14 +43,15 @@ int32_t hcall_sos_offline_cpu(struct acrn_vm *vm, uint64_t lapicid);
|
||||
* The function only return api version information when VM is SOS_VM.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param param guest physical memory address. The api version returned
|
||||
* @param target_vm not used
|
||||
* @param param1 guest physical memory address. The api version returned
|
||||
* will be copied to this gpa
|
||||
* @param param2 not used
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_get_api_version(struct acrn_vm *vm, uint64_t param);
|
||||
|
||||
int32_t hcall_get_api_version(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Get basic platform information.
|
||||
@@ -57,12 +60,14 @@ int32_t hcall_get_api_version(struct acrn_vm *vm, uint64_t param);
|
||||
* for the current platform.
|
||||
*
|
||||
* @param vm Pointer to VM data structure.
|
||||
* @param param GPA pointer to struct hc_platform_info.
|
||||
* @param target_vm not used
|
||||
* @param param1 GPA pointer to struct hc_platform_info.
|
||||
* @param param2 not used
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, -1 in case of error.
|
||||
*/
|
||||
int32_t hcall_get_platform_info(struct acrn_vm *vm, uint64_t param);
|
||||
int32_t hcall_get_platform_info(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief create virtual machine
|
||||
@@ -72,13 +77,15 @@ int32_t hcall_get_platform_info(struct acrn_vm *vm, uint64_t param);
|
||||
* support later.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param param guest physical memory address. This gpa points to
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 guest physical memory address. This gpa points to
|
||||
* struct acrn_create_vm
|
||||
* @param param2 not used
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_create_vm(struct acrn_vm *vm, uint64_t param);
|
||||
int32_t hcall_create_vm(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief destroy virtual machine
|
||||
@@ -86,11 +93,14 @@ int32_t hcall_create_vm(struct acrn_vm *vm, uint64_t param);
|
||||
* Destroy a virtual machine, it will pause target VM then shutdown it.
|
||||
* The function will return -1 if the target VM does not exist.
|
||||
*
|
||||
* @param vmid ID of the VM
|
||||
* @param vm not used
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 not used
|
||||
*
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_destroy_vm(uint16_t vmid);
|
||||
int32_t hcall_destroy_vm(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief reset virtual machine
|
||||
@@ -100,11 +110,14 @@ int32_t hcall_destroy_vm(uint16_t vmid);
|
||||
* each vcpu state and do some initialization for guest.
|
||||
* The function will return -1 if the target VM does not exist.
|
||||
*
|
||||
* @param vmid ID of the VM
|
||||
* @param vm not used
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 not used
|
||||
*
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_reset_vm(uint16_t vmid);
|
||||
int32_t hcall_reset_vm(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief start virtual machine
|
||||
@@ -113,11 +126,14 @@ int32_t hcall_reset_vm(uint16_t vmid);
|
||||
* The function will return -1 if the target VM does not exist or the
|
||||
* IOReq buffer page for the VM is not ready.
|
||||
*
|
||||
* @param vmid ID of the VM
|
||||
* @param vm not used
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 not used
|
||||
*
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_start_vm(uint16_t vmid);
|
||||
int32_t hcall_start_vm(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief pause virtual machine
|
||||
@@ -126,11 +142,14 @@ int32_t hcall_start_vm(uint16_t vmid);
|
||||
* will return 0 directly for success.
|
||||
* The function will return -1 if the target VM does not exist.
|
||||
*
|
||||
* @param vmid ID of the VM
|
||||
* @param vm not used
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 not used
|
||||
*
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_pause_vm(uint16_t vmid);
|
||||
int32_t hcall_pause_vm(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief set vcpu regs
|
||||
@@ -140,13 +159,14 @@ int32_t hcall_pause_vm(uint16_t vmid);
|
||||
* The function will return -1 if the targat VM or BSP doesn't exist.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param param guest physical address. This gpa points to
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to
|
||||
* struct acrn_vcpu_regs
|
||||
*
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_set_vcpu_regs(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
int32_t hcall_set_vcpu_regs(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief set or clear IRQ line
|
||||
@@ -156,14 +176,15 @@ int32_t hcall_set_vcpu_regs(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
* The function will return -1 if the target VM does not exist.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param ops request command for IRQ set or clear
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 info for irqline
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_set_irqline(const struct acrn_vm *vm, uint16_t vmid,
|
||||
const struct acrn_irqline_ops *ops);
|
||||
int32_t hcall_set_irqline(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief inject MSI interrupt
|
||||
*
|
||||
@@ -171,13 +192,14 @@ int32_t hcall_set_irqline(const struct acrn_vm *vm, uint16_t vmid,
|
||||
* The function will return -1 if the target VM does not exist.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param param guest physical address. This gpa points to struct acrn_msi_entry
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to struct acrn_msi_entry
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_inject_msi(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
int32_t hcall_inject_msi(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief set ioreq shared buffer
|
||||
@@ -186,14 +208,15 @@ int32_t hcall_inject_msi(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
* The function will return -1 if the target VM does not exist.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param param guest physical address. This gpa points to
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to
|
||||
* struct acrn_set_ioreq_buffer
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_set_ioreq_buffer(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
int32_t hcall_set_ioreq_buffer(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief notify request done
|
||||
@@ -201,37 +224,42 @@ int32_t hcall_set_ioreq_buffer(struct acrn_vm *vm, uint16_t vmid, uint64_t param
|
||||
* Notify the requestor VCPU for the completion of an ioreq.
|
||||
* The function will return -1 if the target VM does not exist.
|
||||
*
|
||||
* @param vmid ID of the VM
|
||||
* @param vcpu_id vcpu ID of the requestor
|
||||
* @param vm not used
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 vcpu ID of the requestor
|
||||
*
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_notify_ioreq_finish(uint16_t vmid, uint16_t vcpu_id);
|
||||
int32_t hcall_notify_ioreq_finish(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief setup ept memory mapping for multi regions
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param param guest physical address. This gpa points to
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 guest physical address. This gpa points to
|
||||
* struct set_memmaps
|
||||
* @param param2 not used
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_set_vm_memory_regions(struct acrn_vm *vm, uint64_t param);
|
||||
int32_t hcall_set_vm_memory_regions(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief change guest memory page write permission
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param wp_gpa guest physical address. This gpa points to
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to
|
||||
* struct wp_data
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_write_protect_page(struct acrn_vm *vm, uint16_t vmid, uint64_t wp_gpa);
|
||||
int32_t hcall_write_protect_page(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief translate guest physical address to host physical address
|
||||
@@ -240,131 +268,125 @@ int32_t hcall_write_protect_page(struct acrn_vm *vm, uint16_t vmid, uint64_t wp_
|
||||
* The function will return -1 if the target VM does not exist.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param param guest physical address. This gpa points to struct vm_gpa2hpa
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to struct vm_gpa2hpa
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_gpa_to_hpa(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
int32_t hcall_gpa_to_hpa(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Assign one PCI dev to VM.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param param guest physical address. This gpa points to data structure of
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to data structure of
|
||||
* acrn_assign_pcidev including assign PCI device info
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_assign_pcidev(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
int32_t hcall_assign_pcidev(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Deassign one PCI dev to VM.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param param guest physical address. This gpa points to data structure of
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to data structure of
|
||||
* acrn_assign_pcidev including deassign PCI device info
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_deassign_pcidev(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
int32_t hcall_deassign_pcidev(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Assign one MMIO dev to VM.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param param guest physical address. This gpa points to data structure of
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to data structure of
|
||||
* acrn_mmiodev including assign MMIO device info
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_assign_mmiodev(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
int32_t hcall_assign_mmiodev(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Deassign one MMIO dev to VM.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param param guest physical address. This gpa points to data structure of
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to data structure of
|
||||
* acrn_mmiodev including deassign MMIO device info
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_deassign_mmiodev(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
int32_t hcall_deassign_mmiodev(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Set interrupt mapping info of ptdev.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param param guest physical address. This gpa points to data structure of
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to data structure of
|
||||
* hc_ptdev_irq including intr remapping info
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_set_ptdev_intr_info(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
int32_t hcall_set_ptdev_intr_info(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Clear interrupt mapping info of ptdev.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param vmid ID of the VM
|
||||
* @param param guest physical address. This gpa points to data structure of
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to data structure of
|
||||
* hc_ptdev_irq including intr remapping info
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_reset_ptdev_intr_info(struct acrn_vm *vm, uint16_t vmid,
|
||||
uint64_t param);
|
||||
|
||||
/**
|
||||
* @brief Setup hypervisor debug infrastructure, such as share buffer, NPK log and profiling.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param param1 hypercall param1 from guest
|
||||
* @param param2 hypercall param2 from guest
|
||||
* @param hypcall_id hypercall ID from guest
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_debug(struct acrn_vm *vm, uint64_t param1, uint64_t param2, uint64_t hypcall_id);
|
||||
int32_t hcall_reset_ptdev_intr_info(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Get VCPU Power state.
|
||||
*
|
||||
* @param vm pointer to VM data structure
|
||||
* @param cmd cmd to show get which VCPU power state data
|
||||
* @param param VCPU power state data
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 cmd to show get which VCPU power state data
|
||||
* @param param2 VCPU power state data
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
|
||||
int32_t hcall_get_cpu_pm_state(struct acrn_vm *vm, uint64_t cmd, uint64_t param);
|
||||
int32_t hcall_get_cpu_pm_state(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Get VCPU a VM's interrupt count data.
|
||||
*
|
||||
* @param vm pointer to VM data structure
|
||||
* @param vmid id of the VM
|
||||
* @param param guest physical address. This gpa points to data structure of
|
||||
* @param target_vm Pointer to target VM data structure
|
||||
* @param param1 not used
|
||||
* @param param2 guest physical address. This gpa points to data structure of
|
||||
* acrn_intr_monitor
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_vm_intr_monitor(struct acrn_vm *vm, uint16_t vmid, uint64_t param);
|
||||
int32_t hcall_vm_intr_monitor(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @defgroup trusty_hypercall Trusty Hypercalls
|
||||
@@ -429,14 +451,75 @@ int32_t hcall_save_restore_sworld_ctx(struct acrn_vcpu *vcpu);
|
||||
* not called, the hypervisor will use the default notifier vector(0xF7)
|
||||
* to notify the SOS kernel.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param param the expected notifier vector from guest
|
||||
* @param vm not used
|
||||
* @param target_vm not used
|
||||
* @param param1 the expected notifier vector from guest
|
||||
* @param param2 not used
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_set_callback_vector(__unused const struct acrn_vm *vm, uint64_t param);
|
||||
int32_t hcall_set_callback_vector(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Setup a share buffer for a VM.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param target_vm not used
|
||||
* @param param1 guest physical address. This gpa points to
|
||||
* struct sbuf_setup_param
|
||||
* @param param2 not used
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_setup_sbuf(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Setup the hypervisor NPK log.
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param target_vm not used
|
||||
* @param param1 guest physical address. This gpa points to
|
||||
* struct hv_npk_log_param
|
||||
* @param param2 not used
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_setup_hv_npk_log(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Get hardware related info
|
||||
*
|
||||
* @param vm Pointer to vm data structure
|
||||
* @param target_vm not used
|
||||
* @param param1 Guest physical address pointing to struct acrn_hw_info
|
||||
* @param param2 not used
|
||||
*
|
||||
* @pre vm shall point to SOS_VM
|
||||
* @pre param1 shall be a valid physical address
|
||||
*
|
||||
* @retval 0 on success
|
||||
* @retval -1 in case of error
|
||||
*/
|
||||
int32_t hcall_get_hw_info(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
/**
|
||||
* @brief Execute profiling operation
|
||||
*
|
||||
* @param vm Pointer to VM data structure
|
||||
* @param target_vm not used
|
||||
* @param param1 profiling command to be executed
|
||||
* @param param2 guest physical address. This gpa points to
|
||||
* data structure required by each command
|
||||
*
|
||||
* @pre Pointer vm shall point to SOS_VM
|
||||
* @return 0 on success, non-zero on error.
|
||||
*/
|
||||
int32_t hcall_profiling_ops(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
|
||||
int32_t hcall_create_vcpu(struct acrn_vm *vm, struct acrn_vm *target_vm, uint64_t param1, uint64_t param2);
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
@@ -20,6 +20,7 @@
|
||||
*/
|
||||
|
||||
#define BASE_HC_ID(x, y) (((x)<<24U)|(y))
|
||||
#define HC_IDX(id) ((id)&(0xFFUL))
|
||||
|
||||
#define HC_ID 0x80UL
|
||||
|
||||
|
Reference in New Issue
Block a user