vm controls
This commit is contained in:
@@ -29,3 +29,180 @@ impl PinBasedVmExecutionControls {
|
||||
vmcs::VmcsControl32::PIN_BASED_VM_EXECUTION_CONTROLS.write(u32::from(*self))
|
||||
}
|
||||
}
|
||||
|
||||
#[bitfield]
|
||||
#[repr(u32)]
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct PrimaryProcessorBasedVmExecutionControls {
|
||||
resetved1: B2,
|
||||
pub interrupt_window: bool,
|
||||
pub tsc_offsetting: bool,
|
||||
reserved2: B3,
|
||||
pub hlt: bool,
|
||||
reserved3: B1,
|
||||
pub invlpg: bool,
|
||||
pub mwait: bool,
|
||||
pub rdpmc: bool,
|
||||
pub rdtsc: bool,
|
||||
reserved4: B2,
|
||||
pub cr3load: bool,
|
||||
pub cr3store: bool,
|
||||
pub activate_teritary_controls: bool,
|
||||
reserved5: B1,
|
||||
pub cr8load: bool,
|
||||
pub cr8store: bool,
|
||||
pub use_tpr_shadow: bool,
|
||||
pub nmi_window: bool,
|
||||
pub mov_dr: bool,
|
||||
pub unconditional_io: bool,
|
||||
pub use_io_bitmap: bool,
|
||||
reserved6: B1,
|
||||
pub monitor_trap: bool,
|
||||
pub use_msr_bitmap: bool,
|
||||
pub monitor: bool,
|
||||
pub pause: bool,
|
||||
pub activate_secondary_controls: bool,
|
||||
}
|
||||
|
||||
impl PrimaryProcessorBasedVmExecutionControls {
|
||||
pub fn read() -> Result<Self, &'static str> {
|
||||
vmcs::VmcsControl32::PRIMARY_PROCESSOR_BASED_VM_EXECUTION_CONTROLS
|
||||
.read()
|
||||
.map(|value| PrimaryProcessorBasedVmExecutionControls::from(value))
|
||||
.map_err(|_| "Failed to read Primary Processor-Based VM Execution Controls")
|
||||
}
|
||||
|
||||
pub fn write(&self) -> Result<(), &'static str> {
|
||||
vmcs::VmcsControl32::PRIMARY_PROCESSOR_BASED_VM_EXECUTION_CONTROLS.write(u32::from(*self))
|
||||
}
|
||||
}
|
||||
|
||||
#[bitfield]
|
||||
#[repr(u32)]
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct SecondaryProcessorBasedVmExecutionControls {
|
||||
pub virtualize_apic_accesses: bool,
|
||||
pub ept: bool,
|
||||
pub descriptor_table: bool,
|
||||
pub rdtscp: bool,
|
||||
pub virtualize_x2apic_mode: bool,
|
||||
pub vpid: bool,
|
||||
pub wbinvd: bool,
|
||||
pub unrestricted_guest: bool,
|
||||
pub apic_register_virtualization: bool,
|
||||
pub virtual_interrupt_delivery: bool,
|
||||
pub pause_loop: bool,
|
||||
pub rdrand: bool,
|
||||
pub enable_invpcid: bool,
|
||||
pub enable_vmfunc: bool,
|
||||
pub vmcs_shadowing: bool,
|
||||
pub enable_encls: bool,
|
||||
pub rdseed: bool,
|
||||
pub enable_pml: bool,
|
||||
pub ept_violation: bool,
|
||||
pub conceal_vmx_from_pt: bool,
|
||||
pub enable_xsaves_xrstors: bool,
|
||||
pub pasid_translation: bool,
|
||||
pub mode_based_control_ept: bool,
|
||||
pub subpage_write_eptr: bool,
|
||||
pub pt_guest_pa: bool,
|
||||
pub tsc_scaling: bool,
|
||||
pub enable_user_wait_pause: bool,
|
||||
pub enable_pconfig: bool,
|
||||
pub enable_enclv: bool,
|
||||
pub vmm_buslock_detect: bool,
|
||||
pub instruction_timeout: bool,
|
||||
reserved: B1,
|
||||
}
|
||||
|
||||
impl SecondaryProcessorBasedVmExecutionControls {
|
||||
pub fn read() -> Result<Self, &'static str> {
|
||||
vmcs::VmcsControl32::SECONDARY_PROCESSOR_BASED_VM_EXECUTION_CONTROLS
|
||||
.read()
|
||||
.map(|value| SecondaryProcessorBasedVmExecutionControls::from(value))
|
||||
.map_err(|_| "Failed to read Secondary Processor-Based VM Execution Controls")
|
||||
}
|
||||
|
||||
pub fn write(&self) -> Result<(), &'static str> {
|
||||
vmcs::VmcsControl32::SECONDARY_PROCESSOR_BASED_VM_EXECUTION_CONTROLS.write(u32::from(*self))
|
||||
}
|
||||
}
|
||||
|
||||
#[bitfield]
|
||||
#[repr(u32)]
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct EntryControls {
|
||||
reserved1: B2,
|
||||
pub load_debug_controls: bool,
|
||||
reserved2: B6,
|
||||
pub ia32e_mode_guest: bool,
|
||||
pub entry_smm: bool,
|
||||
pub deactivate_dualmonitor: bool,
|
||||
reserved3: B1,
|
||||
pub load_perf_global_ctrl: bool,
|
||||
pub load_ia32_pat: bool,
|
||||
pub load_ia32_efer: bool,
|
||||
pub load_ia32_bndcfgs: bool,
|
||||
pub conceal_vmx_from_pt: bool,
|
||||
pub load_rtit_ctl: bool,
|
||||
pub load_uinv: bool,
|
||||
pub load_cet_state: bool,
|
||||
pub load_guest_lbr_ctl: bool,
|
||||
pub load_pkrs: bool,
|
||||
reserved4: B9,
|
||||
}
|
||||
|
||||
impl EntryControls {
|
||||
pub fn read() -> Result<Self, &'static str> {
|
||||
vmcs::VmcsControl32::VM_ENTRY_CONTROLS
|
||||
.read()
|
||||
.map(|value| EntryControls::from(value))
|
||||
.map_err(|_| "Failed to read VM Entry Controls")
|
||||
}
|
||||
|
||||
pub fn write(&self) -> Result<(), &'static str> {
|
||||
vmcs::VmcsControl32::VM_ENTRY_CONTROLS.write(u32::from(*self))
|
||||
}
|
||||
}
|
||||
|
||||
#[bitfield]
|
||||
#[repr(u32)]
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct PrimaryExitControls {
|
||||
reserved1: B2,
|
||||
pub save_debug: bool,
|
||||
reserved2: B6,
|
||||
pub host_addr_space_size: bool,
|
||||
reserved3: B3,
|
||||
pub load_perf_global_ctrl: bool,
|
||||
reserved4: B1,
|
||||
pub ack_interrupt_onexit: bool,
|
||||
reserved5: B2,
|
||||
pub save_ia32_pat: bool,
|
||||
pub load_ia32_pat: bool,
|
||||
pub save_ia32_efer: bool,
|
||||
pub load_ia32_efer: bool,
|
||||
pub save_vmx_preemption_timer: bool,
|
||||
pub clear_ia32_bndcfgs: bool,
|
||||
pub conceal_vmx_from_pt: bool,
|
||||
pub clear_ia32_rtit_ctl: bool,
|
||||
pub clear_ia32_lbr_ctl: bool,
|
||||
pub clear_uinv: bool,
|
||||
pub load_cet_state: bool,
|
||||
pub load_pkrs: bool,
|
||||
pub save_perf_global_ctl: bool,
|
||||
pub activate_secondary_controls: bool,
|
||||
}
|
||||
|
||||
impl PrimaryExitControls {
|
||||
pub fn read() -> Result<Self, &'static str> {
|
||||
vmcs::VmcsControl32::PRIMARY_VM_EXIT_CONTROLS
|
||||
.read()
|
||||
.map(|value| PrimaryExitControls::from(value))
|
||||
.map_err(|_| "Failed to read Primary VM Exit Controls")
|
||||
}
|
||||
|
||||
pub fn write(&self) -> Result<(), &'static str> {
|
||||
vmcs::VmcsControl32::PRIMARY_VM_EXIT_CONTROLS.write(u32::from(*self))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user