summaryrefslogtreecommitdiff
path: root/arm9/lib/libnns/include
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/lib/libnns/include')
-rw-r--r--arm9/lib/libnns/include/NNS_FND_expheap.h4
-rw-r--r--arm9/lib/libnns/include/NNS_FND_heapcommon.h85
-rw-r--r--arm9/lib/libnns/include/NNS_FND_list.h15
3 files changed, 102 insertions, 2 deletions
diff --git a/arm9/lib/libnns/include/NNS_FND_expheap.h b/arm9/lib/libnns/include/NNS_FND_expheap.h
index bdc3fcc4..acf33bd4 100644
--- a/arm9/lib/libnns/include/NNS_FND_expheap.h
+++ b/arm9/lib/libnns/include/NNS_FND_expheap.h
@@ -38,13 +38,13 @@ struct NNSiFndExpHeapHead
u16 feature; // Attribute
};
-NNSFndHeapHandle NNS_FndCreateExpHeapEx(void *startAddress, u32 size, u32 optFlag);
+NNSFndHeapHandle NNS_FndCreateExpHeapEx(void *startAddress, u32 size, u16 optFlag);
void *NNS_FndAllocFromExpHeapEx(NNSFndHeapHandle heap, u32 size, int alignment);
void NNS_FndDestroyExpHeap(NNSFndHeapHandle heap);
void NNS_FndFreeToExpHeap(NNSFndHeapHandle heap, void *memBlock);
u32 NNS_FndGetTotalFreeSizeForExpHeap(NNSFndHeapHandle heap);
u32 NNS_FndGetSizeForMBlockExpHeap(const void *memBlock);
-void NNS_FndResizeForMBlockExpHeap(NNSFndHeapHandle heap, void *memBlock, u32 size);
+u32 NNS_FndResizeForMBlockExpHeap(NNSFndHeapHandle heap, void *memBlock, u32 size);
#define NNS_FndCreateExpHeap(startAddress, size) \
NNS_FndCreateExpHeapEx(startAddress, size, 0)
diff --git a/arm9/lib/libnns/include/NNS_FND_heapcommon.h b/arm9/lib/libnns/include/NNS_FND_heapcommon.h
index e6fab69c..e3124e81 100644
--- a/arm9/lib/libnns/include/NNS_FND_heapcommon.h
+++ b/arm9/lib/libnns/include/NNS_FND_heapcommon.h
@@ -2,11 +2,26 @@
#define GUARD_NNS_FND_HEAPCOMMON_H
#include "NNS_FND_list.h"
+#include "MI_memory.h"
#define NNS_FND_HEAP_DEFAULT_ALIGNMENT 4
+#define NNS_FndGetFillValForHeap(type) (0)
+
typedef struct NNSiFndHeapHead NNSiFndHeapHead;
+typedef s32 NNSiIntPtr;
+typedef u32 NNSiUIntPtr;
+
+#define NNSi_FndGetBitValue(data, st, bits) (((data) >>(st)) & ((1 <<(bits)) -1))
+#define NNSi_FndSetBitValue(data, st, bits, val) do { \
+ u32 maskBits = (u32)((1 << (bits)) - 1); \
+ u32 newVal = (val) & maskBits; \
+ (void)(maskBits <<= st); \
+ (data) &= ~maskBits; \
+ (data) |= newVal << (st); \
+} while (FALSE);
+
struct NNSiFndHeapHead
{
u32 signature;
@@ -23,4 +38,74 @@ struct NNSiFndHeapHead
typedef NNSiFndHeapHead* NNSFndHeapHandle; // Type to represent heap handle
+static inline NNSiUIntPtr NNSiGetUIntPtr(const void* ptr)
+{
+ return (NNSiUIntPtr)ptr;
+}
+
+static inline u32 GetOffsetFromPtr(const void* start, const void* end)
+{
+ return NNSiGetUIntPtr(end) - NNSiGetUIntPtr(start);
+}
+
+static inline void* AddU32ToPtr(void* ptr, u32 val)
+{
+ return (void*)( NNSiGetUIntPtr(ptr) + val );
+}
+
+static inline const void* AddU32ToCPtr(const void* ptr, u32 val)
+{
+ return (const void*)( NNSiGetUIntPtr(ptr) + val );
+}
+
+static inline void* SubU32ToPtr(void* ptr, u32 val)
+{
+ return (void*)(NNSiGetUIntPtr(ptr) - val);
+}
+
+static inline const void* SubU32ToCPtr(const void* ptr, u32 val)
+{
+ return (const void*)(NNSiGetUIntPtr(ptr) - val);
+}
+
+static inline int ComparePtr(const void* a, const void* b)
+{
+ const u8* wa = a;
+ const u8* wb = b;
+
+ return wa - wb;
+}
+
+
+static inline u16 GetOptForHeap(const NNSiFndHeapHead* pHeapHd)
+{
+ return (u16)NNSi_FndGetBitValue(pHeapHd->attribute, 0, 8);
+}
+
+static inline void SetOptForHeap(
+ NNSiFndHeapHead* pHeapHd,
+ u16 optFlag
+ )
+{
+ NNSi_FndSetBitValue(pHeapHd->attribute, 0, 8, optFlag);
+}
+
+static inline void FillAllocMemory(NNSiFndHeapHead* pHeapHd, void* address, u32 size)
+{
+ if (GetOptForHeap(pHeapHd) & 1)
+ MI_CpuFill32(address, NNS_FndGetFillValForHeap(0), size);
+}
+
+void NNSi_FndInitHeapHead(NNSiFndHeapHead *pHead, u32 signature, void* heapStart, void* heapEnd, u16 optionFlag);
+
+void NNSi_FndFinalizeHeap(NNSiFndHeapHead *pHead);
+
+#define NNSi_FndRoundUp(value, alignment) (((value) + (alignment - 1)) & ~(alignment - 1))
+
+#define NNSi_FndRoundUpPtr(ptr, alignment) ((void*)NNSi_FndRoundUp(NNSiGetUIntPtr(ptr), alignment))
+
+#define NNSi_FndRoundDown(value, alignment) ((value) & ~(alignment - 1))
+
+#define NNSi_FndRoundDownPtr(ptr, alignment) ((void*)NNSi_FndRoundDown(NNSiGetUIntPtr(ptr), alignment))
+
#endif //GUARD_NNS_FND_HEAPCOMMON_H
diff --git a/arm9/lib/libnns/include/NNS_FND_list.h b/arm9/lib/libnns/include/NNS_FND_list.h
index 5fec2fdf..4bba7882 100644
--- a/arm9/lib/libnns/include/NNS_FND_list.h
+++ b/arm9/lib/libnns/include/NNS_FND_list.h
@@ -17,4 +17,19 @@ typedef struct
} NNSFndList;
+void NNS_FndInitList(
+ NNSFndList *pList,
+ s32 alignment
+);
+
+void NNS_FndAppendListObject(
+ NNSFndList *pList,
+ void* object
+);
+
+void NNS_FndRemoveListObject(
+ NNSFndList *pList,
+ void* object
+);
+
#endif //GUARD_NNS_FND_LIST_H