mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-08-13 13:56:19 +00:00
hv:Wrap some APIs related with guest pm
-- change some APIs to static -- combine two APIs to init_guest_pm Tracked-On: #1842 Signed-off-by: Mingqiang Chi <mingqiang.chi@intel.com>
This commit is contained in:
parent
988c1e483b
commit
292d1a15f9
@ -103,7 +103,7 @@ static inline void init_cx_port(struct acrn_vm *vm)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void vm_setup_cpu_state(struct acrn_vm *vm)
|
static void vm_setup_cpu_state(struct acrn_vm *vm)
|
||||||
{
|
{
|
||||||
vm_setup_cpu_px(vm);
|
vm_setup_cpu_px(vm);
|
||||||
vm_setup_cpu_cx(vm);
|
vm_setup_cpu_cx(vm);
|
||||||
@ -113,7 +113,7 @@ void vm_setup_cpu_state(struct acrn_vm *vm)
|
|||||||
/* This function is for power management Sx state implementation,
|
/* This function is for power management Sx state implementation,
|
||||||
* VM need to load the Sx state data to implement S3/S5.
|
* VM need to load the Sx state data to implement S3/S5.
|
||||||
*/
|
*/
|
||||||
int32_t vm_load_pm_s_state(struct acrn_vm *vm)
|
static int32_t vm_load_pm_s_state(struct acrn_vm *vm)
|
||||||
{
|
{
|
||||||
int32_t ret;
|
int32_t ret;
|
||||||
struct pm_s_state_data *sx_data = get_host_sstate_data();
|
struct pm_s_state_data *sx_data = get_host_sstate_data();
|
||||||
@ -278,7 +278,7 @@ static void register_gas_io_handler(struct acrn_vm *vm, uint32_t pio_idx, const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void register_pm1ab_handler(struct acrn_vm *vm)
|
static void register_pm1ab_handler(struct acrn_vm *vm)
|
||||||
{
|
{
|
||||||
struct pm_s_state_data *sx_data = vm->pm.sx_state_data;
|
struct pm_s_state_data *sx_data = vm->pm.sx_state_data;
|
||||||
|
|
||||||
@ -315,7 +315,7 @@ static bool rt_vm_pm1a_io_write(struct acrn_vcpu *vcpu, uint16_t addr, size_t wi
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void register_rt_vm_pm1a_ctl_handler(struct acrn_vm *vm)
|
static void register_rt_vm_pm1a_ctl_handler(struct acrn_vm *vm)
|
||||||
{
|
{
|
||||||
struct vm_io_range io_range;
|
struct vm_io_range io_range;
|
||||||
|
|
||||||
@ -325,3 +325,20 @@ void register_rt_vm_pm1a_ctl_handler(struct acrn_vm *vm)
|
|||||||
register_pio_emulation_handler(vm, VIRTUAL_PM1A_CNT_PIO_IDX, &io_range,
|
register_pio_emulation_handler(vm, VIRTUAL_PM1A_CNT_PIO_IDX, &io_range,
|
||||||
&rt_vm_pm1a_io_read, &rt_vm_pm1a_io_write);
|
&rt_vm_pm1a_io_read, &rt_vm_pm1a_io_write);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void init_guest_pm(struct acrn_vm *vm)
|
||||||
|
{
|
||||||
|
vm_setup_cpu_state(vm);
|
||||||
|
|
||||||
|
if (is_sos_vm(vm)) {
|
||||||
|
/* Load pm S state data */
|
||||||
|
if (vm_load_pm_s_state(vm) == 0) {
|
||||||
|
register_pm1ab_handler(vm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Intercept the virtual pm port for RTVM */
|
||||||
|
if (is_rt_vm(vm)) {
|
||||||
|
register_rt_vm_pm1a_ctl_handler(vm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -397,21 +397,6 @@ static void prepare_epc_vm_memmap(struct acrn_vm *vm)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void register_pm_io_handler(struct acrn_vm *vm)
|
|
||||||
{
|
|
||||||
if (is_sos_vm(vm)) {
|
|
||||||
/* Load pm S state data */
|
|
||||||
if (vm_load_pm_s_state(vm) == 0) {
|
|
||||||
register_pm1ab_handler(vm);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Intercept the virtual pm port for RTVM */
|
|
||||||
if (is_rt_vm(vm)) {
|
|
||||||
register_rt_vm_pm1a_ctl_handler(vm);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief get bitmap of pCPUs whose vCPUs have LAPIC PT enabled
|
* @brief get bitmap of pCPUs whose vCPUs have LAPIC PT enabled
|
||||||
*
|
*
|
||||||
@ -515,9 +500,7 @@ int32_t create_vm(uint16_t vm_id, struct acrn_vm_config *vm_config, struct acrn_
|
|||||||
*/
|
*/
|
||||||
setup_io_bitmap(vm);
|
setup_io_bitmap(vm);
|
||||||
|
|
||||||
vm_setup_cpu_state(vm);
|
init_guest_pm(vm);
|
||||||
|
|
||||||
register_pm_io_handler(vm);
|
|
||||||
|
|
||||||
if (!is_lapic_pt_configured(vm)) {
|
if (!is_lapic_pt_configured(vm)) {
|
||||||
vpic_init(vm);
|
vpic_init(vm);
|
||||||
|
@ -7,10 +7,7 @@
|
|||||||
#ifndef GUEST_PM_H
|
#ifndef GUEST_PM_H
|
||||||
#define GUEST_PM_H
|
#define GUEST_PM_H
|
||||||
|
|
||||||
void vm_setup_cpu_state(struct acrn_vm *vm);
|
|
||||||
int32_t vm_load_pm_s_state(struct acrn_vm *vm);
|
|
||||||
int32_t validate_pstate(const struct acrn_vm *vm, uint64_t perf_ctl);
|
int32_t validate_pstate(const struct acrn_vm *vm, uint64_t perf_ctl);
|
||||||
void register_pm1ab_handler(struct acrn_vm *vm);
|
void init_guest_pm(struct acrn_vm *vm);
|
||||||
void register_rt_vm_pm1a_ctl_handler(struct acrn_vm *vm);
|
|
||||||
|
|
||||||
#endif /* PM_H */
|
#endif /* PM_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user