1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     os_AddressSpaceManager.h
4 
5   Copyright (C)2009-2012 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: 46347 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_LIBRARIES_OS_OS_ADDRESS_SPACE_MANAGER_H_
17 #define NN_LIBRARIES_OS_OS_ADDRESS_SPACE_MANAGER_H_
18 
19 #include <nn/config.h>
20 #if NN_PLATFORM_HAS_MMU
21 
22 #include <nn/types.h>
23 #include <nn/os/os_MemoryBlockBase.h>
24 #include <nn/os/os_CriticalSection.h>
25 
26 #ifdef __cplusplus
27 
28 namespace nn {
29     namespace os {
30 
31         /* Please see man pages for details
32 
33 
34 
35 */
36         class AddressSpaceManager
37         {
38         private:
39             typedef fnd::IntrusiveLinkedList<MemoryBlockBase>   BlockList;
40             typedef os::CriticalSection                         Lock;
41 
42         private:
43             uptr        m_SpaceBegin;    //
44             uptr        m_SpaceEnd;      //
45             BlockList   m_BlockList;     //
46             Lock        m_Lock;          //
47 
48         public:
AddressSpaceManager()49             AddressSpaceManager() { m_SpaceBegin = m_SpaceEnd = 0; }
50 
51             /* Please see man pages for details
52 
53 
54 
55 
56 */
57             void        Initialize(uptr begin, size_t size);
58 
59             /* Please see man pages for details
60 
61 
62 
63 
64 
65 
66 */
67             uptr        Allocate(MemoryBlockBase* pBlock, size_t size, size_t skipSize);
68 
69             /* Please see man pages for details
70 
71 
72 
73 */
74             void        Free(MemoryBlockBase* pBlock);
75 
76             /* Please see man pages for details
77 
78 
79 
80 
81 */
82             void        Switch(MemoryBlockBase* pTo, MemoryBlockBase* pFrom);
83 
84             /* Please see man pages for details
85 
86             */
87             void        Dump();
88 
89         private:
90             /* Please see man pages for details
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
101 
102 */
103             MemoryBlockBase* FindSpace(size_t size, size_t skipSize);
104         };
105 
106 
107     }
108 }
109 
110 #endif // __cplusplus
111 
112 #include <nn/util/detail/util_CLibImpl.h>
113 
114 /* Please see man pages for details
115 
116 
117 
118 
119 
120 
121 
122 
123 */
124 
125 /* Please see man pages for details
126 
127 
128 
129 
130 */
131 
132 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnosAddressSpaceManager, nn::os::AddressSpaceManager, 24, bit32);
133 
134 /* Please see man pages for details
135 
136 */
137 NN_EXTERN_C void nnosAddressSpaceManagerInitialize(nnosAddressSpaceManager* p, uptr begin, size_t size);
138 
139 /* Please see man pages for details
140 
141 */
142 NN_EXTERN_C uptr nnosAddressSpaceManagerAllocate(nnosAddressSpaceManager* p, nnosMemoryBlockBase* pBlock, size_t size, size_t skipSize);
143 
144 /* Please see man pages for details
145 
146 */
147 NN_EXTERN_C void nnosAddressSpaceManagerFree(nnosAddressSpaceManager* p, nnosMemoryBlockBase* pBlock);
148 
149 /* Please see man pages for details
150 
151 */
152 NN_EXTERN_C void nnosAddressSpaceManagerSwitch(nnosAddressSpaceManager* p, nnosMemoryBlockBase* pTo, nnosMemoryBlockBase* pFrom);
153 
154 /*
155 
156 
157 
158 */
159 
160 #endif  // if NN_PLATFORM_HAS_MMU
161 #endif /* NN_LIBRARIES_OS_OS_ADDRESS_SPACE_MANAGER_H_ */
162