gila/kernel/src/arch/x86_64/amd_virt.rs
August be027961dc
All checks were successful
Continuous Integration / Check (push) Successful in 42s
Continuous Integration / Clippy (push) Successful in 41s
Vaddr to phaddr translation
2026-06-30 12:30:11 +00:00

34 lines
996 B
Rust

// Copyright (c) 2025 shibedrill
// SPDX-License-Identifier: MIT
use intbits::Bits;
use x86_64::registers::control::EferFlags;
use crate::arch::x86_64::cpuid::*;
pub fn amd_v_supported() -> bool {
match ProcessorVendor::try_get_current() {
Ok(vendor) => {
if vendor == ProcessorVendor::AMD {
match CPUID.get_extended_processor_and_feature_identifiers() {
Some(features) => features.has_svm(),
_ => false,
}
} else {
false
}
}
Err(_) => false,
}
}
#[allow(dead_code)]
pub fn enable_svm() {
let mut efer = x86_64::registers::model_specific::Efer::read().bits();
efer.set_bit(12, true);
// I'm not sure why this is here. But clearly there was a reason for it.
// So now I'm scared to touch it...
assert!(efer.bit(12));
unsafe { x86_64::registers::model_specific::Efer::write(EferFlags::from_bits_retain(efer)) };
}