start implementing APIC utils

This commit is contained in:
2025-08-29 18:35:22 +03:00
parent 9e21167bd3
commit fb8dd43dd3
9 changed files with 176 additions and 15 deletions
+24
View File
@@ -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));
}