diff options
Diffstat (limited to 'src/bits16/segmentation.rs')
-rw-r--r-- | src/bits16/segmentation.rs | 25 |
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 |