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