Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
triazo
/
kernel
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
3
Merge Requests
0
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
9cca56a9
authored
Sep 28, 2015
by
malcolm
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Fixed up GDT files
parent
eecc296c
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
18 additions
and
18 deletions
src/gdt.c
src/gdt.h
src/gdt.c
View file @
9cca56a9
#include "gdt.h"
struct
gdtr
{
#include "string.h"
typedef
struct
{
uint16_t
limit
;
uint32_t
base
;
}
}
gdtr
;
static
struct
gdt_desc
_gdt
[
MAX_GDT_DESC
];
static
struct
gdtr
_gdtr
;
static
gdt_desc
_gdt
[
MAX_GDT_DESC
];
static
gdtr
_gdtr
;
static
void
gdt_install
()
{
//TODO: VOODOO MAGIC
...
...
@@ -16,33 +16,33 @@ void gdt_set_desc(uint32_t i, uint64_t base, uint64_t limit, uint8_t access, uin
{
if
(
i
>
MAX_GDT_DESC
)
return
;
memset
((
void
*
)
&
_gdt
[
i
],
0
,
sizeof
(
gdt_desc
riptor
));
memset
((
void
*
)
&
_gdt
[
i
],
0
,
sizeof
(
gdt_desc
));
_gdt
[
i
].
low_base
=
uint16_t
(
base
&
0xffff
);
_gdt
[
i
].
mid_base
=
uint8_t
((
base
>>
16
)
&
0xff
);
_gdt
[
i
].
high_base
=
uint8_t
((
base
>>
24
)
&
0xff
);
_gdt
[
i
].
lim
=
uint16_t
(
limit
&
0xffff
);
_gdt
[
i
].
low_base
=
(
uint16_t
)
(
base
&
0xffff
);
_gdt
[
i
].
mid_base
=
(
uint8_t
)
((
base
>>
16
)
&
0xff
);
_gdt
[
i
].
high_base
=
(
uint8_t
)
((
base
>>
24
)
&
0xff
);
_gdt
[
i
].
lim
=
(
uint16_t
)
(
limit
&
0xffff
);
//! set flags and grandularity bytes
_gdt
[
i
].
flags
=
access
;
_gdt
[
i
].
gran
=
uint8_t
((
limit
>>
16
)
&
0x0f
);
_gdt
[
i
].
gran
=
(
uint8_t
)
((
limit
>>
16
)
&
0x0f
);
_gdt
[
i
].
gran
|=
gran
&
0xf0
;
}
gdt_desc
riptor
*
i86_gdt_get_descriptor
(
int
i
)
{
gdt_desc
*
gdt_get_desc
(
int
i
)
{
if
(
i
>
MAX_GDT_DESC
)
return
0
;
return
&
_gdt
[
i
];
}
int
i86_gdt_initialize
()
{
_gdtr
.
limit
=
(
sizeof
(
struct
gdt_desc
)
*
MAX_GDT_DESC
)
-
1
;
_gdtr
.
limit
=
(
sizeof
(
gdt_desc
)
*
MAX_GDT_DESC
)
-
1
;
_gdtr
.
base
=
(
uint32_t
)
&
_gdt
[
0
];
//null
gdt_set_desc
riptor
(
0
,
0
,
0
,
0
,
0
);
gdt_set_desc
(
0
,
0
,
0
,
0
,
0
);
//code
gdt_set_desc
riptor
(
1
,
0
,
0xffffffff
,
GDT_RW
|
GDT_EXE
|
GDT_CDT
|
GDT_MEM
,
GDT_GR_PG
|
GDT_GR_32
|
GDT_GR_HI
);
gdt_set_desc
(
1
,
0
,
0xffffffff
,
GDT_RW
|
GDT_EXE
|
GDT_CDT
|
GDT_MEM
,
GDT_GR_PG
|
GDT_GR_32
|
GDT_GR_HI
);
//data
gdt_set_desc
riptor
(
2
,
0
,
0xffffffff
,
GDT_RW
|
GDT_CDT
|
GDT_MEM
,
GDT_GR_PG
|
GDT_GR_32
|
GDT_GR_HI
);
gdt_set_desc
(
2
,
0
,
0xffffffff
,
GDT_RW
|
GDT_CDT
|
GDT_MEM
,
GDT_GR_PG
|
GDT_GR_32
|
GDT_GR_HI
);
gdt_install
();
return
0
;
}
src/gdt.h
View file @
9cca56a9
...
...
@@ -17,14 +17,14 @@
#define GDT_GR_32 0x40
#define GDT_GR_PG 0x80
struct
gdt_desc
{
typedef
struct
{
uint16_t
lim
;
uint16_t
low_base
;
uint8_t
mid_base
;
uint8_t
flags
;
uint8_t
gran
;
uint8_t
high_base
;
};
}
gdt_desc
;
extern
void
gdt_set_desc
(
uint32_t
i
,
uint64_t
base
,
uint64_t
limit
,
uint8_t
access
,
uint8_t
gran
);
extern
gdt_desc
*
gdt_get_desc
(
int
i
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment