Files
FoundryOS/kernel/src/arch/x86_64/cpu.rs
T

27 lines
634 B
Rust

pub mod model_specific_registers {
use core::arch::x86_64::__cpuid;
use spin::Lazy;
use x86_64::registers::model_specific::Msr;
const _CPUID_FLAG_MSR: u32 = 1 << 5;
static _EDX: Lazy<u32> = Lazy::new(|| unsafe { __cpuid(1).edx });
pub fn _cpu_has_msr() -> bool {
*_EDX & _CPUID_FLAG_MSR != 0
}
pub fn cpu_get_msr(msr: u32, value: &mut u64) {
let msr = Msr::new(msr);
unsafe {
*value = msr.read();
}
}
pub fn cpu_set_msr(msr: u32, value: u64) {
let mut msr = Msr::new(msr);
unsafe {
msr.write(value);
}
}
}