1 /******************************************************************************/
2 /* src/kernel/ProcMng/ProcMngTss.c */
4 /* Copyright (C) 2017 Mochi. */
5 /******************************************************************************/
6 /******************************************************************************/
8 /******************************************************************************/
11 #include <hardware/IA32/IA32.h>
12 #include <hardware/IA32/IA32Descriptor.h>
13 #include <hardware/IA32/IA32Instruction.h>
14 #include <hardware/IA32/IA32Tss.h>
22 /******************************************************************************/
24 /******************************************************************************/
26 static IA32Tss_t gTss;
29 /******************************************************************************/
31 /******************************************************************************/
32 /******************************************************************************/
35 * @details TSS管理サブモジュールの初期化を行う。
37 /******************************************************************************/
38 void ProcMngTssInit( void )
40 uint16_t index; /* GDTエントリ番号 */
41 uint16_t selector; /* セグメントセレクタ */
44 memset( &gTss, 0, sizeof ( IA32Tss_t ) );
49 sizeof ( IA32Tss_t ) - 1, /* セグメントサイズ */
50 IA32_DESCRIPTOR_G_BYTE, /* リミット粒度 */
51 IA32_DESCRIPTOR_S_SYSTEM, /* システムフラグ */
52 IA32_DESCRIPTOR_TYPE_TSS32, /* セグメントタイプ */
53 IA32_DESCRIPTOR_DPL_0, /* セグメント特権レベル */
54 IA32_DESCRIPTOR_DB_UNUSED ); /* オペレーションサイズ */
57 selector = IA32_SEGMENT_SELECTOR( index, /* インデックス */
59 IA32_RPL_0 ); /* RPL */
62 IA32InstructionLtr( selector );
68 /******************************************************************************/
71 * @details TSSのESP0フィールドを設定する。
73 * @param[in] esp0 ESP0設定値
75 /******************************************************************************/
76 void ProcMngTssSetEsp0( uint32_t esp0 )
85 /******************************************************************************/