mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-23 09:47:44 +00:00
hv: refine the function pointer type of port I/O request handlers
In the definition of port i/o handler, struct acrn_vm * pointer is redundant as input, as context of acrn_vm is aleady linked in struct acrn_vcpu * by vcpu->vm, 'vm' is not required as input. this patch removes argument '*vm' from 'io_read_fn_t' & 'io_write_fn_t', use '*vcpu' for them instead. Tracked-On: #861 Signed-off-by: Yonghua Huang <yonghua.huang@intel.com> Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com>
This commit is contained in:
committed by
ACRN System Integration
parent
866935a53f
commit
f791574f0e
@@ -140,7 +140,7 @@ static inline uint8_t get_slp_typx(uint32_t pm1_cnt)
|
||||
return (uint8_t)((pm1_cnt & 0x1fffU) >> BIT_SLP_TYPx);
|
||||
}
|
||||
|
||||
static bool pm1ab_io_read(__unused struct acrn_vm *vm, struct acrn_vcpu *vcpu, uint16_t addr, size_t width)
|
||||
static bool pm1ab_io_read(struct acrn_vcpu *vcpu, uint16_t addr, size_t width)
|
||||
{
|
||||
struct pio_request *pio_req = &vcpu->req.reqs.pio;
|
||||
|
||||
@@ -165,11 +165,16 @@ static inline void enter_s3(struct acrn_vm *vm, uint32_t pm1a_cnt_val, uint32_t
|
||||
resume_vm_from_s3(vm, guest_wakeup_vec32); /* jump back to vm */
|
||||
}
|
||||
|
||||
static bool pm1ab_io_write(struct acrn_vm *vm, uint16_t addr, size_t width, uint32_t v)
|
||||
/**
|
||||
* @pre vcpu != NULL
|
||||
* @pre vcpu->vm != NULL
|
||||
*/
|
||||
static bool pm1ab_io_write(struct acrn_vcpu *vcpu, uint16_t addr, size_t width, uint32_t v)
|
||||
{
|
||||
static uint32_t pm1a_cnt_ready = 0U;
|
||||
uint32_t pm1a_cnt_val;
|
||||
bool to_write = true;
|
||||
struct acrn_vm *vm = vcpu->vm;
|
||||
|
||||
if (width == 2U) {
|
||||
uint8_t val = get_slp_typx(v);
|
||||
@@ -237,7 +242,7 @@ void register_pm1ab_handler(struct acrn_vm *vm)
|
||||
register_gas_io_handler(vm, PM1B_CNT_PIO_IDX, &(sx_data->pm1b_cnt));
|
||||
}
|
||||
|
||||
static bool rt_vm_pm1a_io_read(__unused struct acrn_vm *vm, __unused struct acrn_vcpu *vcpu,
|
||||
static bool rt_vm_pm1a_io_read(__unused struct acrn_vcpu *vcpu,
|
||||
__unused uint16_t addr, __unused size_t width)
|
||||
{
|
||||
return false;
|
||||
@@ -247,13 +252,17 @@ static bool rt_vm_pm1a_io_read(__unused struct acrn_vm *vm, __unused struct acrn
|
||||
* retval true means that we complete the emulation in HV and no need to re-inject the request to DM.
|
||||
* retval false means that we should re-inject the request to DM.
|
||||
*/
|
||||
static bool rt_vm_pm1a_io_write(struct acrn_vm *vm, uint16_t addr, size_t width, uint32_t v)
|
||||
/**
|
||||
* @pre vcpu != NULL
|
||||
* @pre vcpu->vm != NULL
|
||||
*/
|
||||
static bool rt_vm_pm1a_io_write(struct acrn_vcpu *vcpu, uint16_t addr, size_t width, uint32_t v)
|
||||
{
|
||||
if (width != 2U) {
|
||||
pr_dbg("Invalid address (0x%x) or width (0x%x)", addr, width);
|
||||
} else {
|
||||
if ((((v & VIRTUAL_PM1A_SLP_EN) != 0U) && (((v & VIRTUAL_PM1A_SLP_TYP) >> 10U) == 5U)) != 0U) {
|
||||
vm->state = VM_POWERING_OFF;
|
||||
vcpu->vm->state = VM_POWERING_OFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -110,14 +110,15 @@ static void reset_host(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @pre vcpu != NULL && vm != NULL
|
||||
* @pre vcpu != NULL
|
||||
* @pre vcpu->vm != NULL
|
||||
*/
|
||||
static bool handle_reset_reg_read(struct acrn_vm *vm, struct acrn_vcpu *vcpu, __unused uint16_t addr,
|
||||
static bool handle_reset_reg_read(struct acrn_vcpu *vcpu, __unused uint16_t addr,
|
||||
__unused size_t bytes)
|
||||
{
|
||||
bool ret = true;
|
||||
|
||||
if (is_postlaunched_vm(vm)) {
|
||||
if (is_postlaunched_vm(vcpu->vm)) {
|
||||
/* re-inject to DM */
|
||||
ret = false;
|
||||
} else {
|
||||
@@ -161,12 +162,13 @@ static bool handle_common_reset_reg_write(struct acrn_vm *vm, bool reset)
|
||||
}
|
||||
|
||||
/**
|
||||
* @pre vm != NULL
|
||||
* @pre vcpu != NULL
|
||||
* @pre vcpu->vm != NULL
|
||||
*/
|
||||
static bool handle_kb_write(struct acrn_vm *vm, __unused uint16_t addr, size_t bytes, uint32_t val)
|
||||
static bool handle_kb_write(struct acrn_vcpu *vcpu, __unused uint16_t addr, size_t bytes, uint32_t val)
|
||||
{
|
||||
/* ignore commands other than system reset */
|
||||
return handle_common_reset_reg_write(vm, ((bytes == 1U) && (val == 0xfeU)));
|
||||
return handle_common_reset_reg_write(vcpu->vm, ((bytes == 1U) && (val == 0xfeU)));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -178,19 +180,25 @@ static bool handle_kb_write(struct acrn_vm *vm, __unused uint16_t addr, size_t b
|
||||
* 0: will be dropped if system in S3/S4/S5.
|
||||
*/
|
||||
/**
|
||||
* @pre vm != NULL
|
||||
* @pre vcpu != NULL
|
||||
* @pre vcpu->vm != NULL
|
||||
*/
|
||||
static bool handle_cf9_write(struct acrn_vm *vm, __unused uint16_t addr, size_t bytes, uint32_t val)
|
||||
static bool handle_cf9_write(struct acrn_vcpu *vcpu, __unused uint16_t addr, size_t bytes, uint32_t val)
|
||||
{
|
||||
/* We don't differentiate among hard/soft/warm/cold reset */
|
||||
return handle_common_reset_reg_write(vm, ((bytes == 1U) && ((val & 0x4U) == 0x4U) && ((val & 0xaU) != 0U)));
|
||||
return handle_common_reset_reg_write(vcpu->vm,
|
||||
((bytes == 1U) && ((val & 0x4U) == 0x4U) && ((val & 0xaU) != 0U)));
|
||||
}
|
||||
|
||||
static bool handle_reset_reg_write(__unused struct acrn_vm *vm, uint16_t addr, size_t bytes, uint32_t val)
|
||||
/**
|
||||
* @pre vcpu != NULL
|
||||
* @pre vcpu->vm != NULL
|
||||
*/
|
||||
static bool handle_reset_reg_write(struct acrn_vcpu *vcpu, uint16_t addr, size_t bytes, uint32_t val)
|
||||
{
|
||||
if (bytes == 1U) {
|
||||
if (val == host_reset_reg.val) {
|
||||
if (is_highest_severity_vm(vm)) {
|
||||
if (is_highest_severity_vm(vcpu->vm)) {
|
||||
reset_host();
|
||||
} else {
|
||||
/* ignore reset request */
|
||||
|
Reference in New Issue
Block a user