start implementing APIC utils
This commit is contained in:
@@ -57,3 +57,27 @@ uint32_t fat32_datetime(uint16_t year, uint8_t month, uint8_t day, uint8_t hour,
|
||||
|
||||
return fat_datetime;
|
||||
}
|
||||
|
||||
inline void cpuid(int code, uint32_t *a, uint32_t *d)
|
||||
{
|
||||
asm volatile("cpuid":"=a"(*a),"=d"(*d):"a"(code):"ecx","ebx");
|
||||
}
|
||||
|
||||
const uint32_t CPUID_FLAG_MSR = 1 << 5;
|
||||
|
||||
bool cpuHasMSR()
|
||||
{
|
||||
static uint32_t a, d; // eax, edx
|
||||
cpuid(1, &a, &d);
|
||||
return d & CPUID_FLAG_MSR;
|
||||
}
|
||||
|
||||
void cpuGetMSR(uint32_t msr, uint32_t *lo, uint32_t *hi)
|
||||
{
|
||||
asm volatile("rdmsr" : "=a"(*lo), "=d"(*hi) : "c"(msr));
|
||||
}
|
||||
|
||||
void cpuSetMSR(uint32_t msr, uint32_t lo, uint32_t hi)
|
||||
{
|
||||
asm volatile("wrmsr" : : "a"(lo), "d"(hi), "c"(msr));
|
||||
}
|
||||
Reference in New Issue
Block a user