1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: os_MemoryTypes.h 4 5 Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Rev: 32433 $ 14 *---------------------------------------------------------------------------*/ 15 /*! 16 @file 17 18 :include nn/os.h 19 */ 20 #ifndef NN_OS_OS_MEMORYTYPES_H_ 21 #define NN_OS_OS_MEMORYTYPES_H_ 22 23 #include <nn/types.h> 24 25 #ifdef __cplusplus 26 27 namespace nn { namespace os { 28 29 /* 30 @enum MemoryState 31 32 @brief アドレスに対応する領域の状態を表します。 33 */ 34 enum MemoryState 35 { 36 MEMORY_STATE_FREE, 37 MEMORY_STATE_RESERVED, 38 MEMORY_STATE_IO, 39 MEMORY_STATE_STATIC, 40 MEMORY_STATE_CODE, 41 MEMORY_STATE_PRIVATE, 42 MEMORY_STATE_SHARED, 43 MEMORY_STATE_CONTINUOUS, 44 MEMORY_STATE_ALIASED, 45 MEMORY_STATE_ALIAS, 46 MEMORY_STATE_ALIAS_CODE, 47 MEMORY_STATE_LOCKED, 48 49 MEMORY_STATE_MAX_BITS = (1u << 31) 50 }; 51 52 /* 53 @enum PageFlag 54 55 @brief アドレスに対応するページの状態を表します。 56 */ 57 enum PageFlag 58 { 59 MEMORY_FLAG_LOCKED = (1u << 0), //!< 対象ページはロックされている 60 MEMORY_FLAG_STATE_CHANGED = (1u << 1) //!< 61 }; 62 63 const int ALLOCATE_OPTION_LINEAR = 0x1u << 8; //!< AllocateMemoryBlock 関数に与えるオプションです。連続物理メモリを確保します。 64 65 /* 66 @enum MemoryOperation 67 68 @brief アドレス空間の操作を表します。 69 */ 70 enum MemoryOperation 71 { 72 MEMORY_OPERATION_FREE = (1 << 0), //!< 対象メモリ領域を未マッピング状態にする 73 MEMORY_OPERATION_RESERVE = (2 << 0), //!< 74 MEMORY_OPERATION_COMMIT = (3 << 0), //!< 対象メモリ領域に物理メモリを割り当てる 75 MEMORY_OPERATION_MAP = (4 << 0), //!< 76 MEMORY_OPERATION_UNMAP = (5 << 0), //!< 77 MEMORY_OPERATION_PROTECT = (6 << 0), //!< 78 79 MEMORY_OPERATION_REGION_APP = (1 << 8), //!< 80 MEMORY_OPERATION_REGION_SYSTEM = (2 << 8), //!< 81 MEMORY_OPERATION_REGION_BASE = (3 << 8), //!< 82 83 MEMORY_OPERATION_MASK = (0xFFu << 0), //!< アドレス空間の操作ビットを抽出するマスク 84 MEMORY_OPERATION_REGION_MASK = (0xFu << 8), //!< 85 MEMORY_OPERATION_FLAG_LINEAR = (0x1u << 16), //!< 物理アドレス空間上で連続したメモリ領域を扱う 86 87 MEMORY_OPERATION_MAX_BITS = (1u << 31) 88 }; 89 90 /* 91 @enum MemoryPermission 92 93 @brief アドレスに対応する領域のアクセス権を表します。 94 */ 95 enum MemoryPermission 96 { 97 MEMORY_PERMISSION_NONE = 0, //!< 対象領域へのアクセス権限なし 98 MEMORY_PERMISSION_READ = (1u << 0), //!< 対象領域からの読み込みのみ可能 99 MEMORY_PERMISSION_WRITE = (1u << 1), //!< 対象領域へ書き込みのみ可能 100 MEMORY_PERMISSION_READ_WRITE = (MEMORY_PERMISSION_READ | MEMORY_PERMISSION_WRITE), //!< 対象領域への読み書き可能 101 102 MEMORY_PERMISSION_DONT_CARE = (1u << 28), 103 MEMORY_PERMISSION_MAX_BITS = (1u << 31) 104 }; 105 106 }} 107 108 #endif // __cplusplus 109 110 #endif /* NN_OS_OS_MEMORYTYPES_H_ */ 111