diff options
Diffstat (limited to 'arm9/lib')
-rw-r--r-- | arm9/lib/include/OS_spinLock.h | 2 | ||||
-rw-r--r-- | arm9/lib/src/OS_spinLock.c | 13 |
2 files changed, 15 insertions, 0 deletions
diff --git a/arm9/lib/include/OS_spinLock.h b/arm9/lib/include/OS_spinLock.h index 7711b423..208cb677 100644 --- a/arm9/lib/include/OS_spinLock.h +++ b/arm9/lib/include/OS_spinLock.h @@ -20,6 +20,8 @@ static inline void OSi_WaitByLoop() } void OS_InitLock(); +s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), + BOOL disableFiq); s32 OS_GetLockID(void); #endif //POKEDIAMOND_OS_SPINLOCK_H diff --git a/arm9/lib/src/OS_spinLock.c b/arm9/lib/src/OS_spinLock.c index 46309c42..45e29ab8 100644 --- a/arm9/lib/src/OS_spinLock.c +++ b/arm9/lib/src/OS_spinLock.c @@ -10,6 +10,8 @@ extern void OS_TryLockByWord(u16 param1, OSLockWord* lockp, void* func); extern void OS_UnlockByWord(u16 param1, OSLockWord* lockp, void* func); extern void MIi_CpuClear32(u32 param1, void * addr, u32 length); //not too sure about names +extern s32 OSi_DoTryLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), + BOOL disableFiq); ARM_FUNC void OS_InitLock() { @@ -44,3 +46,14 @@ ARM_FUNC void OS_InitLock() OS_UnlockByWord(0x7e, lockp, NULL); OS_TryLockByWord(0x7f, lockp, NULL); } + +ARM_FUNC s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), //should be static + BOOL disableFiq) +{ + s32 lastLockFlag; + while ((lastLockFlag = OSi_DoTryLockByWord(lockId, lockp, ctrlFuncp, disableFiq)) > 0) { + OSi_WaitByLoop(); + } + + return lastLockFlag; +} |