誤字修正

ARM9側FS APIバグ修正
冗長なメモリクリアの削除
PXI_Stream系のバグ修正


git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@366 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yutaka 2007-12-14 08:45:32 +00:00
parent 341e55314d
commit adb3e00733
4 changed files with 25 additions and 30 deletions

View File

@ -68,8 +68,8 @@ static AESKey FSiAesKeySeed;
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
void FS_InitFIRM( void ) void FS_InitFIRM( void )
{ {
MI_CpuClearFast( (void*)HW_FIRM_FS_TWMP_BUFFER, HW_FIRM_FS_TWMP_BUFFER_SIZE ); MI_CpuClearFast( (void*)HW_FIRM_FS_TEMP_BUFFER, HW_FIRM_FS_TEMP_BUFFER_SIZE );
FSiTemporaryBuffer = (void*)HW_FIRM_FS_TWMP_BUFFER; FSiTemporaryBuffer = (void*)HW_FIRM_FS_TEMP_BUFFER;
FATFS_InitFIRM(); FATFS_InitFIRM();
FS_Init( FS_DMA_NOT_USE ); FS_Init( FS_DMA_NOT_USE );
} }
@ -429,6 +429,7 @@ BOOL FS_LoadStatic( void )
/* /*
LoadBufferを使わない版 (FS APIを使用する) LoadBufferを使わない版 (FS APIを使用する)
AESの通信バッファをメインメモリにおかないといけない (pending)
*/ */
#include <twl/aes.h> #include <twl/aes.h>
@ -438,8 +439,8 @@ static u8* const aesBuffer = (u8*)HW_FIRM_FS_AES_BUFFER; // 0x2ff0000
static void AesCallback( AESResult result, void* arg ) static void AesCallback( AESResult result, void* arg )
{ {
BOOL* pFlag = (BOOL*)arg; BOOL* pBusyFlag = (BOOL*)arg;
*pFlag = TRUE; *pBusyFlag = FALSE;
if (result != AES_RESULT_SUCCESS) if (result != AES_RESULT_SUCCESS)
{ {
OS_TPrintf("Failed to decrypt by AES (%d)\n", result); 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 ) BOOL FS_LoadSrlHeader( FSFile *pFile, SVCSignHeapContext* pool, const void* rsa_key )
{ {
u8 md[SVC_SHA1_DIGEST_SIZE]; u8 md[SVC_SHA1_DIGEST_SIZE];
u8 digest[SVC_SHA1_DIGEST_SIZE];
SignatureData sd; SignatureData sd;
if ( !FS_SeekFile( pFile, 0, FS_SEEK_SET ) ) 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 ); 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_CpuCopy8( (AESKey*)sd.aes_key_seed, &FSiAesKeySeed, sizeof(FSiAesKeySeed) );
MI_CpuClear8( &sd, sizeof(sd) ); // 残り削除 (他に必要なものはない?) 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;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*

View File

@ -56,23 +56,9 @@ void OS_BootWithRomHeaderFromFIRM( ROM_Header* rom_header )
/* ITCM全クリア */ /* ITCM全クリア */
mem_list[i++] = (u32)HW_ITCM; mem_list[i++] = (u32)HW_ITCM;
mem_list[i++] = (u32)HW_ITCM_SIZE; mem_list[i++] = (u32)HW_ITCM_SIZE;
/* PSEG1 Reserved領域のクリア (暫定) */ /* FS/FATFSバッファのクリア */
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バッファ */
mem_list[i++] = (u32)HW_FIRM_FATFS_COMMAND_BUFFER; // 0x02ff7800 - 0x02ffbfff 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 #else // SDK_ARM7
{ /* REBOOT_ExecuteのCODEとSTACKの隙間をクリア */ { /* REBOOT_ExecuteのCODEとSTACKの隙間をクリア */
u32 stack_bottom = (u32)stack_top - OS_BOOT_STACK_SIZE_MIN - sizeof(mem_list); u32 stack_bottom = (u32)stack_top - OS_BOOT_STACK_SIZE_MIN - sizeof(mem_list);

View File

@ -49,9 +49,10 @@ static void PxiFirmStreamCallback( PXIFifoTag tag, u32 data, BOOL err )
else if ( work.current < work.length ) // stream is cotinuous else if ( work.current < work.length ) // stream is cotinuous
{ {
int i; int i;
u8* ptr = (u8*)&data;
for ( i = 0; i < 3 && work.current < work.length; i++ ) for ( i = 0; i < 3 && work.current < work.length; i++ )
{ {
work.data[ work.current++ ] = (u8)( (data >> 16) & 0xFF ); work.data[ work.current++ ] = *ptr++;
} }
} }
else else
@ -121,7 +122,7 @@ void PXI_SendStream( const void* buf, int size )
} }
while ( size > 0 ) 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 ) ) while ( 0 > PXI_SendWordByFifo( PXI_FIFO_TAG_USER_0, data, 0 ) )
{ {
} }

View File

@ -34,15 +34,15 @@ extern "C" {
//------------------------------------- FS/FATFS //------------------------------------- FS/FATFS
#define HW_FIRM_FS_AES_BUFFER 0x2ff0000 #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_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 (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_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_TEMP_BUFFER (HW_FIRM_FS_TEMP_BUFFER_END - HW_FIRM_FS_TEMP_BUFFER_SIZE)
#define HW_FIRM_FS_TWMP_BUFFER_SIZE FS_TEMPORARY_BUFFER_MAX // 0x4000 #define HW_FIRM_FS_TEMP_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_END HW_TWL_MAIN_MEM_SHARED // 0x02ffc000
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */