1use 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}