Working PIT irqs, fix GDT bugs
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user