aboutsummaryrefslogtreecommitdiff
path: root/src/bits32/task.rs
diff options
context:
space:
mode:
authorGravatar Gerd Zellweger <mail@gerdzellweger.com> 2016-07-04 14:08:17 +0200
committerGravatar GitHub <noreply@github.com> 2016-07-04 14:08:17 +0200
commitc12e050a69dd1a9b04f07ab78a166c6371d35a6f (patch)
treefea35bcf5b507efdd4c1c0f5dab146360c70478a /src/bits32/task.rs
parent32257991aaa3700620f1d6c180cfec3e2d65a360 (diff)
parentbd2950de1a48d72cbb718cc9a367142e0eb97b72 (diff)
downloadrust-x86-c12e050a69dd1a9b04f07ab78a166c6371d35a6f.tar.gz
rust-x86-c12e050a69dd1a9b04f07ab78a166c6371d35a6f.tar.zst
rust-x86-c12e050a69dd1a9b04f07ab78a166c6371d35a6f.zip
Merge pull request #16 from QuiltOS/master
Fix #15: Combine with https://github.com/Tobba/libcpu
Diffstat (limited to 'src/bits32/task.rs')
-rw-r--r--src/bits32/task.rs93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/bits32/task.rs b/src/bits32/task.rs
new file mode 100644
index 0000000..17bdcd4
--- /dev/null
+++ b/src/bits32/task.rs
@@ -0,0 +1,93 @@
+//! Helpers to program the task state segment.
+//! See Intel 3a, Chapter 7
+
+use core::mem::size_of;
+
+#[derive(Copy, Clone, Debug)]
+#[repr(C, packed)]
+pub struct TaskStateSegment {
+ pub link: u16,
+ reserved0: u16,
+ pub esp0: u32,
+ pub ss0: u16,
+ reserved1: u16,
+ pub esp1: u32,
+ pub ss1: u16,
+ reserved2: u16,
+ pub esp2: u32,
+ pub ss2: u16,
+ reserved3: u16,
+
+ pub cr3: u32,
+ pub eip: u32,
+ pub eflags: u32,
+
+ pub eax: u32,
+ pub ecx: u32,
+ pub edx: u32,
+ pub ebx: u32,
+ pub esp: u32,
+ pub ebp: u32,
+ pub esi: u32,
+ pub edi: u32,
+
+ pub es: u16,
+ reserved4: u16,
+ pub cs: u16,
+ reserved5: u16,
+ pub ss: u16,
+ reserved6: u16,
+ pub ds: u16,
+ reserved7: u16,
+ pub fs: u16,
+ reserved8: u16,
+ pub gs: u16,
+ reserved9: u16,
+ pub ldtr: u16,
+ reserved10: u32,
+ pub iobp_offset: u16
+}
+
+impl TaskStateSegment {
+ pub fn new() -> TaskStateSegment {
+ TaskStateSegment {
+ link: 0,
+ reserved0: 0,
+ esp0: 0,
+ ss0: 0,
+ reserved1: 0,
+ esp1: 0,
+ ss1: 0,
+ reserved2: 0,
+ esp2: 0,
+ ss2: 0,
+ reserved3: 0,
+ cr3: 0,
+ eip: 0,
+ eflags: 0,
+ eax: 0,
+ ecx: 0,
+ edx: 0,
+ ebx: 0,
+ esp: 0,
+ ebp: 0,
+ esi: 0,
+ edi: 0,
+ es: 0,
+ reserved4: 0,
+ cs: 0,
+ reserved5: 0,
+ ss: 0,
+ reserved6: 0,
+ ds: 0,
+ reserved7: 0,
+ fs: 0,
+ reserved8: 0,
+ gs: 0,
+ reserved9: 0,
+ ldtr: 0,
+ reserved10: 0,
+ iobp_offset: size_of::<TaskStateSegment>() as u16
+ }
+ }
+}