OSDN Git Service

デバッグ制御モジュール(トレースログ管理サブモジュール)追加
[mochi/master.git] / src / kernel / ProcMng / ProcMngTss.c
1 /******************************************************************************/
2 /* src/kernel/ProcMng/ProcMngTss.c                                            */
3 /*                                                                 2017/03/11 */
4 /* Copyright (C) 2017 Mochi.                                                  */
5 /******************************************************************************/
6 /******************************************************************************/
7 /* インクルード                                                               */
8 /******************************************************************************/
9 /* 共通ヘッダ */
10 #include <stdarg.h>
11 #include <string.h>
12 #include <hardware/IA32/IA32.h>
13 #include <hardware/IA32/IA32Descriptor.h>
14 #include <hardware/IA32/IA32Instruction.h>
15 #include <hardware/IA32/IA32Tss.h>
16
17 /* 外部モジュールヘッダ */
18 #include <Cmn.h>
19 #include <Debug.h>
20 #include <MemMng.h>
21
22 /* 内部モジュールヘッダ */
23
24
25 /******************************************************************************/
26 /* 定義                                                                       */
27 /******************************************************************************/
28 /* デバッグトレースログ出力マクロ */
29 #ifdef DEBUG_LOG_ENABLE
30 #define DEBUG_LOG( ... )                    \
31     DebugLogOutput( CMN_MODULE_PROCMNG_TSS, \
32                     __LINE__,               \
33                     __VA_ARGS__ )
34 #else
35 #define DEBUG_LOG( ... )
36 #endif
37
38
39 /******************************************************************************/
40 /* 変数定義                                                                   */
41 /******************************************************************************/
42 /** TSS */
43 static IA32Tss_t gTss;
44
45
46 /******************************************************************************/
47 /* グローバル関数定義                                                         */
48 /******************************************************************************/
49 /******************************************************************************/
50 /**
51  * @brief       TSS管理初期化
52  * @details     TSS管理サブモジュールの初期化を行う。
53  */
54 /******************************************************************************/
55 void ProcMngTssInit( void )
56 {
57     uint16_t index;     /* GDTエントリ番号    */
58     uint16_t selector;  /* セグメントセレクタ */
59     
60     /* TSS初期化 */
61     memset( &gTss, 0, sizeof ( IA32Tss_t ) );
62     
63     /* TSSディスクリプタ設定 */
64     index = MemMngGdtAdd(
65                 &gTss,                          /* セグメントベース     */
66                 sizeof ( IA32Tss_t ) - 1,       /* セグメントサイズ     */
67                 IA32_DESCRIPTOR_G_BYTE,         /* リミット粒度         */
68                 IA32_DESCRIPTOR_S_SYSTEM,       /* システムフラグ       */
69                 IA32_DESCRIPTOR_TYPE_TSS32,     /* セグメントタイプ     */
70                 IA32_DESCRIPTOR_DPL_0,          /* セグメント特権レベル */
71                 IA32_DESCRIPTOR_DB_UNUSED   );  /* オペレーションサイズ */
72     
73     /* セグメントセレクタ設定 */
74     selector = IA32_SEGMENT_SELECTOR( index,            /* インデックス */
75                                       IA32_TI_GDT,      /* TI           */
76                                       IA32_RPL_0   );   /* RPL          */
77     
78     /* TR設定 */
79     IA32InstructionLtr( selector );
80     
81     return;
82 }
83
84
85 /******************************************************************************/
86 /**
87  * @brief       ESP0設定
88  * @details     TSSのESP0フィールドを設定する。
89  * 
90  * @param[in]   esp0 ESP0設定値
91  */
92 /******************************************************************************/
93 void ProcMngTssSetEsp0( uint32_t esp0 )
94 {
95     /* esp0設定 */
96     gTss.esp0 = esp0;
97     
98     return;
99 }
100
101
102 /******************************************************************************/