x86/registers/bits32/
task.rs
1use core::mem::size_of;
11
12#[derive(Copy, Clone, Debug)]
13#[repr(C, packed)]
14pub struct TaskStateSegment {
15 pub link: u16,
16 reserved0: u16,
17 pub esp0: u32,
18 pub ss0: u16,
19 reserved1: u16,
20 pub esp1: u32,
21 pub ss1: u16,
22 reserved2: u16,
23 pub esp2: u32,
24 pub ss2: u16,
25 reserved3: u16,
26
27 pub cr3: u32,
28 pub eip: u32,
29 pub eflags: u32,
30
31 pub eax: u32,
32 pub ecx: u32,
33 pub edx: u32,
34 pub ebx: u32,
35 pub esp: u32,
36 pub ebp: u32,
37 pub esi: u32,
38 pub edi: u32,
39
40 pub es: u16,
41 reserved4: u16,
42 pub cs: u16,
43 reserved5: u16,
44 pub ss: u16,
45 reserved6: u16,
46 pub ds: u16,
47 reserved7: u16,
48 pub fs: u16,
49 reserved8: u16,
50 pub gs: u16,
51 reserved9: u16,
52 pub ldtr: u16,
53 reserved10: u32,
54 pub iobp_offset: u16,
55}
56
57impl Default for TaskStateSegment {
58 fn default() -> Self {
59 Self::new()
60 }
61}
62
63impl TaskStateSegment {
64 pub const fn new() -> TaskStateSegment {
65 TaskStateSegment {
66 link: 0,
67 reserved0: 0,
68 esp0: 0,
69 ss0: 0,
70 reserved1: 0,
71 esp1: 0,
72 ss1: 0,
73 reserved2: 0,
74 esp2: 0,
75 ss2: 0,
76 reserved3: 0,
77 cr3: 0,
78 eip: 0,
79 eflags: 0,
80 eax: 0,
81 ecx: 0,
82 edx: 0,
83 ebx: 0,
84 esp: 0,
85 ebp: 0,
86 esi: 0,
87 edi: 0,
88 es: 0,
89 reserved4: 0,
90 cs: 0,
91 reserved5: 0,
92 ss: 0,
93 reserved6: 0,
94 ds: 0,
95 reserved7: 0,
96 fs: 0,
97 reserved8: 0,
98 gs: 0,
99 reserved9: 0,
100 ldtr: 0,
101 reserved10: 0,
102 iobp_offset: size_of::<TaskStateSegment>() as u16,
103 }
104 }
105}