diff --git a/nel_os_kernel/src/vmm/x86_64/amd/vmcb.rs b/nel_os_kernel/src/vmm/x86_64/amd/vmcb.rs index b924d27..61cd227 100644 --- a/nel_os_kernel/src/vmm/x86_64/amd/vmcb.rs +++ b/nel_os_kernel/src/vmm/x86_64/amd/vmcb.rs @@ -90,11 +90,15 @@ pub struct RawVmcb { pub intercept_tlbsync: bool, pub intercept_bus_lock: bool, pub intercept_idle_hlt: bool, - _reserved1: B25, + #[skip] + __: B25, // 018h-03Bh - _reserved2: B128, - _reserved3: B128, - _reserved4: B32, + #[skip] + __: B128, + #[skip] + __: B128, + #[skip] + __: B32, // 03Ch pub pause_filter_threshold: B16, // 03Eh @@ -110,29 +114,35 @@ pub struct RawVmcb { pub tlb_control: TlbControl, pub allow_larger_rap: bool, pub clear_rap_on_vmrun: bool, - _reserved5: B22, + #[skip] + __: B22, // 060h pub v_tpr: B8, pub v_irq: bool, pub vgif: bool, pub v_nmi: bool, pub v_nmi_mask: bool, - _reserved6: B3, + #[skip] + __: B3, pub v_intr_prio: B4, pub v_ign_tpr: bool, - _reserved7: B3, + #[skip] + __: B3, pub v_intr_masking: bool, pub amd_virtual_gif: bool, pub v_nmi_enable: bool, - _reserved8: B3, + #[skip] + __: B3, pub x2avic_enable: bool, pub avic_enable: bool, pub v_intr_vector: B8, - _reserved9: B24, + #[skip] + __: B24, // 068h pub interrupt_shadow: bool, pub guest_interrupt_mask: bool, - _reserved10: B62, + #[skip] + __: B62, // 070h pub exit_code: B64, // 078h @@ -150,10 +160,12 @@ pub struct RawVmcb { pub virtual_transparent_encryption: bool, pub enable_read_only_guest_page_table: bool, pub enable_invlpgb_and_tlbsync: bool, - _reserved11: B56, + #[skip] + __: B56, // 098h - _reserved12: B12, pub avic_apic_bar: B52, + #[skip] + __: B12, // 0A0h pub ghcb_gpa: B64, // 0A8h @@ -165,15 +177,54 @@ pub struct RawVmcb { pub vmload_vmsave_virtualization_enable: bool, pub ibs_virtualization_enable: bool, pub pmc_virtualization_enable: bool, - _reserved13: B60, + #[skip] + __: B60, // 0C0h pub vmcb_clean_bits: B32, - _reserved14: B32, + #[skip] + __: B32, // 0C8h pub next_rip: B64, // 0D0h pub fetched_bytes: B8, pub gutest_instruction_bytes: B120, + // 0E0h + pub avic_apic_backing_page_pointer: B52, + #[skip] + __: B12, + // 0E8-0EFh Reserved + #[skip] + __: B64, + #[skip] + __: B64, + #[skip] + __: B64, + #[skip] + __: B64, + // 0F0h + #[skip] + __: B12, + pub avic_logical_table_pointer: B40, + #[skip] + __: B12, + // 0F8h + pub avic_physical_max_index: B12, + pub avic_physical_table_pointer: B40, + #[skip] + __: B12, + // 100h-107h Reserved + #[skip] + __: B64, + // 108h + #[skip] + __: B12, + pub vmsa_pointer: B40, + #[skip] + __: B12, + // 110h + pub vmgexit_rax: B64, + // 118h + pub vmgexit_cpl: B8, } #[derive(Specifier, Debug, Clone, Copy, PartialEq, Eq)] diff --git a/nel_os_kernel/src/vmm/x86_64/intel/fpu.rs b/nel_os_kernel/src/vmm/x86_64/intel/fpu.rs index 8135bad..11a87ce 100644 --- a/nel_os_kernel/src/vmm/x86_64/intel/fpu.rs +++ b/nel_os_kernel/src/vmm/x86_64/intel/fpu.rs @@ -28,7 +28,8 @@ pub struct XCR0 { pub xtilecfg: bool, pub xtiledata: bool, pub apx: bool, - _reserved: B44, + #[skip] + __: B44, } pub fn set_xcr(vcpu: &mut IntelVCpu, index: u32, xcr: u64) -> Result<(), &'static str> { diff --git a/nel_os_kernel/src/vmm/x86_64/intel/vmcs/controls.rs b/nel_os_kernel/src/vmm/x86_64/intel/vmcs/controls.rs index 1bd8490..e9fbea0 100644 --- a/nel_os_kernel/src/vmm/x86_64/intel/vmcs/controls.rs +++ b/nel_os_kernel/src/vmm/x86_64/intel/vmcs/controls.rs @@ -9,14 +9,17 @@ use crate::vmm::x86_64::intel::vmcs; #[derive(Debug, Clone, Copy)] pub struct PinBasedVmExecutionControls { pub external_interrupt_exiting: bool, - _reserved1: B1, + #[skip] + __: B1, pub interrupt_window_exiting: bool, pub nmi_exiting: bool, - _reserved2: B1, + #[skip] + __: B1, pub virtual_nmi: bool, pub activate_vmx_preemption_timer: bool, pub process_posted_interrupts: bool, - _reserved3: B24, + #[skip] + __: B24, } impl PinBasedVmExecutionControls { @@ -36,21 +39,26 @@ impl PinBasedVmExecutionControls { #[repr(u32)] #[derive(Debug, Clone, Copy)] pub struct PrimaryProcessorBasedVmExecutionControls { - _reserved1: B2, + #[skip] + __: B2, pub interrupt_window: bool, pub tsc_offsetting: bool, - _reserved2: B3, + #[skip] + __: B3, pub hlt: bool, - _reserved3: B1, + #[skip] + __: B1, pub invlpg: bool, pub mwait: bool, pub rdpmc: bool, pub rdtsc: bool, - _reserved4: B2, + #[skip] + __: B2, pub cr3load: bool, pub cr3store: bool, pub activate_teritary_controls: bool, - _reserved5: B1, + #[skip] + __: B1, pub cr8load: bool, pub cr8store: bool, pub use_tpr_shadow: bool, @@ -58,7 +66,8 @@ pub struct PrimaryProcessorBasedVmExecutionControls { pub mov_dr: bool, pub unconditional_io: bool, pub use_io_bitmap: bool, - _reserved6: B1, + #[skip] + __: B1, pub monitor_trap: bool, pub use_msr_bitmap: bool, pub monitor: bool, @@ -114,7 +123,8 @@ pub struct SecondaryProcessorBasedVmExecutionControls { pub enable_enclv: bool, pub vmm_buslock_detect: bool, pub instruction_timeout: bool, - _reserved: B1, + #[skip] + __: B1, } impl SecondaryProcessorBasedVmExecutionControls { @@ -134,13 +144,16 @@ impl SecondaryProcessorBasedVmExecutionControls { #[repr(u32)] #[derive(Debug, Clone, Copy)] pub struct EntryControls { - _reserved1: B2, + #[skip] + __: B2, pub load_debug_controls: bool, - _reserved2: B6, + #[skip] + __: B6, pub ia32e_mode_guest: bool, pub entry_smm: bool, pub deactivate_dualmonitor: bool, - _reserved3: B1, + #[skip] + __: B1, pub load_perf_global_ctrl: bool, pub load_ia32_pat: bool, pub load_ia32_efer: bool, @@ -151,7 +164,8 @@ pub struct EntryControls { pub load_cet_state: bool, pub load_guest_lbr_ctl: bool, pub load_pkrs: bool, - _reserved4: B9, + #[skip] + __: B9, } impl EntryControls { @@ -171,15 +185,20 @@ impl EntryControls { #[repr(u32)] #[derive(Debug, Clone, Copy)] pub struct PrimaryExitControls { - _reserved1: B2, + #[skip] + __: B2, pub save_debug: bool, - _reserved2: B6, + #[skip] + __: B6, pub host_addr_space_size: bool, - _reserved3: B3, + #[skip] + __: B3, pub load_perf_global_ctrl: bool, - _reserved4: B1, + #[skip] + __: B1, pub ack_interrupt_onexit: bool, - _reserved5: B2, + #[skip] + __: B2, pub save_ia32_pat: bool, pub load_ia32_pat: bool, pub save_ia32_efer: bool, @@ -216,6 +235,7 @@ pub struct EntryIntrInfo { pub vector: B8, pub typ: B3, pub ec_available: bool, - _reserved: B19, + #[skip] + __: B19, pub valid: bool, } diff --git a/nel_os_kernel/src/vmm/x86_64/intel/vmcs/segment.rs b/nel_os_kernel/src/vmm/x86_64/intel/vmcs/segment.rs index b36d23e..40c3f6b 100644 --- a/nel_os_kernel/src/vmm/x86_64/intel/vmcs/segment.rs +++ b/nel_os_kernel/src/vmm/x86_64/intel/vmcs/segment.rs @@ -26,14 +26,16 @@ pub struct SegmentRights { pub desc_type: DescriptorType, pub dpl: B2, pub present: bool, - _reserved: B4, + #[skip] + __: B4, pub avl: bool, pub long: bool, pub db: bool, #[bits = 1] pub granularity: Granularity, pub unusable: bool, - _reserved2: B15, + #[skip] + __: B15, } impl Default for SegmentRights {