aboutsummaryrefslogtreecommitdiff
path: root/src/task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/task.rs')
-rw-r--r--src/task.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/task.rs b/src/task.rs
index a7637f2..e71ea8f 100644
--- a/src/task.rs
+++ b/src/task.rs
@@ -3,7 +3,14 @@
pub use crate::segmentation;
-/// Load the task state register.
+/// Returns the current value of the task register.
+pub fn tr() -> segmentation::SegmentSelector {
+ let segment: u16;
+ unsafe { asm!("str $0" : "=r" (segment) ) };
+ segmentation::SegmentSelector::from_raw(segment)
+}
+
+/// Loads the task register.
pub unsafe fn load_tr(sel: segmentation::SegmentSelector) {
asm!("ltr $0" :: "r" (sel.bits()));
}