nckernel
0.1
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
x86
include
segment.h
Go to the documentation of this file.
1
11
enum
{
12
GDT
= 0,
13
LDT
= 1,
14
};
15
19
#define TI(table) ((table) << 2)
20
21
enum
{
22
ACCESSED
= 0x01,
23
24
WRITABLE
= 0x02,
25
EXPANSION_DOWN
= 0x04,
26
27
READABLE
= 0x02,
28
CONFORMING
= 0x04,
29
30
CODE
= 0x08,
31
};
32
33
enum
{
34
KERNEL
= 0,
35
USER
= 3,
36
};
37
38
enum
{
39
DESC_NULL
= 0x00,
40
DESC_KERNEL_CS
= 0x01,
41
DESC_KERNEL_DS
= 0x02,
42
DESC_KERNEL_SS
= 0x03,
43
DESC_USER_CS
= 0x04,
44
DESC_USER_DS
= 0x05,
45
DESC_USER_SS
= 0x06,
46
DESC_TSS
= 0x07,
47
DESC_COUNT
= 0x08,
48
49
SIZEOF_A_DESC
= 8,
50
SIZEOF_A_DESC_BIT
= 3,
51
};
52
57
#define TI(table) ((table) << 2)
58
62
struct
segment
{
63
unsigned
long
limit0
:16;
64
unsigned
long
base0
:16;
65
unsigned
long
base1
:8;
66
unsigned
long
type
:4;
67
unsigned
long
s
:1;
68
unsigned
long
dpl
:2;
69
unsigned
long
p
:1;
70
unsigned
long
limit1
:4;
71
unsigned
long
avl
:1;
72
unsigned
long
zero
:1;
73
unsigned
long
size
:1;
74
unsigned
long
g
:1;
75
unsigned
long
base2
:8;
76
}
__PACKED
;
77
81
struct
tss
{
82
unsigned
short
segment_limit_low
;
83
unsigned
short
base_low
;
84
unsigned
char
base_high_low
;
85
unsigned
int
type
:4;
86
unsigned
int
zero1
:1;
87
unsigned
int
dpl
:2;
88
unsigned
int
p
:1;
89
unsigned
int
segment_limit_high
:4;
90
unsigned
int
avl
:1;
91
unsigned
int
zero2
:2;
92
unsigned
int
g
:1;
93
unsigned
char
base_high_high
;
94
}
__PACKED
;
95
99
struct
gdtr
{
100
unsigned
short
limit
;
101
unsigned
long
base
;
102
}
__PACKED
;
103
112
#define IO_BITMAP_SIZE 8192
113
117
struct
tss32
{
118
unsigned
short
prev
;
119
unsigned
short
reserved0
;
120
unsigned
long
esp0
;
121
unsigned
short
ss0
;
122
unsigned
short
reserved1
;
123
unsigned
long
esp1
;
124
unsigned
short
ss1
;
125
unsigned
short
reserved2
;
126
unsigned
long
esp2
;
127
unsigned
short
ss2
;
128
unsigned
short
reserved3
;
129
unsigned
long
cr3
;
130
unsigned
long
eip
;
131
unsigned
long
eflags
;
132
unsigned
long
eax
;
133
unsigned
long
ecx
;
134
unsigned
long
edx
;
135
unsigned
long
ebx
;
136
unsigned
long
esp
;
137
unsigned
long
ebp
;
138
unsigned
long
esi
;
139
unsigned
long
edi
;
140
unsigned
short
es
;
141
unsigned
short
reserved4
;
142
unsigned
short
cs
;
143
unsigned
short
reserved5
;
144
unsigned
short
ss
;
145
unsigned
short
reserved6
;
146
unsigned
short
ds
;
147
unsigned
short
reserved7
;
148
unsigned
short
fs
;
149
unsigned
short
reserved8
;
150
unsigned
short
gs
;
151
unsigned
short
reserved9
;
152
unsigned
short
ldt_segment_selctor
;
153
unsigned
long
reserved10
;
154
unsigned
short
io_map_base_address
;
155
unsigned
char
io_bitmap
[
IO_BITMAP_SIZE
];
156
}
__PACKED
;
157
161
struct
tss16
{
162
unsigned
short
prev
;
163
unsigned
short
sp0
;
164
unsigned
short
ss0
;
165
unsigned
short
sp1
;
166
unsigned
short
ss1
;
167
unsigned
short
sp2
;
168
unsigned
short
ss2
;
169
unsigned
short
ip
;
170
unsigned
short
flag
;
171
unsigned
short
ax
;
172
unsigned
short
cx
;
173
unsigned
short
dx
;
174
unsigned
short
bx
;
175
unsigned
short
sp
;
176
unsigned
short
bp
;
177
unsigned
short
si
;
178
unsigned
short
di
;
179
unsigned
short
es
;
180
unsigned
short
cs
;
181
unsigned
short
ss
;
182
unsigned
short
ds
;
183
unsigned
short
ldt
;
184
}
__PACKED
;
185
189
extern
void
segment_init
(
void
);
190
196
extern
unsigned
char
*
tss_io_bitmap_get
(
void
);
197
203
extern
void
tss_update_kernel_stack
(
unsigned
long
esp);
204
Generated on Thu Nov 7 2013 02:45:25 for nckernel by
1.8.4