1 /******************************************************************************/
2 /* src/kernel/include/MemMng.h */
4 /* Copyright (C) 2016-2018 Mochi. */
5 /******************************************************************************/
8 /******************************************************************************/
10 /******************************************************************************/
14 #include <firmware/bios/e820.h>
15 #include <hardware/IA32/IA32Paging.h>
16 #include <kernel/config.h>
17 #include <kernel/kernel.h>
18 #include <kernel/types.h>
25 /******************************************************************************/
27 /******************************************************************************/
29 #define MEMMNG_GDT_ENTRY_FULL ( 0 ) /** GDTエントリ空き無し */
30 #define MEMMNG_GDT_ENTRY_MIN ( 1 ) /** GDTエントリ番号最小値 */
31 #define MEMMNG_GDT_ENTRY_MAX ( 9 ) /** GDTエントリ番号最大値 */
32 #define MEMMNG_GDT_ENTRY_NUM \
33 ( MEMMNG_GDT_ENTRY_MAX + 1 ) /** GDTエントリ数 */
36 #define MEMMNG_SEGSEL_KERNEL_CODE ( 1 * 8 ) /** カーネルコードセグメント */
37 #define MEMMNG_SEGSEL_KERNEL_DATA ( 2 * 8 ) /** カーネルデータセグメント */
38 #define MEMMNG_SEGSEL_APL_CODE ( 3 * 8 + 3 ) /** アプリコードセグメント */
39 #define MEMMNG_SEGSEL_APL_DATA ( 4 * 8 + 3 ) /** アプリデータセグメント */
42 #define MEMMNG_PAGE_DIR_ID_IDLE ( 0 ) /** アイドルプロセス用PDID */
43 #define MEMMNG_PAGE_DIR_ID_MIN ( 1 ) /** PDID最小値 */
46 #define MEMMNG_PAGE_DIR_NUM MK_CONFIG_PID_NUM /** PD管理数 */
47 #define MEMMNG_PAGE_DIR_FULL MEMMNG_PAGE_DIR_NUM /** PD空き無し */
50 #define MEMMNG_PAGE_TBL_NUM ( 4096 ) /** PT管理数 */
51 #define MEMMNG_PAGE_TBL_FULL MEMMNG_PAGE_TBL_NUM /** PT空き無し */
54 /******************************************************************************/
56 /******************************************************************************/
61 extern void MemMngCtrlCopyVirtToPhys( void *pPAddr,
66 extern void MemMngCtrlSet( void *pPAddr,
75 extern uint16_t MemMngGdtAdd( void *pBase,
88 extern void MemMngInit( BiosE820Entry_t *pBiosE820,
90 MkMemMapEntry_t *pMemMap,
98 extern void *MemMngIoAlloc( void *pAddr,
102 extern CmnRet_t MemMngIoFree( void *pAddr );
108 extern CmnRet_t MemMngMapGetInfo( MkMemMapEntry_t *pInfo,
115 extern uint32_t MemMngPageAllocDir( void );
118 extern CmnRet_t MemMngPageFreeDir( uint32_t id );
121 extern uint32_t MemMngPageGetDirId( void );
124 extern IA32PagingPDBR_t MemMngPageSwitchDir( uint32_t pageDirId );
127 extern CmnRet_t MemMngPageSet( uint32_t dirId,
136 extern void MemMngPageUnset( uint32_t dirId,
145 extern void *MemMngPhysAlloc( size_t size );
148 extern CmnRet_t MemMngPhysFree( void *pAddr );
155 extern void *MemMngVirtAlloc( MkPid_t pid,
159 extern void *MemMngVirtAllocSpecified( MkPid_t pid,
164 extern CmnRet_t MemMngVirtEnd( MkPid_t pid );
167 extern CmnRet_t MemMngVirtFree( MkPid_t pid,
171 extern CmnRet_t MemMngVirtStart( MkPid_t pid );
174 /******************************************************************************/