diff --git a/src/vcpu.rs b/src/vcpu.rs index 27fa2cc..afd9db0 100644 --- a/src/vcpu.rs +++ b/src/vcpu.rs @@ -22,6 +22,7 @@ cfg_if::cfg_if! { pub use arm_vcpu::Aarch64VCpu as AxArchVCpuImpl; pub use arm_vcpu::Aarch64PerCpu as AxVMArchPerCpuImpl; pub use arm_vcpu::Aarch64VCpuCreateConfig as AxVCpuCreateConfig; + pub use arm_vcpu::Aarch64EmuRegs as AxArchEmuRegs; pub use arm_vcpu::has_hardware_support; } } diff --git a/src/vm.rs b/src/vm.rs index c921868..79e3bf7 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -14,7 +14,7 @@ use axvcpu::{AxArchVCpu, AxVCpu, AxVCpuExitReason, AxVCpuHal}; use axaddrspace::{AddrSpace, GuestPhysAddr, HostPhysAddr, MappingFlags}; use crate::config::AxVMConfig; -use crate::vcpu::{AxArchVCpuImpl, AxVCpuCreateConfig}; +use crate::vcpu::{AxArchEmuRegs, AxArchVCpuImpl, AxVCpuCreateConfig}; use crate::{has_hardware_support, AxVMHal}; const VM_ASPACE_BASE: usize = 0x0; @@ -271,6 +271,22 @@ impl AxVM { .handle_mmio_write(*addr, (*width).into(), *data as usize); true } + AxVCpuExitReason::SysRegRead { addr, reg } => { + AxArchEmuRegs::::emu_register_handle_read( + (*addr).into(), + *reg, + vcpu.clone(), + ); + true + } + AxVCpuExitReason::SysRegWrite { addr, value } => { + AxArchEmuRegs::::emu_register_handle_write( + (*addr).into(), + *value, + vcpu.clone(), + ); + true + } AxVCpuExitReason::IoRead { port: _, width: _ } => true, AxVCpuExitReason::IoWrite { port: _,