1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     fnd_DetailHeap.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 /* Please see man pages for details
17 
18 
19 */
20 
21 #ifndef NN_LIBRARIES_FND_DETAIL_FND_DETAIL_HEAP_H_
22 #define NN_LIBRARIES_FND_DETAIL_FND_DETAIL_HEAP_H_
23 
24 #include <nn/fnd/detail/fnd_DetailHeapHead.h>
25 #include <nn/fnd/fnd_HeapBase.h>
26 #include <nn/fnd/fnd_MemoryRange.h>
27 #include "fnd_DetailHeapCommon.h"
28 
29 #define NN_OS_EXPHEAP_ALLOC_DIR_FRONT 0    // Allocate from front
30 #define NN_OS_EXPHEAP_ALLOC_DIR_REAR  1     // Allocate from back
31 #define NN_OS_EXPHEAP_ALLOC_MODE_FIRST 0
32 #define NN_OS_EXPHEAP_ALLOC_MODE_NEAR 1
33 
34 #ifdef __cplusplus
35 
36 namespace nn{ namespace fnd{ namespace detail {
37 /* Please see man pages for details
38 
39 
40 */
41 /* Please see man pages for details
42 
43 
44 
45 
46 
47 */
48 /* =======================================================================
49     Constant definitions
50    ======================================================================== */
51 
52 // Memory allocation direction
53 //Enums
54 //{
55 //    NN_OS_EXPHEAP_ALLOC_DIR_FRONT,    // Allocates from the front
56 //    NN_OS_EXPHEAP_ALLOC_DIR_REAR      // Allocates from the back
57 //};
58 
59 // Memory allocation mode
60 //Enums
61 //{
62     /*
63         If this attribute value is set, memory larger than the size of the memory to allocate is maintained, and memory from the first empty region found is allocated.
64 
65 
66     */
67 //    NN_OS_EXPHEAP_ALLOC_MODE_FIRST,
68 
69     /*
70         If this attribute value is set, search for the empty region closest to the size of the memory to allocate, and allocate from that region.
71 
72 
73     */
74 //    NN_OS_EXPHEAP_ALLOC_MODE_NEAR
75 //};
76 
77 
78 /* =======================================================================
79     Type Definitions
80    ======================================================================== */
81 
82 // Callback function type called for each memory
83 typedef void        (*NNSFndHeapVisitor)(
84                         void*               memBlock,
85                         Heap    heap,
86                         u32                 userParam);
87 
88 /* =======================================================================
89     Macro Functions
90    ======================================================================== */
91 
92 
93 
94 /* =======================================================================
95     Function Prototypes
96    ======================================================================== */
97 #if ! defined(NN_SWITCH_DISABLE_DEBUG_PRINT_FOR_SDK)
98 //
99 
100     void                NNSi_FndDumpHeap(
101                             ConstHeap    heap);
102 
103 //
104 #endif
105 
106 /* Please see man pages for details
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 */
117 Heap    CreateHeap(
118                         Heap    heapHandle,
119                         void*   startAddress,
120                         u32     size,
121                         u16     optFlag = 0);
122 
123 
124 /* Please see man pages for details
125 
126 
127 
128 
129 
130 */
131 void                DestroyHeap(
132                         Heap    heap);
133 
134 
135 /* Please see man pages for details
136 
137 
138 
139 
140 
141 */
142 void SetCurrentHeap(Heap heap);
143 
144 
145 /* Please see man pages for details
146 
147 
148 
149 
150 */
151 Heap  GetCurrentHeap(void);
152 
153 
154 /* Please see man pages for details
155 
156 
157 
158 
159 
160 
161 
162 
163 
164 
165 
166 
167 */
168 void*               AllocFromHeap(
169                         Heap    heap,
170                         u32                 size,
171                         int                 alignment = NN_OS_HEAP_DEFAULT_ALIGNMENT);
172 
173 
174 /* Please see man pages for details
175 
176 
177 
178 
179 
180 
181 
182 
183 
184 
185 */
186 inline void*   AllocFromCurrentHeap(u32 size, int alignment = NN_OS_HEAP_DEFAULT_ALIGNMENT)
187 {
188     return AllocFromHeap(GetCurrentHeap(), size, alignment);
189 }
190 
191 /* Please see man pages for details
192 
193 
194 
195 
196 
197 
198 */
199 void                FreeToHeap(
200                         Heap    heap,
201                         void*               memBlock);
202 
203 
204 /* Please see man pages for details
205 
206 
207 
208 
209 
210 */
FreeToCurrentHeap(void * memBlock)211 inline  void    FreeToCurrentHeap(void* memBlock)
212 {
213     FreeToHeap(GetCurrentHeap(), memBlock);
214 }
215 
216 /* Please see man pages for details
217 
218 
219 
220 
221 
222 
223 
224 
225 */
226 u32                 ResizeForMBlockHeap(
227                         Heap    heap,
228                         void*               memBlock,
229                         u32                 size);
230 
231 /* Please see man pages for details
232 
233 
234 
235 
236 
237 */
238 u32                 GetTotalFreeSizeForHeap(
239                          ConstHeap heap);
240 
241 
242 /* Please see man pages for details
243 
244 
245 
246 
247 
248 
249 
250 
251 */
252 u32                 GetAllocatableSizeForHeap(
253                         ConstHeap    heap,
254                         int                 alignment = NN_OS_HEAP_DEFAULT_ALIGNMENT);
255 
256 
257 /* Please see man pages for details
258 
259 
260 
261 
262 
263 
264 */
265 u16                 SetAllocModeForHeap(
266                         Heap    heap,
267                         u16                 mode);
268 
269 /* Please see man pages for details
270 
271 
272 
273 
274 
275 */
276 u16                 GetAllocModeForHeap(
277                         Heap    heap);
278 
279 /* Please see man pages for details
280 
281 
282 
283 
284 
285 
286 */
287 u16                 SetGroupIDForHeap(
288                         Heap    heap,
289                         u16                 groupID);
290 
291 /* Please see man pages for details
292 
293 
294 
295 
296 
297 */
298 u16                 GetGroupIDForHeap(
299                         Heap    heap);
300 
301 /* Please see man pages for details
302 
303 
304 
305 
306 
307 
308 
309 
310 
311 
312 
313 
314 
315 
316 
317 
318 
319 
320 
321 
322 */
323 void                VisitAllocatedForHeap(
324                         Heap    heap,
325                         NNSFndHeapVisitor   visitor,
326                         u32                 userParam);
327 
328 /* Please see man pages for details
329 
330 
331 
332 
333 
334 */
335 u32                 GetSizeForMBlockHeap(
336                         const void*         memBlock);
337 
338 /* Please see man pages for details
339 
340 
341 
342 
343 
344 */
345 u16                 GetGroupIDForMBlockHeap(
346                         const void*         memBlock);
347 
348 /* Please see man pages for details
349 
350 
351 
352 
353 
354 */
355 u16                 GetAllocDirForMBlockHeap(
356                         const void*         memBlock);
357 
358 /* Please see man pages for details
359 
360 
361 
362 
363 
364 
365 */
366 MemoryRange         AdjustHeap(
367                         Heap                heap,
368                         HeapAdjustMode          mode);
369 
370 /* Please see man pages for details
371 
372 
373 
374 
375 
376 
377 
378 */
379 bool                UseMarginOfAlignmentForHeap(
380                         Heap                heap,
381                         bool                reuse);
382 
383 
384 #if defined(NN_SWITCH_DISABLE_DEBUG_PRINT_FOR_SDK)
CheckHeap(ConstHeap,u32)385 inline bool CheckHeap(ConstHeap, u32) { return true; }
CheckForMBlockHeap(const void *,ConstHeap,u32)386 inline bool CheckForMBlockHeap(const void*, ConstHeap, u32) { return true; }
387 #else
388 
389 /* Please see man pages for details
390 
391 
392 
393 
394 
395 
396 
397 */
398     bool                CheckHeap(
399                             ConstHeap    heap,
400                             u32                 optFlag);
401 /* Please see man pages for details
402 
403 
404 
405 
406 
407 
408 
409 
410 */
411     bool                CheckForMBlockHeap(
412                             const void*         memBlock,
413                             ConstHeap    heap,
414                             u32                 optFlag);
415 
416 #endif
417 
418 
419 
420 /*
421 
422 */
423 /*
424 
425 */
426 
427 
428 }}} // namespace nn::fnd::detail
429 
430 #endif // __cplusplus
431 
432 /* NN_LIBRARIES_FND_DETAIL_FND_DETAIL_HEAP_H_ */
433 #endif
434 
435