diff options
author | Robin Krahl <robin.krahl@ireas.org> | 2017-03-06 02:14:29 +0100 |
---|---|---|
committer | Robin Krahl <robin.krahl@ireas.org> | 2017-03-06 02:14:29 +0100 |
commit | 9113c143c377876cc750e007e99f76c844bc95e8 (patch) | |
tree | 0c055d6fe57c713042e352284996eef6433737a7 /core | |
parent | 0041476a0f804db9266c54b8ce62a585e7b30890 (diff) | |
download | garmos-9113c143c377876cc750e007e99f76c844bc95e8.tar.gz garmos-9113c143c377876cc750e007e99f76c844bc95e8.tar.bz2 |
gdt: move assembler code to arch
The assembler code to set the global descriptor table is
architecture-specific and therefore moved to arch.{c,h}.
Diffstat (limited to 'core')
-rw-r--r-- | core/gdt.c | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -12,7 +12,9 @@ * more details. */ +#include <garmos/arch.h> #include <garmos/gdt.h> +#include <garmos/kernel.h> #include <garmos/types.h> struct gdt_sgmt { @@ -33,11 +35,6 @@ enum gdt_sgmts { struct gdt_sgmt gdt[GDT_SGMT_COUNT]; -struct gdtp { - uint16_t limit; - void *pointer; -} __attribute__((packed)); - struct gdtp gdtp = { .limit = GDT_SGMT_COUNT * sizeof(*gdt) - 1, .pointer = gdt, @@ -69,9 +66,11 @@ static void gdt_sgmt_set(uint32_t base, uint32_t limit, uint8_t access, void gdt_init(void) { + ker_dbg("Initializing GDT ..."); + gdt_sgmt_set(0, 0, 0, &gdt[GDT_SGMT_NULL]); gdt_sgmt_set(0, 64 * 1024 * 1024, 0x9A, &gdt[GDT_SGMT_CODE]); gdt_sgmt_set(0, 64 * 1024 * 1024, 0x92, &gdt[GDT_SGMT_NULL]); - asm volatile("lgdt %0" : : "m" (gdtp)); + gdtset(gdtp); } |