summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2020-05-08 01:12:38 +0100
committerred031000 <rubenru09@aol.com>2020-05-08 01:12:38 +0100
commit4d444cabe0a241afd7d12e565c6a32f866b260bd (patch)
treed3a3270ca2c2f3895378d1681350bc7636ed0c10
parentdc5e4e927b1f87f69246af218e462bc09c87dda6 (diff)
match OSi_EnterDmaCallback
-rw-r--r--arm9/asm/OS_interrupt_asm.s23
-rw-r--r--arm9/lib/include/OS_interrupt.h1
-rw-r--r--arm9/lib/src/OS_interrupt.c10
3 files changed, 11 insertions, 23 deletions
diff --git a/arm9/asm/OS_interrupt_asm.s b/arm9/asm/OS_interrupt_asm.s
index d60f0175..ea17cf8d 100644
--- a/arm9/asm/OS_interrupt_asm.s
+++ b/arm9/asm/OS_interrupt_asm.s
@@ -116,26 +116,3 @@ OSi_EnterTimerCallback: ; 0x020C9EC8
_020C9F08: .word OSi_IrqCallbackInfo+0x30
_020C9F0C: .word OSi_IrqCallbackInfo+0x38
_020C9F10: .word OSi_IrqCallbackInfo+0x34
-
- arm_func_start OSi_EnterDmaCallback
-OSi_EnterDmaCallback: ; 0x020C9F14
- stmdb sp!, {r4-r6,lr}
- mov r3, #0xc
- mul r6, r0, r3
- ldr ip, _020C9F54 ; =OSi_IrqCallbackInfo
- add r4, r0, #0x8
- mov r5, #0x1
- mov r0, r5, lsl r4
- ldr r3, _020C9F58 ; =0x021D3424
- str r1, [r12, r6]
- str r2, [r3, r6]
- bl OS_EnableIrqMask
- and r1, r0, r5, lsl r4
- ldr r0, _020C9F5C ; =0x021D3420
- str r1, [r0, r6]
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020C9F54: .word OSi_IrqCallbackInfo
-_020C9F58: .word OSi_IrqCallbackInfo + 8
-_020C9F5C: .word OSi_IrqCallbackInfo + 4
diff --git a/arm9/lib/include/OS_interrupt.h b/arm9/lib/include/OS_interrupt.h
index acac12aa..b8425b4e 100644
--- a/arm9/lib/include/OS_interrupt.h
+++ b/arm9/lib/include/OS_interrupt.h
@@ -24,5 +24,6 @@ extern OSIrqCallbackInfo OSi_IrqCallbackInfo[7+1];
void OS_InitIrqTable();
void OS_SetIrqFunction(OSIrqMask intrBit, OSIrqFunction function);
OSIrqFunction OS_GetIrqFunction(OSIrqMask intrBit);
+void OSi_EnterDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg);
#endif //POKEDIAMOND_OS_INTERRUPT_H
diff --git a/arm9/lib/src/OS_interrupt.c b/arm9/lib/src/OS_interrupt.c
index d45f46cf..f7a6d005 100644
--- a/arm9/lib/src/OS_interrupt.c
+++ b/arm9/lib/src/OS_interrupt.c
@@ -10,6 +10,7 @@
#pragma optimize_for_size on
extern OSThreadQueue OSi_IrqThreadQueue;
+extern OSIrqMask OS_EnableIrqMask(OSIrqMask intr);
ARM_FUNC void OS_InitIrqTable() {
OS_InitThreadQueue(&OSi_IrqThreadQueue);
@@ -67,3 +68,12 @@ ARM_FUNC OSIrqFunction OS_GetIrqFunction(OSIrqMask intrBit) {
} while (i < 0x16);
return 0;
}
+
+ARM_FUNC void OSi_EnterDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg)
+{
+ OSIrqMask mask = 1UL << (dmaNo + 8);
+ OSi_IrqCallbackInfo[dmaNo].func = callback;
+ OSi_IrqCallbackInfo[dmaNo].arg = arg;
+
+ OSi_IrqCallbackInfo[dmaNo].enable = OS_EnableIrqMask(mask) & mask;
+}