diff --git a/gc/ogc/system.h b/gc/ogc/system.h index 06063cf8..16d74410 100644 --- a/gc/ogc/system.h +++ b/gc/ogc/system.h @@ -140,8 +140,10 @@ distribution. #define SYS_GetArenaHi SYS_GetArena1Hi #define SYS_SetArenaHi SYS_SetArena1Hi #define SYS_GetArenaSize SYS_GetArena1Size -#define SYS_AllocArenaMemLo SYS_AllocArena1MemLo -#define SYS_AllocArenaMemHi SYS_AllocArena1MemHi +#define SYS_AllocArenaMemLo SYS_AllocArenaMem1Lo +#define SYS_AllocArenaMemHi SYS_AllocArenaMem1Hi +#define SYS_GetPhysicalMemSize SYS_GetPhysicalMem1Size +#define SYS_GetSimulatedMemSize SYS_GetSimulatedMem1Size #ifdef __cplusplus extern "C" { @@ -362,8 +364,10 @@ void SYS_SetArena1Lo(void *newLo); void* SYS_GetArena1Hi(void); void SYS_SetArena1Hi(void *newHi); u32 SYS_GetArena1Size(void); -void* SYS_AllocArena1MemLo(u32 size,u32 align); -void* SYS_AllocArena1MemHi(u32 size,u32 align); +void* SYS_AllocArenaMem1Lo(u32 size,u32 align); +void* SYS_AllocArenaMem1Hi(u32 size,u32 align); +u32 SYS_GetPhysicalMem1Size(void); +u32 SYS_GetSimulatedMem1Size(void); resetcallback SYS_SetResetCallback(resetcallback cb); @@ -377,8 +381,10 @@ void SYS_SetArena2Lo(void *newLo); void* SYS_GetArena2Hi(void); void SYS_SetArena2Hi(void *newHi); u32 SYS_GetArena2Size(void); -void* SYS_AllocArena2MemLo(u32 size,u32 align); -void* SYS_AllocArena2MemHi(u32 size,u32 align); +void* SYS_AllocArenaMem2Lo(u32 size,u32 align); +void* SYS_AllocArenaMem2Hi(u32 size,u32 align); +u32 SYS_GetPhysicalMem2Size(void); +u32 SYS_GetSimulatedMem2Size(void); powercallback SYS_SetPowerCallback(powercallback cb); #endif diff --git a/libogc/lwp_wkspace.c b/libogc/lwp_wkspace.c index d9a356fc..22d78d94 100644 --- a/libogc/lwp_wkspace.c +++ b/libogc/lwp_wkspace.c @@ -31,10 +31,10 @@ void __lwp_wkspace_init(u32 size) { void *heap_addr = NULL; - heap_addr = SYS_AllocArena1MemLo(size,PPC_CACHE_ALIGNMENT); + heap_addr = SYS_AllocArenaMem1Lo(size,PPC_CACHE_ALIGNMENT); #if defined(HW_RVL) if(!heap_addr) - heap_addr = SYS_AllocArena2MemLo(size,PPC_CACHE_ALIGNMENT); + heap_addr = SYS_AllocArenaMem2Lo(size,PPC_CACHE_ALIGNMENT); #endif memset(heap_addr,0,size); __wkspace_heap_size = __lwp_heap_init(&__wkspace_heap,heap_addr,size,PPC_ALIGNMENT); diff --git a/libogc/network_wii.c b/libogc/network_wii.c index 26a7d4bd..23b7fefd 100644 --- a/libogc/network_wii.c +++ b/libogc/network_wii.c @@ -259,7 +259,7 @@ static s32 NetCreateHeap(void) return IPC_OK; } - net_heap_ptr = SYS_AllocArena2MemHi(NET_HEAP_SIZE, 32); + net_heap_ptr = SYS_AllocArenaMem2Hi(NET_HEAP_SIZE, 32); if(!net_heap_ptr) { _CPU_ISR_Restore(level); diff --git a/libogc/system.c b/libogc/system.c index 7975a163..a4638138 100644 --- a/libogc/system.c +++ b/libogc/system.c @@ -1165,10 +1165,7 @@ void SYS_ResetSystem(s32 reset,u32 reset_code,s32 force_menu) __PADDisableRecalibration(ret); } -#endif - -#if defined(HW_RVL) - +#elif defined(HW_RVL) void SYS_ResetSystem(s32 reset,u32 reset_code,s32 force_menu) { u32 ret = 0; @@ -1310,7 +1307,7 @@ u32 SYS_GetArena1Size(void) return size; } -void* SYS_AllocArena1MemLo(u32 size,u32 align) +void* SYS_AllocArenaMem1Lo(u32 size,u32 align) { u32 level; void *arenalo,*ptr; @@ -1329,7 +1326,7 @@ void* SYS_AllocArena1MemLo(u32 size,u32 align) return ptr; } -void* SYS_AllocArena1MemHi(u32 size,u32 align) +void* SYS_AllocArenaMem1Hi(u32 size,u32 align) { u32 level; void *arenahi,*ptr; @@ -1347,7 +1344,36 @@ void* SYS_AllocArena1MemHi(u32 size,u32 align) return ptr; } -#if defined(HW_RVL) +#if defined(HW_DOL) +u32 SYS_GetPhysicalMem1Size(void) +{ + u32 size; + size = *((u32*)0x80000028); + return size; +} + +u32 SYS_GetSimulatedMem1Size(void) +{ + u32 size; + size = *((u32*)0x800000f0); + if(!size) size = *((u32*)0x80000028); + return size; +} +#elif defined(HW_RVL) +u32 SYS_GetPhysicalMem1Size(void) +{ + u32 size; + size = *((u32*)0x80003100); + return size; +} + +u32 SYS_GetSimulatedMem1Size(void) +{ + u32 size; + size = *((u32*)0x80003104); + return size; +} + void SYS_SetArena2Lo(void *newLo) { u32 level; @@ -1401,7 +1427,7 @@ u32 SYS_GetArena2Size(void) return size; } -void* SYS_AllocArena2MemLo(u32 size,u32 align) +void* SYS_AllocArenaMem2Lo(u32 size,u32 align) { u32 level; void *arenalo,*ptr; @@ -1420,7 +1446,7 @@ void* SYS_AllocArena2MemLo(u32 size,u32 align) return ptr; } -void* SYS_AllocArena2MemHi(u32 size,u32 align) +void* SYS_AllocArenaMem2Hi(u32 size,u32 align) { u32 level; void *arenahi,*ptr; @@ -1437,6 +1463,20 @@ void* SYS_AllocArena2MemHi(u32 size,u32 align) _CPU_ISR_Restore(level); return ptr; } + +u32 SYS_GetPhysicalMem2Size(void) +{ + u32 size; + size = *((u32*)0x80003118); + return size; +} + +u32 SYS_GetSimulatedMem2Size(void) +{ + u32 size; + size = *((u32*)0x8000311c); + return size; +} #endif void SYS_ProtectRange(u32 chan,void *addr,u32 bytes,u32 cntrl) @@ -1462,7 +1502,6 @@ void SYS_ProtectRange(u32 chan,void *addr,u32 bytes,u32 cntrl) if(cntrl==SYS_PROTECTRDWR) __MaskIrq(IRQMASK(chan)); - _CPU_ISR_Restore(level); } } diff --git a/libogc/usbstorage.c b/libogc/usbstorage.c index e513f823..3fb800cd 100644 --- a/libogc/usbstorage.c +++ b/libogc/usbstorage.c @@ -209,7 +209,7 @@ s32 USBStorage_Initialize(void) _CPU_ISR_Disable(level); if(!arena_ptr) { - arena_ptr = SYS_AllocArena2MemHi(HEAP_SIZE, 32); + arena_ptr = SYS_AllocArenaMem2Hi(HEAP_SIZE, 32); if(!arena_ptr) { _CPU_ISR_Restore(level); return IPC_ENOMEM; diff --git a/lwbt/physbusif.c b/lwbt/physbusif.c index 8be0da4f..f39468d8 100644 --- a/lwbt/physbusif.c +++ b/lwbt/physbusif.c @@ -175,7 +175,7 @@ static s32 __initUsbIOBuffer(struct memb_blks *blk,u32 buf_size,u32 num_bufs) u8 *ptr = NULL; len = ((MEM_ALIGN_SIZE(buf_size)+sizeof(u32))*num_bufs); - ptr = (u8*)SYS_AllocArena2MemHi(len,32); + ptr = (u8*)SYS_AllocArenaMem2Hi(len,32); if(ptr==NULL) return -4; blk->size = buf_size;