x86/bits16/
segmentation.rs1use crate::segmentation::{
2 DescriptorBuilder, DescriptorType, GateDescriptorBuilder, SegmentSelector,
3 SystemDescriptorTypes32,
4};
5
6impl GateDescriptorBuilder<u16> for DescriptorBuilder {
7 fn tss_descriptor(base: u64, limit: u64, available: bool) -> DescriptorBuilder {
8 let typ = match available {
9 true => DescriptorType::System32(SystemDescriptorTypes32::TSSAvailable16),
10 false => DescriptorType::System32(SystemDescriptorTypes32::TSSBusy16),
11 };
12
13 DescriptorBuilder::with_base_limit(base, limit).set_type(typ)
14 }
15
16 fn call_gate_descriptor(selector: SegmentSelector, offset: u16) -> DescriptorBuilder {
17 DescriptorBuilder::with_selector_offset(selector, offset.into()).set_type(
18 DescriptorType::System32(SystemDescriptorTypes32::CallGate16),
19 )
20 }
21
22 fn interrupt_descriptor(selector: SegmentSelector, offset: u16) -> DescriptorBuilder {
23 DescriptorBuilder::with_selector_offset(selector, offset.into()).set_type(
24 DescriptorType::System32(SystemDescriptorTypes32::InterruptGate16),
25 )
26 }
27
28 fn trap_gate_descriptor(selector: SegmentSelector, offset: u16) -> DescriptorBuilder {
29 DescriptorBuilder::with_selector_offset(selector, offset.into()).set_type(
30 DescriptorType::System32(SystemDescriptorTypes32::TrapGate16),
31 )
32 }
33}