1 /*---------------------------------------------------------------------------*
2   Project:  TwlSDK - OS - include
3   File:     alloc.h
4 
5   Copyright 2003-2009 Nintendo.  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   $Date:: 2009-06-04#$
14   $Rev: 10698 $
15   $Author: okubata_ryoma $
16  *---------------------------------------------------------------------------*/
17 
18 #ifndef NITRO_OS_ALLOC_H_
19 #define NITRO_OS_ALLOC_H_
20 
21 #include <nitro/misc.h>
22 #include <nitro/types.h>
23 #include <nitro/os/common/arena.h>
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 //----------------------------------------------------------------
30 // type definition
31 
32 typedef int OSHeapHandle;
33 typedef void (*OSAllocVisitor) (void *obj, u32 size);
34 
35 #define  OS_CURRENT_HEAP_HANDLE       ((OSHeapHandle)-1)
36 
37 //================================================================================
38 /*---------------------------------------------------------------------------*
39   Name:         OS_InitAlloc
40 
41   Description:  Initializes the arena in which all heaps will reside.
42                 Reserves some small amount of memory for array of heap
43                 descriptors.
44 
45   Arguments:    id         : arena ID
46                 arenaStart : beginning addr of arena
47                 arenaEnd   : ending addr of arena
48                 maxHeaps   : Maximum number of active heaps that will be
49                            : used in lifetime of program
50 
51   Returns:      start of real arena, aligned with 32 bytes boundaries, after
52                 heap array has been allocated
53  *---------------------------------------------------------------------------*/
54 extern void *OS_InitAlloc(OSArenaId id, void *arenaStart, void *arenaEnd, int maxHeaps);
55 
56 /*---------------------------------------------------------------------------*
57   Name:         OS_ClearAlloc
58 
59   Description:  Clear heap pointer system remember.
60                 After calling this, you can call OS_InitAlloc() again.
61 
62   Arguments:    id  : arena ID
63 
64   Returns:      None
65  *---------------------------------------------------------------------------*/
66 extern void OS_ClearAlloc(OSArenaId id);
67 
68 /*---------------------------------------------------------------------------*
69   Name:         OS_CreateHeap
70 
71   Description:  Reserves area of memory from /start/ to /end/ for use as a
72                 heap.  Initializes heap descriptor and free list.
73                 Will consume one entry in heap array.
74 
75   Arguments:    id    : arena ID
76                 start : starting addr of heap
77                 end   : ending addr of heap
78 
79   Returns:      If the function succeeds, it returns a new handle to heap
80                 for use in OS_AllocFromHeap(), OS_FreeToHeap(), etc.
81                 If the function fails, the return value is -1.
82  *---------------------------------------------------------------------------*/
83 extern OSHeapHandle OS_CreateHeap(OSArenaId id, void *start, void *end);
84 
85 /*---------------------------------------------------------------------------*
86   Name:         OS_CreateExtraHeap
87 
88   Description:  Create extra heap using the parameter area of TWL ROM.
89                 So Cannot be available on TWL mode.
90                 Available only on NITRO of HYBRID.
91 
92   Arguments:    id    : arena ID
93 
94   Returns:      -1 ... Failed.
95                 0< ... Success. Value is heap handle.
96  *---------------------------------------------------------------------------*/
97 #if defined(SDK_TWL) && !defined(SDK_TWLLTD)
98 extern OSHeapHandle OS_CreateExtraHeap(OSArenaId id);
99 #endif
100 
101 /*---------------------------------------------------------------------------*
102   Name:         OS_DestroyHeap
103 
104   Description:  Frees up the descriptor for the /heap/.  Subsequent
105                 allocation requests from this heap will fail unless another
106                 heap is created with the same handle.
107 
108   Arguments:    id   : arena ID
109                 heap : handle to a live heap, previously created with OS_CreateHeap().
110 
111   Returns:      None.
112  *---------------------------------------------------------------------------*/
113 extern void OS_DestroyHeap(OSArenaId id, OSHeapHandle heap);
114 
115 /*---------------------------------------------------------------------------*
116   Name:         OS_AddToHeap
117 
118   Description:  Adds an arbitrary block of memory to /heap/.  Used to free
119                 blocks previously allocated with OS_AllocFixed(), or to
120                 create non-contiguous heaps.
121 
122   Arguments:    id    : arena ID
123                 heap  : handle to live heap, previously created with OS_CreateHeap().
124                 start : starting addr of block to add to /heap/
125                 end   : ending addr of block to add to /heap/
126 
127   Returns:      None.
128  *---------------------------------------------------------------------------*/
129 extern void OS_AddToHeap(OSArenaId id, OSHeapHandle heap, void *start, void *end);
130 
131 /*---------------------------------------------------------------------------*
132   Name:         OS_AddExtraAreaToHeap
133 
134   Description:  Adds extra area (top 16KB of main memory ) to /heap/.  Used to
135                 free blocks previously allocated with OS_AllocFixed(), or to
136                 create non-contiguous heaps.
137 
138   Arguments:    id    : arena ID
139                 heap  : handle to live heap, previously created with OS_CreateHeap().
140 
141   Returns:      None.
142  *---------------------------------------------------------------------------*/
143 #if defined(SDK_TWL) && !defined(SDK_TWLLTD)
144 void OS_AddExtraAreaToHeap(OSArenaId id, OSHeapHandle heap);
145 #endif
146 
147 /*---------------------------------------------------------------------------*
148   Name:         OS_SetCurrentHeap
149 
150   Description:  Sets OSi_CurrentHeap to /heap/.  All subsequent calls to
151                 OS_Alloc() will be performed on this heap until another
152                 call to OS_SetCurrentHeap().
153 
154   Arguments:    id   : arena ID
155                 heap : handle to a heap that was returned from OS_CreateHeap()
156 
157   Returns:      previous heap handle.
158  *---------------------------------------------------------------------------*/
159 extern OSHeapHandle OS_SetCurrentHeap(OSArenaId id, OSHeapHandle heap);
160 
161 /*---------------------------------------------------------------------------*
162   Name:         OS_AllocFromHeap
163 
164   Description:  Allocates /size/ bytes from /heap/. Some additional memory
165                 will also be consumed from /heap/.
166 
167   Arguments:    id   : arena ID
168                 heap : handle to a heap that was returned from OS_CreateHeap()
169                 size : size of object to be allocated
170 
171   Returns:      a null pointer or a pointer to the allocated space aligned
172                 with ALIGNMENT bytes boundaries
173  *---------------------------------------------------------------------------*/
174 extern void *OS_AllocFromHeap(OSArenaId id, OSHeapHandle heap, u32 size);
175 
176 /*---------------------------------------------------------------------------*
177   Name:         OS_AllocFixed
178 
179   Description:  Allocates the block of memory specified by /rstart/ and
180                 /rend/.  Will break up any heap.  Will not check for overlap
181                 with other fixed blocks.  May create a zero-length heap.
182 
183   Arguments:    id     : arena ID
184                 rstart : pointer to starting addr of block
185                 rend   : pointer to ending addr of block
186 
187   Returns:      a null pointer or a pointer to the allocated space aligned
188                 with ALIGNMENT bytes boundaries. /rstart/ and /rend/ might be
189                 adjusted to the boundaries of really allocated region.
190  *---------------------------------------------------------------------------*/
191 extern void *OS_AllocFixed(OSArenaId id, void **rstart, void **rend);
192 
193 /*---------------------------------------------------------------------------*
194   Name:         OS_FreeToHeap
195 
196   Description:  Returns obj /ptr/ to /heap/.
197 
198   Arguments:    id       :  arena ID
199                 heap     :  handle to the heap that /ptr/ was allocated from
200                 ptr      :  pointer to object previously returned from
201                             OS_Alloc() or OS_AllocFromHeap().
202 
203   Returns:      None.
204  *---------------------------------------------------------------------------*/
205 extern void OS_FreeToHeap(OSArenaId id, OSHeapHandle heap, void *ptr);
206 
207 /*---------------------------------------------------------------------------*
208   Name:         OS_FreeAllToHeap
209 
210   Description:  free all allocated block in the specified heap
211 
212   Arguments:    id       : arena ID
213                 heap     : handle to the heap
214 
215   Returns:      None.
216  *---------------------------------------------------------------------------*/
217 extern void OS_FreeAllToHeap(OSArenaId id, OSHeapHandle heap);
218 
219 /*---------------------------------------------------------------------------*
220   Name:         OS_CheckHeap
221 
222   Description:  Checks heap sanity for debugging
223 
224   Arguments:    id   : arena ID
225                 heap : handle to a live heap.
226 
227   Returns:      -1 if heap is not consistent. Otherwise, returns number
228                 of bytes available in free.
229  *---------------------------------------------------------------------------*/
230 extern s32 OS_CheckHeap(OSArenaId id, OSHeapHandle heap);
231 
232 /*---------------------------------------------------------------------------*
233   Name:         OS_DumpHeap
234 
235   Description:  Dumps statistics and elements of a heap
236 
237   Arguments:    id   : arena ID
238                 heap : handle to a heap.
239 
240   Returns:      None.
241  *---------------------------------------------------------------------------*/
242 extern void OS_DumpHeap(OSArenaId id, OSHeapHandle heap);
243 
244 /*---------------------------------------------------------------------------*
245   Name:         OS_ReferentSize
246 
247   Description:  Returns size of payload
248 
249   Arguments:    id  : arena ID
250                 ptr : pointer to object previously returned from OS_Alloc()
251                       or OSAllocFromHeap().
252 
253   Returns:      size of payload
254  *---------------------------------------------------------------------------*/
255 extern u32 OS_ReferentSize(OSArenaId id, void *ptr);
256 
257 /*---------------------------------------------------------------------------*
258   Name:         OS_VisitAllocated
259 
260   Description:  Visits every element of every allocated block of memory,
261                 calling a routine on each one.
262 
263   Arguments:    id      : arena ID
264                 visitor : function to be called on each cell
265 
266   Returns:      None.
267  *---------------------------------------------------------------------------*/
268 extern void OS_VisitAllocated(OSArenaId id, OSAllocVisitor visitor);
269 
270 /*---------------------------------------------------------------------------*
271   Name:         OS_GetTotalAllocSize
272 
273   Description:  Get sum of allocated block size,
274                 not including block header.
275 
276   Arguments:    id   :  arena ID
277                 heap :  handle to a heap.
278 
279   Returns:      sum of allocated block size
280  *---------------------------------------------------------------------------*/
281 extern u32 OSi_GetTotalAllocSize(OSArenaId id, OSHeapHandle heap, BOOL isHeadInclude);
OS_GetTotalAllocSize(OSArenaId id,OSHeapHandle heap)282 static inline u32 OS_GetTotalAllocSize(OSArenaId id, OSHeapHandle heap)
283 {
284     return OSi_GetTotalAllocSize(id, heap, FALSE);
285 }
286 
287 /*---------------------------------------------------------------------------*
288   Name:         OS_GetTotalOccupiedSize
289 
290   Description:  Get sum of allocated block size,
291                 including block header.
292 
293   Arguments:    id   :  arena ID
294                 heap :  handle to a heap.
295 
296   Returns:      sum of allocated block size
297  *---------------------------------------------------------------------------*/
OS_GetTotalOccupiedSize(OSArenaId id,OSHeapHandle heap)298 static inline u32 OS_GetTotalOccupiedSize(OSArenaId id, OSHeapHandle heap)
299 {
300     return OSi_GetTotalAllocSize(id, heap, TRUE);
301 }
302 
303 /*---------------------------------------------------------------------------*
304   Name:         OS_GetTotalFreeSize
305 
306   Description:  Get sum of free block size,
307                 not includeing of block header.
308 
309   Arguments:    id   :  arena ID
310                 heap :  handle to a heap.
311 
312   Returns:      sum of free block size
313  *---------------------------------------------------------------------------*/
314 extern u32 OS_GetTotalFreeSize(OSArenaId id, OSHeapHandle heap);
315 
316 /*---------------------------------------------------------------------------*
317   Name:         OS_GetMaxFreeSize
318 
319   Description:  Get maximun free block size
320 
321   Arguments:    id   :  arena ID
322                 heap :  handle to a heap.
323 
324   Returns:      maximum free block size.
325  *---------------------------------------------------------------------------*/
326 extern u32 OS_GetMaxFreeSize(OSArenaId id, OSHeapHandle heap);
327 
328 /*---------------------------------------------------------------------------*
329   Name:         OS_ClearHeap
330 
331   Description:  re-initialize heap.
332 
333   Arguments:    id   :  arena ID
334                 heap :  handle to a heap.
335                 start:  starting addr of heap
336                 end  :  endinf addr of heap
337 
338   Returns:      None.
339  *---------------------------------------------------------------------------*/
340 extern void OS_ClearHeap(OSArenaId id, OSHeapHandle heap, void *start, void *end);
341 
342 /*---------------------------------------------------------------------------*
343   Name:         OS_ClearExtraHeap
344 
345   Description:  re-initialize extra heap.
346 
347   Arguments:    id   :  arena ID
348                 heap :  handle to a heap.
349 
350   Returns:      None.
351  *---------------------------------------------------------------------------*/
352 #if defined(SDK_TWL) && !defined(SDK_TWLLTD)
353 extern void OS_ClearExtraHeap(OSArenaId id, OSHeapHandle heap);
354 #endif
355 
356 //================================================================================
357 //         convenient functions
358 //================================================================================
359 /*---------------------------------------------------------------------------*
360   Name:         OS_AllocFromMain / OS_FreeToMain / OS_FreeAllToMain
361 
362   Description:  convenience Alloc/Free for access main memory,
363                 Main-Processor private
364  *---------------------------------------------------------------------------*/
OS_AllocFromMain(u32 size)365 static inline void *OS_AllocFromMain(u32 size)
366 {
367     return OS_AllocFromHeap(OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE, size);
368 }
OS_FreeToMain(void * ptr)369 static inline void OS_FreeToMain(void *ptr)
370 {
371     OS_FreeToHeap(OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE, ptr);
372 }
OS_FreeAllToMain(void)373 static inline void OS_FreeAllToMain(void)
374 {
375     OS_FreeAllToHeap(OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE);
376 }
377 
378 /*---------------------------------------------------------------------------*
379   Name:         OS_AllocFromSubPriv / OS_FreeToSubPriv / OS_FreeAllToSubPriv
380 
381   Description:  convenience Alloc/Free for access main memory,
382                 Sub-Processor private
383  *---------------------------------------------------------------------------*/
OS_AllocFromSubPriv(u32 size)384 static inline void *OS_AllocFromSubPriv(u32 size)
385 {
386     return OS_AllocFromHeap(OS_ARENA_MAIN_SUBPRIV, OS_CURRENT_HEAP_HANDLE, size);
387 }
OS_FreeToSubPriv(void * ptr)388 static inline void OS_FreeToSubPriv(void *ptr)
389 {
390     OS_FreeToHeap(OS_ARENA_MAIN_SUBPRIV, OS_CURRENT_HEAP_HANDLE, ptr);
391 }
OS_FreeAllToSubPriv(void)392 static inline void OS_FreeAllToSubPriv(void)
393 {
394     OS_FreeAllToHeap(OS_ARENA_MAIN_SUBPRIV, OS_CURRENT_HEAP_HANDLE);
395 }
396 
397 /*---------------------------------------------------------------------------*
398   Name:         OS_AllocFromMainEx / OS_FreeToMainEx / OS_FreeAllToMainEx
399 
400   Description:  convenience Alloc/Free for extended main memory
401  *---------------------------------------------------------------------------*/
OS_AllocFromMainEx(u32 size)402 static inline void *OS_AllocFromMainEx(u32 size)
403 {
404     return OS_AllocFromHeap(OS_ARENA_MAINEX, OS_CURRENT_HEAP_HANDLE, size);
405 }
OS_FreeToMainEx(void * ptr)406 static inline void OS_FreeToMainEx(void *ptr)
407 {
408     OS_FreeToHeap(OS_ARENA_MAINEX, OS_CURRENT_HEAP_HANDLE, ptr);
409 }
OS_FreeAllToMainEx(void)410 static inline void OS_FreeAllToMainEx(void)
411 {
412     OS_FreeAllToHeap(OS_ARENA_MAINEX, OS_CURRENT_HEAP_HANDLE);
413 }
414 
415 /*---------------------------------------------------------------------------*
416   Name:         OS_AllocFromITCM / OS_FreeToITCM / OS_FreeAllToITCM
417 
418   Description:  convenience Alloc/Free for ITCM
419  *---------------------------------------------------------------------------*/
420 #ifdef SDK_ARM9
OS_AllocFromITCM(u32 size)421 static inline void *OS_AllocFromITCM(u32 size)
422 {
423     return OS_AllocFromHeap(OS_ARENA_ITCM, OS_CURRENT_HEAP_HANDLE, size);
424 }
OS_FreeToITCM(void * ptr)425 static inline void OS_FreeToITCM(void *ptr)
426 {
427     OS_FreeToHeap(OS_ARENA_ITCM, OS_CURRENT_HEAP_HANDLE, ptr);
428 }
OS_FreeAllToITCM(void)429 static inline void OS_FreeAllToITCM(void)
430 {
431     OS_FreeAllToHeap(OS_ARENA_ITCM, OS_CURRENT_HEAP_HANDLE);
432 }
433 #endif // SDK_ARM9
434 
435 /*---------------------------------------------------------------------------*
436   Name:         OS_AllocFromDTCM / OS_FreeToDTCM / OS_FreeAllToDTCM
437 
438   Description:  convenience Alloc/Free for DTCM
439  *---------------------------------------------------------------------------*/
440 #ifdef SDK_ARM9
OS_AllocFromDTCM(u32 size)441 static inline void *OS_AllocFromDTCM(u32 size)
442 {
443     return OS_AllocFromHeap(OS_ARENA_DTCM, OS_CURRENT_HEAP_HANDLE, size);
444 }
OS_FreeToDTCM(void * ptr)445 static inline void OS_FreeToDTCM(void *ptr)
446 {
447     OS_FreeToHeap(OS_ARENA_DTCM, OS_CURRENT_HEAP_HANDLE, ptr);
448 }
OS_FreeAllToDTCM(void)449 static inline void OS_FreeAllToDTCM(void)
450 {
451     OS_FreeAllToHeap(OS_ARENA_DTCM, OS_CURRENT_HEAP_HANDLE);
452 }
453 #endif
454 
455 /*---------------------------------------------------------------------------*
456   Name:         OS_AllocFromShared / OS_FreeToShared / OS_FreeAllToShared
457 
458   Description:  convenience Alloc/Free for shared memory
459  *---------------------------------------------------------------------------*/
OS_AllocFromShared(u32 size)460 static inline void *OS_AllocFromShared(u32 size)
461 {
462     return OS_AllocFromHeap(OS_ARENA_SHARED, OS_CURRENT_HEAP_HANDLE, size);
463 }
OS_FreeToShared(void * ptr)464 static inline void OS_FreeToShared(void *ptr)
465 {
466     OS_FreeToHeap(OS_ARENA_SHARED, OS_CURRENT_HEAP_HANDLE, ptr);
467 }
OS_FreeAllToShared(void)468 static inline void OS_FreeAllToShared(void)
469 {
470     OS_FreeAllToHeap(OS_ARENA_SHARED, OS_CURRENT_HEAP_HANDLE);
471 }
472 
473 /*---------------------------------------------------------------------------*
474   Name:         OS_AllocFromWramMain / OS_FreeToWramMain / OS_FreeAllToWramMain
475 
476   Description:  convenience Alloc/Free for common Work RAM,
477                 Main-Processor private
478  *---------------------------------------------------------------------------*/
OS_AllocFromWramMain(u32 size)479 static inline void *OS_AllocFromWramMain(u32 size)
480 {
481     return OS_AllocFromHeap(OS_ARENA_WRAM_MAIN, OS_CURRENT_HEAP_HANDLE, size);
482 }
OS_FreeToWramMain(void * ptr)483 static inline void OS_FreeToWramMain(void *ptr)
484 {
485     OS_FreeToHeap(OS_ARENA_WRAM_MAIN, OS_CURRENT_HEAP_HANDLE, ptr);
486 }
OS_FreeAllToWramMain(void)487 static inline void OS_FreeAllToWramMain(void)
488 {
489     OS_FreeAllToHeap(OS_ARENA_WRAM_MAIN, OS_CURRENT_HEAP_HANDLE);
490 }
491 
492 /*---------------------------------------------------------------------------*
493   Name:         OS_AllocFromWramSub / OS_FreeToWramSub / OS_FreeAllToWramSub
494 
495   Description:  convenience Alloc/Free for common Work RAM,
496                 Sub-Processor private
497  *---------------------------------------------------------------------------*/
OS_AllocFromWramSub(u32 size)498 static inline void *OS_AllocFromWramSub(u32 size)
499 {
500     return OS_AllocFromHeap(OS_ARENA_WRAM_SUB, OS_CURRENT_HEAP_HANDLE, size);
501 }
OS_FreeToWramSub(void * ptr)502 static inline void OS_FreeToWramSub(void *ptr)
503 {
504     OS_FreeToHeap(OS_ARENA_WRAM_SUB, OS_CURRENT_HEAP_HANDLE, ptr);
505 }
OS_FreeAllToWramSub(void)506 static inline void OS_FreeAllToWramSub(void)
507 {
508     OS_FreeAllToHeap(OS_ARENA_WRAM_SUB, OS_CURRENT_HEAP_HANDLE);
509 }
510 
511 /*---------------------------------------------------------------------------*
512   Name:         OS_AllocFromSubPrivWram / OS_FreeToSubPrivWram / OS_FreeAllToSubPrivWram
513 
514   Description:  convenience Alloc/Free for Sub-Processor private Work RAM
515  *---------------------------------------------------------------------------*/
OS_AllocFromSubPrivWram(u32 size)516 static inline void *OS_AllocFromSubPrivWram(u32 size)
517 {
518     return OS_AllocFromHeap(OS_ARENA_WRAM_SUBPRIV, OS_CURRENT_HEAP_HANDLE, size);
519 }
OS_FreeToSubPrivWram(void * ptr)520 static inline void OS_FreeToSubPrivWram(void *ptr)
521 {
522     OS_FreeToHeap(OS_ARENA_WRAM_SUBPRIV, OS_CURRENT_HEAP_HANDLE, ptr);
523 }
OS_FreeAllToSubPrivWram(void)524 static inline void OS_FreeAllToSubPrivWram(void)
525 {
526     OS_FreeAllToHeap(OS_ARENA_WRAM_SUBPRIV, OS_CURRENT_HEAP_HANDLE);
527 }
528 
529 /*---------------------------------------------------------------------------*
530   Name:         OS_Alloc
531 
532   Description:  same as OS_AllocFromMain()    (if ARM9)
533                 same as OS_AllocFromSubPriv() (if ARM7)
534  *---------------------------------------------------------------------------*/
535 #ifdef SDK_ARM9
536 #  define OS_Alloc( size )   OS_AllocFromMain( (size) )
537 #else
538 #  define OS_Alloc( size )   OS_AllocFromSubPriv( (size) )
539 #endif
540 
541 /*---------------------------------------------------------------------------*
542   Name:         OS_Free
543 
544   Description:  same as OS_FreeToMain()    (if ARM9)
545                 same as OS_FreeToSubPriv() (if ARM7)
546  *---------------------------------------------------------------------------*/
547 #ifdef SDK_ARM9
548 #  define OS_Free( ptr )     OS_FreeToMain( (ptr) )
549 #else
550 #  define OS_Free( ptr )     OS_FreeToSubPriv( (ptr) )
551 #endif
552 
553 /*---------------------------------------------------------------------------*
554   Name:         OS_FreeAll
555 
556   Description:  same as OS_FreeAllToMain()    (if ARM9)
557                 same as OS_FreeAllToSubPriv() (if ARM7)
558  *---------------------------------------------------------------------------*/
559 #ifdef SDK_ARM9
560 #  define OS_FreeAll()     OS_FreeAllToMain()
561 #else
562 #  define OS_FreeAll()     OS_FreeAllToSubPriv()
563 #endif
564 
565 
566 //================================================================================
567 //     Check Alocated Memory
568 //================================================================================
569 /*---------------------------------------------------------------------------*
570   Name:         OS_IsOnMainMemory
571 
572   Description:  check memory address to which a pointer points is on main RAM.
573 
574   Arguments:    ptr  : pointer
575 
576   Returns:      TRUE if ptr points is on main RAM.
577  *---------------------------------------------------------------------------*/
578 BOOL OS_IsOnMainMemory(void* ptr);
579 
580 /*---------------------------------------------------------------------------*
581   Name:         OS_IsOnExtendedMainMemory
582 
583   Description:  check memory address to which a pointer points is on extended main RAM.
584 
585   Arguments:    ptr  : pointer
586 
587   Returns:      TRUE if ptr points is on extended main RAM.
588  *---------------------------------------------------------------------------*/
589 BOOL OS_IsOnExtendedMainMemory(void* ptr);
590 
591 /*---------------------------------------------------------------------------*
592   Name:         OS_IsOnWramB
593 
594   Description:  check memory address to which a pointer points is on WRAM B.
595 
596   Arguments:    ptr  : pointer
597 
598   Returns:      TRUE if ptr points is on WRAM B.
599  *---------------------------------------------------------------------------*/
600 BOOL OS_IsOnWramB(void* ptr);
601 
602 /*---------------------------------------------------------------------------*
603   Name:         OS_IsOnWramC
604 
605   Description:  check memory address to which a pointer points is on WRAM C.
606 
607   Arguments:    ptr  : pointer
608 
609   Returns:      TRUE if ptr points is on WRAM C.
610  *---------------------------------------------------------------------------*/
611 BOOL OS_IsOnWramC(void* ptr);
612 
613 /*---------------------------------------------------------------------------*
614   Name:         OS_IsOnWram0
615 
616   Description:  check memory address to which a pointer points is on WRAM 0.
617 
618   Arguments:    ptr  : pointer
619 
620   Returns:      TRUE if ptr points is on WRAM 0.
621  *---------------------------------------------------------------------------*/
622 BOOL OS_IsOnWram0(void* ptr);
623 
624 /*---------------------------------------------------------------------------*
625   Name:         OS_IsOnWram1
626 
627   Description:  check memory address to which a pointer points is on WRAM 1.
628 
629   Arguments:    ptr  : pointer
630 
631   Returns:      TRUE if ptr points is on WRAM 1.
632  *---------------------------------------------------------------------------*/
633 BOOL OS_IsOnWram1(void* ptr);
634 
635 /*---------------------------------------------------------------------------*
636   Name:         OS_IsOnWram
637 
638   Description:  check memory address to which a pointer points is on WRAM.
639 
640   Arguments:    ptr  : pointer
641 
642   Returns:      TRUE if ptr points is on WRAM.
643  *---------------------------------------------------------------------------*/
644 BOOL OS_IsOnWram(void* ptr);
645 
646 /*---------------------------------------------------------------------------*
647   Name:         OS_IsOnVram
648 
649   Description:  check memory address to which a pointer points is on VRAM.
650 
651   Arguments:    ptr  : pointer
652 
653   Returns:      TRUE if ptr points is on VRAM.
654  *---------------------------------------------------------------------------*/
655 BOOL OS_IsOnVram(void* ptr);
656 
657 /*---------------------------------------------------------------------------*
658   Name:         OS_IsOnItcm
659 
660   Description:  check memory address to which a pointer points is on ITCM.
661 
662   Arguments:    ptr  : pointer
663 
664   Returns:      TRUE if ptr points is on ITCM.
665  *---------------------------------------------------------------------------*/
666 BOOL OS_IsOnItcm(void* ptr);
667 
668 /*---------------------------------------------------------------------------*
669   Name:         OS_IsOnDtcm
670 
671   Description:  check memory address to which a pointer points is on DTCM.
672 
673   Arguments:    ptr  : pointer
674 
675   Returns:      TRUE if ptr points is on DTCM.
676  *---------------------------------------------------------------------------*/
677 BOOL OS_IsOnDtcm(void* ptr);
678 
679 /*---------------------------------------------------------------------------*
680   Name:         OS_IsOnWramA
681 
682   Description:  check memory address to which a pointer points is on WRAM B.
683 
684   Arguments:    ptr  : pointer
685 
686   Returns:      TRUE if ptr points is on WRAM A.
687  *---------------------------------------------------------------------------*/
688 BOOL OS_IsOnWramA(void* ptr);
689 
690 /*---------------------------------------------------------------------------*
691   Name:         OS_IsOnArm7PrvWram
692 
693   Description:  check memory address to which a pointer points is on ARM7 Private WRAM.
694 
695   Arguments:    ptr  : pointer
696 
697   Returns:      TRUE if ptr points is on ARM7 Private WRAM.
698  *---------------------------------------------------------------------------*/
699 BOOL OS_IsOnArm7PrvWram(void* ptr);
700 
701 
702 #ifdef __cplusplus
703 } /* extern "C" */
704 #endif
705 
706 /* NITRO_OS_ALLOC_H_ */
707 #endif
708