Files
dusklight/include/revolution/mem/expHeap.h
T
Max Roncace 255705a4cd Revolution SDK work (#3091)
* Implement revolution/ax

Copied mostly unchanged from Petari

* Implement revolution/axfx

Copied mostly unchanged from Petari

* Implement revolution/arc

Copied mostly unchanged from Petari

* Implement revolution/mem

Copied mostly unchanged from Petari

* Implement revolution/tpl

Copied verbatim from Petari

* revolution/ipc matching (except small linking issue on ShieldD)

* revolution/pad/Pad matching

Largely copied from Petari with significant modifications

* Fix up ut_TextWriterBase symbols

* Fix homebuttonLib file names in Shield splits
2026-02-11 00:10:40 -08:00

76 lines
1.7 KiB
C

#ifndef _REVOLUTION_MEM_EXPHEAP_H_
#define _REVOLUTION_MEM_EXPHEAP_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <revolution/mem/heapCommon.h>
typedef struct MEMiExpHeapMBlockHead MEMiExpHeapMBlockHead;
struct MEMiExpHeapMBlockHead {
u16 signature;
union {
u16 val;
struct {
u16 allocDir : 1;
u16 alignment : 7;
u16 groupID : 8;
} fields;
} attribute;
u32 blockSize;
MEMiExpHeapMBlockHead* prev;
MEMiExpHeapMBlockHead* next;
};
typedef struct MEMiExpMBlockList MEMiExpMBlockList;
struct MEMiExpMBlockList {
MEMiExpHeapMBlockHead* head;
MEMiExpHeapMBlockHead* tail;
};
typedef struct MEMiExpHeapHead MEMiExpHeapHead;
struct MEMiExpHeapHead {
MEMiExpMBlockList mbFreeList;
MEMiExpMBlockList mbUsedList;
u16 groupID;
union {
u16 val;
struct {
u16 _reserved : 14;
u16 useMarginOfAlign : 1;
u16 allocMode : 1;
} fields;
} feature;
};
MEMHeapHandle MEMCreateExpHeapEx(void*, u32, u16);
void* MEMDestroyExpHeap(MEMHeapHandle);
void* MEMAllocFromExpHeapEx(MEMHeapHandle, u32, int);
void MEMFreeToExpHeap(MEMHeapHandle, void*);
u32 MEMGetAllocatableSizeForExpHeapEx(MEMHeapHandle, int);
MEMHeapHandle MEMCreateFrmHeapEx(void* start, u32 size, u16 opt);
MEMHeapHandle MEMDestroyFrmHeap(MEMHeapHandle heap);
static inline MEMHeapHandle MEMCreateExpHeap(void* start, u32 size) {
return MEMCreateExpHeapEx(start, size, 0);
}
static inline void* MEMAllocFromExpHeap(MEMHeapHandle heap, u32 size) {
return MEMAllocFromExpHeapEx(heap, size, 4);
}
#ifdef __cplusplus
}
#endif
#endif // _REVOLUTION_MEM_EXPHEAP_H_