Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
cpuid.c
Go to the documentation of this file.
1#include <type.h>
2#include <hal/cpu/cpuid.h>
3
4void cpuid(uint32_t leaf, uint32_t subleaf, uint32_t* eax, uint32_t* ebx,
5 uint32_t* ecx, uint32_t* edx) {
6 uint32_t a, b, c, d;
7 asm volatile("cpuid"
8 : "=a"(a), "=b"(b), "=c"(c), "=d"(d)
9 : "a"(leaf), "c"(subleaf)
10 : "memory");
11 if (eax)
12 *eax = a;
13 if (ebx)
14 *ebx = b;
15 if (ecx)
16 *ecx = c;
17 if (edx)
18 *edx = d;
19}
20
21int cpuid_get_model(void) {
22 uint32_t eax, ebx, ecx, edx;
23 cpuid(1, 0, &eax, &ebx, &ecx, &edx);
24 int family =
25 ((eax >> 8) & 0xf) + ((eax >> 20) & 0xff); // extended family
26 int model = (int) (((eax >> 4) & 0xf)
27 + (((eax >> 16) & 0xf) << 4)); // extended model
28 return model + (family << 8); // encode family+model
29}
30
32 uint32_t eax, ebx, ecx, edx;
33 cpuid(1, 0, &eax, &ebx, &ecx, &edx);
34 return (edx & (1 << 9)) != 0;
35}
36
38 uint32_t eax, ebx, ecx, edx;
39 cpuid(1, 0, &eax, &ebx, &ecx, &edx);
40 return (ebx >> 24) & 0xff;
41}
boolean_t cpuid_check_apic(void)
Definition cpuid.c:31
int cpuid_get_model(void)
Definition cpuid.c:21
int cpuid_get_bsp_id(void)
Definition cpuid.c:37
void cpuid(uint32_t leaf, uint32_t subleaf, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
Definition cpuid.c:4
a
Definition entry.h:6
unsigned int uint32_t
Definition type.h:19
uint8_t boolean_t
Definition type.h:89