From b93e15429f64233c7f9eacb051f303dec7db96cd Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Thu, 17 Apr 2008 06:08:43 +0000 Subject: [PATCH] =?UTF-8?q?=E3=82=A2=E3=83=97=E3=83=AA=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=89=E9=96=A2=E4=BF=82=E3=81=AE=E5=A4=89=E6=9B=B4=20=20?= =?UTF-8?q?=E3=83=BB=E3=83=93=E3=83=AB=E3=83=89=E3=82=B9=E3=82=A4=E3=83=83?= =?UTF-8?q?=E3=83=81=E3=81=A7=E3=82=A2=E3=83=97=E3=83=AA=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=89=E6=99=82=E3=81=AE=E3=82=A2=E3=83=AB=E3=82=B4=E3=83=AA?= =?UTF-8?q?=E3=82=BA=E3=83=A0=E3=82=92=E5=88=87=E3=82=8A=E6=9B=BF=E3=81=88?= =?UTF-8?q?=E3=82=89=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=20=E3=80=80=E3=80=80=EF=BC=88LOAD=5FAPP=5FVIA=5FPRIMAL=5FFS?= =?UTF-8?q?=E5=AE=9A=E7=BE=A9=E3=81=A7=E6=99=AE=E9=80=9A=E3=81=AERead?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E7=94=A8=EF=BC=89=20=20=E3=83=BBWRAM?= =?UTF-8?q?=E7=B5=8C=E7=94=B1READ=E3=81=A7WRAMC=E3=81=AE=E5=BE=8C=E5=8D=8A?= =?UTF-8?q?=E3=82=92=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= 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@1170 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/libraries_sysmenu/sysmenu/ARM9/Makefile | 4 ++ .../sysmenu/ARM9/src/fs_wram.c | 28 ++++++++++---- .../sysmenu/ARM9/src/title.c | 38 +++++++++++++------ 3 files changed, 50 insertions(+), 20 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/Makefile b/build/libraries_sysmenu/sysmenu/ARM9/Makefile index db3e0831..a6723c7c 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/Makefile +++ b/build/libraries_sysmenu/sysmenu/ARM9/Makefile @@ -50,6 +50,10 @@ ifdef DO_NOT_SHOW_LAUNCHER MACRO_FLAGS += -DDO_NOT_SHOW_LAUNCHER endif +ifndef LOAD_APP_VIA_PRIMAL_FS +MACRO_FLAGS += -DLOAD_APP_VIA_WRAM +endif + ifneq ($(DHT_TEST),) MACRO_FLAGS += -DDHT_TEST endif diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/fs_wram.c b/build/libraries_sysmenu/sysmenu/ARM9/src/fs_wram.c index cf02074f..c12c3bfc 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/fs_wram.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/fs_wram.c @@ -391,13 +391,19 @@ BOOL FS_ReadFileViaWram( FSFile *p_file, void *dst, s32 len, MIWramPos wram, s32 FSiWramWork.nums = MI_WRAM_ENUM_TO_SIZE( size ) * 1024 / FS_WRAM_SLOT_SIZE; // 必要に応じて7側にスイッチ可能なWRAMとして指定 - n = 1 << slot; - for(l=0;lARM9起動 result = FSi_ReadWram(dst, (u32)len, wram, slot, callback, arg); @@ -439,13 +445,19 @@ BOOL FS_WriteFileViaWram( FSFile *p_file, const void *src, s32 len, MIWramPos wr FSiWramWork.nums = MI_WRAM_ENUM_TO_SIZE( size ) * 1024 / FS_WRAM_SLOT_SIZE; // 必要に応じて7側にスイッチ可能なWRAMとして指定 - n = 1 << slot; - for(l=0;lWRAM起動 result = FSi_WriteWram(src, (u32)len, wram, slot, callback, arg); diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 4eb77ec3..aeaed99c 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -43,6 +43,9 @@ #define AUTH_KEY_BUFFER_LEN 128 #define MB_AUTH_SIGN_SIZE (128) /* digital sign size */ +#define WRAM_SLOT_FOR_FS 4 +#define WRAM_SIZE_FOR_FS MI_WRAM_SIZE_128KB + typedef struct MbAuthCode { char magic_code[2]; // マジックナンバー @@ -347,6 +350,11 @@ static s32 ReadFile(FSFile* pf, void* buffer, s32 size) // // ============================================================================ +static void SYSMi_CalcHashCallback(const void* addr, u32 len, void* arg) +{ + SVC_HMACSHA1Update( (SVCHMACSHA1Context *)arg, addr, len ); +} + static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle ) { enum @@ -505,17 +513,19 @@ OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", &s_authcode, } } - // [TODO:]新規Read関数の準備、とりあえずWRAMBをガメるつもりで実装 + // WRAM利用Read関数の準備、WRAMCの後半だけ解放しておく FS_InitWramTransfer(3); - MI_FreeWram_B( MI_WRAM_ARM7 ); - MI_FreeWram_B( MI_WRAM_ARM9 ); - MI_FreeWram_B( MI_WRAM_DSP ); - MI_CancelWram_B( MI_WRAM_ARM7 ); - MI_CancelWram_B( MI_WRAM_ARM9 ); - MI_CancelWram_B( MI_WRAM_DSP ); + MI_FreeWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM7 ); + MI_FreeWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9 ); + MI_FreeWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_DSP ); + MI_CancelWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM7 ); + MI_CancelWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9 ); + MI_CancelWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_DSP ); for (i = region_header; i < region_max; ++i) { + SVCHMACSHA1Context ctx; + u8 calc_hash[SVC_SHA1_DIGEST_SIZE]; u32 len = MATH_ROUNDUP( length[i], SYSM_ALIGNMENT_LOAD_MODULE );// AES暗号化領域の関係で、ロードサイズは32バイトアライメントに補正 if ( !isTwlApp && i >= region_arm9_twl ) continue;// nitroでは読み込まない領域 @@ -529,15 +539,20 @@ OS_TPrintf("RebootSystem failed: cant seek file(%d)\n", source[i]); return; } +#ifdef LOAD_APP_VIA_WRAM +OS_TPrintf("RebootSystem : Load VIA WRAM %d.\n", i); // [TODO:]ここで同時にハッシュ計算やAES処理もやってしまう予定 // 別スレッドで同じWRAM使おうとすると多分コケるので注意 - if ( !FS_ReadFileViaWram(file, (void *)destaddr[i], (s32)len, MI_WRAM_B, 0, MI_WRAM_SIZE_128KB, NULL, NULL ) ) + SVC_HMACSHA1Init( &ctx, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1 ); + if ( !FS_ReadFileViaWram(file, (void *)destaddr[i], (s32)len, MI_WRAM_C, WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, SYSMi_CalcHashCallback, &ctx ) ) { OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len); FS_CloseFile(file); return; } -/* + SVC_HMACSHA1GetHash( &ctx, calc_hash ); +#else +OS_TPrintf("RebootSystem : Load VIA PRIMAL FS %d.\n", i); readLen = FS_ReadFile(file, (void *)destaddr[i], (s32)len); if( readLen < 0 ) @@ -546,14 +561,13 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len); FS_CloseFile(file); return; } -*/ +#endif // LAUNCHER_READ_VIA_WRAM + } (void)FS_CloseFile(file); } - -OS_TPrintf("RebootSystem : Load Succeed.\n"); SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE; }