1
0
Fork 0
emk/kernel/src/arch/cpu.h

34 lines
No EOL
688 B
C

/* EMK 1.0 Copyright (c) 2025 Piraterna */
#ifndef CPU_H
#define CPU_H
#include <stdnoreturn.h>
static inline noreturn void hlt()
{
for (;;)
__asm__ volatile("hlt");
}
static inline noreturn void hcf()
{
__asm__ volatile("cli");
for (;;)
__asm__ volatile("hlt");
}
static inline void wrmsr(uint64_t msr, uint64_t value)
{
uint32_t low = value & 0xFFFFFFFF;
uint32_t high = value >> 32;
__asm__ volatile("wrmsr" : : "c"(msr), "a"(low), "d"(high));
}
static inline uint64_t rdmsr(uint64_t msr)
{
uint32_t low, high;
__asm__ volatile("rdmsr" : "=a"(low), "=d"(high) : "c"(msr));
return ((uint64_t)high << 32) | low;
}
#endif // CPU_H