diff --git a/src/interrupts.c b/src/interrupts.c index 3b1d69e..815e006 100644 --- a/src/interrupts.c +++ b/src/interrupts.c @@ -43,13 +43,15 @@ static const char* exception_messages[32] = { static irq_handler_t irq_handlers[16] = {0}; -bool cpu_has_apic() { +bool cpu_has_apic() +{ uint32_t eax, edx; cpuid(1, &eax, &edx); return (edx & CPUID_FEAT_EDX_APIC) != 0; } -void enable_apic() { +void enable_apic() +{ uint64_t apic_base = rdmsr(0x1B); apic_base |= (1 << 11); wrmsr(0x1B, apic_base); @@ -59,23 +61,24 @@ void enable_apic() { void remap_pic() { outb(PIC1_COMMAND, 0x11); - outb(PIC2_COMMAND, 0x11); + outb(PIC2_COMMAND, 0x11); - outb(PIC1_DATA, 32); - outb(PIC2_DATA, 40); + outb(PIC1_DATA, 32); + outb(PIC2_DATA, 40); - outb(PIC1_DATA, 4); - outb(PIC2_DATA, 2); + outb(PIC1_DATA, 4); + outb(PIC2_DATA, 2); - outb(PIC1_DATA, 1); - outb(PIC2_DATA, 1); + outb(PIC1_DATA, 1); + outb(PIC2_DATA, 1); - outb(PIC1_DATA, 0); - outb(PIC2_DATA, 0); + outb(PIC1_DATA, 0); + outb(PIC2_DATA, 0); kprintf("PIC remapped\n"); } -void disable_pic() { +void disable_pic() +{ outb(PIC1_DATA, 0xFF); outb(PIC2_DATA, 0xFF); kprintf("PIC disabled\n"); @@ -83,7 +86,8 @@ void disable_pic() { void handle_exception(const isr_frame_t* frame) { - kprintf("exception[%d]: %s, error code: %d\n", frame->int_no, exception_messages[frame->int_no], frame->err_code); + kprintf("exception[%d]: %s, error code: %d\n", frame->int_no, exception_messages[frame->int_no], + frame->err_code); kpanic(); } diff --git a/src/interrupts.h b/src/interrupts.h index d160fb9..5bb07ac 100644 --- a/src/interrupts.h +++ b/src/interrupts.h @@ -1,6 +1,7 @@ #pragma once #include "kernel.h" +#include #include typedef struct diff --git a/src/kernel.c b/src/kernel.c index 446cccb..e25d008 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -1,10 +1,10 @@ #include "kernel.h" #include "interrupts.h" #include "keyboard.h" +#include "multiboot.h" #include "string.h" #include "vga.h" #include -#include "multiboot.h" void handle_keypress(const keyboard_event_t* event) { diff --git a/src/kernel.h b/src/kernel.h index ded0aaf..0bfa091 100644 --- a/src/kernel.h +++ b/src/kernel.h @@ -6,7 +6,7 @@ static inline void khalt() { while (true) { - __asm__ volatile ("hlt"); + __asm__ volatile("hlt"); } } diff --git a/src/keyboard.c b/src/keyboard.c index 4ecc9ad..6ccab5d 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -1,7 +1,6 @@ #include "keyboard.h" #include "interrupts.h" #include "kernel.h" -#include "vga.h" #include "util.h" #include diff --git a/src/keyboard.h b/src/keyboard.h index c064f2b..104a409 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -1,5 +1,6 @@ #pragma once +#include #include typedef struct diff --git a/src/multiboot.h b/src/multiboot.h index 736acb0..e13c35c 100644 --- a/src/multiboot.h +++ b/src/multiboot.h @@ -2,16 +2,16 @@ #include -#define MULTIBOOT_FLAG_MEMIFO 0b0000000000001 -#define MULTIBOOT_FLAG_BOOT_DEVICE 0b0000000000010 -#define MULTIBOOT_FLAG_CMDLINE 0b0000000000100 -#define MULTIBOOT_FLAG_MODINFO 0b0000000001000 -#define MULTIBOOT_FLAG_MMAP 0b0000001000000 -#define MULTIBOOT_FLAG_DRIVES 0b0000010000000 -#define MULTIBOOT_FLAG_CONFIG_TABLE 0b0000100000000 -#define MULTIBOOT_FLAG_BOOTLOADER_NAME 0b0001000000000 -#define MULTIBOOT_FLAG_APM_TABLE 0b0010000000000 -#define MULTIBOOT_FLAG_VBEINFO 0b0100000000000 +#define MULTIBOOT_FLAG_MEMIFO 0b0000000000001 +#define MULTIBOOT_FLAG_BOOT_DEVICE 0b0000000000010 +#define MULTIBOOT_FLAG_CMDLINE 0b0000000000100 +#define MULTIBOOT_FLAG_MODINFO 0b0000000001000 +#define MULTIBOOT_FLAG_MMAP 0b0000001000000 +#define MULTIBOOT_FLAG_DRIVES 0b0000010000000 +#define MULTIBOOT_FLAG_CONFIG_TABLE 0b0000100000000 +#define MULTIBOOT_FLAG_BOOTLOADER_NAME 0b0001000000000 +#define MULTIBOOT_FLAG_APM_TABLE 0b0010000000000 +#define MULTIBOOT_FLAG_VBEINFO 0b0100000000000 #define MULTIBOOT_FLAG_FRAMEBUFFER_INFO 0b1000000000000 typedef struct multiboot_info diff --git a/src/string.h b/src/string.h index 1abefcf..4bda586 100644 --- a/src/string.h +++ b/src/string.h @@ -1,7 +1,7 @@ #pragma once -#include #include +#include int strcmp(const char* a, const char* b); void reverse(char* str, size_t length); diff --git a/src/util.h b/src/util.h index ce10c39..a0a4863 100644 --- a/src/util.h +++ b/src/util.h @@ -2,69 +2,70 @@ #include -enum { - CPUID_FEAT_ECX_SSE3 = 1 << 0, - CPUID_FEAT_ECX_PCLMUL = 1 << 1, - CPUID_FEAT_ECX_DTES64 = 1 << 2, - CPUID_FEAT_ECX_MONITOR = 1 << 3, - CPUID_FEAT_ECX_DS_CPL = 1 << 4, - CPUID_FEAT_ECX_VMX = 1 << 5, - CPUID_FEAT_ECX_SMX = 1 << 6, - CPUID_FEAT_ECX_EST = 1 << 7, - CPUID_FEAT_ECX_TM2 = 1 << 8, - CPUID_FEAT_ECX_SSSE3 = 1 << 9, - CPUID_FEAT_ECX_CID = 1 << 10, - CPUID_FEAT_ECX_SDBG = 1 << 11, - CPUID_FEAT_ECX_FMA = 1 << 12, - CPUID_FEAT_ECX_CX16 = 1 << 13, - CPUID_FEAT_ECX_XTPR = 1 << 14, - CPUID_FEAT_ECX_PDCM = 1 << 15, - CPUID_FEAT_ECX_PCID = 1 << 17, - CPUID_FEAT_ECX_DCA = 1 << 18, - CPUID_FEAT_ECX_SSE4_1 = 1 << 19, - CPUID_FEAT_ECX_SSE4_2 = 1 << 20, - CPUID_FEAT_ECX_X2APIC = 1 << 21, - CPUID_FEAT_ECX_MOVBE = 1 << 22, - CPUID_FEAT_ECX_POPCNT = 1 << 23, - CPUID_FEAT_ECX_TSC = 1 << 24, - CPUID_FEAT_ECX_AES = 1 << 25, - CPUID_FEAT_ECX_XSAVE = 1 << 26, - CPUID_FEAT_ECX_OSXSAVE = 1 << 27, - CPUID_FEAT_ECX_AVX = 1 << 28, - CPUID_FEAT_ECX_F16C = 1 << 29, - CPUID_FEAT_ECX_RDRAND = 1 << 30, - CPUID_FEAT_ECX_HYPERVISOR = 1 << 31, +enum +{ + CPUID_FEAT_ECX_SSE3 = 1 << 0, + CPUID_FEAT_ECX_PCLMUL = 1 << 1, + CPUID_FEAT_ECX_DTES64 = 1 << 2, + CPUID_FEAT_ECX_MONITOR = 1 << 3, + CPUID_FEAT_ECX_DS_CPL = 1 << 4, + CPUID_FEAT_ECX_VMX = 1 << 5, + CPUID_FEAT_ECX_SMX = 1 << 6, + CPUID_FEAT_ECX_EST = 1 << 7, + CPUID_FEAT_ECX_TM2 = 1 << 8, + CPUID_FEAT_ECX_SSSE3 = 1 << 9, + CPUID_FEAT_ECX_CID = 1 << 10, + CPUID_FEAT_ECX_SDBG = 1 << 11, + CPUID_FEAT_ECX_FMA = 1 << 12, + CPUID_FEAT_ECX_CX16 = 1 << 13, + CPUID_FEAT_ECX_XTPR = 1 << 14, + CPUID_FEAT_ECX_PDCM = 1 << 15, + CPUID_FEAT_ECX_PCID = 1 << 17, + CPUID_FEAT_ECX_DCA = 1 << 18, + CPUID_FEAT_ECX_SSE4_1 = 1 << 19, + CPUID_FEAT_ECX_SSE4_2 = 1 << 20, + CPUID_FEAT_ECX_X2APIC = 1 << 21, + CPUID_FEAT_ECX_MOVBE = 1 << 22, + CPUID_FEAT_ECX_POPCNT = 1 << 23, + CPUID_FEAT_ECX_TSC = 1 << 24, + CPUID_FEAT_ECX_AES = 1 << 25, + CPUID_FEAT_ECX_XSAVE = 1 << 26, + CPUID_FEAT_ECX_OSXSAVE = 1 << 27, + CPUID_FEAT_ECX_AVX = 1 << 28, + CPUID_FEAT_ECX_F16C = 1 << 29, + CPUID_FEAT_ECX_RDRAND = 1 << 30, + CPUID_FEAT_ECX_HYPERVISOR = 1 << 31, - CPUID_FEAT_EDX_FPU = 1 << 0, - CPUID_FEAT_EDX_VME = 1 << 1, - CPUID_FEAT_EDX_DE = 1 << 2, - CPUID_FEAT_EDX_PSE = 1 << 3, - CPUID_FEAT_EDX_TSC = 1 << 4, - CPUID_FEAT_EDX_MSR = 1 << 5, - CPUID_FEAT_EDX_PAE = 1 << 6, - CPUID_FEAT_EDX_MCE = 1 << 7, - CPUID_FEAT_EDX_CX8 = 1 << 8, - CPUID_FEAT_EDX_APIC = 1 << 9, - CPUID_FEAT_EDX_SEP = 1 << 11, - CPUID_FEAT_EDX_MTRR = 1 << 12, - CPUID_FEAT_EDX_PGE = 1 << 13, - CPUID_FEAT_EDX_MCA = 1 << 14, - CPUID_FEAT_EDX_CMOV = 1 << 15, - CPUID_FEAT_EDX_PAT = 1 << 16, - CPUID_FEAT_EDX_PSE36 = 1 << 17, - CPUID_FEAT_EDX_PSN = 1 << 18, - CPUID_FEAT_EDX_CLFLUSH = 1 << 19, - CPUID_FEAT_EDX_DS = 1 << 21, - CPUID_FEAT_EDX_ACPI = 1 << 22, - CPUID_FEAT_EDX_MMX = 1 << 23, - CPUID_FEAT_EDX_FXSR = 1 << 24, - CPUID_FEAT_EDX_SSE = 1 << 25, - CPUID_FEAT_EDX_SSE2 = 1 << 26, - CPUID_FEAT_EDX_SS = 1 << 27, - CPUID_FEAT_EDX_HTT = 1 << 28, - CPUID_FEAT_EDX_TM = 1 << 29, - CPUID_FEAT_EDX_IA64 = 1 << 30, - CPUID_FEAT_EDX_PBE = 1 << 31 + CPUID_FEAT_EDX_FPU = 1 << 0, + CPUID_FEAT_EDX_VME = 1 << 1, + CPUID_FEAT_EDX_DE = 1 << 2, + CPUID_FEAT_EDX_PSE = 1 << 3, + CPUID_FEAT_EDX_TSC = 1 << 4, + CPUID_FEAT_EDX_MSR = 1 << 5, + CPUID_FEAT_EDX_PAE = 1 << 6, + CPUID_FEAT_EDX_MCE = 1 << 7, + CPUID_FEAT_EDX_CX8 = 1 << 8, + CPUID_FEAT_EDX_APIC = 1 << 9, + CPUID_FEAT_EDX_SEP = 1 << 11, + CPUID_FEAT_EDX_MTRR = 1 << 12, + CPUID_FEAT_EDX_PGE = 1 << 13, + CPUID_FEAT_EDX_MCA = 1 << 14, + CPUID_FEAT_EDX_CMOV = 1 << 15, + CPUID_FEAT_EDX_PAT = 1 << 16, + CPUID_FEAT_EDX_PSE36 = 1 << 17, + CPUID_FEAT_EDX_PSN = 1 << 18, + CPUID_FEAT_EDX_CLFLUSH = 1 << 19, + CPUID_FEAT_EDX_DS = 1 << 21, + CPUID_FEAT_EDX_ACPI = 1 << 22, + CPUID_FEAT_EDX_MMX = 1 << 23, + CPUID_FEAT_EDX_FXSR = 1 << 24, + CPUID_FEAT_EDX_SSE = 1 << 25, + CPUID_FEAT_EDX_SSE2 = 1 << 26, + CPUID_FEAT_EDX_SS = 1 << 27, + CPUID_FEAT_EDX_HTT = 1 << 28, + CPUID_FEAT_EDX_TM = 1 << 29, + CPUID_FEAT_EDX_IA64 = 1 << 30, + CPUID_FEAT_EDX_PBE = 1 << 31 }; static inline void outb(uint16_t port, uint8_t val) @@ -84,17 +85,20 @@ static inline void io_wait() outb(0x80, 0); } -static inline void cpuid(uint32_t code, uint32_t* a, uint32_t* d) { +static inline void cpuid(uint32_t code, uint32_t* a, uint32_t* d) +{ __asm__ volatile("cpuid" : "=a"(*a), "=d"(*d) : "a"(code) : "ecx", "ebx"); } -static inline uint64_t rdmsr(uint32_t msr) { +static inline uint64_t rdmsr(uint32_t msr) +{ uint32_t lo, hi; __asm__ volatile("rdmsr" : "=a"(lo), "=d"(hi) : "c"(msr)); return ((uint64_t)hi << 32) | lo; } -static inline void wrmsr(uint32_t msr, uint64_t value) { +static inline void wrmsr(uint32_t msr, uint64_t value) +{ uint32_t lo = (uint32_t)value; uint32_t hi = (uint32_t)(value >> 32); __asm__ volatile("wrmsr" : : "c"(msr), "a"(lo), "d"(hi));