1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     fnd_DetailHeapCommon.h
4   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
5   These coded instructions, statements, and computer programs contain
6   proprietary information of Nintendo of America Inc. and/or Nintendo
7   Company Ltd., and are protected by Federal copyright law. They may
8   not be disclosed to third parties or copied or duplicated in any form,
9   in whole or in part, without the prior written consent of Nintendo.
10   $Rev: 18703 $
11  *---------------------------------------------------------------------------
12 
13 
14 */
15 
16 #ifndef NN_FND_DETAIL_FND_DETAIL_HEAPCOMMON_H_
17 #define NN_FND_DETAIL_FND_DETAIL_HEAPCOMMON_H_
18 
19 #include <nn/types.h>
20 #include <nn/fnd/detail/fnd_DetailHeapHead.h>
21 #include "./fnd_DetailList.h"
22 
23 #ifdef __cplusplus
24 
25 namespace nn { namespace fnd { namespace detail {
26 /* Please see man pages for details
27 
28 
29 */
30 /* Please see man pages for details
31 
32 
33 */
34 //
35 /* ========================================================================
36     Macro Constants
37    ======================================================================== */
38 
39 // Invalid heap handle
40 #define NN_OS_HEAP_INVALID_HANDLE     NULL
41 
42 // Default alignment size when memory is allocated from heap
43 #define NN_OS_HEAP_DEFAULT_ALIGNMENT    4
44 
45 #define NNSI_CREATE_HEAP_SIGNATURE(a,b,c,d)  ( ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0) )
46 
47 // Signature of expanded heap
48 #define NNSI_EXPHEAP_SIGNATURE    NNSI_CREATE_HEAP_SIGNATURE('E','X','P','H')
49 
50 // Signature of frame heap
51 #define NNSI_FRMHEAP_SIGNATURE    NNSI_CREATE_HEAP_SIGNATURE('F','R','M','H')
52 
53 // Signature of unit heap
54 #define NNSI_UNTHEAP_SIGNATURE    NNSI_CREATE_HEAP_SIGNATURE('U','N','T','H')
55 
56 
57 /* ------------------------------------------------------------------------
58     Fill-related
59    ------------------------------------------------------------------------ */
60 
61 // Zero out memory when memory is allocated.
62 #define NN_OS_HEAP_OPT_0_CLEAR        (1 <<0)
63 
64 // Memory filled when heap is created, memory is allocated, or memory is freed.
65 #define NN_OS_HEAP_OPT_DEBUG_FILL     (1 <<1)
66 
67 
68 /* ------------------------------------------------------------------------
69     Heap check related
70    ------------------------------------------------------------------------ */
71 
72 //  If this bit stands, output error
73 #define NN_OS_HEAP_ERROR_PRINT        (1 <<0)
74 
75 
76 /* ========================================================================
77     enum constant
78    ======================================================================== */
79 
80 enum {
81     NN_OS_HEAP_FILL_NOUSE,    // When debug fill is not used
82     NN_OS_HEAP_FILL_ALLOC,    // When debug fill is allocated
83     NN_OS_HEAP_FILL_FREE,     // When debug fill is freed
84 
85     NN_OS_HEAP_FILL_MAX
86 };
87 
88 
89 /* =======================================================================
90     Type Definitions
91    ======================================================================== */
92 
93 /* Please see man pages for details
94 
95 */
96 typedef ExpHeapImpl NNSiFndHeapHead;
97 typedef NNSiFndHeapHead* Heap;   // Type to represent heap handle
98 typedef NNSiFndHeapHead const * ConstHeap;
99 
100 
101 /*---------------------------------------------------------------------------*
102   Name:         MemGetHeapTotalSize
103   Description:  Gets the memory size allocated to the heap (including that of the header).
104 
105   Arguments:    heap    Heap handle
106   Returns:      Returns the memory size allocated to the heap (including that of the header).
107 
108  *---------------------------------------------------------------------------
109 
110 
111 */
112 static inline s32
GetHeapTotalSize(ConstHeap heap)113 GetHeapTotalSize(ConstHeap heap)
114 {
115     return ((s32)(heap->heapEnd) - (s32)(heap->heapStart));
116 }
117 
118 /* ========================================================================
119     Macro Functions
120    ======================================================================== */
121 
122 /*---------------------------------------------------------------------------*
123   Name:         GetHeapStartAddress
124   Description:  Gets start address of memory area used by heap
125   Arguments:    heap:  Heap handle
126   Returns:      Return start address of memory area used by heap
127  *---------------------------------------------------------------------------
128 
129 
130 */
131 #define             GetHeapStartAddress(heap) \
132                         ((void*)(((nn::fnd::detail::NNSiFndHeapHead*)(heap))->heapStart))
133 
134 /*---------------------------------------------------------------------------*
135   Name:         GetHeapEndAddress
136   Description:  Gets end address +1 of memory region used by heap.
137   Arguments:    heap:  Heap handle
138   Returns:      Return end address +1 of memory area used by heap
139  *---------------------------------------------------------------------------
140 
141 
142 */
143 #define             GetHeapEndAddress(heap) \
144                         (((nn::fnd::detail::NNSiFndHeapHead*)(heap))->heapEnd)
145 
146 /* =======================================================================
147     Function Prototypes
148    ======================================================================== */
149 
150 Heap    FindContainHeap(
151                         const void* memBlock);
152 
153 #if defined(NN_SWITCH_DISABLE_DEBUG_PRINT_FOR_SDK)
154     #define             DumpHeap(heap)				((void)0)
155 #else
156 	void                DumpHeap(
157 	                        Heap heap);
158 #endif
159 
160 #ifndef NN_BUILD_VERBOSE
161     #define             SetFillValForHeap(type, val) (0)
162 #else
163     u32                 SetFillValForHeap(
164                             int     type,
165                             u32     val);
166 #endif
167 
168 #ifndef NN_BUILD_VERBOSE
169     #define             GetFillValForHeap(type)      (0)
170 #else
171     u32                 GetFillValForHeap(
172                             int     type);
173 #endif
174 //
175 
176 /*
177 
178 */
179 /*
180 
181 */
182 
183 
184 }}} // namespace nn::os
185 
186 #endif // __cplusplus
187 
188 /* NN_OS_HEAPCOMMON_H_ */
189 #endif /* NN_OS_OS_HEAPCOMMON_H_ */
190