diff --git a/arch/atomic.asm b/arch/atomic.asm index f99acc9..3a68698 100644 --- a/arch/atomic.asm +++ b/arch/atomic.asm @@ -7,8 +7,8 @@ bits 64 ; 2 int32: old value ; 3 int32: new value ; RETURNS uint32 value read -global arch_cmp_swp_32 -arch_cmp_swp_32: +global cmp_swp_32 +cmp_swp_32: mov eax, esi lock cmpxchg dword [rdi], edx ret @@ -19,8 +19,8 @@ ret ; 2 int32: increment value ; 3 int32: new value ; RETURNS uint32 value read -global arch_fet_add_32: -arch_fet_add_32: +global fetch_add_32: +fetch_add_32: lock xadd dword [rdi], esi xor rax, rax mov eax, esi diff --git a/arch/cpu.c b/arch/cpu.c index a458c81..a00cfb5 100644 --- a/arch/cpu.c +++ b/arch/cpu.c @@ -1,4 +1,4 @@ -#include +#include "cpu.h" #include #define GDT_ENTRY_SIZE 8 diff --git a/arch/cpu.h b/arch/cpu.h new file mode 100644 index 0000000..b277c17 --- /dev/null +++ b/arch/cpu.h @@ -0,0 +1,41 @@ +#pragma once + +#include + +void KABI out_8(uint16 port, uint8 data); + +void KABI out_16(uint16 port, uint16 data); + +void KABI out_32(uint16 port, uint32 data); + +uint8 KABI in_8(uint16 port); + +uint16 KABI in_16(uint16 port); + +uint32 KABI in_32(uint16 port); + +void KABI flush_gdt(void *gdt_ptr, uint16 code_slct, uint16 data_slct); + +void KABI flush_idt(void *idt_ptr); + +void KABI flush_tss(uint16 tss_slct); + +void KABI cpuid(uint32 *eax, uint32 *ebx, uint32 *ecx, uint32 *edx); + +void KABI read_msr(uint32 *ecx, uint32 *edx, uint32 *eax); + +void KABI write_msr(uint32 *ecx, uint32 *edx, uint32 *eax); + +void KABI sti(); + +void KABI cli(); + +uint64 KABI read_cr8(); + +void KABI write_cr8(uint64 val); + +uint64 KABI read_cr3(); + +void KABI write_cr3(uint64 val); + +void KABI flush_tlb(); \ No newline at end of file diff --git a/arch/mem.c b/arch/mem.c index 181bd98..df1da26 100644 --- a/arch/mem.c +++ b/arch/mem.c @@ -1,8 +1,8 @@ #include -#include +#include "cpu.h" #include -#include +#include #include /** @@ -50,7 +50,7 @@ #define PT_ENTRY_NUM(vaddr) (((vaddr) >> 12) & 0x1FF) void -arch_write_page_tbl(void *base, uintptr pdpt_addr, uint64 attr) +write_page_tbl(void *base, uintptr pdpt_addr, uint64 attr) { if (base == NULL) { @@ -69,7 +69,7 @@ arch_write_page_tbl(void *base, uintptr pdpt_addr, uint64 attr) void* -arch_pmap_map(phys_addr paddr, usize size) +pmap_map(phys_addr paddr, usize size) { UNREFERENCED(size); return (void*)(paddr + KERNEL_PMAP_VADDR); diff --git a/arch/print.c b/arch/print.c index 34e3d5e..d0fecb7 100644 --- a/arch/print.c +++ b/arch/print.c @@ -1,5 +1,5 @@ #include -#include +#include "cpu.h" #include #include #include diff --git a/arch/trap.asm b/arch/trap.asm new file mode 100644 index 0000000..ec5dfaa --- /dev/null +++ b/arch/trap.asm @@ -0,0 +1,548 @@ +%include "asm.inc" + +extern intr_dispatcher +global intr_stub_array + +section .data +bits 64 +intr_stub_array: +dq intr_stub_0 +dq intr_stub_1 +dq intr_stub_2 +dq intr_stub_3 +dq intr_stub_4 +dq intr_stub_5 +dq intr_stub_6 +dq intr_stub_7 +dq intr_stub_8 +dq intr_stub_9 +dq intr_stub_10 +dq intr_stub_11 +dq intr_stub_12 +dq intr_stub_13 +dq intr_stub_14 +dq intr_stub_15 +dq intr_stub_16 +dq intr_stub_17 +dq intr_stub_18 +dq intr_stub_19 +dq intr_stub_20 +dq intr_stub_21 +dq intr_stub_22 +dq intr_stub_23 +dq intr_stub_24 +dq intr_stub_25 +dq intr_stub_26 +dq intr_stub_27 +dq intr_stub_28 +dq intr_stub_29 +dq intr_stub_30 +dq intr_stub_31 +dq intr_stub_32 +dq intr_stub_33 +dq intr_stub_34 +dq intr_stub_35 +dq intr_stub_36 +dq intr_stub_37 +dq intr_stub_38 +dq intr_stub_39 +dq intr_stub_40 +dq intr_stub_41 +dq intr_stub_42 +dq intr_stub_43 +dq intr_stub_44 +dq intr_stub_45 +dq intr_stub_46 +dq intr_stub_47 +dq intr_stub_48 +dq intr_stub_49 +dq intr_stub_50 +dq intr_stub_51 +dq intr_stub_52 +dq intr_stub_53 +dq intr_stub_54 +dq intr_stub_55 +dq intr_stub_56 +dq intr_stub_57 +dq intr_stub_58 +dq intr_stub_59 +dq intr_stub_60 +dq intr_stub_61 +dq intr_stub_62 +dq intr_stub_63 +dq intr_stub_64 +dq intr_stub_65 +dq intr_stub_66 +dq intr_stub_67 +dq intr_stub_68 +dq intr_stub_69 +dq intr_stub_70 +dq intr_stub_71 +dq intr_stub_72 +dq intr_stub_73 +dq intr_stub_74 +dq intr_stub_75 +dq intr_stub_76 +dq intr_stub_77 +dq intr_stub_78 +dq intr_stub_79 +dq intr_stub_80 +dq intr_stub_81 +dq intr_stub_82 +dq intr_stub_83 +dq intr_stub_84 +dq intr_stub_85 +dq intr_stub_86 +dq intr_stub_87 +dq intr_stub_88 +dq intr_stub_89 +dq intr_stub_90 +dq intr_stub_91 +dq intr_stub_92 +dq intr_stub_93 +dq intr_stub_94 +dq intr_stub_95 +dq intr_stub_96 +dq intr_stub_97 +dq intr_stub_98 +dq intr_stub_99 +dq intr_stub_100 +dq intr_stub_101 +dq intr_stub_102 +dq intr_stub_103 +dq intr_stub_104 +dq intr_stub_105 +dq intr_stub_106 +dq intr_stub_107 +dq intr_stub_108 +dq intr_stub_109 +dq intr_stub_110 +dq intr_stub_111 +dq intr_stub_112 +dq intr_stub_113 +dq intr_stub_114 +dq intr_stub_115 +dq intr_stub_116 +dq intr_stub_117 +dq intr_stub_118 +dq intr_stub_119 +dq intr_stub_120 +dq intr_stub_121 +dq intr_stub_122 +dq intr_stub_123 +dq intr_stub_124 +dq intr_stub_125 +dq intr_stub_126 +dq intr_stub_127 +dq intr_stub_128 +dq intr_stub_129 +dq intr_stub_130 +dq intr_stub_131 +dq intr_stub_132 +dq intr_stub_133 +dq intr_stub_134 +dq intr_stub_135 +dq intr_stub_136 +dq intr_stub_137 +dq intr_stub_138 +dq intr_stub_139 +dq intr_stub_140 +dq intr_stub_141 +dq intr_stub_142 +dq intr_stub_143 +dq intr_stub_144 +dq intr_stub_145 +dq intr_stub_146 +dq intr_stub_147 +dq intr_stub_148 +dq intr_stub_149 +dq intr_stub_150 +dq intr_stub_151 +dq intr_stub_152 +dq intr_stub_153 +dq intr_stub_154 +dq intr_stub_155 +dq intr_stub_156 +dq intr_stub_157 +dq intr_stub_158 +dq intr_stub_159 +dq intr_stub_160 +dq intr_stub_161 +dq intr_stub_162 +dq intr_stub_163 +dq intr_stub_164 +dq intr_stub_165 +dq intr_stub_166 +dq intr_stub_167 +dq intr_stub_168 +dq intr_stub_169 +dq intr_stub_170 +dq intr_stub_171 +dq intr_stub_172 +dq intr_stub_173 +dq intr_stub_174 +dq intr_stub_175 +dq intr_stub_176 +dq intr_stub_177 +dq intr_stub_178 +dq intr_stub_179 +dq intr_stub_180 +dq intr_stub_181 +dq intr_stub_182 +dq intr_stub_183 +dq intr_stub_184 +dq intr_stub_185 +dq intr_stub_186 +dq intr_stub_187 +dq intr_stub_188 +dq intr_stub_189 +dq intr_stub_190 +dq intr_stub_191 +dq intr_stub_192 +dq intr_stub_193 +dq intr_stub_194 +dq intr_stub_195 +dq intr_stub_196 +dq intr_stub_197 +dq intr_stub_198 +dq intr_stub_199 +dq intr_stub_200 +dq intr_stub_201 +dq intr_stub_202 +dq intr_stub_203 +dq intr_stub_204 +dq intr_stub_205 +dq intr_stub_206 +dq intr_stub_207 +dq intr_stub_208 +dq intr_stub_209 +dq intr_stub_210 +dq intr_stub_211 +dq intr_stub_212 +dq intr_stub_213 +dq intr_stub_214 +dq intr_stub_215 +dq intr_stub_216 +dq intr_stub_217 +dq intr_stub_218 +dq intr_stub_219 +dq intr_stub_220 +dq intr_stub_221 +dq intr_stub_222 +dq intr_stub_223 +dq intr_stub_224 +dq intr_stub_225 +dq intr_stub_226 +dq intr_stub_227 +dq intr_stub_228 +dq intr_stub_229 +dq intr_stub_230 +dq intr_stub_231 +dq intr_stub_232 +dq intr_stub_233 +dq intr_stub_234 +dq intr_stub_235 +dq intr_stub_236 +dq intr_stub_237 +dq intr_stub_238 +dq intr_stub_239 +dq intr_stub_240 +dq intr_stub_241 +dq intr_stub_242 +dq intr_stub_243 +dq intr_stub_244 +dq intr_stub_245 +dq intr_stub_246 +dq intr_stub_247 +dq intr_stub_248 +dq intr_stub_249 +dq intr_stub_250 +dq intr_stub_251 +dq intr_stub_252 +dq intr_stub_253 +dq intr_stub_254 +dq intr_stub_255 + +section .text +bits 64 + +%macro decl_err_intr_stub 1 +intr_stub_%1: +; vec +push qword %1 +PUSH_REGS +jmp intr_stub +%endmacro + +%macro decl_intr_stub 1 +intr_stub_%1: +push qword 0 ; push dummy error code to have consistent frame +push qword %1 +PUSH_REGS +jmp intr_stub +%endmacro + +intr_stub: +mov rsi, rsp +call intr_dispatcher +POP_REGS ; restore registers +add rsp, 16 ; skip error code and vector +iretq + +intr_stub_start: +decl_intr_stub 0 +decl_intr_stub 1 +decl_intr_stub 2 +decl_intr_stub 3 +decl_intr_stub 4 +decl_intr_stub 5 +decl_intr_stub 6 +decl_intr_stub 7 +decl_err_intr_stub 8 +decl_intr_stub 9 +decl_err_intr_stub 10 +decl_err_intr_stub 11 +decl_err_intr_stub 12 +decl_err_intr_stub 13 +decl_err_intr_stub 14 +decl_intr_stub 15 +decl_intr_stub 16 +decl_err_intr_stub 17 +decl_intr_stub 18 +decl_intr_stub 19 +decl_intr_stub 20 +decl_intr_stub 21 +decl_intr_stub 22 +decl_intr_stub 23 +decl_intr_stub 24 +decl_intr_stub 25 +decl_intr_stub 26 +decl_intr_stub 27 +decl_intr_stub 28 +decl_intr_stub 29 +decl_intr_stub 30 +decl_intr_stub 31 +decl_intr_stub 32 +decl_intr_stub 33 +decl_intr_stub 34 +decl_intr_stub 35 +decl_intr_stub 36 +decl_intr_stub 37 +decl_intr_stub 38 +decl_intr_stub 39 +decl_intr_stub 40 +decl_intr_stub 41 +decl_intr_stub 42 +decl_intr_stub 43 +decl_intr_stub 44 +decl_intr_stub 45 +decl_intr_stub 46 +decl_intr_stub 47 +decl_intr_stub 48 +decl_intr_stub 49 +decl_intr_stub 50 +decl_intr_stub 51 +decl_intr_stub 52 +decl_intr_stub 53 +decl_intr_stub 54 +decl_intr_stub 55 +decl_intr_stub 56 +decl_intr_stub 57 +decl_intr_stub 58 +decl_intr_stub 59 +decl_intr_stub 60 +decl_intr_stub 61 +decl_intr_stub 62 +decl_intr_stub 63 +decl_intr_stub 64 +decl_intr_stub 65 +decl_intr_stub 66 +decl_intr_stub 67 +decl_intr_stub 68 +decl_intr_stub 69 +decl_intr_stub 70 +decl_intr_stub 71 +decl_intr_stub 72 +decl_intr_stub 73 +decl_intr_stub 74 +decl_intr_stub 75 +decl_intr_stub 76 +decl_intr_stub 77 +decl_intr_stub 78 +decl_intr_stub 79 +decl_intr_stub 80 +decl_intr_stub 81 +decl_intr_stub 82 +decl_intr_stub 83 +decl_intr_stub 84 +decl_intr_stub 85 +decl_intr_stub 86 +decl_intr_stub 87 +decl_intr_stub 88 +decl_intr_stub 89 +decl_intr_stub 90 +decl_intr_stub 91 +decl_intr_stub 92 +decl_intr_stub 93 +decl_intr_stub 94 +decl_intr_stub 95 +decl_intr_stub 96 +decl_intr_stub 97 +decl_intr_stub 98 +decl_intr_stub 99 +decl_intr_stub 100 +decl_intr_stub 101 +decl_intr_stub 102 +decl_intr_stub 103 +decl_intr_stub 104 +decl_intr_stub 105 +decl_intr_stub 106 +decl_intr_stub 107 +decl_intr_stub 108 +decl_intr_stub 109 +decl_intr_stub 110 +decl_intr_stub 111 +decl_intr_stub 112 +decl_intr_stub 113 +decl_intr_stub 114 +decl_intr_stub 115 +decl_intr_stub 116 +decl_intr_stub 117 +decl_intr_stub 118 +decl_intr_stub 119 +decl_intr_stub 120 +decl_intr_stub 121 +decl_intr_stub 122 +decl_intr_stub 123 +decl_intr_stub 124 +decl_intr_stub 125 +decl_intr_stub 126 +decl_intr_stub 127 +decl_intr_stub 128 +decl_intr_stub 129 +decl_intr_stub 130 +decl_intr_stub 131 +decl_intr_stub 132 +decl_intr_stub 133 +decl_intr_stub 134 +decl_intr_stub 135 +decl_intr_stub 136 +decl_intr_stub 137 +decl_intr_stub 138 +decl_intr_stub 139 +decl_intr_stub 140 +decl_intr_stub 141 +decl_intr_stub 142 +decl_intr_stub 143 +decl_intr_stub 144 +decl_intr_stub 145 +decl_intr_stub 146 +decl_intr_stub 147 +decl_intr_stub 148 +decl_intr_stub 149 +decl_intr_stub 150 +decl_intr_stub 151 +decl_intr_stub 152 +decl_intr_stub 153 +decl_intr_stub 154 +decl_intr_stub 155 +decl_intr_stub 156 +decl_intr_stub 157 +decl_intr_stub 158 +decl_intr_stub 159 +decl_intr_stub 160 +decl_intr_stub 161 +decl_intr_stub 162 +decl_intr_stub 163 +decl_intr_stub 164 +decl_intr_stub 165 +decl_intr_stub 166 +decl_intr_stub 167 +decl_intr_stub 168 +decl_intr_stub 169 +decl_intr_stub 170 +decl_intr_stub 171 +decl_intr_stub 172 +decl_intr_stub 173 +decl_intr_stub 174 +decl_intr_stub 175 +decl_intr_stub 176 +decl_intr_stub 177 +decl_intr_stub 178 +decl_intr_stub 179 +decl_intr_stub 180 +decl_intr_stub 181 +decl_intr_stub 182 +decl_intr_stub 183 +decl_intr_stub 184 +decl_intr_stub 185 +decl_intr_stub 186 +decl_intr_stub 187 +decl_intr_stub 188 +decl_intr_stub 189 +decl_intr_stub 190 +decl_intr_stub 191 +decl_intr_stub 192 +decl_intr_stub 193 +decl_intr_stub 194 +decl_intr_stub 195 +decl_intr_stub 196 +decl_intr_stub 197 +decl_intr_stub 198 +decl_intr_stub 199 +decl_intr_stub 200 +decl_intr_stub 201 +decl_intr_stub 202 +decl_intr_stub 203 +decl_intr_stub 204 +decl_intr_stub 205 +decl_intr_stub 206 +decl_intr_stub 207 +decl_intr_stub 208 +decl_intr_stub 209 +decl_intr_stub 210 +decl_intr_stub 211 +decl_intr_stub 212 +decl_intr_stub 213 +decl_intr_stub 214 +decl_intr_stub 215 +decl_intr_stub 216 +decl_intr_stub 217 +decl_intr_stub 218 +decl_intr_stub 219 +decl_intr_stub 220 +decl_intr_stub 221 +decl_intr_stub 222 +decl_intr_stub 223 +decl_intr_stub 224 +decl_intr_stub 225 +decl_intr_stub 226 +decl_intr_stub 227 +decl_intr_stub 228 +decl_intr_stub 229 +decl_intr_stub 230 +decl_intr_stub 231 +decl_intr_stub 232 +decl_intr_stub 233 +decl_intr_stub 234 +decl_intr_stub 235 +decl_intr_stub 236 +decl_intr_stub 237 +decl_intr_stub 238 +decl_intr_stub 239 +decl_intr_stub 240 +decl_intr_stub 241 +decl_intr_stub 242 +decl_intr_stub 243 +decl_intr_stub 244 +decl_intr_stub 245 +decl_intr_stub 246 +decl_intr_stub 247 +decl_intr_stub 248 +decl_intr_stub 249 +decl_intr_stub 250 +decl_intr_stub 251 +decl_intr_stub 252 +decl_intr_stub 253 +decl_intr_stub 254 +decl_intr_stub 255 \ No newline at end of file diff --git a/arch/intr.c b/arch/trap.c similarity index 100% rename from arch/intr.c rename to arch/trap.c diff --git a/bootstrap_deb.sh b/bootstrap_deb.sh deleted file mode 100644 index eeba4ea..0000000 --- a/bootstrap_deb.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -# Bootstrap debian 9 + clang-6.0 backport environment -# Personal use only -export CC_ENV=clang-6.0 -export LD_ENV=lld-6.0 -export DAS_ENV=llvm-objdump-6.0 -export AS_ENV=nasm \ No newline at end of file diff --git a/gdbq b/gdbq deleted file mode 100644 index 5ca3e04..0000000 --- a/gdbq +++ /dev/null @@ -1,4 +0,0 @@ -file out/secxkrnl.elf -set arch i386:x86-64 -target remote localhost:1234 -break hmain \ No newline at end of file diff --git a/gdbw b/gdbw deleted file mode 100644 index e5e8d74..0000000 --- a/gdbw +++ /dev/null @@ -1,3 +0,0 @@ -disconnect -set arch i386:x86-64:intel -target remote localhost:1234 \ No newline at end of file diff --git a/inc/arch/atomic.h b/inc/arch/atomic.h index b7a080b..755bb00 100644 --- a/inc/arch/atomic.h +++ b/inc/arch/atomic.h @@ -1,8 +1,8 @@ #pragma once -#include +#include -int32 KABI arch_cmp_swp_32(int32* dst, int32 old, int32 val); +int32 KABI cmp_swp_32(int32* dst, int32 old, int32 val); -int32 KABI arch_fet_add_32(int32* dst, int32 val); +int32 KABI fetch_add_32(int32* dst, int32 val); diff --git a/inc/arch/cpu.h b/inc/arch/cpu.h deleted file mode 100644 index bcd11ad..0000000 --- a/inc/arch/cpu.h +++ /dev/null @@ -1,58 +0,0 @@ -#pragma once - -#include - -#define HAL_CORE_COUNT 1 - -struct PRAGMA_PACKED hal_gdt_ptr -{ - uint16 limit; - uint64 base; -}; - -struct PRAGMA_PACKED hal_idt_ptr -{ - uint16 limit; - uint64 base; -}; - -/** - * ASM declaration - */ - -void KABI hal_cpuid(uint32 *eax, uint32 *ebx, uint32 *ecx, uint32 *edx); - -void KABI hal_halt_cpu(void); - -void KABI hal_flush_gdt(struct hal_gdt_ptr *gdt_ptr, uint64 code_slct, uint64 data_slct); - -void KABI hal_flush_tlb(void); - -void KABI hal_flush_idt(struct hal_idt_ptr *idt_ptr); - -void KABI hal_read_idt(struct hal_idt_ptr **idt_ptr); - -void KABI hal_read_msr(uint32 *ecx, uint32 *edx, uint32 *eax); - -void KABI hal_write_msr(uint32 *ecx, uint32 *edx, uint32 *eax); - -void KABI hal_write_cr3(uint64 base); - -uint64 KABI hal_read_cr3(void); - -void KABI hal_write_cr8(uint64 pri); - -uint64 KABI hal_read_cr8(void); - -int8 HABI hal_read_port_8(uint16 port); - -int16 HABI hal_read_port_16(uint16 port); - -int32 HABI hal_read_port_32(uint16 port); - -void HABI hal_write_port_8(uint16 port, uint8 data); - -void HABI hal_write_port_16(uint16 port, uint16 data); - -void HABI hal_write_port_32(uint16 port, uint32 data); - diff --git a/inc/arch/intr.h b/inc/arch/intr.h deleted file mode 100644 index 9c5d719..0000000 --- a/inc/arch/intr.h +++ /dev/null @@ -1,1102 +0,0 @@ -#pragma once - -#include "hdef.h" -#include "intr.h" -#include "kernel.h" -#include "kern/clib.h" -#include "hal.h" - -/** - * Interrupt context structure - */ -struct interrupt_context -{ - const uint64 rip; - const uint64 cs; - const uint64 rflags; - const uint64 rsp; - const uint64 ss; -}; - -/** - * IDT Defns - */ -#define GATE_DPL_0 (0ull << 13) -#define GATE_DPL_1 (1ull << 13) -#define GATE_DPL_2 (2ull << 13) -#define GATE_DPL_3 (3ull << 13) -#define GATE_PRESENT (1ull << 15) -#define GATE_TYPE_CALL (12ull << 8) -#define GATE_TYPE_INTERRUPT (14ull << 8) -#define GATE_TYPE_TRAP (15ull << 8) - -#define IDT_ENTRY_NUM 256 -#define IDT_ENTRY_SIZE 16 - -/** - * C declaration - */ -int32 -hal_interrupt_init(void); - -void -hal_write_gate(void * gate, uint64 offset, uint32 selector, uint32 attr); - -void -hal_set_interrupt_handler(uint64 index, void (*handler)(void)); - -uint32 -impl_hal_set_irql(uint32 irql); - -uint32 -impl_hal_get_irql(void); - -void -impl_hal_issue_intr(uint32 target_core, uint32 vector); - -void -impl_hal_set_intr_dispatcher(k_intr_dispatcher handler); - -void -impl_hal_set_exc_dispatcher(k_exc_dispatcher handler); - -uint32 -impl_hal_get_core_id(void); - -/** - * Exported Dispatchers for asm code - */ -void HABI -hal_interrupt_dispatcher(uint64 int_vec, struct interrupt_context *context); - -void HABI -hal_exception_dispatcher(uint64 exc_vec, struct interrupt_context *context, uint32 errorcode); - -/** - * ASM declaration - */ - -void HABI hal_enable_interrupt(void); - -void HABI hal_disable_interrupt(void); - -/** - * System exception Handlers - */ -void HABI -hal_interrupt_handler_0(void); - -void HABI -hal_interrupt_handler_1(void); - -void HABI -hal_interrupt_handler_2(void); - -void HABI -hal_interrupt_handler_3(void); - -void HABI -hal_interrupt_handler_4(void); - -void HABI -hal_interrupt_handler_5(void); - -void HABI -hal_interrupt_handler_6(void); - -void HABI -hal_interrupt_handler_7(void); - -void HABI -hal_interrupt_handler_8(void); - -void HABI - -hal_interrupt_handler_9(void); - -void HABI - -hal_interrupt_handler_10(void); - -void HABI - -hal_interrupt_handler_11(void); - -void HABI - -hal_interrupt_handler_12(void); - -void HABI - -hal_interrupt_handler_13(void); - -void HABI - -hal_interrupt_handler_14(void); - -void HABI - -hal_interrupt_handler_15(void); - -void HABI - -hal_interrupt_handler_16(void); - -void HABI - -hal_interrupt_handler_17(void); - -void HABI - -hal_interrupt_handler_18(void); - -void HABI - -hal_interrupt_handler_19(void); - -void HABI - -hal_interrupt_handler_20(void); - -void HABI - -hal_interrupt_handler_21(void); - -void HABI - -hal_interrupt_handler_22(void); - -void HABI - -hal_interrupt_handler_23(void); - -void HABI - -hal_interrupt_handler_24(void); - -void HABI - -hal_interrupt_handler_25(void); - -void HABI - -hal_interrupt_handler_26(void); - -void HABI - -hal_interrupt_handler_27(void); - -void HABI - -hal_interrupt_handler_28(void); - -void HABI - -hal_interrupt_handler_29(void); - -void HABI - -hal_interrupt_handler_30(void); - -void HABI - -hal_interrupt_handler_31(void); - -/** - * Kernel defined interrupt handlers - */ -void HABI - -hal_interrupt_handler_32(void); - -void HABI - -hal_interrupt_handler_33(void); - -void HABI - -hal_interrupt_handler_34(void); - -void HABI - -hal_interrupt_handler_35(void); - -void HABI - -hal_interrupt_handler_36(void); - -void HABI - -hal_interrupt_handler_37(void); - -void HABI - -hal_interrupt_handler_38(void); - -void HABI - -hal_interrupt_handler_39(void); - -void HABI - -hal_interrupt_handler_40(void); - -void HABI - -hal_interrupt_handler_41(void); - -void HABI - -hal_interrupt_handler_42(void); - -void HABI - -hal_interrupt_handler_43(void); - -void HABI - -hal_interrupt_handler_44(void); - -void HABI - -hal_interrupt_handler_45(void); - -void HABI - -hal_interrupt_handler_46(void); - -void HABI - -hal_interrupt_handler_47(void); - -void HABI - -hal_interrupt_handler_48(void); - -void HABI - -hal_interrupt_handler_49(void); - -void HABI - -hal_interrupt_handler_50(void); - -void HABI - -hal_interrupt_handler_51(void); - -void HABI - -hal_interrupt_handler_52(void); - -void HABI - -hal_interrupt_handler_53(void); - -void HABI - -hal_interrupt_handler_54(void); - -void HABI - -hal_interrupt_handler_55(void); - -void HABI - -hal_interrupt_handler_56(void); - -void HABI - -hal_interrupt_handler_57(void); - -void HABI - -hal_interrupt_handler_58(void); - -void HABI - -hal_interrupt_handler_59(void); - -void HABI - -hal_interrupt_handler_60(void); - -void HABI - -hal_interrupt_handler_61(void); - -void HABI - -hal_interrupt_handler_62(void); - -void HABI - -hal_interrupt_handler_63(void); - -void HABI - -hal_interrupt_handler_64(void); - -void HABI - -hal_interrupt_handler_65(void); - -void HABI - -hal_interrupt_handler_66(void); - -void HABI - -hal_interrupt_handler_67(void); - -void HABI - -hal_interrupt_handler_68(void); - -void HABI - -hal_interrupt_handler_69(void); - -void HABI - -hal_interrupt_handler_70(void); - -void HABI - -hal_interrupt_handler_71(void); - -void HABI - -hal_interrupt_handler_72(void); - -void HABI - -hal_interrupt_handler_73(void); - -void HABI - -hal_interrupt_handler_74(void); - -void HABI - -hal_interrupt_handler_75(void); - -void HABI - -hal_interrupt_handler_76(void); - -void HABI - -hal_interrupt_handler_77(void); - -void HABI - -hal_interrupt_handler_78(void); - -void HABI - -hal_interrupt_handler_79(void); - -void HABI - -hal_interrupt_handler_80(void); - -void HABI - -hal_interrupt_handler_81(void); - -void HABI - -hal_interrupt_handler_82(void); - -void HABI - -hal_interrupt_handler_83(void); - -void HABI - -hal_interrupt_handler_84(void); - -void HABI - -hal_interrupt_handler_85(void); - -void HABI - -hal_interrupt_handler_86(void); - -void HABI - -hal_interrupt_handler_87(void); - -void HABI - -hal_interrupt_handler_88(void); - -void HABI - -hal_interrupt_handler_89(void); - -void HABI - -hal_interrupt_handler_90(void); - -void HABI - -hal_interrupt_handler_91(void); - -void HABI - -hal_interrupt_handler_92(void); - -void HABI - -hal_interrupt_handler_93(void); - -void HABI - -hal_interrupt_handler_94(void); - -void HABI - -hal_interrupt_handler_95(void); - -void HABI - -hal_interrupt_handler_96(void); - -void HABI - -hal_interrupt_handler_97(void); - -void HABI - -hal_interrupt_handler_98(void); - -void HABI - -hal_interrupt_handler_99(void); - -void HABI - -hal_interrupt_handler_100(void); - -void HABI - -hal_interrupt_handler_101(void); - -void HABI - -hal_interrupt_handler_102(void); - -void HABI - -hal_interrupt_handler_103(void); - -void HABI - -hal_interrupt_handler_104(void); - -void HABI - -hal_interrupt_handler_105(void); - -void HABI - -hal_interrupt_handler_106(void); - -void HABI - -hal_interrupt_handler_107(void); - -void HABI - -hal_interrupt_handler_108(void); - -void HABI - -hal_interrupt_handler_109(void); - -void HABI - -hal_interrupt_handler_110(void); - -void HABI - -hal_interrupt_handler_111(void); - -void HABI - -hal_interrupt_handler_112(void); - -void HABI - -hal_interrupt_handler_113(void); - -void HABI - -hal_interrupt_handler_114(void); - -void HABI - -hal_interrupt_handler_115(void); - -void HABI - -hal_interrupt_handler_116(void); - -void HABI - -hal_interrupt_handler_117(void); - -void HABI - -hal_interrupt_handler_118(void); - -void HABI - -hal_interrupt_handler_119(void); - -void HABI - -hal_interrupt_handler_120(void); - -void HABI - -hal_interrupt_handler_121(void); - -void HABI - -hal_interrupt_handler_122(void); - -void HABI - -hal_interrupt_handler_123(void); - -void HABI - -hal_interrupt_handler_124(void); - -void HABI - -hal_interrupt_handler_125(void); - -void HABI - -hal_interrupt_handler_126(void); - -void HABI - -hal_interrupt_handler_127(void); - -void HABI - -hal_interrupt_handler_128(void); - -void HABI - -hal_interrupt_handler_129(void); - -void HABI - -hal_interrupt_handler_130(void); - -void HABI - -hal_interrupt_handler_131(void); - -void HABI - -hal_interrupt_handler_132(void); - -void HABI - -hal_interrupt_handler_133(void); - -void HABI - -hal_interrupt_handler_134(void); - -void HABI - -hal_interrupt_handler_135(void); - -void HABI - -hal_interrupt_handler_136(void); - -void HABI - -hal_interrupt_handler_137(void); - -void HABI - -hal_interrupt_handler_138(void); - -void HABI - -hal_interrupt_handler_139(void); - -void HABI - -hal_interrupt_handler_140(void); - -void HABI - -hal_interrupt_handler_141(void); - -void HABI - -hal_interrupt_handler_142(void); - -void HABI - -hal_interrupt_handler_143(void); - -void HABI - -hal_interrupt_handler_144(void); - -void HABI - -hal_interrupt_handler_145(void); - -void HABI - -hal_interrupt_handler_146(void); - -void HABI - -hal_interrupt_handler_147(void); - -void HABI - -hal_interrupt_handler_148(void); - -void HABI - -hal_interrupt_handler_149(void); - -void HABI - -hal_interrupt_handler_150(void); - -void HABI - -hal_interrupt_handler_151(void); - -void HABI - -hal_interrupt_handler_152(void); - -void HABI - -hal_interrupt_handler_153(void); - -void HABI - -hal_interrupt_handler_154(void); - -void HABI - -hal_interrupt_handler_155(void); - -void HABI - -hal_interrupt_handler_156(void); - -void HABI - -hal_interrupt_handler_157(void); - -void HABI - -hal_interrupt_handler_158(void); - -void HABI - -hal_interrupt_handler_159(void); - -void HABI - -hal_interrupt_handler_160(void); - -void HABI - -hal_interrupt_handler_161(void); - -void HABI - -hal_interrupt_handler_162(void); - -void HABI - -hal_interrupt_handler_163(void); - -void HABI - -hal_interrupt_handler_164(void); - -void HABI - -hal_interrupt_handler_165(void); - -void HABI - -hal_interrupt_handler_166(void); - -void HABI - -hal_interrupt_handler_167(void); - -void HABI - -hal_interrupt_handler_168(void); - -void HABI - -hal_interrupt_handler_169(void); - -void HABI - -hal_interrupt_handler_170(void); - -void HABI - -hal_interrupt_handler_171(void); - -void HABI - -hal_interrupt_handler_172(void); - -void HABI - -hal_interrupt_handler_173(void); - -void HABI - -hal_interrupt_handler_174(void); - -void HABI - -hal_interrupt_handler_175(void); - -void HABI - -hal_interrupt_handler_176(void); - -void HABI - -hal_interrupt_handler_177(void); - -void HABI - -hal_interrupt_handler_178(void); - -void HABI - -hal_interrupt_handler_179(void); - -void HABI - -hal_interrupt_handler_180(void); - -void HABI - -hal_interrupt_handler_181(void); - -void HABI - -hal_interrupt_handler_182(void); - -void HABI - -hal_interrupt_handler_183(void); - -void HABI - -hal_interrupt_handler_184(void); - -void HABI - -hal_interrupt_handler_185(void); - -void HABI - -hal_interrupt_handler_186(void); - -void HABI - -hal_interrupt_handler_187(void); - -void HABI - -hal_interrupt_handler_188(void); - -void HABI - -hal_interrupt_handler_189(void); - -void HABI - -hal_interrupt_handler_190(void); - -void HABI - -hal_interrupt_handler_191(void); - -void HABI - -hal_interrupt_handler_192(void); - -void HABI - -hal_interrupt_handler_193(void); - -void HABI - -hal_interrupt_handler_194(void); - -void HABI - -hal_interrupt_handler_195(void); - -void HABI - -hal_interrupt_handler_196(void); - -void HABI - -hal_interrupt_handler_197(void); - -void HABI - -hal_interrupt_handler_198(void); - -void HABI - -hal_interrupt_handler_199(void); - -void HABI - -hal_interrupt_handler_200(void); - -void HABI - -hal_interrupt_handler_201(void); - -void HABI - -hal_interrupt_handler_202(void); - -void HABI - -hal_interrupt_handler_203(void); - -void HABI - -hal_interrupt_handler_204(void); - -void HABI - -hal_interrupt_handler_205(void); - -void HABI - -hal_interrupt_handler_206(void); - -void HABI - -hal_interrupt_handler_207(void); - -void HABI - -hal_interrupt_handler_208(void); - -void HABI - -hal_interrupt_handler_209(void); - -void HABI - -hal_interrupt_handler_210(void); - -void HABI - -hal_interrupt_handler_211(void); - -void HABI - -hal_interrupt_handler_212(void); - -void HABI - -hal_interrupt_handler_213(void); - -void HABI - -hal_interrupt_handler_214(void); - -void HABI - -hal_interrupt_handler_215(void); - -void HABI - -hal_interrupt_handler_216(void); - -void HABI - -hal_interrupt_handler_217(void); - -void HABI - -hal_interrupt_handler_218(void); - -void HABI - -hal_interrupt_handler_219(void); - -void HABI - -hal_interrupt_handler_220(void); - -void HABI - -hal_interrupt_handler_221(void); - -void HABI - -hal_interrupt_handler_222(void); - -void HABI - -hal_interrupt_handler_223(void); - -void HABI - -hal_interrupt_handler_224(void); - -void HABI - -hal_interrupt_handler_225(void); - -void HABI - -hal_interrupt_handler_226(void); - -void HABI - -hal_interrupt_handler_227(void); - -void HABI - -hal_interrupt_handler_228(void); - -void HABI - -hal_interrupt_handler_229(void); - -void HABI - -hal_interrupt_handler_230(void); - -void HABI - -hal_interrupt_handler_231(void); - -void HABI - -hal_interrupt_handler_232(void); - -void HABI - -hal_interrupt_handler_233(void); - -void HABI - -hal_interrupt_handler_234(void); - -void HABI - -hal_interrupt_handler_235(void); - -void HABI - -hal_interrupt_handler_236(void); - -void HABI - -hal_interrupt_handler_237(void); - -void HABI - -hal_interrupt_handler_238(void); - -void HABI - -hal_interrupt_handler_239(void); - -void HABI - -hal_interrupt_handler_240(void); - -void HABI - -hal_interrupt_handler_241(void); - -void HABI - -hal_interrupt_handler_242(void); - -void HABI - -hal_interrupt_handler_243(void); - -void HABI - -hal_interrupt_handler_244(void); - -void HABI - -hal_interrupt_handler_245(void); - -void HABI - -hal_interrupt_handler_246(void); - -void HABI - -hal_interrupt_handler_247(void); - -void HABI - -hal_interrupt_handler_248(void); - -void HABI - -hal_interrupt_handler_249(void); - -void HABI - -hal_interrupt_handler_250(void); - -void HABI - -hal_interrupt_handler_251(void); - -void HABI - -hal_interrupt_handler_252(void); - -void HABI - -hal_interrupt_handler_253(void); - -void HABI - -hal_interrupt_handler_254(void); - -void HABI - -hal_interrupt_handler_255(void); diff --git a/inc/arch/mem.h b/inc/arch/mem.h index f2e6c2c..d6df15d 100644 --- a/inc/arch/mem.h +++ b/inc/arch/mem.h @@ -3,9 +3,6 @@ #include #include -void -arch_write_page_tbl(void *base, uintptr pdpt_addr, uint64 attr); - void* -arch_pmap_map(phys_addr paddr, usize size); +pmap_map(phys_addr paddr, usize size); diff --git a/inc/arch/print.h b/inc/arch/print.h index 1d1f448..d0654fb 100644 --- a/inc/arch/print.h +++ b/inc/arch/print.h @@ -1,12 +1,5 @@ #pragma once #include -#include void -arch_printf(const char *format, ...); - -void -arch_cls(void); - -void -arch_print_init(void); +aprintf(const char *format, ...); \ No newline at end of file diff --git a/inc/arch/trap.h b/inc/arch/trap.h new file mode 100644 index 0000000..90b7f06 --- /dev/null +++ b/inc/arch/trap.h @@ -0,0 +1,34 @@ +#pragma once + +/** + * Trap frame + */ +struct trap_frame +{ + uint64 gs; + uint64 fs; + uint64 es; + uint64 ds; + uint64 r15; + uint64 r14; + uint64 r13; + uint64 r12; + uint64 r11; + uint64 r10; + uint64 r9; + uint64 r8; + uint64 rsi; + uint64 rdi; + uint64 rbp; + uint64 rdx; + uint64 rcx; + uint64 rbx; + uint64 rax; + uint64 vec; + uint64 error_code; + uint64 rip; + uint64 cs; + uint64 rflags; + uint64 rsp; + uint64 ss; +}; \ No newline at end of file diff --git a/inc/ke/balloc.h b/inc/mm/balloc.h similarity index 100% rename from inc/ke/balloc.h rename to inc/mm/balloc.h diff --git a/ke/assert.c b/ke/assert.c index 47814f2..e39ee24 100644 --- a/ke/assert.c +++ b/ke/assert.c @@ -1,6 +1,6 @@ -#include -#include -#include +#include +#include +#include void kassert_ex(const char *expr_str, const char *file, int32 line, int32 expr) { diff --git a/ke/atree.c b/ke/atree.c index dd8aa0a..b5387d2 100644 --- a/ke/atree.c +++ b/ke/atree.c @@ -1,5 +1,5 @@ -#include -#include +#include +#include static struct atree_node * atree_node_max(struct atree_node *node) diff --git a/ke/balloc.c b/mm/balloc.c similarity index 88% rename from ke/balloc.c rename to mm/balloc.c index ebedeb7..8421523 100644 --- a/ke/balloc.c +++ b/mm/balloc.c @@ -1,7 +1,7 @@ -#include +#include #include -#include -#include +#include +#include // for each size // we have - bitmap representing each frame_size diff --git a/ke/ssalloc.c b/mm/ssalloc.c similarity index 100% rename from ke/ssalloc.c rename to mm/ssalloc.c