32 lines
681 B
Rust
32 lines
681 B
Rust
![]() |
pub const GDT_NULL: usize = 0;
|
||
|
pub const GDT_KERNEL_CODE: usize = 1;
|
||
|
pub const GDT_KERNEL_DATA: usize = 2;
|
||
|
pub const GDT_USER_CODE: usize = 3;
|
||
|
pub const GDT_USER_DATA: usize = 4;
|
||
|
pub const GDT_USER_TLS: usize = 5;
|
||
|
pub const GDT_TSS: usize = 6;
|
||
|
|
||
|
#[repr(packed)]
|
||
|
pub struct GdtDescriptor {
|
||
|
pub size: u16,
|
||
|
pub ptr: u64
|
||
|
}
|
||
|
|
||
|
#[repr(packed)]
|
||
|
pub struct GdtEntry {
|
||
|
pub limitl: u16,
|
||
|
pub basel: u16,
|
||
|
pub basem: u8,
|
||
|
pub attribute: u8,
|
||
|
pub flags_limith: u8,
|
||
|
pub baseh: u8
|
||
|
}
|
||
|
|
||
|
impl GdtEntry {
|
||
|
pub fn set_base(&mut self, base: usize) {
|
||
|
self.basel = base as u16;
|
||
|
self.basem = (base >> 16) as u8;
|
||
|
self.baseh = (base >> 24) as u8;
|
||
|
}
|
||
|
}
|