This commit is contained in:
Niklas Gollenstede
2025-10-31 22:37:36 +01:00
commit 174fe17e89
197 changed files with 79558 additions and 0 deletions

49
kernel/arch/tss.h Normal file
View File

@@ -0,0 +1,49 @@
/*! \file
* \brief Task State Segment
*/
#pragma once
#include "../types.h"
/*! \brief Task State Segment
*/
namespace TSS {
/*! \brief TSS Format structure
*
* \see [ISDMv3 7.7 Task Management in 64-bit](intel_manual_vol3.pdf#page=252)
*/
struct Entry {
uint32_t : 32;
void* sp0; ///< Saves the stack pointer for every ring
void* sp1;
void* sp2;
uint64_t : 64;
void* ist1;
void*
ist2; ///< Interrupt Stack Table, stack pointer used by the instruction
void* ist3; ///< handlers when the interrupt descriptor table (IDT) is set
///< up accordingly:
void* ist4; ///< If IST is set to a non-zero value (i.e., 1 - 7),
void* ist5; ///< the CPU automagically locals the respective value into the
///< RSP.
void* ist6; ///<
void* ist7; ///< See https://wiki.osdev.org/Task_State_Segment
uint64_t : 64;
uint32_t : 16;
uint32_t iomap_base : 16; ///< Offset to IO Permission Bitmap
} __attribute__((packed));
static_assert(sizeof(Entry) == 104, "TaskStateSegment Entry has wrong size");
/*! \brief Initialize TSS for active core
*/
void init();
/*! \brief Set initial stack pointer in TSS
* \param ptr New (next) stack pointer
*/
void setStackpointer(void* ptr);
} // namespace TSS