From adb3e00733064914564eb489cfecbd6e1d0a7335 Mon Sep 17 00:00:00 2001 From: yutaka Date: Fri, 14 Dec 2007 08:45:32 +0000 Subject: [PATCH] =?UTF-8?q?=E8=AA=A4=E5=AD=97=E4=BF=AE=E6=AD=A3=20ARM9?= =?UTF-8?q?=E5=81=B4FS=20API=E3=83=90=E3=82=B0=E4=BF=AE=E6=AD=A3=20?= =?UTF-8?q?=E5=86=97=E9=95=B7=E3=81=AA=E3=83=A1=E3=83=A2=E3=83=AA=E3=82=AF?= =?UTF-8?q?=E3=83=AA=E3=82=A2=E3=81=AE=E5=89=8A=E9=99=A4=20PXI=5FStream?= =?UTF-8?q?=E7=B3=BB=E3=81=AE=E3=83=90=E3=82=B0=E4=BF=AE=E6=AD=A3?= 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@366 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/libraries/fs/ARM9/src/fs_firm.c | 22 +++++++++++++++------- build/libraries/os/common/os_boot.c | 18 ++---------------- build/libraries/pxi/common/pxi_firm.c | 5 +++-- include/firm/hw/common/mmap_firm.h | 10 +++++----- 4 files changed, 25 insertions(+), 30 deletions(-) diff --git a/build/libraries/fs/ARM9/src/fs_firm.c b/build/libraries/fs/ARM9/src/fs_firm.c index 8e8a1b1c..258b24ed 100644 --- a/build/libraries/fs/ARM9/src/fs_firm.c +++ b/build/libraries/fs/ARM9/src/fs_firm.c @@ -68,8 +68,8 @@ static AESKey FSiAesKeySeed; *---------------------------------------------------------------------------*/ void FS_InitFIRM( void ) { - MI_CpuClearFast( (void*)HW_FIRM_FS_TWMP_BUFFER, HW_FIRM_FS_TWMP_BUFFER_SIZE ); - FSiTemporaryBuffer = (void*)HW_FIRM_FS_TWMP_BUFFER; + MI_CpuClearFast( (void*)HW_FIRM_FS_TEMP_BUFFER, HW_FIRM_FS_TEMP_BUFFER_SIZE ); + FSiTemporaryBuffer = (void*)HW_FIRM_FS_TEMP_BUFFER; FATFS_InitFIRM(); FS_Init( FS_DMA_NOT_USE ); } @@ -429,6 +429,7 @@ BOOL FS_LoadStatic( void ) /* 以下、LoadBufferを使わない版 (通常FS APIを使用する) + !!!! AESの通信バッファをメインメモリにおかないといけない! (pending) */ #include @@ -438,8 +439,8 @@ static u8* const aesBuffer = (u8*)HW_FIRM_FS_AES_BUFFER; // 0x2ff0000 static void AesCallback( AESResult result, void* arg ) { - BOOL* pFlag = (BOOL*)arg; - *pFlag = TRUE; + BOOL* pBusyFlag = (BOOL*)arg; + *pBusyFlag = FALSE; if (result != AES_RESULT_SUCCESS) { OS_TPrintf("Failed to decrypt by AES (%d)\n", result); @@ -611,7 +612,6 @@ BOOL FS_OpenSrl( FSFile *pFile ) BOOL FS_LoadSrlHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_key ) { u8 md[SVC_SHA1_DIGEST_SIZE]; - u8 digest[SVC_SHA1_DIGEST_SIZE]; SignatureData sd; if ( !FS_SeekFile( pFile, 0, FS_SEEK_SET ) ) @@ -636,7 +636,12 @@ BOOL FS_LoadSrlHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_ // ヘッダ署名チェック SVC_DecryptSign( pool, &sd, rh->signature, rsa_key ); - MI_CpuCopy8( sd.digest, digest, SVC_SHA1_DIGEST_SIZE ); // ダイジェストの取り出し + + if ( !CheckDigest( md, sd.digest, TRUE, FALSE ) ) + { + MI_CpuClear8( &sd, sizeof(sd) ); // 残り削除 (他に必要なものはない?) + return FALSE; + } // ダイジェスト以外のデータのチェックが必要!! @@ -644,7 +649,10 @@ BOOL FS_LoadSrlHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_ MI_CpuCopy8( (AESKey*)sd.aes_key_seed, &FSiAesKeySeed, sizeof(FSiAesKeySeed) ); MI_CpuClear8( &sd, sizeof(sd) ); // 残り削除 (他に必要なものはない?) - return CheckDigest( md, digest, TRUE, TRUE ); + + // ROMヘッダのコピー + MI_CpuCopyFast( rh, (void*)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END-HW_ROM_HEADER_BUF ); + return TRUE; } /*---------------------------------------------------------------------------* diff --git a/build/libraries/os/common/os_boot.c b/build/libraries/os/common/os_boot.c index 08344611..e4b2195d 100644 --- a/build/libraries/os/common/os_boot.c +++ b/build/libraries/os/common/os_boot.c @@ -56,23 +56,9 @@ void OS_BootWithRomHeaderFromFIRM( ROM_Header* rom_header ) /* ITCM全クリア */ mem_list[i++] = (u32)HW_ITCM; mem_list[i++] = (u32)HW_ITCM_SIZE; - /* PSEG1 Reserved領域のクリア (暫定) */ - mem_list[i++] = (u32)HW_MAIN_MEM_SHARED; // 0x02fff000 - 0x02fff7ff - mem_list[i++] = (u32)HW_PSEG1_RESERVED_0_END - (u32)HW_MAIN_MEM_SHARED; - mem_list[i++] = (u32)HW_PSEG1_RESERVED_1; // 0x02fffa00 - 0x02fffa7f - mem_list[i++] = (u32)HW_PSEG1_RESERVED_1_END - (u32)HW_PSEG1_RESERVED_1; - /* System Shared領域のクリア (暫定) */ - mem_list[i++] = (u32)HW_BOOT_CHECK_INFO_BUF; // 0x02fffc00 - 0x02fffc1f - mem_list[i++] = (u32)HW_BOOT_CHECK_INFO_BUF_END - (u32)HW_BOOT_CHECK_INFO_BUF; - mem_list[i++] = (u32)HW_BOOT_SHAKEHAND_9; // 0x02fffc24 - 0x02fffd7f - mem_list[i++] = (u32)HW_NVRAM_USER_INFO_END - (u32)HW_BOOT_SHAKEHAND_9; - mem_list[i++] = (u32)HW_ARENA_INFO_BUF; // 0x02fffda0 - 0x02fffdff - mem_list[i++] = (u32)HW_ROM_HEADER_BUF - (u32)HW_ARENA_INFO_BUF; - mem_list[i++] = (u32)HW_PXI_SIGNAL_PARAM_ARM9; // 0x02ffff80 - 0x02fffffd - mem_list[i++] = (u32)HW_CMD_AREA - (u32)HW_PXI_SIGNAL_PARAM_ARM9; - /* FS/FATFSバッファ */ + /* FS/FATFSバッファのクリア */ mem_list[i++] = (u32)HW_FIRM_FATFS_COMMAND_BUFFER; // 0x02ff7800 - 0x02ffbfff - mem_list[i++] = (u32)HW_FIRM_FS_TWMP_BUFFER_END - (u32)HW_FIRM_FATFS_COMMAND_BUFFER; + mem_list[i++] = (u32)HW_FIRM_FS_TEMP_BUFFER_END - (u32)HW_FIRM_FATFS_COMMAND_BUFFER; #else // SDK_ARM7 { /* REBOOT_ExecuteのCODEとSTACKの隙間をクリア */ u32 stack_bottom = (u32)stack_top - OS_BOOT_STACK_SIZE_MIN - sizeof(mem_list); diff --git a/build/libraries/pxi/common/pxi_firm.c b/build/libraries/pxi/common/pxi_firm.c index da300bc9..48adc723 100644 --- a/build/libraries/pxi/common/pxi_firm.c +++ b/build/libraries/pxi/common/pxi_firm.c @@ -49,9 +49,10 @@ static void PxiFirmStreamCallback( PXIFifoTag tag, u32 data, BOOL err ) else if ( work.current < work.length ) // stream is cotinuous { int i; + u8* ptr = (u8*)&data; for ( i = 0; i < 3 && work.current < work.length; i++ ) { - work.data[ work.current++ ] = (u8)( (data >> 16) & 0xFF ); + work.data[ work.current++ ] = *ptr++; } } else @@ -121,7 +122,7 @@ void PXI_SendStream( const void* buf, int size ) } while ( size > 0 ) { - u32 data = (u32)(ptr[0] << 16 | ptr[1] << 8 | ptr[2] << 0); + u32 data = (u32)(ptr[0] << 0 | ptr[1] << 8 | ptr[2] << 16); while ( 0 > PXI_SendWordByFifo( PXI_FIFO_TAG_USER_0, data, 0 ) ) { } diff --git a/include/firm/hw/common/mmap_firm.h b/include/firm/hw/common/mmap_firm.h index b0635bd6..67c3d73c 100644 --- a/include/firm/hw/common/mmap_firm.h +++ b/include/firm/hw/common/mmap_firm.h @@ -34,15 +34,15 @@ extern "C" { //------------------------------------- FS/FATFS #define HW_FIRM_FS_AES_BUFFER 0x2ff0000 #define HW_FIRM_FS_AES_BUFFER_SIZE (HW_FIRM_FS_AES_BUFFER_END - HW_FIRM_FS_AES_BUFFER) -#define HW_FIRM_FS_AES_BUFFER_END HW_FIRM_FATFS_COMMAND_BUFFER_END +#define HW_FIRM_FS_AES_BUFFER_END HW_FIRM_FATFS_COMMAND_BUFFER // 0x02ff7800 #define HW_FIRM_FATFS_COMMAND_BUFFER (HW_FIRM_FATFS_COMMAND_BUFFER_END - HW_FIRM_FATFS_COMMAND_BUFFER_SIZE) #define HW_FIRM_FATFS_COMMAND_BUFFER_SIZE FATFS_COMMAND_BUFFER_MAX // 0x800 -#define HW_FIRM_FATFS_COMMAND_BUFFER_END HW_FIRM_FS_TWMP_BUFFER // 0x02ff8000 +#define HW_FIRM_FATFS_COMMAND_BUFFER_END HW_FIRM_FS_TEMP_BUFFER // 0x02ff8000 -#define HW_FIRM_FS_TWMP_BUFFER (HW_FIRM_FS_TWMP_BUFFER_END - HW_FIRM_FS_TWMP_BUFFER_SIZE) -#define HW_FIRM_FS_TWMP_BUFFER_SIZE FS_TEMPORARY_BUFFER_MAX // 0x4000 -#define HW_FIRM_FS_TWMP_BUFFER_END HW_TWL_MAIN_MEM_SHARED // 0x02ffc000 +#define HW_FIRM_FS_TEMP_BUFFER (HW_FIRM_FS_TEMP_BUFFER_END - HW_FIRM_FS_TEMP_BUFFER_SIZE) +#define HW_FIRM_FS_TEMP_BUFFER_SIZE FS_TEMPORARY_BUFFER_MAX // 0x4000 +#define HW_FIRM_FS_TEMP_BUFFER_END HW_TWL_MAIN_MEM_SHARED // 0x02ffc000 #ifdef __cplusplus } /* extern "C" */