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
)
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
);