OSDN Git Service

I/Oメモリ管理機能追加
[mochi/master.git] / src / kernel / MemMng / MemMngMap.c
1 /******************************************************************************/
2 /* src/kernel/MemMng/MemMngMap.c                                              */
3 /*                                                                 2018/08/16 */
4 /* Copyright (C) 2018 Mochi.                                                  */
5 /******************************************************************************/
6 /******************************************************************************/
7 /* インクルード                                                               */
8 /******************************************************************************/
9 /* 共通ヘッダ */
10 #include <stdarg.h>
11
12 /* 外部モジュールヘッダ */
13 #include <Cmn.h>
14 #include <Debug.h>
15
16 /* 内部モジュールヘッダ */
17 #include "MemMngMap.h"
18
19
20 /******************************************************************************/
21 /* 定義                                                                       */
22 /******************************************************************************/
23 /* デバッグトレースログ出力マクロ */
24 #ifdef DEBUG_LOG_ENABLE
25 #define DEBUG_LOG( ... )                   \
26     DebugLogOutput( CMN_MODULE_MEMMNG_MAP, \
27                     __LINE__,              \
28                     __VA_ARGS__ )
29 #else
30 #define DEBUG_LOG( ... )
31 #endif
32
33 /** メモリマップ管理テーブル構造体 */
34 typedef struct {
35     BiosE820Entry_t *pBiosE820;     /**< BIOS-E820メモリマップ           */
36     size_t          biosE820Num;    /**< BIOS-E820メモリマップエントリ数 */
37     MkMemMapEntry_t *pMemMap;       /**< メモリマップ                    */
38     size_t          memMapNum;      /**< メモリマップエントリ数          */
39 } MapTbl_t;
40
41
42 /******************************************************************************/
43 /* 変数定義                                                                   */
44 /******************************************************************************/
45 /** メモリマップ管理テーブル */
46 static MapTbl_t gMapTbl;
47
48
49 /******************************************************************************/
50 /* 外部モジュール向けグローバル関数定義                                       */
51 /******************************************************************************/
52 /******************************************************************************/
53 /**
54  * @brief       メモリマップ領域情報取得
55  * @details     メモリマップから指定タイプのメモリマップ領域情報を取得する。
56  * 
57  * @param[out]  *pInfo メモリマップ領域情報
58  * @param[in]   type   メモリマップ領域種別
59  *                  - MK_MEM_TYPE_KERNEL  カーネル領域
60  *                  - MK_MEM_TYPE_PROCIMG プロセスイメージ領域
61  * 
62  * @return      取得結果を返す。
63  * @retval      CMN_SUCCESS 正常終了
64  * @retval      CMN_FAILURE 異常終了
65  */
66 /******************************************************************************/
67 CmnRet_t MemMngMapGetInfo( MkMemMapEntry_t *pInfo,
68                            uint32_t        type    )
69 {
70     uint32_t        index;      /* インデックス         */
71     MkMemMapEntry_t *pEntry;    /* メモリマップエントリ */
72     
73     /* メモリマップ全エントリ毎に繰り返し */
74     for ( index = 0; index < gMapTbl.memMapNum; index++ ) {
75         /* メモリマップ参照変数設定 */
76         pEntry = &( gMapTbl.pMemMap[ index ] );
77         
78         /* メモリ領域タイプ判定 */
79         if ( pEntry->type == type ) {
80             /* 一致 */
81             
82             /* メモリマップ領域情報設定 */
83             *pInfo = *pEntry;
84             
85             return CMN_SUCCESS;
86         }
87     }
88     
89     return CMN_FAILURE;
90 }
91
92
93 /******************************************************************************/
94 /* 内部モジュール向けグローバル関数定義                                       */
95 /******************************************************************************/
96 /******************************************************************************/
97 /**
98  * @brief       メモリマップ管理初期化
99  * @details     メモリマップ管理テーブルを初期化する。
100  * 
101  * @param[in]   *pBiosE820  BIOS-E820メモリマップ
102  * @param[in]   biosE820Num BIOS-E820メモリマップエントリ数
103  * @param[in]   *pMemMap    メモリマップ
104  * @param[in]   memMapNum   メモリマップエントリ数
105  */
106 /******************************************************************************/
107 void MapInit( BiosE820Entry_t *pBiosE820,
108               size_t          biosE820Num,
109               MkMemMapEntry_t *pMemMap,
110               size_t          memMapNum    )
111 {
112     /* メモリマップ管理テーブル */
113     gMapTbl.pBiosE820   = pBiosE820;
114     gMapTbl.biosE820Num = biosE820Num;
115     gMapTbl.pMemMap     = pMemMap;
116     gMapTbl.memMapNum   = memMapNum;
117     
118     return;
119 }
120
121
122 /******************************************************************************/