Add MSR_EFER and rdmsr()

This commit is contained in:
Josh Holtrop 2022-10-26 22:45:09 -04:00
parent 707d42bec4
commit ba7c2996d5

View File

@ -5,6 +5,8 @@ module hulk.cpu;
import ldc.llvmasm; import ldc.llvmasm;
enum uint MSR_EFER = 0xC000_0080u;
void cli() void cli()
{ {
__asm("cli", ""); __asm("cli", "");
@ -45,6 +47,14 @@ ulong read_cr4()
return __asm!ulong("mov %cr4, %rax", "={rax}"); return __asm!ulong("mov %cr4, %rax", "={rax}");
} }
ulong rdmsr(uint msr)
{
return __asm!ulong(`
rdmsr
shl $$32, %rdx
or %rdx, %rax`, "={rax},{ecx},~{rdx}", msr);
}
ubyte in8(ushort ioaddr) ubyte in8(ushort ioaddr)
{ {
return __asm!ubyte("inb %dx, %al", "={al},{dx}", ioaddr); return __asm!ubyte("inb %dx, %al", "={al},{dx}", ioaddr);