OSDN Git Service

デバッグトレースログ出力追加、バグ修正、文字コードをUTF-8に修正
[mochi/master.git] / src / kernel / ProcMng / ProcMngTss.c
1 /******************************************************************************/
2 /* src/kernel/ProcMng/ProcMngTss.c                                            */
3 /*                                                                 2017/03/12 */
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     /* デバッグトレースログ出力 */
61     DEBUG_LOG( "%s() start.", __func__ );
62     
63     /* TSS初期化 */
64     memset( &gTss, 0, sizeof ( IA32Tss_t ) );
65     
66     /* TSSディスクリプタ設定 */
67     index = MemMngGdtAdd(
68                 &gTss,                          /* セグメントベース     */
69                 sizeof ( IA32Tss_t ) - 1,       /* セグメントサイズ     */
70                 IA32_DESCRIPTOR_G_BYTE,         /* リミット粒度         */
71                 IA32_DESCRIPTOR_S_SYSTEM,       /* システムフラグ       */
72                 IA32_DESCRIPTOR_TYPE_TSS32,     /* セグメントタイプ     */
73                 IA32_DESCRIPTOR_DPL_0,          /* セグメント特権レベル */
74                 IA32_DESCRIPTOR_DB_UNUSED   );  /* オペレーションサイズ */
75     
76     /* セグメントセレクタ設定 */
77     selector = IA32_SEGMENT_SELECTOR( index,            /* インデックス */
78                                       IA32_TI_GDT,      /* TI           */
79                                       IA32_RPL_0   );   /* RPL          */
80     
81     /* TR設定 */
82     IA32InstructionLtr( selector );
83     
84     /* デバッグトレースログ出力 */
85     DEBUG_LOG( "%s() end.", __func__ );
86     
87     return;
88 }
89
90
91 /******************************************************************************/
92 /**
93  * @brief       ESP0設定
94  * @details     TSSのESP0フィールドを設定する。
95  * 
96  * @param[in]   esp0 ESP0設定値
97  */
98 /******************************************************************************/
99 void ProcMngTssSetEsp0( uint32_t esp0 )
100 {
101     /* esp0設定 */
102     gTss.esp0 = esp0;
103     
104     return;
105 }
106
107
108 /******************************************************************************/