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_FND_DETAIL_FND_DETAIL_HEAP_H_
22 #define NN_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_OS_HEAP_H_ */
433 #endif
434
435