// SPDX-License-Identifier: MPL-2.0 #ifndef SH_LIB_TSS_H #define SH_LIB_TSS_H #include "std/status.h" #include "std/type.h" #include "std/malloc.h" #include "std/mem.h" // TSS structure #pragma pack(1) typedef struct { sh_uint32 reserved0; sh_uint64 rsp0; sh_uint64 rsp1; sh_uint64 rsp2; sh_uint64 reserved1; sh_uint64 ist1; sh_uint64 ist2; sh_uint64 ist3; sh_uint64 ist4; sh_uint64 ist5; sh_uint64 ist6; sh_uint64 ist7; sh_uint64 reserved2; sh_uint16 reserved3; sh_uint16 iomap_base; } sh_tss_TSS; #pragma pack() // TR structure #pragma pack(1) typedef struct { sh_uint16 limit; sh_uint64 base; } sh_tss_TR; #pragma pack() // Fill TSS structure for any CPU core and allocate stacks SH_STATUS sh_tss_fill_tss(sh_tss_TSS *tss); // Fill and load TR SH_STATUS sh_tss_load_tr(sh_tss_TSS *tss); #endif