1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     fnd_DetailHeapHead.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: 12449 $
11  *---------------------------------------------------------------------------
12 
13 
14 */
15 
16 /* Please see man pages for details
17 
18 
19 */
20 
21 #ifndef NN_FND_DETAIL_FND_DETAIL_HEAP_HEAD_H_
22 #define NN_FND_DETAIL_FND_DETAIL_HEAP_HEAD_H_
23 
24 #ifdef __cplusplus
25 
26 namespace nn{ namespace fnd{ namespace detail {
27 
28     /*---------------------------------------------------------------------------*
29       Name:         NNSFndLink
30       Description:  Node structure for doubly linked list. Stores this structure as a member of the structure that you want linked to the list structure.
31 
32      *---------------------------------------------------------------------------
33 */
34     typedef struct
35     {
36         void*       prevObject;     // Pointer to the previous linked object.
37         void*       nextObject;     // Pointer to the next linked object.
38 
39     } NNSFndLink;
40 
41 
42     /*---------------------------------------------------------------------------*
43       Name:         NNSFndList
44       Description:  Doubly-linked list structure.
45      *---------------------------------------------------------------------------
46 */
47     typedef struct
48     {
49         void*       headObject;     // Pointer to the object linked to the top of the list.
50         void*       tailObject;     // Pointer to the object linked to the end of the list.
51         u16         numObjects;     // Number of objects linked in the list.
52         u16         offset;         // Offset for NNSFndLink type structure member.
53 
54     } NNSFndList;
55 
56     // Header information for memory
57     struct NNSiFndExpHeapMBlockHead
58     {
59         u16                         signature;      // Signature
60         u16                         attribute;      // Attribute
61                                                     // [8:groupID]
62                                                     // [7:alignment]
63                                                     // [1:temporary flag]
64 
65         u32                         blockSize;      // Block size (data area only)
66 
67         NNSiFndExpHeapMBlockHead*   pMBHeadPrev;    // Previous block
68         NNSiFndExpHeapMBlockHead*   pMBHeadNext;    // Next block
69     };
70 
71     // Memory list
72     struct NNSiFndExpMBlockList
73     {
74         NNSiFndExpHeapMBlockHead*   head;   // Pointer to memory linked to the start of the list
75         NNSiFndExpHeapMBlockHead*   tail;   // Pointer to memory linked to the end of the list
76     };
77 
78     // Header information for expanded heap
79     struct NNSiFndExpHeapHead
80     {
81         NNSiFndExpMBlockList        mbFreeList;     // Free list
82         NNSiFndExpMBlockList        mbUsedList;     // Used list
83 
84         u16                         groupID;        // Current group ID (lower 8 bits only)
85         u16                         feature;        // Attribute
86         bool                        reuse;          // Configures whether to reuse gap regions that occur during alignment.
87         NN_PADDING3;
88     };
89 
90     struct ExpHeapImpl
91     {
ExpHeapImplExpHeapImpl92         ExpHeapImpl() : signature(0) {}
93 
94         u32             signature;
95 
96         NNSFndLink      link;
97         NNSFndList      childList;
98 
99         void*           heapStart;      // Heap start address
100         void*           heapEnd;        // Heap end (+1) address
101 
102         u32             attribute;      // Attribute
103                                         // [8:Option flag]
104         NNSiFndExpHeapHead nnsiFndExpHeapHead;
105     };
106 
107 }}} // namespace nn::fnd::detail
108 
109 #endif // __cplusplus
110 
111 /* NN_FND_DETAIL_FND_DETAIL_HEAP_HEAD_H_ */
112 #endif
113 
114