Move cpuid() to cpu.h
diff --git a/limine.bin b/limine.bin
index 39bbf983..0d97ae49 100644
Binary files a/limine.bin and b/limine.bin differ
diff --git a/stage2/lib/blib.c b/stage2/lib/blib.c
index 170f81d8..a0deb5dd 100644
--- a/stage2/lib/blib.c
+++ b/stage2/lib/blib.c
@@ -72,21 +72,6 @@ uint8_t bcd_to_int(uint8_t val) {
return (val & 0x0f) + ((val & 0xf0) >> 4) * 10;
}
-int cpuid(uint32_t leaf, uint32_t subleaf,
- uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) {
- uint32_t cpuid_max;
- asm volatile ("cpuid"
- : "=a" (cpuid_max)
- : "a" (leaf & 0x80000000)
- : "ebx", "ecx", "edx");
- if (leaf > cpuid_max)
- return 1;
- asm volatile ("cpuid"
- : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx)
- : "a" (leaf), "c" (subleaf));
- return 0;
-}
-
__attribute__((noreturn)) void panic(const char *fmt, ...) {
asm volatile ("cli" ::: "memory");
diff --git a/stage2/lib/blib.h b/stage2/lib/blib.h
index 4dbea951..7e657ac5 100644
--- a/stage2/lib/blib.h
+++ b/stage2/lib/blib.h
@@ -18,9 +18,6 @@ uint64_t sqrt(uint64_t a_nInput);
uint8_t bcd_to_int(uint8_t val);
-int cpuid(uint32_t leaf, uint32_t subleaf,
- uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx);
-
__attribute__((noreturn)) void panic(const char *fmt, ...);
int pit_sleep_and_quit_on_keypress(uint32_t pit_ticks);
diff --git a/stage2/lib/rand.c b/stage2/lib/rand.c
index 6bc7f569..06608125 100644
--- a/stage2/lib/rand.c
+++ b/stage2/lib/rand.c
@@ -4,6 +4,7 @@
#include <lib/blib.h>
#include <lib/print.h>
#include <lib/rand.h>
+#include <sys/cpu.h>
#include <mm/pmm.h>
// TODO: Find where this mersenne twister implementation is inspired from
diff --git a/stage2/protos/stivale.c b/stage2/protos/stivale.c
index ce1a7477..35e756d1 100644
--- a/stage2/protos/stivale.c
+++ b/stage2/protos/stivale.c
@@ -13,6 +13,7 @@
#include <drivers/vbe.h>
#include <lib/term.h>
#include <sys/pic.h>
+#include <sys/cpu.h>
#include <fs/file.h>
#include <mm/vmm.h>
#include <mm/pmm.h>
diff --git a/stage2/protos/stivale2.c b/stage2/protos/stivale2.c
index 3cef90d8..bd9dc654 100644
--- a/stage2/protos/stivale2.c
+++ b/stage2/protos/stivale2.c
@@ -14,6 +14,7 @@
#include <lib/real.h>
#include <lib/libc.h>
#include <sys/smp.h>
+#include <sys/cpu.h>
#include <drivers/vbe.h>
#include <lib/term.h>
#include <sys/pic.h>
diff --git a/stage2/sys/cpu.h b/stage2/sys/cpu.h
index 4fe988d1..9a3215bd 100644
--- a/stage2/sys/cpu.h
+++ b/stage2/sys/cpu.h
@@ -10,6 +10,21 @@
#define DWORD_PTR(PTR) (*((uint32_t *)(PTR)))
#define QWORD_PTR(PTR) (*((uint64_t *)(PTR)))
+static inline int cpuid(uint32_t leaf, uint32_t subleaf,
+ uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) {
+ uint32_t cpuid_max;
+ asm volatile ("cpuid"
+ : "=a" (cpuid_max)
+ : "a" (leaf & 0x80000000)
+ : "ebx", "ecx", "edx");
+ if (leaf > cpuid_max)
+ return 1;
+ asm volatile ("cpuid"
+ : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx)
+ : "a" (leaf), "c" (subleaf));
+ return 0;
+}
+
static inline void outb(uint16_t port, uint8_t value) {
asm volatile ("out %1, al" : : "a" (value), "Nd" (port) : "memory");
}
