Fix libogc hardware lighting (GX_SetChanCtrl) - patch from https://sourceforge.net...
[libogc.git] / libogc / lwp_wkspace.c
bloba9d92d49686cd0f3fd191f061c5f7253a55bf260
1 #include <stdlib.h>
2 #include <system.h>
3 #include <string.h>
4 #include <asm.h>
5 #include <processor.h>
6 #include "system.h"
7 #include "lwp_wkspace.h"
9 #define ROUND32UP(v) (((u32)(v)+31)&~31)
11 heap_cntrl __wkspace_heap;
12 static heap_iblock __wkspace_iblock;
13 static u32 __wkspace_heap_size = 0;
15 u32 __lwp_wkspace_heapsize()
17 return __wkspace_heap_size;
20 u32 __lwp_wkspace_heapfree()
22 __lwp_heap_getinfo(&__wkspace_heap,&__wkspace_iblock);
23 return __wkspace_iblock.free_size;
26 u32 __lwp_wkspace_heapused()
28 __lwp_heap_getinfo(&__wkspace_heap,&__wkspace_iblock);
29 return __wkspace_iblock.used_size;
32 void __lwp_wkspace_init(u32 size)
34 u32 arLo,level,dsize;
36 // Get current ArenaLo and adjust to 32-byte boundary
37 _CPU_ISR_Disable(level);
38 arLo = ROUND32UP(SYS_GetArenaLo());
39 dsize = (size - (arLo - (u32)SYS_GetArenaLo()));
40 SYS_SetArenaLo((void*)(arLo+dsize));
41 _CPU_ISR_Restore(level);
43 memset((void*)arLo,0,dsize);
44 __wkspace_heap_size += __lwp_heap_init(&__wkspace_heap,(void*)arLo,dsize,PPC_ALIGNMENT);