diff options
author | Marvin Borner | 2019-09-19 19:56:59 +0200 |
---|---|---|
committer | Marvin Borner | 2019-09-19 20:05:38 +0200 |
commit | 05e1fedcc9cd30d1a34a65e640da45e980b4f859 (patch) | |
tree | 9cfb7620907ac126f26cdfe9363cb73ed74ea179 /src/gdt/gdt.c | |
parent | ffd82e18b5259fab477ad375a7af8550fac526d8 (diff) |
Moved source to kernel directory
Diffstat (limited to 'src/gdt/gdt.c')
-rw-r--r-- | src/gdt/gdt.c | 51 |
1 files changed, 0 insertions, 51 deletions
diff --git a/src/gdt/gdt.c b/src/gdt/gdt.c deleted file mode 100644 index 813b432..0000000 --- a/src/gdt/gdt.c +++ /dev/null @@ -1,51 +0,0 @@ -struct gdt_entry { - unsigned short limit_low; - unsigned short base_low; - unsigned char base_middle; - unsigned char access; - unsigned char granularity; - unsigned char base_high; -} __attribute__((packed)); - -struct gdt_ptr { - unsigned short limit; - unsigned int base; -} __attribute__((packed)); - -struct gdt_entry gdt[3]; -struct gdt_ptr gp; - -extern void gdt_flush(); - -void gdt_set_gate(int num, unsigned long base, unsigned long limit, unsigned char access, unsigned char gran) { - // Set descriptor base address - gdt[num].base_low = (base & 0xFFFF); - gdt[num].base_middle = (base >> 16) & 0xFF; - gdt[num].base_high = (base >> 24) & 0xFF; - - // Set descriptor limits - gdt[num].limit_low = (limit & 0xFFFF); - gdt[num].granularity = ((limit >> 16) & 0x0F); - - // Set granularity and access flags - gdt[num].granularity |= (gran & 0xF0); - gdt[num].access = access; -} - -void gdt_install() { - // Set GDT pointer and limit - gp.limit = (sizeof(struct gdt_entry) * 3) - 1; - gp.base = &gdt; - - // NULL descriptor - gdt_set_gate(0, 0, 0, 0, 0); - - // Code segment - gdt_set_gate(1, 0, 0xFFFFFFFF, 0x9A, 0xCF); - - // Data segment - gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 0xCF); - - // Remove old GDT and install the new changes! - gdt_flush(); -}
\ No newline at end of file |