Xyris  0.5
tss.hpp
Go to the documentation of this file.
1 /**
2  * @file tss.hpp
3  * @author Keeton Feavel ([email protected])
4  * @brief
5  * @version 0.3
6  * @date 2019-11-14
7  *
8  * @copyright Copyright the Xyris Contributors (c) 2019
9  *
10  */
11 #pragma once
12 #include <Arch/i686/Arch.i686.hpp>
14 #include <stdint.h>
15 
16 /**
17  * @brief The Task State Segment (TSS) is a special data structure for x86 processors
18  * which holds information about a task. The TSS is primarily suited for hardware
19  * multitasking, where each individual process has its own TSS. In Software multitasking,
20  * one or two TSS's are also generally used, as they allow for entering
21  * Ring 0 code after an interrupt. (OSDev Wiki)
22  *
23  * Thanks to OSDev Wiki for this section of code.
24  *
25  */
26 struct [[gnu::packed]] tss_entry {
27  uint32_t prev; // The previous TSS - if we used hardware task switching this would form a linked list.
28  uint32_t esp0; // The stack pointer to load when we change to kernel mode.
29  uint32_t ss0; // The stack segment to load when we change to kernel mode.
30  uint32_t esp1; // everything below here is unusued now but required by Intel...
31  uint32_t ss1;
32  uint32_t esp2;
33  uint32_t ss2;
34  uint32_t cr3;
35  uint32_t eip;
36  uint32_t eflags;
37  uint32_t eax;
38  uint32_t ecx;
39  uint32_t edx;
40  uint32_t ebx;
41  uint32_t esp;
42  uint32_t ebp;
43  uint32_t esi;
44  uint32_t edi;
45  uint32_t es;
46  uint32_t cs;
47  uint32_t ss;
48  uint32_t ds;
49  uint32_t fs;
50  uint32_t gs;
51  uint32_t ldt;
52  uint16_t trap;
53  uint16_t iomap_base;
54 } tss_entry_t;
tss_entry::eip
uint32_t eip
Definition: tss.hpp:35
tss_entry_t
struct tss_entry tss_entry_t
tss_entry::eax
uint32_t eax
Definition: tss.hpp:37
tss_entry::ebp
uint32_t ebp
Definition: tss.hpp:42
tss_entry::fs
uint32_t fs
Definition: tss.hpp:49
tss_entry::esp0
uint32_t esp0
Definition: tss.hpp:28
tss_entry::ss2
uint32_t ss2
Definition: tss.hpp:33
tss_entry::es
uint32_t es
Definition: tss.hpp:45
tss_entry::ss0
uint32_t ss0
Definition: tss.hpp:29
tss_entry::ss
uint32_t ss
Definition: tss.hpp:47
Arch.i686.hpp
i686 architecture implementation of Arch.hpp
Flush.h
Header for assembly functions defined in flush.s.
tss_entry::ebx
uint32_t ebx
Definition: tss.hpp:40
tss_entry::edx
uint32_t edx
Definition: tss.hpp:39
tss_entry::iomap_base
uint16_t iomap_base
Definition: tss.hpp:53
tss_entry::cr3
uint32_t cr3
Definition: tss.hpp:34
tss_entry::esp2
uint32_t esp2
Definition: tss.hpp:32
tss_entry::cs
uint32_t cs
Definition: tss.hpp:46
tss_entry::esp
uint32_t esp
Definition: tss.hpp:41
tss_entry::prev
uint32_t prev
Definition: tss.hpp:27
tss_entry::edi
uint32_t edi
Definition: tss.hpp:44
tss_entry
The Task State Segment (TSS) is a special data structure for x86 processors which holds information a...
Definition: tss.hpp:26
tss_entry::ss1
uint32_t ss1
Definition: tss.hpp:31
tss_entry::eflags
uint32_t eflags
Definition: tss.hpp:36
tss_entry::esp1
uint32_t esp1
Definition: tss.hpp:30
tss_entry::trap
uint16_t trap
Definition: tss.hpp:52
tss_entry::ecx
uint32_t ecx
Definition: tss.hpp:38
tss_entry::ds
uint32_t ds
Definition: tss.hpp:48
tss_entry::ldt
uint32_t ldt
Definition: tss.hpp:51
tss_entry::esi
uint32_t esi
Definition: tss.hpp:43
tss_entry::gs
uint32_t gs
Definition: tss.hpp:50