diff options
author | red031000 <rubenru09@aol.com> | 2020-06-14 17:32:24 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2020-06-14 17:34:02 +0100 |
commit | 7a7bce2bc77bf7886916787cb09f6d39704818c3 (patch) | |
tree | e707a1371a93def4ae868296b0f3415c0c0ef6bb | |
parent | 1406a7a34713f0305160583b056721a5dd525df7 (diff) |
arm7 OS_spinLock
-rw-r--r-- | arm7/asm/OS_spinLock.s | 278 | ||||
-rw-r--r-- | arm7/lib/include/MI_dma.h | 6 | ||||
-rw-r--r-- | arm7/lib/include/OS_spinLock.h | 28 | ||||
-rw-r--r-- | arm7/lib/include/mmap.h | 2 | ||||
-rw-r--r-- | arm7/lib/include/syscall.h | 6 | ||||
-rw-r--r-- | arm7/lib/src/OS_spinLock.c | 192 | ||||
-rw-r--r-- | arm7/lib/src/OS_system.c | 3 | ||||
-rw-r--r-- | arm9/lib/include/MI_dma.h | 8 | ||||
-rw-r--r-- | arm9/lib/include/OS_spinLock.h | 13 | ||||
-rw-r--r-- | arm9/lib/include/mmap.h | 1 | ||||
-rw-r--r-- | arm9/lib/include/syscall.h | 6 | ||||
-rw-r--r-- | arm9/lib/src/OS_spinLock.c | 4 | ||||
-rw-r--r-- | include/nitro/MI_dma_shared.h (renamed from include/nitro/dma.h) | 16 | ||||
-rw-r--r-- | include/nitro/OS_spinLock_shared.h | 24 | ||||
-rw-r--r-- | include/nitro/mmap_shared.h | 2 |
15 files changed, 286 insertions, 303 deletions
diff --git a/arm7/asm/OS_spinLock.s b/arm7/asm/OS_spinLock.s deleted file mode 100644 index bb15916e..00000000 --- a/arm7/asm/OS_spinLock.s +++ /dev/null @@ -1,278 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .bss - - .global _03807780 -_03807780: ;0x03807780 - .space 0x03807784 - 0x03807780 - - .section .text - - arm_func_start OS_UnLockCartridge -OS_UnLockCartridge: ; 0x037F8A18 - ldr r1, _037F8A20 ; =OS_UnlockCartridge - bx r1 -_037F8A20: .word OS_UnlockCartridge - - arm_func_start OS_GetLockID -OS_GetLockID: ; 0x037F8A24 - ldr r3, _037F8AB4 ; =0x027FFFB8 - ldr r1, [r3] - mov r2, #0 - mov r0, #-2147483648 ; 0x80000000 -_037F8A34: - tst r1, r0 - bne _037F8A50 - add r2, r2, #1 - cmp r2, #32 - beq _037F8A50 - mov r0, r0, lsr #1 - b _037F8A34 -_037F8A50: - cmp r2, #32 - movne r0, #128 ; 0x80 - bne _037F8A98 - add r3, r3, #4 - ldr r1, [r3] - mov r2, #0 - mov r0, #-2147483648 ; 0x80000000 -_037F8A6C: - tst r1, r0 - bne _037F8A88 - add r2, r2, #1 - cmp r2, #32 - beq _037F8A88 - mov r0, r0, lsr #1 - b _037F8A6C -_037F8A88: - cmp r2, #32 - ldr r0, _037F8AB8 ; =0xFFFFFFFD - bxeq lr - mov r0, #160 ; 0xa0 -_037F8A98: - add r0, r0, r2 - mov r1, #-2147483648 ; 0x80000000 - mov r1, r1, lsr r2 - ldr r2, [r3] - bic r2, r2, r1 - str r2, [r3] - bx lr -_037F8AB4: .word 0x027FFFB8 -_037F8AB8: .word 0xFFFFFFFD - - arm_func_start OS_ReleaseLockID -OS_ReleaseLockID: ; 0x037F8ABC - ldr r3, _037F8AE8 ; =0x027FFFB8 - cmp r0, #160 ; 0xa0 - addpl r3, r3, #4 - subpl r0, r0, #160 ; 0xa0 - submi r0, r0, #128 ; 0x80 - mov r1, #-2147483648 ; 0x80000000 - mov r1, r1, lsr r0 - ldr r2, [r3] - orr r2, r2, r1 - str r2, [r3] - bx lr -_037F8AE8: .word 0x027FFFB8 - - arm_func_start OS_ReadOwnerOfLockWord -OS_ReadOwnerOfLockWord: ; 0x037F8AEC - ldrh r0, [r0, #4] - bx lr - - arm_func_start OSi_FreeCartridgeBus -OSi_FreeCartridgeBus: ;0x037F8AF4 - bx lr - - arm_func_start OSi_AllocateCartridgeBus -OSi_AllocateCartridgeBus: ;0x037F8AF8 - bx lr - - arm_func_start OS_TryLockCartridge -OS_TryLockCartridge: ; 0x037F8AFC - ldr r1, _037F8B10 ; =0x027FFFE8 - ldr r2, _037F8B14 ; =OSi_AllocateCartridgeBus - mov r3, #1 - ldr ip, _037F8B18 ; =OSi_DoTryLockByWord - bx ip -_037F8B10: .word 0x027FFFE8 -_037F8B14: .word OSi_AllocateCartridgeBus -_037F8B18: .word OSi_DoTryLockByWord - - arm_func_start OS_UnlockCartridge -OS_UnlockCartridge: ; 0x037F8B1C - ldr r1, _037F8B30 ; =0x027FFFE8 - ldr r2, _037F8B34 ; =OSi_FreeCartridgeBus - mov r3, #1 - ldr ip, _037F8B38 ; =OSi_DoUnlockByWord - bx ip -_037F8B30: .word 0x027FFFE8 -_037F8B34: .word OSi_FreeCartridgeBus -_037F8B38: .word OSi_DoUnlockByWord - - arm_func_start OS_LockCartridge -OS_LockCartridge: ; 0x037F8B3C - ldr r1, _037F8B50 ; =0x027FFFE8 - ldr r2, _037F8B54 ; =OSi_AllocateCartridgeBus - mov r3, #1 - ldr ip, _037F8B58 ; =OSi_DoLockByWord - bx ip -_037F8B50: .word 0x027FFFE8 -_037F8B54: .word OSi_AllocateCartridgeBus -_037F8B58: .word OSi_DoLockByWord - - arm_func_start OSi_DoTryLockByWord -OSi_DoTryLockByWord: ; 0x037F8B5C - stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - sub sp, sp, #4 - mov r9, r0 - mov r8, r1 - mov r7, r2 - movs r6, r3 - beq _037F8B84 - bl OS_DisableInterrupts_IrqAndFiq - mov r5, r0 - b _037F8B8C -_037F8B84: - bl OS_DisableInterrupts - mov r5, r0 -_037F8B8C: - mov r0, r9 - mov r1, r8 - bl MI_SwapWord - movs r4, r0 - bne _037F8BB4 - cmp r7, #0 - beq _037F8BB0 - mov lr, pc - bx r7 -_037F8BB0: - strh r9, [r8, #4] -_037F8BB4: - cmp r6, #0 - beq _037F8BC8 - mov r0, r5 - bl OS_RestoreInterrupts_IrqAndFiq - b _037F8BD0 -_037F8BC8: - mov r0, r5 - bl OS_RestoreInterrupts -_037F8BD0: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, r8, r9, lr} - bx lr - - arm_func_start OSi_DoUnlockByWord -OSi_DoUnlockByWord: ; 0x037F8BE0 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #4 - mov r7, r1 - mov r6, r2 - mov r5, r3 - ldrh r1, [r7, #4] - cmp r0, r1 - mvnne r0, #1 - bne _037F8C60 - cmp r5, #0 - beq _037F8C18 - bl OS_DisableInterrupts_IrqAndFiq - mov r4, r0 - b _037F8C20 -_037F8C18: - bl OS_DisableInterrupts - mov r4, r0 -_037F8C20: - mov r0, #0 - strh r0, [r7, #4] - cmp r6, #0 - beq _037F8C38 - mov lr, pc - bx r6 -_037F8C38: - mov r0, #0 - str r0, [r7] - cmp r5, #0 - beq _037F8C54 - mov r0, r4 - bl OS_RestoreInterrupts_IrqAndFiq - b _037F8C5C -_037F8C54: - mov r0, r4 - bl OS_RestoreInterrupts -_037F8C5C: - mov r0, #0 -_037F8C60: - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, lr} - bx lr - - arm_func_start OSi_DoLockByWord -OSi_DoLockByWord: ; 0x037F8C6C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - mov r4, #1024 ; 0x400 - b _037F8C90 -_037F8C88: - mov r0, r4 - bl FUN_037F8CB4 -_037F8C90: - mov r0, r8 - mov r1, r7 - mov r2, r6 - mov r3, r5 - bl OSi_DoTryLockByWord - cmp r0, #0 - bgt _037F8C88 - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr - - arm_func_start FUN_037F8CB4 -FUN_037F8CB4: ; 0x037F8CB4 ;part of the above func? - ldr ip, _037F8CBC ; =SVC_WaitByLoop - bx ip -_037F8CBC: .word SVC_WaitByLoop - - arm_func_start OS_InitLock -OS_InitLock: ; 0x037F8CC0 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - ldr r0, _037F8D38 ; =_03807780 - ldr r1, [r0] - cmp r1, #0 - bne _037F8D2C - mov r1, #1 - str r1, [r0] - mov r0, #0 - ldr r4, _037F8D3C ; =0x027FFFF0 - strh r0, [r4, #6] - mov r5, #1024 ; 0x400 - b _037F8CFC -_037F8CF4: - mov r0, r5 - bl FUN_037F8CB4 -_037F8CFC: - ldrh r0, [r4, #4] - cmp r0, #127 ; 0x7f - bne _037F8CF4 - mvn r1, #0 - ldr r0, _037F8D40 ; =0x027FFFB8 - str r1, [r0] - mov r0, #65536 ; 0x10000 - rsb r1, r0, #0 - ldr r0, _037F8D44 ; =0x027FFFBC - str r1, [r0] - mov r0, #191 ; 0xbf - strh r0, [r4, #6] -_037F8D2C: - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_037F8D38: .word _03807780 -_037F8D3C: .word 0x027FFFF0 -_037F8D40: .word 0x027FFFB8 -_037F8D44: .word 0x027FFFBC diff --git a/arm7/lib/include/MI_dma.h b/arm7/lib/include/MI_dma.h index b728f814..e65f0b89 100644 --- a/arm7/lib/include/MI_dma.h +++ b/arm7/lib/include/MI_dma.h @@ -1,7 +1,7 @@ -#ifndef GUARD_MI_DMA_H -#define GUARD_MI_DMA_H +#ifndef POKEDIAMOND_ARM7_MI_DMA_H +#define POKEDIAMOND_ARM7_MI_DMA_H -#include "nitro/dma.h" +#include "nitro/MI_dma_shared.h" #include "nitro/types.h" void MI_StopDma(u32 channel); diff --git a/arm7/lib/include/OS_spinLock.h b/arm7/lib/include/OS_spinLock.h new file mode 100644 index 00000000..f7366d1f --- /dev/null +++ b/arm7/lib/include/OS_spinLock.h @@ -0,0 +1,28 @@ +#ifndef POKEDIAMOND_ARM7_OS_SPINLOCK_H +#define POKEDIAMOND_ARM7_OS_SPINLOCK_H + +#include "consts.h" +#include "nitro/OS_spinLock_shared.h" +#include "syscall.h" + +void OS_InitLock(void); +void FUN_037F8CB4(s32 ct); +s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), BOOL disableFiq); +s32 OSi_DoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), BOOL disableFIQ); +s32 OSi_DoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), BOOL disableFiq); +s32 OS_LockCartridge(u16 lockID); +s32 OS_UnlockCartridge(u16 lockID); +s32 OS_TryLockCartridge(u16 lockID); +void OSi_AllocateCartridgeBus(void); +void OSi_FreeCartridgeBus(void); +u16 OS_ReadOwnerOfLockWord(OSLockWord * lock); +s32 OS_UnLockCartridge(u16 lockID); +s32 OS_GetLockID(void); +void OS_ReleaseLockID(register u16 lockID); + +static inline void OSi_WaitByLoop(void) +{ + FUN_037F8CB4(0x1000 / 4); +} + +#endif //POKEDIAMOND_ARM7_OS_SPINLOCK_H diff --git a/arm7/lib/include/mmap.h b/arm7/lib/include/mmap.h index 24d15ad7..064938e2 100644 --- a/arm7/lib/include/mmap.h +++ b/arm7/lib/include/mmap.h @@ -23,4 +23,6 @@ #define HW_PRV_WRAM_SYSRV (HW_PRV_WRAM + HW_PRV_WRAM_SIZE - HW_PRV_WRAM_SYSRV_SIZE) +#define HW_LOCK_ID_FLAG_SUB (HW_MAIN_MEM + 0x007fffb8) + #endif //POKEDIAMOND_ARM7_MMAP_H diff --git a/arm7/lib/include/syscall.h b/arm7/lib/include/syscall.h new file mode 100644 index 00000000..55462cc7 --- /dev/null +++ b/arm7/lib/include/syscall.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_ARM7_SYSCALL_H +#define POKEDIAMOND_ARM7_SYSCALL_H + +void SVC_WaitByLoop(u32 ct); + +#endif //POKEDIAMOND_ARM7_SYSCALL_H diff --git a/arm7/lib/src/OS_spinLock.c b/arm7/lib/src/OS_spinLock.c new file mode 100644 index 00000000..2857de05 --- /dev/null +++ b/arm7/lib/src/OS_spinLock.c @@ -0,0 +1,192 @@ +#include "function_target.h" +#include "OS_spinLock.h" +#include "OS_system.h" +#include "MI_swap.h" + +ARM_FUNC void OS_InitLock(void) +{ + static BOOL isInitialized = FALSE; + + if (isInitialized) + return; + isInitialized = TRUE; + + OSLockWord *lockp = (OSLockWord *)HW_INIT_LOCK_BUF; + + lockp->extension = 0; + while (lockp->ownerID != 0x7f) + { + OSi_WaitByLoop(); + } + + ((u32 *)HW_LOCK_ID_FLAG_SUB)[0] = 0xffffffff; + ((u32 *)HW_LOCK_ID_FLAG_SUB)[1] = 0xffff0000; + + lockp->extension = 0xbf; +} + +ARM_FUNC void FUN_037F8CB4(s32 ct) +{ + SVC_WaitByLoop((u32)ct); //todo this should be linker generated, figure out why it broke +} + +ARM_FUNC s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), + BOOL disableFiq) +{ + s32 lastLockFlag; + while ((lastLockFlag = OSi_DoTryLockByWord(lockId, lockp, ctrlFuncp, disableFiq)) > 0) { + OSi_WaitByLoop(); + } + + return lastLockFlag; +} + +ARM_FUNC s32 OSi_DoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), + BOOL disableFIQ) +{ + if (lockID != lockp->ownerID) + { + return -2; + } + + OSIntrMode lastIntrMode = (disableFIQ) ? OS_DisableInterrupts_IrqAndFiq() : OS_DisableInterrupts(); + lockp->ownerID = 0; + if (ctrlFuncp) + { + ctrlFuncp(); + } + lockp->lockFlag = 0; + if (disableFIQ) + { + (void)OS_RestoreInterrupts_IrqAndFiq(lastIntrMode); + } + else + { + (void)OS_RestoreInterrupts(lastIntrMode); + } + return 0; +} + +ARM_FUNC s32 OSi_DoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void), + BOOL disableFiq) +{ + OSIntrMode lastIntrMode = (disableFiq) ? OS_DisableInterrupts_IrqAndFiq() : OS_DisableInterrupts(); + + s32 lastLockFlag = (s32)MI_SwapWord(lockID, (u32 *)&lockp->lockFlag); + + if (!lastLockFlag) + { + if (ctrlFuncp) + { + ctrlFuncp(); + } + lockp->ownerID = lockID; + } + + if (disableFiq) + { + (void)OS_RestoreInterrupts_IrqAndFiq(lastIntrMode); + } + else + { + (void)OS_RestoreInterrupts(lastIntrMode); + } + + return lastLockFlag; +} + +ARM_FUNC s32 OS_LockCartridge(u16 lockID) +{ + return OSi_DoLockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_AllocateCartridgeBus, TRUE); +} + +ARM_FUNC s32 OS_UnlockCartridge(u16 lockID) +{ + return OSi_DoUnlockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_FreeCartridgeBus, TRUE); +} + +ARM_FUNC s32 OS_TryLockCartridge(u16 lockID) +{ + return OSi_DoTryLockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_AllocateCartridgeBus, TRUE); +} + +ARM_FUNC void OSi_AllocateCartridgeBus(void) +{ + //noop +} + +ARM_FUNC void OSi_FreeCartridgeBus(void) +{ + //noop +} + +ARM_FUNC u16 OS_ReadOwnerOfLockWord(OSLockWord * lock) +{ + return lock->ownerID; +} + +ARM_FUNC asm s32 OS_UnLockCartridge(u16 lockID) +{ + ldr r1, =OS_UnlockCartridge + bx r1 +} + +ARM_FUNC asm s32 OS_GetLockID(void) +{ + ldr r3, =HW_LOCK_ID_FLAG_SUB + ldr r1, [r3] + mov r2, #0 + mov r0, #0x80000000 +_037F8A34: + tst r1, r0 + bne _037F8A50 + add r2, r2, #1 + cmp r2, #32 + beq _037F8A50 + mov r0, r0, lsr #1 + b _037F8A34 +_037F8A50: + cmp r2, #32 + movne r0, #0x80 + bne _037F8A98 + add r3, r3, #4 + ldr r1, [r3] + mov r2, #0 + mov r0, #0x80000000 +_037F8A6C: + tst r1, r0 + bne _037F8A88 + add r2, r2, #1 + cmp r2, #32 + beq _037F8A88 + mov r0, r0, lsr #1 + b _037F8A6C +_037F8A88: + cmp r2, #32 + ldr r0, =0xFFFFFFFD + bxeq lr + mov r0, #160 +_037F8A98: + add r0, r0, r2 + mov r1, #0x80000000 + mov r1, r1, lsr r2 + ldr r2, [r3] + bic r2, r2, r1 + str r2, [r3] + bx lr +} + +ARM_FUNC asm void OS_ReleaseLockID(register u16 lockID) +{ + ldr r3, =HW_LOCK_ID_FLAG_SUB + cmp r0, #0xa0 + addpl r3, r3, #0x4 + subpl r0, r0, #0xa0 + submi r0, r0, #0x80 + mov r1, #0x80000000 + mov r1, r1, lsr r0 + ldr r2, [r3, #0x0] + orr r2, r2, r1 + str r2, [r3, #0x0] + bx lr +} diff --git a/arm7/lib/src/OS_system.c b/arm7/lib/src/OS_system.c index 11417e91..503bd854 100644 --- a/arm7/lib/src/OS_system.c +++ b/arm7/lib/src/OS_system.c @@ -1,7 +1,6 @@ #include "function_target.h" #include "OS_system.h" - -extern void FUN_037F8CB4(s32 count); +#include "OS_spinLock.h" ARM_FUNC asm OSIntrMode OS_EnableInterrupts(void) { diff --git a/arm9/lib/include/MI_dma.h b/arm9/lib/include/MI_dma.h index eddcedbb..15dc2c06 100644 --- a/arm9/lib/include/MI_dma.h +++ b/arm9/lib/include/MI_dma.h @@ -1,6 +1,8 @@ -#ifndef NITRO_MI_DMA_H_ -#define NITRO_MI_DMA_H_ +#ifndef POKEDIAMOND_ARM9_MI_DMA_H +#define POKEDIAMOND_ARM9_MI_DMA_H + +#include "nitro/MI_dma_shared.h" typedef void (*MIDmaCallback)(void *); -#endif //NITRO_MI_DMA_H_ +#endif //POKEDIAMOND_ARM9_MI_DMA_H diff --git a/arm9/lib/include/OS_spinLock.h b/arm9/lib/include/OS_spinLock.h index 5dc47522..a5d27585 100644 --- a/arm9/lib/include/OS_spinLock.h +++ b/arm9/lib/include/OS_spinLock.h @@ -1,15 +1,10 @@ -#ifndef POKEDIAMOND_OS_SPINLOCK_H -#define POKEDIAMOND_OS_SPINLOCK_H +#ifndef POKEDIAMOND_ARM9_OS_SPINLOCK_H +#define POKEDIAMOND_ARM9_OS_SPINLOCK_H #include "nitro/types.h" +#include "nitro/OS_spinLock_shared.h" #include "syscall.h" -typedef volatile struct OSLockWord { - u32 lockFlag; - u16 ownerID; - u16 extension; -} OSLockWord; - static inline void OSi_WaitByLoop(void) { SVC_WaitByLoop(0x1000 / 4); @@ -38,4 +33,4 @@ s32 OS_UnLockCartridge(u16 lockID); s32 OS_GetLockID(void); void OS_ReleaseLockID(register u16 lockID); -#endif //POKEDIAMOND_OS_SPINLOCK_H +#endif //POKEDIAMOND_ARM9_OS_SPINLOCK_H diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h index 6a5f23c5..5967695c 100644 --- a/arm9/lib/include/mmap.h +++ b/arm9/lib/include/mmap.h @@ -49,7 +49,6 @@ extern u32 SDK_AUTOLOAD_DTCM_START[]; #define HW_LOCK_ID_FLAG_MAIN (HW_MAIN_MEM + 0x007fffb0) #define HW_SHARED_LOCK_BUF (HW_MAIN_MEM + 0x007fffc0) #define HW_CARD_LOCK_BUF (HW_MAIN_MEM + 0x007fffe0) -#define HW_CTRDG_LOCK_BUF (HW_MAIN_MEM + 0x007fffe8) #define HW_BUTTON_XY_BUF (HW_MAIN_MEM + 0x007fffa8) diff --git a/arm9/lib/include/syscall.h b/arm9/lib/include/syscall.h index 8561cabe..427134a7 100644 --- a/arm9/lib/include/syscall.h +++ b/arm9/lib/include/syscall.h @@ -1,6 +1,6 @@ -#ifndef NITRO_SYSCALL_H_ -#define NITRO_SYSCALL_H_ +#ifndef POKEDIAMOND_ARM9_SYSCALL_H +#define POKEDIAMOND_ARM9_SYSCALL_H void SVC_WaitByLoop(u32 ct); -#endif //NITRO_SYSCALL_H_ +#endif //POKEDIAMOND_ARM9_SYSCALL_H diff --git a/arm9/lib/src/OS_spinLock.c b/arm9/lib/src/OS_spinLock.c index 5050a7bd..c0398be9 100644 --- a/arm9/lib/src/OS_spinLock.c +++ b/arm9/lib/src/OS_spinLock.c @@ -21,7 +21,7 @@ ARM_FUNC void OS_InitLock(void) } isInitialized = TRUE; - OSLockWord* lockp = (OSLockWord *)0x027FFFF0; + OSLockWord* lockp = (OSLockWord *)HW_INIT_LOCK_BUF; lockp->lockFlag = 0; @@ -45,7 +45,7 @@ ARM_FUNC void OS_InitLock(void) (void)OS_TryLockByWord(0x7f, lockp, NULL); } -ARM_FUNC s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), //should be static +ARM_FUNC s32 OSi_DoLockByWord(u16 lockId, OSLockWord *lockp, void (*ctrlFuncp) (void), BOOL disableFiq) { s32 lastLockFlag; diff --git a/include/nitro/dma.h b/include/nitro/MI_dma_shared.h index 32944cb3..e839417a 100644 --- a/include/nitro/dma.h +++ b/include/nitro/MI_dma_shared.h @@ -1,5 +1,17 @@ -#ifndef GUARD_DMA_H -#define GUARD_DMA_H +/* + * NOTE: + * This file is shared between ARM9 and ARM7 + * DO NOT PUT PROC SPECIFIC CODE IN HERE + * Thank You! + */ + +/* + * DO NOT INCLUDE THIS FILE DIRECTLY + * Include MI_dma.h from the specific proc's lib + */ + +#ifndef GUARD_DMA_SHARED_H +#define GUARD_DMA_SHARED_H #define REG_ADDR_DMA0SAD 0x040000b0 diff --git a/include/nitro/OS_spinLock_shared.h b/include/nitro/OS_spinLock_shared.h new file mode 100644 index 00000000..31f0be32 --- /dev/null +++ b/include/nitro/OS_spinLock_shared.h @@ -0,0 +1,24 @@ +/* + * NOTE: + * This file is shared between ARM9 and ARM7 + * DO NOT PUT PROC SPECIFIC CODE IN HERE + * Thank You! + */ + +/* + * DO NOT INCLUDE THIS FILE DIRECTLY + * Include OS_spinLock.h from the specific proc's lib + */ + +#ifndef POKEDIAMOND_OS_SPINLOCK_SHARED_H +#define POKEDIAMOND_OS_SPINLOCK_SHARED_H + +#include "nitro/types.h" + +typedef volatile struct OSLockWord { + u32 lockFlag; + u16 ownerID; + u16 extension; +} OSLockWord; + +#endif //POKEDIAMOND_OS_SPINLOCK_SHARED_H diff --git a/include/nitro/mmap_shared.h b/include/nitro/mmap_shared.h index 587887bb..f7ba4fb4 100644 --- a/include/nitro/mmap_shared.h +++ b/include/nitro/mmap_shared.h @@ -20,6 +20,8 @@ #define HW_WM_BOOT_BUF (HW_MAIN_MEM + 0x007ffc40) #define HW_ARENA_INFO_BUF (HW_MAIN_MEM + 0x007ffda0) +#define HW_CTRDG_LOCK_BUF (HW_MAIN_MEM + 0x007fffe8) +#define HW_INIT_LOCK_BUF (HW_MAIN_MEM + 0x007ffff0) #define HW_MAIN_MEM_MAIN_END (HW_MAIN_MEM + HW_MAIN_MEM_MAIN_SIZE) #endif //POKEDIAMOND_MMAP_SHARED_H |