diff --git a/kernel/cpu.c b/kernel/cpu.c index 5982d72..90949ad 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -3,6 +3,14 @@ #include "terminal.h" #include "utils.h" +void cpuid(uint32_t leaf, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) { + __asm__( + "cpuid" + : "=a"(*eax), "=b"(*ebx), "=c"(*ecx), "=d"(*edx) + : "a"(leaf) + ); +} + // Helper to print a labeled decimal value void print_val(const char* label, uint32_t val) { char buf[12]; diff --git a/kernel/irq.h b/kernel/irq.h index edc39a4..d6ca7a1 100644 --- a/kernel/irq.h +++ b/kernel/irq.h @@ -1,7 +1,7 @@ #ifndef IRQ_H #define IRQ_H -#include "types.h" +#include void irq_remap(void); void irq_install(void); diff --git a/kernel/isr.c b/kernel/isr.c index f6a0222..fd13cef 100644 --- a/kernel/isr.c +++ b/kernel/isr.c @@ -1,3 +1,4 @@ +#include #include "terminal.h" #include "serial.h" #include "isr.h" diff --git a/kernel/print.h b/kernel/print.h index bf07e4a..f172347 100644 --- a/kernel/print.h +++ b/kernel/print.h @@ -1,7 +1,7 @@ #ifndef PRINT_H #define PRINT_H -#include "types.h" +#include void print_string(const char *str); void my_printf(const char *format, ...); diff --git a/kernel/threading.c b/kernel/threading.c index c7b6ba5..ff6d15b 100644 --- a/kernel/threading.c +++ b/kernel/threading.c @@ -1,9 +1,9 @@ +#include +#include #include "malloc.h" #include "print.h" #include "threading.h" -#include "types.h" #include "utils.h" -#include #define MAX_THREADS 16 // Maximum number of threads #define THREAD_STACK_SIZE 8192 // Stack size for each thread diff --git a/kernel/types.c b/kernel/types.c deleted file mode 100644 index 8e71fd1..0000000 --- a/kernel/types.c +++ /dev/null @@ -1 +0,0 @@ -#include "types.h" diff --git a/kernel/types.h b/kernel/types.h deleted file mode 100644 index 332aa4e..0000000 --- a/kernel/types.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef TYPES_H -#define TYPES_H - -// ---------------------------- -// Fixed-width integer types -// ---------------------------- -typedef unsigned char uint8_t; -typedef signed char int8_t; -typedef unsigned short uint16_t; -typedef signed short int16_t; -typedef unsigned int uint32_t; -typedef signed int int32_t; -typedef unsigned long long uint64_t; -typedef signed long long int64_t; - -// ---------------------------- -// Boolean & NULL definitions -// ---------------------------- -#ifndef __cplusplus -typedef enum { false = 0, true = 1 } bool; -#endif - -#ifndef NULL -#define NULL ((void*)0) -#endif - -// ---------------------------- -// OS subsystem types -// ---------------------------- -typedef int32_t ssize_t; - -typedef uint32_t phys_addr_t; // Physical address -typedef uint32_t virt_addr_t; // Virtual address - -typedef uint32_t pid_t; // Process ID -typedef uint32_t tid_t; // Thread ID - -// ---------------------------- -// Bitfield & utility macros -// ---------------------------- -#define BIT(n) (1U << (n)) -#define BITS(m, n) (((1U << ((n) - (m) + 1)) - 1) << (m)) - -// Align value to next multiple of alignment -#define ALIGN_UP(val, align) (((val) + ((align)-1)) & ~((align)-1)) -#define ALIGN_DOWN(val, align) ((val) & ~((align)-1)) - -// ---------------------------- -// Attributes for structures -// ---------------------------- -#define PACKED __attribute__((packed)) -#define ALIGN(x) __attribute__((aligned(x))) - -// ---------------------------- -// Likely/unlikely branch hints -// (for future optimization use) -// ---------------------------- -#define likely(x) __builtin_expect(!!(x), 1) -#define unlikely(x) __builtin_expect(!!(x), 0) - -#endif // TYPES_H diff --git a/kernel/utils.h b/kernel/utils.h index 53fab8a..0c25890 100644 --- a/kernel/utils.h +++ b/kernel/utils.h @@ -3,8 +3,6 @@ #include -#include "types.h" - // Convert integer to string (base is typically 10, 16, etc.) char* itoa(int value, char* str, int base); diff --git a/klibc/include/stdbool.h b/klibc/include/stdbool.h index 0cd5393..51807b5 100644 --- a/klibc/include/stdbool.h +++ b/klibc/include/stdbool.h @@ -1,6 +1,12 @@ #ifndef CLASSICOS_KLIBC_STDBOOL_H #define CLASSICOS_KLIBC_STDBOOL_H -typedef enum { false = 0, true = 1 } bool; +#ifndef __cplusplus +#define bool _Bool +#define true 1 +#define false 0 +#endif + +#define __bool_true_false_are_defined 1 #endif // CLASSICOS_KLIBC_STDBOOL_H