f3121669facdae462d320e936c9ce0a195a6da9b
[lunaix-os.git] / lunaix-os / includes / arch / x86 / gdt.h
1 #ifndef __LUNAIX_GDT_H 
2 #define __LUNAIX_GDT_H 1
3
4 #define SD_TYPE(x)              (x << 8)
5 #define SD_CODE_DATA(x)         (x << 12)
6 #define SD_DPL(x)               (x << 13)
7 #define SD_PRESENT(x)           (x << 15)
8 #define SD_AVL(x)               (x << 20)
9 #define SD_64BITS(x)            (x << 21)
10 #define SD_32BITS(x)            (x << 22)
11 #define SD_4K_GRAN(x)           (x << 23)
12
13 #define SEG_LIM_L(x)            (x & 0x0ffff)
14 #define SEG_LIM_H(x)            (x & 0xf0000)
15 #define SEG_BASE_L(x)           ((x & 0x0000ffff) << 16)
16 #define SEG_BASE_M(x)           ((x & 0x00ff0000) >> 16)
17 #define SEG_BASE_H(x)            (x & 0xff000000)
18
19 #define SEG_DATA_RD         0x00 // Read-Only
20 #define SEG_DATA_RDA        0x01 // Read-Only, accessed
21 #define SEG_DATA_RDWR       0x02 // Read/Write
22 #define SEG_DATA_RDWRA      0x03 // Read/Write, accessed
23 #define SEG_DATA_RDEXPD     0x04 // Read-Only, expand-down
24 #define SEG_DATA_RDEXPDA    0x05 // Read-Only, expand-down, accessed
25 #define SEG_DATA_RDWREXPD   0x06 // Read/Write, expand-down
26 #define SEG_DATA_RDWREXPDA  0x07 // Read/Write, expand-down, accessed
27 #define SEG_CODE_EX         0x08 // Execute-Only
28 #define SEG_CODE_EXA        0x09 // Execute-Only, accessed
29 #define SEG_CODE_EXRD       0x0A // Execute/Read
30 #define SEG_CODE_EXRDA      0x0B // Execute/Read, accessed
31 #define SEG_CODE_EXC        0x0C // Execute-Only, conforming
32 #define SEG_CODE_EXCA       0x0D // Execute-Only, conforming, accessed
33 #define SEG_CODE_EXRDC      0x0E // Execute/Read, conforming
34 #define SEG_CODE_EXRDCA     0x0F // Execute/Read, conforming, accessed
35
36 #define SEG_R0_CODE         SD_TYPE(SEG_CODE_EXRD) | SD_CODE_DATA(1) | SD_DPL(0) | \
37                             SD_PRESENT(1) | SD_AVL(0) | SD_64BITS(0) | SD_32BITS(1) | \
38                             SD_4K_GRAN(1)
39
40 #define SEG_R0_DATA         SD_TYPE(SEG_DATA_RDWR) | SD_CODE_DATA(1) | SD_DPL(0) | \
41                             SD_PRESENT(1) | SD_AVL(0) | SD_64BITS(0) | SD_32BITS(1) | \
42                             SD_4K_GRAN(1)
43
44 #define SEG_R3_CODE         SD_TYPE(SEG_CODE_EXRD) | SD_CODE_DATA(1) | SD_DPL(3) | \
45                             SD_PRESENT(1) | SD_AVL(0) | SD_64BITS(0) | SD_32BITS(1) | \
46                             SD_4K_GRAN(1)
47
48 #define SEG_R3_DATA         SD_TYPE(SEG_DATA_RDWR) | SD_CODE_DATA(1) | SD_DPL(3) | \
49                             SD_PRESENT(1) | SD_AVL(0) | SD_64BITS(0) | SD_32BITS(1) | \
50                             SD_4K_GRAN(1)
51
52 #define SEG_TSS             SD_TYPE(9) | SD_DPL(0) | SD_PRESENT(1)
53                             
54
55 void
56 _init_gdt();
57
58 #endif