diff --git a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c index 82d205cb..d8481094 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c +++ b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c @@ -131,6 +131,7 @@ static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) case KAMI_NAND_IO: case KAMI_NVRAM_IO: case KAMI_MCU_IO: + case KAMI_ARM7_IO: case KAMI_CDC_GO_DSMODE: case KAMI_CLEAR_NAND_ERRORLOG: if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK)) @@ -272,6 +273,30 @@ static void KamiThread(void *arg) } break; + case KAMI_ARM7_IO: + { + BOOL is_read; + u32 addr; + u32 write; + u32 read; + + is_read = (BOOL)kamiWork.data[0]; + KAMI_UNPACK_U32(&addr, &kamiWork.data[1]); + KAMI_UNPACK_U32(&write, &kamiWork.data[5]); + + if (is_read) + { + read = *(u32 *)addr; + KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(u32), (u8*)&read ); + } + else + { + *(u32 *)addr = write; + KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); + } + } + break; + case KAMI_CDC_GO_DSMODE: { CDC_GoDsMode(); diff --git a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h index 73d26325..eb0ad6a6 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h +++ b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h @@ -62,6 +62,7 @@ KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback); KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read); KAMIResult kamiNvramIo(u32 address, void* buffer, u32 size, BOOL is_read); KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read); +KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read); KAMIResult kamiCDC_GoDsMode( void ); KAMIResult kamiClearNandErrorLog( void ); @@ -92,6 +93,14 @@ static KAMIResult kamiMcuWrite(u8 reg_no, u8 value) { return kamiMcuIo((u32)reg_no, NULL, (u32)value, FALSE); } +static KAMIResult kamiARM7Read(u32 addr, void* buffer) +{ + return kamiARM7Io(addr, buffer, 0, TRUE); +} +static KAMIResult kamiARM7Write(u32 addr, u8 value) +{ + return kamiARM7Io(addr, NULL, value, FALSE); +} /*===========================================================================*/ diff --git a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c index bf83c127..929880dd 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c +++ b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c @@ -273,6 +273,61 @@ KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read) return KAMI_RESULT_SEND_ERROR; } + +/*---------------------------------------------------------------------------* + Name: ARM7アクセス関数 + + Description: + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read) +{ + OSIntrMode enabled; + u8 data[12]; + int i; + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + if (is_read) + { + kamiWork.data = (u8*)buffer; + } + else + { + kamiWork.data = 0; + } + + // データ作成 + KAMI_PACK_U32(&data[0], &addr); + KAMI_PACK_U32(&data[4], &value); + + if (KamiSendPxiCommand(KAMI_ARM7_IO, 12, (u8)is_read)) + { + for (i = 0; i < 12; i+=3) + { + KamiSendPxiData(&data[i]); + } + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + + return KAMI_RESULT_SEND_ERROR; +} + /*---------------------------------------------------------------------------* Name: kamiCDC_GoDsMode diff --git a/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h b/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h index 4e616355..8bb2f503 100644 --- a/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h +++ b/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h @@ -64,6 +64,7 @@ typedef enum KamiCommand KAMI_NAND_IO, KAMI_NVRAM_IO, KAMI_MCU_IO, + KAMI_ARM7_IO, KAMI_CDC_GO_DSMODE, KAMI_CLEAR_NAND_ERRORLOG }