mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-05-09 00:46:57 +00:00
move the following files to guest folder: renamed: arch/x86/assign.c -> arch/x86/guest/assign.c renamed: arch/x86/ept.c -> arch/x86/guest/ept.c renamed: arch/x86/io_emul.c -> arch/x86/guest/io_emul.c renamed: arch/x86/trusty.c -> arch/x86/guest/trusty.c renamed: arch/x86/virq.c -> arch/x86/guest/virq.c renamed: arch/x86/virtual_cr.c -> arch/x86/guest/virtual_cr.c renamed: arch/x86/vmcs.c -> arch/x86/guest/vmcs.c renamed: arch/x86/vmexit.c -> arch/x86/guest/vmexit.c renamed: arch/x86/vmx_asm.S -> arch/x86/guest/vmx_asm.S renamed: include/arch/x86/assign.h -> include/arch/x86/guest/assign.h renamed: include/arch/x86/io_emul.h -> include/arch/x86/guest/io_emul.h renamed: include/arch/x86/trusty.h -> include/arch/x86/guest/trusty.h renamed: include/arch/x86/virtual_cr.h -> include/arch/x86/guest/virtual_cr.h renamed: include/arch/x86/vmcs.h -> include/arch/x86/guest/vmcs.h renamed: include/arch/x86/vmexit.h -> include/arch/x86/guest/vmexit.h After these files movement, all the files in arch/x86 are native hardware related, and all the files in arch/x86/guest are virtualiztion related. Tracked-On: #1842 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>
87 lines
2.3 KiB
C
87 lines
2.3 KiB
C
/*
|
|
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef VMEXIT_H_
|
|
#define VMEXIT_H_
|
|
|
|
struct vm_exit_dispatch {
|
|
int32_t (*handler)(struct acrn_vcpu *);
|
|
uint32_t need_exit_qualification;
|
|
};
|
|
|
|
int32_t vmexit_handler(struct acrn_vcpu *vcpu);
|
|
int32_t vmcall_vmexit_handler(struct acrn_vcpu *vcpu);
|
|
int32_t cpuid_vmexit_handler(struct acrn_vcpu *vcpu);
|
|
extern void vm_exit(void);
|
|
static inline uint64_t
|
|
vm_exit_qualification_bit_mask(uint64_t exit_qual, uint32_t msb, uint32_t lsb)
|
|
{
|
|
return (exit_qual &
|
|
(((1UL << (msb + 1U)) - 1UL) - ((1UL << lsb) - 1UL)));
|
|
}
|
|
|
|
/* access Control-Register Info using exit qualification field */
|
|
static inline uint64_t vm_exit_cr_access_cr_num(uint64_t exit_qual)
|
|
{
|
|
return (vm_exit_qualification_bit_mask(exit_qual, 3U, 0U) >> 0U);
|
|
}
|
|
|
|
static inline uint64_t vm_exit_cr_access_type(uint64_t exit_qual)
|
|
{
|
|
return (vm_exit_qualification_bit_mask(exit_qual, 5U, 4U) >> 4U);
|
|
}
|
|
|
|
static inline uint64_t vm_exit_cr_access_lmsw_op(uint64_t exit_qual)
|
|
{
|
|
return (vm_exit_qualification_bit_mask(exit_qual, 6U, 6U) >> 6U);
|
|
}
|
|
|
|
static inline uint64_t vm_exit_cr_access_reg_idx(uint64_t exit_qual)
|
|
{
|
|
return (vm_exit_qualification_bit_mask(exit_qual, 11U, 8U) >> 8U);
|
|
}
|
|
|
|
static inline uint64_t vm_exit_cr_access_lmsw_src_date(uint64_t exit_qual)
|
|
{
|
|
return (vm_exit_qualification_bit_mask(exit_qual, 31U, 16U) >> 16U);
|
|
}
|
|
|
|
/* access IO Access Info using exit qualification field */
|
|
static inline uint64_t vm_exit_io_instruction_size(uint64_t exit_qual)
|
|
{
|
|
return (vm_exit_qualification_bit_mask(exit_qual, 2U, 0U) >> 0U);
|
|
}
|
|
|
|
static inline uint64_t
|
|
vm_exit_io_instruction_access_direction(uint64_t exit_qual)
|
|
{
|
|
return (vm_exit_qualification_bit_mask(exit_qual, 3U, 3U) >> 3U);
|
|
}
|
|
|
|
static inline uint64_t vm_exit_io_instruction_is_string(uint64_t exit_qual)
|
|
{
|
|
return (vm_exit_qualification_bit_mask(exit_qual, 4U, 4U) >> 4U);
|
|
}
|
|
|
|
static inline uint64_t
|
|
vm_exit_io_instruction_is_rep_prefixed(uint64_t exit_qual)
|
|
{
|
|
return (vm_exit_qualification_bit_mask(exit_qual, 5U, 5U) >> 5U);
|
|
}
|
|
|
|
static inline uint64_t
|
|
vm_exit_io_instruction_is_operand_encoding(uint64_t exit_qual)
|
|
{
|
|
return (vm_exit_qualification_bit_mask(exit_qual, 6U, 6U) >> 6U);
|
|
}
|
|
|
|
static inline uint64_t vm_exit_io_instruction_port_number(uint64_t exit_qual)
|
|
{
|
|
return (vm_exit_qualification_bit_mask(exit_qual, 31U, 16U) >> 16U);
|
|
}
|
|
|
|
#endif /* VMEXIT_H_ */
|