From ded6f75f143efbef4d8424cc4024aa355615e429 Mon Sep 17 00:00:00 2001 From: red031000 Date: Mon, 19 Oct 2020 20:49:27 +0100 Subject: arm9 CARD_request --- arm9/lib/src/CARD_request.c | 78 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 arm9/lib/src/CARD_request.c (limited to 'arm9/lib/src/CARD_request.c') diff --git a/arm9/lib/src/CARD_request.c b/arm9/lib/src/CARD_request.c new file mode 100644 index 00000000..2d728d14 --- /dev/null +++ b/arm9/lib/src/CARD_request.c @@ -0,0 +1,78 @@ +#include "function_target.h" +#include "CARD_request.h" +#include "OS_cache.h" +#include "OS_system.h" +#include "OS_thread.h" + +extern CARDiCommon cardi_common; + +extern u32 PXI_IsCallbackReady(u32 param1, u32 param2); + +ARM_FUNC void CARDi_OnFifoRecv(PXIFifoTag tag, u32 data, BOOL err) +{ +#pragma unused (data) + if ((tag == PXI_FIFO_TAG_FS) && err) + { + CARDiCommon *const p = &cardi_common; + p->flag &= ~CARD_STAT_REQ; + OS_WakeupThreadDirect(p->cur_th); + } +} + +ARM_FUNC void CARDi_TaskThread(void *arg) +{ +#pragma unused (arg) + CARDiCommon *const p = &cardi_common; + + while (TRUE) + { + OSIntrMode bak_psr = OS_DisableInterrupts(); + while ((p->flag & CARD_STAT_TASK) == 0) + { + p->cur_th = p->thread; + OS_SleepThread(NULL); + } + (void)OS_RestoreInterrupts(bak_psr); + (*p->task_func)(p); + } +} + +ARM_FUNC BOOL CARDi_Request(CARDiCommon *p, s32 req_type, s32 retry_count) +{ + if ((p->flag & CARD_STAT_INIT_CMD) == 0) + { + p->flag |= CARD_STAT_INIT_CMD; + while (!PXI_IsCallbackReady(PXI_FIFO_TAG_FS, PXI_PROC_ARM7)) + { + OS_SpinWait(100); + } + + (void)CARDi_Request(p, CARD_REQ_INIT, 1); + } + DC_FlushRange(p->cmd, sizeof(*p->cmd)); + DC_WaitWriteBufferEmpty(); + + do + { + p->command = req_type; + p->flag |= CARD_STAT_REQ; + CARDi_SendPxi((u32)req_type); + + switch (req_type) + { + case CARD_REQ_INIT: + CARDi_SendPxi((u32)p->cmd); + break; + } + OSIntrMode bak_psr = OS_DisableInterrupts(); + while ((p->flag & CARD_STAT_REQ) != 0) + { + OS_SleepThread(NULL); + } + (void)OS_RestoreInterrupts(bak_psr); + DC_InvalidateRange(p->cmd, sizeof(*p->cmd)); + } + while ((p->cmd->result == CARD_RESULT_TIMEOUT) && (--retry_count > 0)); + + return (p->cmd->result == CARD_RESULT_SUCCESS); +} -- cgit v1.2.3 From ed32ce3f29632a87e2194af6e6921534dec215b6 Mon Sep 17 00:00:00 2001 From: red031000 Date: Mon, 19 Oct 2020 21:33:07 +0100 Subject: try and re-trigger travis --- arm9/lib/src/CARD_request.c | 1 + 1 file changed, 1 insertion(+) (limited to 'arm9/lib/src/CARD_request.c') diff --git a/arm9/lib/src/CARD_request.c b/arm9/lib/src/CARD_request.c index 2d728d14..234acd88 100644 --- a/arm9/lib/src/CARD_request.c +++ b/arm9/lib/src/CARD_request.c @@ -49,6 +49,7 @@ ARM_FUNC BOOL CARDi_Request(CARDiCommon *p, s32 req_type, s32 retry_count) (void)CARDi_Request(p, CARD_REQ_INIT, 1); } + DC_FlushRange(p->cmd, sizeof(*p->cmd)); DC_WaitWriteBufferEmpty(); -- cgit v1.2.3 From 451f2a9629fea5a2927eb3de0a87725f0a96b8da Mon Sep 17 00:00:00 2001 From: red031000 Date: Mon, 19 Oct 2020 23:07:54 +0100 Subject: travis test #2 --- arm9/lib/src/CARD_request.c | 1 - 1 file changed, 1 deletion(-) (limited to 'arm9/lib/src/CARD_request.c') diff --git a/arm9/lib/src/CARD_request.c b/arm9/lib/src/CARD_request.c index 234acd88..2d728d14 100644 --- a/arm9/lib/src/CARD_request.c +++ b/arm9/lib/src/CARD_request.c @@ -49,7 +49,6 @@ ARM_FUNC BOOL CARDi_Request(CARDiCommon *p, s32 req_type, s32 retry_count) (void)CARDi_Request(p, CARD_REQ_INIT, 1); } - DC_FlushRange(p->cmd, sizeof(*p->cmd)); DC_WaitWriteBufferEmpty(); -- cgit v1.2.3 From 181a5e1c655e2acdff3dc3d53249ecc6290d76c8 Mon Sep 17 00:00:00 2001 From: red031000 Date: Mon, 19 Oct 2020 23:12:17 +0100 Subject: #3 --- arm9/lib/src/CARD_request.c | 1 + 1 file changed, 1 insertion(+) (limited to 'arm9/lib/src/CARD_request.c') diff --git a/arm9/lib/src/CARD_request.c b/arm9/lib/src/CARD_request.c index 2d728d14..234acd88 100644 --- a/arm9/lib/src/CARD_request.c +++ b/arm9/lib/src/CARD_request.c @@ -49,6 +49,7 @@ ARM_FUNC BOOL CARDi_Request(CARDiCommon *p, s32 req_type, s32 retry_count) (void)CARDi_Request(p, CARD_REQ_INIT, 1); } + DC_FlushRange(p->cmd, sizeof(*p->cmd)); DC_WaitWriteBufferEmpty(); -- cgit v1.2.3 From 5b76f6966c503210945b89e6e2662ca5e2c60dc1 Mon Sep 17 00:00:00 2001 From: red031000 Date: Tue, 20 Oct 2020 01:48:12 +0100 Subject: small test --- arm9/lib/src/CARD_request.c | 1 - 1 file changed, 1 deletion(-) (limited to 'arm9/lib/src/CARD_request.c') diff --git a/arm9/lib/src/CARD_request.c b/arm9/lib/src/CARD_request.c index 234acd88..2d728d14 100644 --- a/arm9/lib/src/CARD_request.c +++ b/arm9/lib/src/CARD_request.c @@ -49,7 +49,6 @@ ARM_FUNC BOOL CARDi_Request(CARDiCommon *p, s32 req_type, s32 retry_count) (void)CARDi_Request(p, CARD_REQ_INIT, 1); } - DC_FlushRange(p->cmd, sizeof(*p->cmd)); DC_WaitWriteBufferEmpty(); -- cgit v1.2.3