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