From dd3bb0fca40118e52c4584c11f0d010410da4a0c Mon Sep 17 00:00:00 2001 From: John Ericson Date: Mon, 27 Jun 2016 18:00:46 -0700 Subject: `dtables::*` is mode-portable --- src/bits64/dtables.rs | 27 --------------------------- src/bits64/mod.rs | 1 - src/shared/dtables.rs | 27 +++++++++++++++++++++++++++ src/shared/mod.rs | 1 + 4 files changed, 28 insertions(+), 28 deletions(-) delete mode 100644 src/bits64/dtables.rs create mode 100644 src/shared/dtables.rs (limited to 'src') diff --git a/src/bits64/dtables.rs b/src/bits64/dtables.rs deleted file mode 100644 index d2e3413..0000000 --- a/src/bits64/dtables.rs +++ /dev/null @@ -1,27 +0,0 @@ -//! Functions and data-structures to load descriptor tables. - -/// A struct describing a pointer to a descriptor table (GDT / IDT). -/// This is in a format suitable for giving to 'lgdt' or 'lidt'. -#[derive(Debug)] -#[repr(C, packed)] -pub struct DescriptorTablePointer { - /// Size of the DT. - pub limit: u16, - /// Pointer to the memory region containing the DT. - pub base: u64, -} - -/// Load GDT table. -pub unsafe fn lgdt(gdt: &DescriptorTablePointer) { - asm!("lgdt ($0)" :: "r" (gdt) : "memory"); -} - -/// Load LDT table. -pub unsafe fn lldt(ldt: &DescriptorTablePointer) { - asm!("lldt ($0)" :: "r" (ldt) : "memory"); -} - -/// Load IDT table. -pub unsafe fn lidt(idt: &DescriptorTablePointer) { - asm!("lidt ($0)" :: "r" (idt) : "memory"); -} diff --git a/src/bits64/mod.rs b/src/bits64/mod.rs index 2588287..9e5994a 100644 --- a/src/bits64/mod.rs +++ b/src/bits64/mod.rs @@ -37,7 +37,6 @@ pub mod rflags; pub mod paging; pub mod segmentation; pub mod task; -pub mod dtables; pub mod syscall; pub mod sgx; #[cfg(feature = "performance-counter")] diff --git a/src/shared/dtables.rs b/src/shared/dtables.rs new file mode 100644 index 0000000..d2e3413 --- /dev/null +++ b/src/shared/dtables.rs @@ -0,0 +1,27 @@ +//! Functions and data-structures to load descriptor tables. + +/// A struct describing a pointer to a descriptor table (GDT / IDT). +/// This is in a format suitable for giving to 'lgdt' or 'lidt'. +#[derive(Debug)] +#[repr(C, packed)] +pub struct DescriptorTablePointer { + /// Size of the DT. + pub limit: u16, + /// Pointer to the memory region containing the DT. + pub base: u64, +} + +/// Load GDT table. +pub unsafe fn lgdt(gdt: &DescriptorTablePointer) { + asm!("lgdt ($0)" :: "r" (gdt) : "memory"); +} + +/// Load LDT table. +pub unsafe fn lldt(ldt: &DescriptorTablePointer) { + asm!("lldt ($0)" :: "r" (ldt) : "memory"); +} + +/// Load IDT table. +pub unsafe fn lidt(idt: &DescriptorTablePointer) { + asm!("lidt ($0)" :: "r" (idt) : "memory"); +} diff --git a/src/shared/mod.rs b/src/shared/mod.rs index a461c08..977dcf4 100644 --- a/src/shared/mod.rs +++ b/src/shared/mod.rs @@ -2,6 +2,7 @@ pub mod control_regs; pub mod descriptor; +pub mod dtables; pub mod io; pub mod irq; pub mod paging; -- cgit v1.2.3