summaryrefslogtreecommitdiff
path: root/arm9/lib/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/lib/src')
-rw-r--r--arm9/lib/src/OS_cache.c126
-rw-r--r--arm9/lib/src/OS_protectionRegion.c12
-rw-r--r--arm9/lib/src/OS_protectionUnit.c12
-rw-r--r--arm9/lib/src/OS_reset.c5
-rw-r--r--arm9/lib/src/OS_tcm.c6
-rw-r--r--arm9/lib/src/OS_terminate_proc.c2
-rw-r--r--arm9/lib/src/SND_command.c2
-rw-r--r--arm9/lib/src/SND_work.c4
8 files changed, 139 insertions, 30 deletions
diff --git a/arm9/lib/src/OS_cache.c b/arm9/lib/src/OS_cache.c
new file mode 100644
index 00000000..8b202fda
--- /dev/null
+++ b/arm9/lib/src/OS_cache.c
@@ -0,0 +1,126 @@
+#include "OS_cache.h"
+#include "nitro/types.h"
+#include "function_target.h"
+
+ARM_FUNC asm void DC_InvalidateAll(void)
+{
+ mov r0, #0
+ mcr p15, 0, r0, c7, c6, 0 //Invalidate Entire Data Cache
+ bx lr
+}
+
+ARM_FUNC asm void DC_StoreAll(void)
+{
+ mov r1, #0
+
+_020CC0C8:
+ mov r0, #0
+
+_020CC0CC:
+ orr r2, r1, r0
+ mcr p15, 0, r2, c7, c10, 2 //Clean Data Cache Line Set/Index
+ add r0, r0, #32
+ cmp r0, #0x400
+ blt _020CC0CC
+
+ add r1, r1, #0x40000000
+ cmp r1, #0
+ bne _020CC0C8
+
+ bx lr
+}
+
+ARM_FUNC asm void DC_FlushAll(void)
+{
+ mov r12, #0
+ mov r1, #0
+
+_020CC0F8:
+ mov r0, #0
+
+_020CC0FC:
+ orr r2, r1, r0
+ mcr p15, 0, r12, c7, c10, 4 //Drain Write Buffer
+ mcr p15, 0, r2, c7, c14, 2 //Clean and Invalidate Data Cache Line Set/Index
+ add r0, r0, #32
+ cmp r0, #0x400
+ blt _020CC0FC
+
+ add r1, r1, #0x40000000
+ cmp r1, #0
+ bne _020CC0F8
+
+ bx lr
+}
+
+ARM_FUNC asm void DC_InvalidateRange(register void *startAddr, register u32 nBytes)
+{
+ add r1, r1, r0
+ bic r0, r0, #31
+
+_020CC12C:
+ mcr p15, 0, r0, c7, c6, 1 //Invalidated Data Cache Line Virtual Address
+ add r0, r0, #32
+ cmp r0, r1
+ blt _020CC12C
+
+ bx lr
+}
+
+ARM_FUNC asm void DC_StoreRange(register void *startAddr, register u32 nBytes)
+{
+ add r1, r1, r0
+ bic r0, r0, #31
+
+_020CC148:
+ mcr p15, 0, r0, c7, c10, 1 //Clean Data Cache Line Virtual Address
+ add r0, r0, #32
+ cmp r0, r1
+ blt _020CC148
+
+ bx lr
+}
+
+ARM_FUNC asm void DC_FlushRange(register const void *startAddr, register u32 nBytes)
+{
+ mov r12, #0
+ add r1, r1, r0
+ bic r0, r0, #31
+
+_020CC168:
+ mcr p15, 0, r12, c7, c10, 4 //Drain Write Buffer
+ mcr p15, 0, r0, c7, c14, 1 //Clean and Invalidate Data Cache Line Virtual Address
+ add r0, r0, #32
+ cmp r0, r1
+ blt _020CC168
+
+ bx lr
+}
+
+ARM_FUNC asm void DC_WaitWriteBufferEmpty(void)
+{
+ mov r0, #0
+ mcr p15, 0, r0, c7, c10, 4 //Drain Write Buffer
+ bx lr
+}
+
+ARM_FUNC asm void IC_InvalidateAll(void)
+{
+ mov r0, #0
+ mcr p15, 0, r0, c7, c5, 0 //Invalidate Entire Instruction Cache
+ bx lr
+}
+
+ARM_FUNC asm void IC_InvalidateRange(register void *startAddr, register u32 nBytes)
+{
+ add r1, r1, r0
+ bic r0, r0, #31
+
+_020CC1A0:
+ mcr p15, 0, r0, c7, c5, 1 //Invalidate Instruction Cache Line Virtual Address
+ add r0, r0, #32
+ cmp r0, r1
+ blt _020CC1A0
+
+ bx lr
+}
diff --git a/arm9/lib/src/OS_protectionRegion.c b/arm9/lib/src/OS_protectionRegion.c
index 4d6cf974..4b8d8297 100644
--- a/arm9/lib/src/OS_protectionRegion.c
+++ b/arm9/lib/src/OS_protectionRegion.c
@@ -1,27 +1,23 @@
-//
-// Created by red031000 on 2020-04-24.
-//
-
#include "function_target.h"
#include "OS_protectionRegion.h"
ARM_FUNC asm void OS_SetDPermissionsForProtectionRegion(register u32 setMask, register u32 flags)
{
- mrc p15, 0x0, r2, c5, c0, 0x2
+ mrc p15, 0x0, r2, c5, c0, 0x2 //Extended Access Permission Data Protection Region
bic r2, r2, r0
orr r2, r2, r1
- mcr p15, 0x0, r2, c5, c0, 0x2
+ mcr p15, 0x0, r2, c5, c0, 0x2 //Extended Access Permission Data Protection Region
bx lr
}
ARM_FUNC asm void OS_SetProtectionRegion1(u32 param)
{
- mcr p15, 0x0, r0, c6, c1, 0x0
+ mcr p15, 0x0, r0, c6, c1, 0x0 //Protection Unit Data Region 1
bx lr
}
ARM_FUNC asm void OS_SetProtectionRegion2(u32 param)
{
- mcr p15, 0x0, r0, c6, c2, 0x0
+ mcr p15, 0x0, r0, c6, c2, 0x0 //Protection Unit Data Region 2
bx lr
}
diff --git a/arm9/lib/src/OS_protectionUnit.c b/arm9/lib/src/OS_protectionUnit.c
index 6d3b7952..66811a1e 100644
--- a/arm9/lib/src/OS_protectionUnit.c
+++ b/arm9/lib/src/OS_protectionUnit.c
@@ -1,22 +1,18 @@
-//
-// Created by red031000 on 2020-05-24.
-//
-
#include "function_target.h"
#include "OS_protectionUnit.h"
ARM_FUNC asm void OS_EnableProtectionUnit(void)
{
- mrc p15, 0x0, r0, c1, c0, 0x0
+ mrc p15, 0x0, r0, c1, c0, 0x0 //Control Register
orr r0, r0, #0x1
- mcr p15, 0x0, r0, c1, c0, 0x0
+ mcr p15, 0x0, r0, c1, c0, 0x0 //Control Register
bx lr
}
ARM_FUNC asm void OS_DisableProtectionUnit(void)
{
- mrc p15, 0x0, r0, c1, c0, 0x0
+ mrc p15, 0x0, r0, c1, c0, 0x0 //Control Register
bic r0, r0, #0x1
- mcr p15, 0x0, r0, c1, c0, 0x0
+ mcr p15, 0x0, r0, c1, c0, 0x0 //Control Register
bx lr
}
diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c
index 95238f46..5994e643 100644
--- a/arm9/lib/src/OS_reset.c
+++ b/arm9/lib/src/OS_reset.c
@@ -5,6 +5,7 @@
#include "OS_interrupt.h"
#include "OS_system.h"
#include "OS_spinLock.h"
+#include "OS_cache.h"
#include "sections.h"
static u16 OSi_IsInitReset = 0;
@@ -16,10 +17,6 @@ extern void PXI_SetFifoRecvCallback(u32 param1, void* callback);
extern u32 PXI_SendWordByFifo(u32 param1, u32 data, u32 param2);
extern void CARD_LockRom(u16 lockId);
extern void MI_StopDma(u32 dma);
-extern void DC_StoreAll(void);
-extern void DC_InvalidateAll(void);
-extern void IC_InvalidateAll(void);
-extern void DC_WaitWriteBufferEmpty(void);
ARM_FUNC void OS_InitReset(void) {
if (OSi_IsInitReset) {
diff --git a/arm9/lib/src/OS_tcm.c b/arm9/lib/src/OS_tcm.c
index fa06e345..5b6ab552 100644
--- a/arm9/lib/src/OS_tcm.c
+++ b/arm9/lib/src/OS_tcm.c
@@ -1,12 +1,8 @@
-//
-// Created by red031000 on 2020-05-05.
-//
-
#include "OS_tcm.h"
#include "function_target.h"
ARM_FUNC asm u32 OS_GetDTCMAddress(void) {
- mrc p15, 0x0, r0, c9, c1, 0x0
+ mrc p15, 0x0, r0, c9, c1, 0x0 //Data TCM Base
ldr r1, =OSi_TCM_REGION_BASE_MASK
and r0, r0, r1
bx lr
diff --git a/arm9/lib/src/OS_terminate_proc.c b/arm9/lib/src/OS_terminate_proc.c
index c86b85ab..2e5f3fb2 100644
--- a/arm9/lib/src/OS_terminate_proc.c
+++ b/arm9/lib/src/OS_terminate_proc.c
@@ -11,6 +11,6 @@ ARM_FUNC void OS_Terminate(void) {
ARM_FUNC asm void OS_Halt(void) {
mov r0, #0x0
- mcr p15, 0x0, r0, c7, c0, 0x4
+ mcr p15, 0x0, r0, c7, c0, 0x4 //Wait For Interrupt (Halt)
bx lr
}
diff --git a/arm9/lib/src/SND_command.c b/arm9/lib/src/SND_command.c
index 11622761..130a4ebc 100644
--- a/arm9/lib/src/SND_command.c
+++ b/arm9/lib/src/SND_command.c
@@ -1,6 +1,7 @@
#include "SND_command.h"
#include "SND_work.h"
#include "OS_system.h"
+#include "OS_cache.h"
#define SND_CMD_WAIT_QUEUE_COUNT 8
@@ -21,7 +22,6 @@ static struct SNDCommand *sFreeList;
extern s32 PXI_SendWordByFifo(u32, u32, u32);
extern void PXI_SetFifoRecvCallback(u32, void (*)(s32, s32));
extern BOOL PXI_IsCallbackReady(u32, u32);
-extern void DC_FlushRange(void*, u32);
static void InitPXI(void);
static void RequestCommandProc(void);
diff --git a/arm9/lib/src/SND_work.c b/arm9/lib/src/SND_work.c
index a0fb547d..ca9208d6 100644
--- a/arm9/lib/src/SND_work.c
+++ b/arm9/lib/src/SND_work.c
@@ -1,12 +1,10 @@
#include "SND_work.h"
#include "SND_alarm.h"
#include "SND_main.h"
+#include "OS_cache.h"
struct SNDSharedWork *SNDi_SharedWork;
-void DC_InvalidateRange(void *mem, u32 size);
-void DC_FlushRange(void *mem, u32 size);
-
u32 SND_GetPlayerStatus(void) {
DC_InvalidateRange(&SNDi_SharedWork->playerStatus, 4);
return SNDi_SharedWork->playerStatus;