summaryrefslogtreecommitdiff
path: root/kernel/gdt.h
diff options
context:
space:
mode:
authorVegard Storheil Eriksen <zyp@jvnv.net>2010-01-20 22:19:56 +0100
committerVegard Storheil Eriksen <zyp@jvnv.net>2010-01-20 22:19:56 +0100
commit043b8b9d4624d4208a330cbce9775c43f1bf1fc6 (patch)
tree372cedf25985b37d6f29a2ca9baaf117cf853075 /kernel/gdt.h
parent068368d0bedc34f561ab0c9dd614c02b346d1d4e (diff)
Added TSS.
Diffstat (limited to 'kernel/gdt.h')
-rw-r--r--kernel/gdt.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/kernel/gdt.h b/kernel/gdt.h
index e2c5b46..36c37dd 100644
--- a/kernel/gdt.h
+++ b/kernel/gdt.h
@@ -4,6 +4,45 @@
#include "types.h"
typedef struct {
+ uint32_t link;
+
+ uint32_t esp0;
+ uint32_t ss0;
+
+ uint32_t esp1;
+ uint32_t ss1;
+
+ uint32_t esp2;
+ uint32_t ss2;
+
+ uint32_t cr3;
+
+ 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;
+
+ uint32_t es;
+ uint32_t cs;
+ uint32_t ss;
+ uint32_t ds;
+ uint32_t fs;
+ uint32_t gs;
+
+ uint32_t ldt;
+
+ uint16_t trap;
+ uint16_t iomap;
+} __attribute__((packed)) tss_entry;
+
+typedef struct {
uint16_t limit_low;
uint16_t base_low;
uint8_t base_mid;
@@ -23,6 +62,16 @@ typedef struct {
.limit_low = (l & 0xffff), \
.flags = (f | (l >> 8 & 0x0f00))}
+#define tss_entry_init(e, s, c, d) { \
+ .esp0 = e, \
+ .ss0 = s, \
+ .cs = c, \
+ .ss = d, \
+ .ds = d, \
+ .es = d, \
+ .fs = d, \
+ .gs = d}
+
void gdt_init();
#endif