From a0c0229379173c68a87214c228ffbb0f028cd38d Mon Sep 17 00:00:00 2001 From: kamikawa Date: Fri, 25 Jul 2008 09:46:06 +0000 Subject: [PATCH] =?UTF-8?q?(NandInitializerRed)=20=E8=A3=BD=E5=93=81?= =?UTF-8?q?=E6=8A=80=E8=A1=93=E9=83=A8=E3=81=8B=E3=82=89=E3=81=AE=E8=A6=81?= =?UTF-8?q?=E8=AB=8B=E3=81=AB=E3=82=88=E3=82=8A=20NAND=E3=81=AECID?= =?UTF-8?q?=E3=82=92=E5=8F=96=E5=BE=97=E3=81=99=E3=82=8B=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2003 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../NandInitializerRed/ARM7.TWL/Makefile | 5 +- .../ARM7.TWL/src/kami_pxi.c | 14 ++++- .../ARM9.TWL/include/kami_pxi.h | 1 + .../ARM9.TWL/src/kami_pxi.c | 58 +++++++++++++++++-- .../NandInitializerRed/common/include/fifo.h | 3 +- 5 files changed, 71 insertions(+), 10 deletions(-) diff --git a/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/Makefile b/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/Makefile index b8692866..ed4c0769 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/Makefile +++ b/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/Makefile @@ -57,7 +57,10 @@ LINCLUDES += $(ROOT)/build/libraries/spi/ARM7/include \ $(TWL_IPL_RED_ROOT)/include \ ../common/include \ $(ROOT)/build/libraries/init/common/include \ - ../../common/ARM7/include + ../../common/ARM7/include \ + $(ROOT)/build/libraries/fatfs/ARM7.TWL/include \ + $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/fatfs \ + $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/twl/fatfs/ARM7 SRCDIR += ../../common/ARM7/src diff --git a/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/src/kami_pxi.c b/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/src/kami_pxi.c index a43177e1..9ea1fc44 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/src/kami_pxi.c +++ b/build/systemMenu_tools/NandInitializerRed/ARM7.TWL/src/kami_pxi.c @@ -27,14 +27,13 @@ #include #include #include +#include -typedef unsigned char byte; /* Don't change */ -typedef unsigned short word; /* Don't change */ -typedef unsigned long dword; /* Don't change */ #define BOOLEAN int extern BOOL FATFSi_nandRtfsIo( int driveno, dword block, void* buffer, word count, BOOLEAN reading); extern BOOL sdmcFormatNandLog( BOOL verify_flag); +extern void sdmcGetCID( SDMC_PORT_NO port, u32* dest); /*---------------------------------------------------------------------------* 定数定義 @@ -134,6 +133,7 @@ static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) case KAMI_CDC_GO_DSMODE: case KAMI_CLEAR_NAND_ERRORLOG: case KAMI_GET_CAMERA_MODULE_TYPE: + case KAMI_GET_NAND_CID: if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK)) { KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR); @@ -340,6 +340,14 @@ static void KamiThread(void *arg) } break; + case KAMI_GET_NAND_CID: + { + u8 buffer[16]; + sdmcGetCID( SDMC_PORT_NAND, (u32*)buffer); + KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(buffer), (u8*)buffer ); + } + break; + default: KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); } diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/kami_pxi.h b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/kami_pxi.h index d6ac9470..6d7d9db0 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/kami_pxi.h +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/kami_pxi.h @@ -68,6 +68,7 @@ KAMIResult kamiCDC_GoDsMode( void ); KAMIResult kamiClearNandErrorLog( void ); KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ); KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ); +KAMIResult kamiGetNandCID( void* buffer ); // (重要) // ARM7が読み書きするためリード前はInvalidate、ライト前はフラッシュしてください。 diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/kami_pxi.c b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/kami_pxi.c index 9e913d45..9d4f7b3e 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/kami_pxi.c +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/kami_pxi.c @@ -173,6 +173,8 @@ KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) u8 data[12]; int i; + MI_CpuClear8( data, sizeof(data)); + // ロック enabled = OS_DisableInterrupts(); if (kamiWork.lock) @@ -192,7 +194,7 @@ KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) KAMI_PACK_U32(&data[4], &buffer); KAMI_PACK_U32(&data[8], &count); - if (KamiSendPxiCommand(KAMI_NAND_IO, 12, (u8)is_read)) + if (KamiSendPxiCommand(KAMI_NAND_IO, 13, (u8)is_read)) { for (i = 0; i < 12; i+=3) { @@ -217,9 +219,11 @@ KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) KAMIResult kamiMcuWriteFirm(void* buffer ) { OSIntrMode enabled; - u8 data[4]; + u8 data[4+2]; // 3の倍数 int i; + MI_CpuClear8( data, sizeof(data)); + // ロック enabled = OS_DisableInterrupts(); if (kamiWork.lock) @@ -236,7 +240,7 @@ KAMIResult kamiMcuWriteFirm(void* buffer ) // データ作成 KAMI_PACK_U32(&data[0], &buffer); - if (KamiSendPxiCommand(KAMI_MCU_WRITE_FIRM, 4, (u8)0)) + if (KamiSendPxiCommand(KAMI_MCU_WRITE_FIRM, 5, (u8)0)) { for (i = 0; i < 4; i+=3) { @@ -265,6 +269,8 @@ KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read) u8 data[12]; int i; + MI_CpuClear8( data, sizeof(data)); + // ロック enabled = OS_DisableInterrupts(); if (kamiWork.lock) @@ -290,7 +296,7 @@ KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read) KAMI_PACK_U32(&data[0], ®_no); KAMI_PACK_U32(&data[4], &value); - if (KamiSendPxiCommand(KAMI_MCU_IO, 12, (u8)is_read)) + if (KamiSendPxiCommand(KAMI_MCU_IO, 13, (u8)is_read)) { for (i = 0; i < 12; i+=3) { @@ -319,6 +325,8 @@ KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read) u8 data[12]; int i; + MI_CpuClear8( data, sizeof(data)); + // ロック enabled = OS_DisableInterrupts(); if (kamiWork.lock) @@ -344,7 +352,7 @@ KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read) KAMI_PACK_U32(&data[0], &addr); KAMI_PACK_U32(&data[4], &value); - if (KamiSendPxiCommand(KAMI_ARM7_IO, 12, (u8)is_read)) + if (KamiSendPxiCommand(KAMI_ARM7_IO, 13, (u8)is_read)) { for (i = 0; i < 12; i+=3) { @@ -506,6 +514,46 @@ KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ) return KAMI_RESULT_SEND_ERROR; } +/*---------------------------------------------------------------------------* + Name: kamiGetNandCID + + Description: NANDのCIDを取得します。 + + Arguments: buffer : 16バイトバッファ + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiGetNandCID(void* buffer ) +{ + OSIntrMode enabled; + u8 data[4+2]; // 3の倍数 + + MI_CpuClear8( data, sizeof(data)); + + // ロック + 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; + kamiWork.data = (u8*)buffer; + + if (KamiSendPxiCommand(KAMI_GET_NAND_CID, 0, 0)) + { + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + + return KAMI_RESULT_SEND_ERROR; +} + /*---------------------------------------------------------------------------* PXI関連 *---------------------------------------------------------------------------*/ diff --git a/build/systemMenu_tools/NandInitializerRed/common/include/fifo.h b/build/systemMenu_tools/NandInitializerRed/common/include/fifo.h index bbc1b82e..9873e242 100644 --- a/build/systemMenu_tools/NandInitializerRed/common/include/fifo.h +++ b/build/systemMenu_tools/NandInitializerRed/common/include/fifo.h @@ -68,7 +68,8 @@ typedef enum KamiCommand KAMI_ARM7_IO, KAMI_CDC_GO_DSMODE, KAMI_CLEAR_NAND_ERRORLOG, - KAMI_GET_CAMERA_MODULE_TYPE + KAMI_GET_CAMERA_MODULE_TYPE, + KAMI_GET_NAND_CID } KamiCommand;