Working PIT irqs, fix GDT bugs

This commit is contained in:
2025-12-09 17:14:01 +01:00
parent 9c8946de51
commit 64b14f3878
16 changed files with 382 additions and 138 deletions

View File

@@ -35,12 +35,35 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <libk/types.h>
#include <libk/compiler.h>
#define GDT_MEMORY 1
#define GDT_SYSTEM 0
#define GDT_KERNEL_PRIVL 0
#define GDT_USER_PRIVL 3
#define GDT_KCODE 1
#define GDT_KDATA 2
#define GDT_UCODE 3
#define GDT_UDATA 4
#define GDT_TSS 5
#define GDT_KERNEL_CS (GDT_KCODE << 3)
#define GDT_KERNEL_DS (GDT_KDATA << 3)
#define GDT_USER_CS (GDT_UCODE << 3)
#define GDT_USER_DS (GDT_UDATA << 3)
#define GDT_CODESEG 0x0A
#define GDT_DATASEG 0x02
#define GDT_TSS_SEG 0x09
#define TSS_SIZE 103
struct gdt_entry {
uint16_t limit_low;
uint16_t base_low;
uint8_t base_mid;
uint8_t access;
uint8_t gran;
uint8_t limit_up;
uint8_t base_up;
} packed;
@@ -50,16 +73,43 @@ struct gdt_ptr {
} packed;
struct tss {
uint32_t link;
uint32_t esp0, ss0;
uint32_t esp1, ss1;
uint32_t esp2, ss2;
uint32_t cr3;
uint32_t eip, eflags, eax, ecx, edx, ebx, esp, ebp, esi, edi;
uint32_t es, cs, ss, ds, fs, gs;
uint32_t ldt;
uint16_t trap;
uint16_t iomap;
uint32_t prev_tss;
uint32_t esp_0;
uint16_t ss_0;
uint16_t pad0;
uint32_t esp_1;
uint16_t ss_1;
uint16_t pad1;
uint32_t esp_2;
uint16_t ss_2;
uint16_t pad2;
uint32_t reserved;
uint32_t eip;
uint32_t eflags;
uint32_t eax;
uint32_t ecx;
uint32_t edx;
uint32_t ebx;
uint32_t esp;
uint32_t ebp;
uint32_t esi;
uint32_t edi;
uint16_t es;
uint16_t pad3;
uint16_t cs;
uint16_t pad4;
uint16_t ss;
uint16_t pad5;
uint16_t ds;
uint16_t pad6;
uint16_t fs;
uint16_t pad7;
uint16_t gs;
uint16_t pad8;
uint16_t ldt_selector;
uint16_t pad9;
uint16_t debug_trap;
uint16_t iomap_base;
} packed;
struct idt_entry {
@@ -76,12 +126,22 @@ struct idt_ptr {
} packed;
struct trapframe {
uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax;
uint32_t ds;
uint32_t cr3;
uint32_t trapno;
uint32_t edi;
uint32_t esi;
uint32_t ebp;
uint32_t esp;
uint32_t ebx;
uint32_t edx;
uint32_t ecx;
uint32_t eax;
uint32_t ec;
uint32_t eip, cs, eflags, uesp, uss;
uint32_t trapno;
uint32_t eip;
uint32_t cs;
uint32_t eflags;
uint32_t uesp;
uint32_t uss;
} packed;
void cpu_init(void);