:: commit 037e19768f965bbdd79234934249c38d14b76f80

mintsuki <mintsuki@protonmail.com> — 2020-10-12 19:49

parents: b6d170367a

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");
 }
tab: 248 wrap: offon