diff options
author | 2018-04-26 14:06:06 -0700 | |
---|---|---|
committer | 2018-04-26 14:06:06 -0700 | |
commit | ca17286ab682cc0c89f1d7f335f90168ce0bfdf9 (patch) | |
tree | 09bfb9cedafa856eff44a4d89d883cc10b8739aa /src/bits16/segmentation.rs | |
parent | ee389098aaff520aa36096734ac8d974d58e7181 (diff) | |
download | rust-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.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 |