diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2021-07-25 13:23:02 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2021-07-25 13:23:02 -0400 |
commit | 5e0e326b75402a36c4d31502b8b5a05b862ac23c (patch) | |
tree | 1b5807c1efb72dbdd9d01f329cefb41171913a64 /arm9/lib/libnns/include/NNS_FND_expheap.h | |
parent | 1f9d4503c898f9138422215132b53224571a281a (diff) | |
parent | 68d7aa47cc52ef822220e0e35890863d7cad479f (diff) |
Merge remote-tracking branch 'origin/master' into pikalax_work
Diffstat (limited to 'arm9/lib/libnns/include/NNS_FND_expheap.h')
-rw-r--r-- | arm9/lib/libnns/include/NNS_FND_expheap.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/arm9/lib/libnns/include/NNS_FND_expheap.h b/arm9/lib/libnns/include/NNS_FND_expheap.h new file mode 100644 index 00000000..bdc3fcc4 --- /dev/null +++ b/arm9/lib/libnns/include/NNS_FND_expheap.h @@ -0,0 +1,55 @@ +#ifndef GUARD_NNS_FND_EXPHEAP_H +#define GUARD_NNS_FND_EXPHEAP_H + +#include "NNS_FND_heapcommon.h" + +typedef struct NNSiFndExpHeapMBlockHead NNSiFndExpHeapMBlockHead; + +struct NNSiFndExpHeapMBlockHead +{ + u16 signature; // Signature + u16 attribute; // Attribute + // [8:groupID] + // [7:alignment] + // [1:temporary flag] + + u32 blockSize; // Block size (data area only) + + NNSiFndExpHeapMBlockHead* pMBHeadPrev; // Previous block + NNSiFndExpHeapMBlockHead* pMBHeadNext; // Next block +}; + +typedef struct NNSiFndExpMBlockList NNSiFndExpMBlockList; + +struct NNSiFndExpMBlockList +{ + NNSiFndExpHeapMBlockHead* head; // Pointer for memory block linked to header + NNSiFndExpHeapMBlockHead* tail; // Pointer to the memory block linked to the tail of the expanded heap +}; + +typedef struct NNSiFndExpHeapHead NNSiFndExpHeapHead; + +struct NNSiFndExpHeapHead +{ + NNSiFndExpMBlockList mbFreeList; // Free list + NNSiFndExpMBlockList mbUsedList; // Used list + + u16 groupID; // Current group ID (lower 8 bits only) + u16 feature; // Attribute +}; + +NNSFndHeapHandle NNS_FndCreateExpHeapEx(void *startAddress, u32 size, u32 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); + +#define NNS_FndCreateExpHeap(startAddress, size) \ + NNS_FndCreateExpHeapEx(startAddress, size, 0) +#define NNS_FndAllocFromExpHeap(heap, size) \ + NNS_FndAllocFromExpHeapEx(heap, size, NNS_FND_HEAP_DEFAULT_ALIGNMENT) + + +#endif //GUARD_NNS_FND_EXPHEAP_H |