x86/bits32/
task.rs

1//! Helpers to program the task state segment.
2//! See Intel 3a, Chapter 7
3
4use core::mem::size_of;
5
6#[derive(Copy, Clone, Debug)]
7#[repr(C, packed)]
8pub struct TaskStateSegment {
9    pub link: u16,
10    reserved0: u16,
11    pub esp0: u32,
12    pub ss0: u16,
13    reserved1: u16,
14    pub esp1: u32,
15    pub ss1: u16,
16    reserved2: u16,
17    pub esp2: u32,
18    pub ss2: u16,
19    reserved3: u16,
20
21    pub cr3: u32,
22    pub eip: u32,
23    pub eflags: u32,
24
25    pub eax: u32,
26    pub ecx: u32,
27    pub edx: u32,
28    pub ebx: u32,
29    pub esp: u32,
30    pub ebp: u32,
31    pub esi: u32,
32    pub edi: u32,
33
34    pub es: u16,
35    reserved4: u16,
36    pub cs: u16,
37    reserved5: u16,
38    pub ss: u16,
39    reserved6: u16,
40    pub ds: u16,
41    reserved7: u16,
42    pub fs: u16,
43    reserved8: u16,
44    pub gs: u16,
45    reserved9: u16,
46    pub ldtr: u16,
47    reserved10: u32,
48    pub iobp_offset: u16,
49}
50
51impl TaskStateSegment {
52    pub const fn new() -> TaskStateSegment {
53        TaskStateSegment {
54            link: 0,
55            reserved0: 0,
56            esp0: 0,
57            ss0: 0,
58            reserved1: 0,
59            esp1: 0,
60            ss1: 0,
61            reserved2: 0,
62            esp2: 0,
63            ss2: 0,
64            reserved3: 0,
65            cr3: 0,
66            eip: 0,
67            eflags: 0,
68            eax: 0,
69            ecx: 0,
70            edx: 0,
71            ebx: 0,
72            esp: 0,
73            ebp: 0,
74            esi: 0,
75            edi: 0,
76            es: 0,
77            reserved4: 0,
78            cs: 0,
79            reserved5: 0,
80            ss: 0,
81            reserved6: 0,
82            ds: 0,
83            reserved7: 0,
84            fs: 0,
85            reserved8: 0,
86            gs: 0,
87            reserved9: 0,
88            ldtr: 0,
89            reserved10: 0,
90            iobp_offset: size_of::<TaskStateSegment>() as u16,
91        }
92    }
93}