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
>
13
#include <
Arch/i686/Assembly/Flush.h
>
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
Kernel
Arch
i686
tss.hpp
Generated by
1.8.17