105 lines
No EOL
2.1 KiB
C
105 lines
No EOL
2.1 KiB
C
#include "common.h"
|
|
#include "dolphin/os.h"
|
|
|
|
extern OSHeapHandle currentHeapHandle;
|
|
|
|
static u32 HeapSizeTbl[5] = { 0x240000, 0x140000, 0xA80000, 0x580000, 0 };
|
|
static void *HeapTbl[5];
|
|
|
|
void HuMemInitAll(void)
|
|
{
|
|
int i;
|
|
void *ptr;
|
|
u32 free_size;
|
|
for(i=0; i<4; i++) {
|
|
ptr = OSAllocFromHeap(__OSCurrHeap, HeapSizeTbl[i]);
|
|
if(ptr == NULL) {
|
|
OSReport("HuMem> Failed OSAlloc Size:%d\n", HeapSizeTbl[i]);
|
|
return;
|
|
}
|
|
HeapTbl[i] = HuMemInit(ptr, HeapSizeTbl[i]);
|
|
}
|
|
free_size = OSCheckHeap(currentHeapHandle);
|
|
OSReport("HuMem> left memory space %dKB(%d)\n", free_size/1024, free_size);
|
|
ptr = OSAllocFromHeap(__OSCurrHeap, free_size);
|
|
if(ptr == NULL) {
|
|
OSReport("HuMem> Failed OSAlloc left space\n");
|
|
return;
|
|
}
|
|
HeapTbl[4] = HuMemInit(ptr, free_size);
|
|
HeapSizeTbl[4] = free_size;
|
|
}
|
|
|
|
void *HuMemInit(void *ptr, s32 size)
|
|
{
|
|
return HuMemHeapInit(ptr, size);
|
|
}
|
|
|
|
void HuMemDCFlushAll()
|
|
{
|
|
HuMemDCFlush(2);
|
|
HuMemDCFlush(0);
|
|
}
|
|
|
|
void HuMemDCFlush(int heap)
|
|
{
|
|
DCFlushRangeNoSync(HeapTbl[heap], HeapSizeTbl[heap]);
|
|
}
|
|
|
|
void *HuMemDirectMalloc(int heap, s32 size)
|
|
{
|
|
register u32 retaddr;
|
|
asm {
|
|
mflr retaddr
|
|
}
|
|
size = (size+31) & 0xFFFFFFE0;
|
|
return HuMemMemoryAlloc(HeapTbl[heap], size, retaddr);
|
|
}
|
|
|
|
void *HuMemDirectMallocNum(int heap, s32 size, u32 num)
|
|
{
|
|
register u32 retaddr;
|
|
asm {
|
|
mflr retaddr
|
|
}
|
|
size = (size+31) & 0xFFFFFFE0;
|
|
return HuMemMemoryAllocNum(HeapTbl[heap], size, num, retaddr);
|
|
}
|
|
|
|
void HuMemDirectFree(void *ptr)
|
|
{
|
|
register u32 retaddr;
|
|
asm {
|
|
mflr retaddr
|
|
}
|
|
HuMemMemoryFree(ptr, retaddr);
|
|
}
|
|
|
|
void HuMemDirectFreeNum(int heap, u32 num)
|
|
{
|
|
register u32 retaddr;
|
|
asm {
|
|
mflr retaddr
|
|
}
|
|
HuMemMemoryFreeNum(HeapTbl[heap], num, retaddr);
|
|
}
|
|
|
|
s32 HuMemUsedMallocSizeGet(int heap)
|
|
{
|
|
return HuMemUsedMemorySizeGet(HeapTbl[heap]);
|
|
}
|
|
|
|
s32 HuMemUsedMallocBlockGet(int heap)
|
|
{
|
|
return HuMemUsedMemoryBlockGet(HeapTbl[heap]);
|
|
}
|
|
|
|
u32 HuMemHeapSizeGet(int heap)
|
|
{
|
|
return HeapSizeTbl[heap];
|
|
}
|
|
|
|
void *HuMemHeapPtrGet(int heap)
|
|
{
|
|
return HeapTbl[heap];
|
|
} |