aboutsummaryrefslogtreecommitdiff
path: root/src/bits16/segmentation.rs
diff options
context:
space:
mode:
authorGravatar Gerd Zellweger <mail@gerdzellweger.com> 2018-04-26 14:06:06 -0700
committerGravatar Gerd Zellweger <mail@gerdzellweger.com> 2018-04-26 14:06:06 -0700
commitca17286ab682cc0c89f1d7f335f90168ce0bfdf9 (patch)
tree09bfb9cedafa856eff44a4d89d883cc10b8739aa /src/bits16/segmentation.rs
parentee389098aaff520aa36096734ac8d974d58e7181 (diff)
downloadrust-x86-ca17286ab682cc0c89f1d7f335f90168ce0bfdf9.tar.gz
rust-x86-ca17286ab682cc0c89f1d7f335f90168ce0bfdf9.tar.zst
rust-x86-ca17286ab682cc0c89f1d7f335f90168ce0bfdf9.zip
Rewrite all segmentation code and some minor refactoring.
Signed-off-by: Gerd Zellweger <mail@gerdzellweger.com>
Diffstat (limited to 'src/bits16/segmentation.rs')
-rw-r--r--src/bits16/segmentation.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/bits16/segmentation.rs b/src/bits16/segmentation.rs
new file mode 100644
index 0000000..029d2e1
--- /dev/null
+++ b/src/bits16/segmentation.rs
@@ -0,0 +1,25 @@
+use segmentation::{SegmentSelector, DescriptorBuilder, GateDescriptorBuilder, DescriptorType, SystemDescriptorTypes32};
+
+impl GateDescriptorBuilder<u16> for DescriptorBuilder {
+
+ fn tss_descriptor(selector: SegmentSelector, offset: u16, available: bool) -> DescriptorBuilder {
+ let typ = match available {
+ true => DescriptorType::System32(SystemDescriptorTypes32::TssAvailable32),
+ false => DescriptorType::System32(SystemDescriptorTypes32::TssBusy32),
+ };
+
+ DescriptorBuilder::with_selector_offset(selector, offset.into()).set_type(typ)
+ }
+
+ fn call_gate_descriptor(selector: SegmentSelector, offset: u16) -> DescriptorBuilder {
+ DescriptorBuilder::with_selector_offset(selector, offset.into()).set_type(DescriptorType::System32(SystemDescriptorTypes32::CallGate16))
+ }
+
+ fn interrupt_descriptor(selector: SegmentSelector, offset: u16) -> DescriptorBuilder {
+ DescriptorBuilder::with_selector_offset(selector, offset.into()).set_type(DescriptorType::System32(SystemDescriptorTypes32::InterruptGate16))
+ }
+
+ fn trap_gate_descriptor(selector: SegmentSelector, offset: u16) -> DescriptorBuilder {
+ DescriptorBuilder::with_selector_offset(selector, offset.into()).set_type(DescriptorType::System32(SystemDescriptorTypes32::TrapGate16))
+ }
+} \ No newline at end of file