HV: make io_write_fn_t return true or false

This patch makes io_write_fn_t return true or false instead of void.
Returning true means that the handler in HV process the request completely.
Returning false means that we need to re-inject the request to DM after
processing it in HV.

Tracked-On: #2865
Signed-off-by: Kaige Fu <kaige.fu@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Kaige Fu
2019-03-28 14:36:50 +00:00
committed by ACRN System Integration
parent ed286e3239
commit 3b2ad67788
7 changed files with 33 additions and 15 deletions

View File

@@ -66,7 +66,7 @@ static uint32_t pci_cfgaddr_io_read(struct acrn_vm *vm, uint16_t addr, size_t by
/**
* @pre vm != NULL
*/
static void pci_cfgaddr_io_write(struct acrn_vm *vm, uint16_t addr, size_t bytes, uint32_t val)
static bool pci_cfgaddr_io_write(struct acrn_vm *vm, uint16_t addr, size_t bytes, uint32_t val)
{
struct acrn_vpci *vpci = &vm->vpci;
struct pci_addr_info *pi = &vpci->addr_info;
@@ -76,6 +76,8 @@ static void pci_cfgaddr_io_write(struct acrn_vm *vm, uint16_t addr, size_t bytes
pi->cached_reg = val & PCI_REGMAX;
pi->cached_enable = ((val & PCI_CFG_ENABLE) == PCI_CFG_ENABLE);
}
return true;
}
static inline bool vpci_is_valid_access_offset(uint32_t offset, uint32_t bytes)
@@ -135,7 +137,7 @@ static uint32_t pci_cfgdata_io_read(struct acrn_vm *vm, uint16_t addr, size_t by
* @pre vm->vm_id < CONFIG_MAX_VM_NUM
* @pre (get_vm_config(vm->vm_id)->type == PRE_LAUNCHED_VM) || (get_vm_config(vm->vm_id)->type == SOS_VM)
*/
static void pci_cfgdata_io_write(struct acrn_vm *vm, uint16_t addr, size_t bytes, uint32_t val)
static bool pci_cfgdata_io_write(struct acrn_vm *vm, uint16_t addr, size_t bytes, uint32_t val)
{
struct acrn_vpci *vpci = &vm->vpci;
struct pci_addr_info *pi = &vpci->addr_info;
@@ -163,6 +165,8 @@ static void pci_cfgdata_io_write(struct acrn_vm *vm, uint16_t addr, size_t bytes
}
pci_cfg_clear_cache(pi);
}
return true;
}
/**

View File

@@ -739,7 +739,7 @@ static uint32_t vpic_master_io_read(struct acrn_vm *vm, uint16_t addr, size_t wi
return val;
}
static void vpic_master_io_write(struct acrn_vm *vm, uint16_t addr, size_t width,
static bool vpic_master_io_write(struct acrn_vm *vm, uint16_t addr, size_t width,
uint32_t v)
{
uint32_t val = v;
@@ -748,6 +748,8 @@ static void vpic_master_io_write(struct acrn_vm *vm, uint16_t addr, size_t width
pr_err("%s: write port 0x%x width=%d value 0x%x failed\n",
__func__, addr, width, val);
}
return true;
}
static int32_t vpic_slave_handler(struct acrn_vm *vm, bool in, uint16_t port,
@@ -782,7 +784,7 @@ static uint32_t vpic_slave_io_read(struct acrn_vm *vm, uint16_t addr, size_t wid
return val;
}
static void vpic_slave_io_write(struct acrn_vm *vm, uint16_t addr, size_t width,
static bool vpic_slave_io_write(struct acrn_vm *vm, uint16_t addr, size_t width,
uint32_t v)
{
uint32_t val = v;
@@ -791,6 +793,8 @@ static void vpic_slave_io_write(struct acrn_vm *vm, uint16_t addr, size_t width,
pr_err("%s: write port 0x%x width=%d value 0x%x failed\n",
__func__, addr, width, val);
}
return true;
}
static int32_t vpic_elc_handler(struct acrn_vm *vm, bool in, uint16_t port, size_t bytes,
@@ -849,7 +853,7 @@ static uint32_t vpic_elc_io_read(struct acrn_vm *vm, uint16_t addr, size_t width
return val;
}
static void vpic_elc_io_write(struct acrn_vm *vm, uint16_t addr, size_t width,
static bool vpic_elc_io_write(struct acrn_vm *vm, uint16_t addr, size_t width,
uint32_t v)
{
uint32_t val = v;
@@ -858,6 +862,8 @@ static void vpic_elc_io_write(struct acrn_vm *vm, uint16_t addr, size_t width,
pr_err("%s: write port 0x%x width=%d value 0x%x failed\n",
__func__, addr, width, val);
}
return true;
}
static void vpic_register_io_handler(struct acrn_vm *vm)

View File

@@ -58,16 +58,14 @@ static uint32_t vrtc_read(struct acrn_vm *vm, uint16_t addr, __unused size_t wid
return reg;
}
static void vrtc_write(struct acrn_vm *vm, uint16_t addr, size_t width,
static bool vrtc_write(struct acrn_vm *vm, uint16_t addr, size_t width,
uint32_t value)
{
if (width != 1U)
return;
if (addr == CMOS_ADDR_PORT) {
if ((width == 1U) && (addr == CMOS_ADDR_PORT)) {
vm->vrtc_offset = value & 0x7FU;
}
return true;
}
void vrtc_init(struct acrn_vm *vm)