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: 25476 $ 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_PRIVATE, 39 MEMORY_STATE_SHARED, 40 MEMORY_STATE_ISOLATE, 41 MEMORY_STATE_IO, 42 MEMORY_STATE_STATIC, 43 MEMORY_STATE_CONTINUOUS, 44 MEMORY_STATE_SHARED_OWNER, 45 46 MEMORY_STATE_MAX_BITS = (1u << 31) 47 }; 48 49 /* 50 @enum PageFlag 51 52 @brief アドレスに対応するページの状態を表します。 53 */ 54 enum PageFlag 55 { 56 MEMORY_FLAG_LOCKED = (1u << 0), //!< 対象ページはロックされている 57 MEMORY_FLAG_STATE_CHANGED = (1u << 1) //!< 58 }; 59 60 const int ALLOCATE_OPTION_LINEAR = 0x1u << 8; //!< AllocateMemoryBlock 関数に与えるオプションです。連続物理メモリを確保します。 61 62 /* 63 @enum MemoryOperation 64 65 @brief アドレス空間の操作を表します。 66 */ 67 enum MemoryOperation 68 { 69 MEMORY_OPERATION_FREE = (1 << 0), //!< 対象メモリ領域を未マッピング状態にする 70 MEMORY_OPERATION_RESERVE = (2 << 0), //!< 71 MEMORY_OPERATION_COMMIT = (3 << 0), //!< 対象メモリ領域に物理メモリを割り当てる 72 MEMORY_OPERATION_MAP = (4 << 0), //!< 73 MEMORY_OPERATION_PROTECT = (5 << 0), //!< 74 75 MEMORY_OPERATION_REGION_APP = (1 << 8), //!< 76 MEMORY_OPERATION_REGION_SYSTEM = (2 << 8), //!< 77 MEMORY_OPERATION_REGION_BASE = (3 << 8), //!< 78 79 MEMORY_OPERATION_MASK = (0xFFu << 0), //!< アドレス空間の操作ビットを抽出するマスク 80 MEMORY_OPERATION_REGION_MASK = (0xFu << 8), //!< 81 MEMORY_OPERATION_FLAG_LINEAR = (0x1u << 16), //!< 物理アドレス空間上で連続したメモリ領域を扱う 82 83 MEMORY_OPERATION_MAX_BITS = (1u << 31) 84 }; 85 86 /* 87 @enum MemoryPermission 88 89 @brief アドレスに対応する領域のアクセス権を表します。 90 */ 91 enum MemoryPermission 92 { 93 MEMORY_PERMISSION_NONE = 0, //!< 対象領域へのアクセス権限なし 94 MEMORY_PERMISSION_READ = (1u << 0), //!< 対象領域からの読み込みのみ可能 95 MEMORY_PERMISSION_WRITE = (1u << 1), //!< 対象領域へ書き込みのみ可能 96 MEMORY_PERMISSION_READ_WRITE = (MEMORY_PERMISSION_READ | MEMORY_PERMISSION_WRITE), //!< 対象領域への読み書き可能 97 98 MEMORY_PERMISSION_DONT_CARE = (1u << 28), 99 MEMORY_PERMISSION_MAX_BITS = (1u << 31) 100 }; 101 102 }} 103 104 #endif // __cplusplus 105 106 #endif /* NN_OS_OS_MEMORYTYPES_H_ */ 107