aboutsummaryrefslogtreecommitdiff
path: root/src/bits16/segmentation.rs
diff options
context:
space:
mode:
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