From ff8443c7ab752c8ab7c55afc174caab7b2f03fd4 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Fri, 25 Apr 2008 02:31:20 +0000 Subject: [PATCH] =?UTF-8?q?NTR=E3=82=BB=E3=82=AD=E3=83=A5=E3=82=A2?= =?UTF-8?q?=E9=A0=98=E5=9F=9F=E3=81=AE=E7=A7=BB=E5=8B=95=E3=82=92=E3=80=81?= =?UTF-8?q?reboot=E3=83=A9=E3=82=A4=E3=83=96=E3=83=A9=E3=83=AA=E3=81=A7?= =?UTF-8?q?=E8=A1=8C=E3=81=86=E3=82=88=E3=81=86=E3=81=ABbootAPI=E3=81=A7?= =?UTF-8?q?=E3=83=A1=E3=83=A2=E3=83=AA=E3=83=AA=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=20TWL=E3=82=AB=E3=83=BC=E3=83=89=E3=82=A2?= =?UTF-8?q?=E3=83=97=E3=83=AA=E3=83=8F=E3=83=83=E3=82=B7=E3=83=A5=E8=A8=88?= =?UTF-8?q?=E7=AE=97=E5=87=A6=E7=90=86=E3=82=92=E5=B0=91=E3=80=85=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=20NTR=E3=81=A7=E3=82=82=E3=83=9E=E3=82=A6=E3=83=B3?= =?UTF-8?q?=E3=83=88=E6=83=85=E5=A0=B1=E3=82=92=E3=83=98=E3=83=83=E3=83=80?= =?UTF-8?q?=E3=81=AB=E5=BE=93=E3=81=A3=E3=81=A6=E9=85=8D=E7=BD=AE=E3=81=97?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=A8=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=81=A7=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@1266 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../libraries_sysmenu/boot/ARM7/src/bootAPI.c | 27 ++++++++++++++++--- .../sysmenu/ARM9/src/title.c | 26 ++++++++---------- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index 183ab079..b3086c78 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -34,7 +34,7 @@ #define reg_MI_MC_SWP (*(REGType8v *) ( REG_MC1_ADDR + 1 ) ) #define PRE_CLEAR_NUM_MAX (6*2) -#define COPY_NUM_MAX (5*3) +#define COPY_NUM_MAX (6*3) #define POST_CLEAR_NUM_MAX (12 + 6*2) #define CLRLIST_REBOOT_STACK_PAD_SIZE_IDX (2*3+1) @@ -181,9 +181,27 @@ BOOL BOOT_WaitStart( void ) }; // copy forwardリスト設定 - mem_list[list_count++] = SYSM_TWL_MOUNT_INFO_TMP_BUFFER; - mem_list[list_count++] = (u32)th->s.sub_mount_info_ram_address; - mem_list[list_count++] = SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN; + // カードアプリのときはNTRセキュア領域再配置コピー + if( SYSMi_GetWork2()->bootTitleProperty.flags.bootType == LAUNCHER_BOOTTYPE_ROM) + { + u32 *dest = dh->s.main_ram_address; + // romの再配置情報を参照して、セキュア領域の再配置先を変更する必要が無いか調べる + if( SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC].src != NULL ) + { + dest = (u32 *)SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC].src; + } + mem_list[list_count++] = SYSM_CARD_NTR_SECURE_BUF; + mem_list[list_count++] = (u32)dest; + mem_list[list_count++] = ( dh->s.main_size < SECURE_AREA_SIZE ) ? dh->s.main_size : SECURE_AREA_SIZE; + } + // マウント情報 + if( !isNtrMode ) + { + mem_list[list_count++] = SYSM_TWL_MOUNT_INFO_TMP_BUFFER; + mem_list[list_count++] = (u32)th->s.sub_mount_info_ram_address; + mem_list[list_count++] = SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN; + } + // モジュール再配置コピーforward for( l=0; lromRelocateInfo[l].src != NULL && !SYSMi_GetWork()->romRelocateInfo[l].rev ) @@ -196,6 +214,7 @@ BOOL BOOT_WaitStart( void ) mem_list[list_count++] = NULL; // copy backwardリスト設定 + // モジュール再配置コピーbackward for( l=0; lromRelocateInfo[l].src != NULL && SYSMi_GetWork()->romRelocateInfo[l].rev ) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index e314089b..f6c6f7ff 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -672,18 +672,8 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle ) static void SYSMi_Relocate( void ) { u32 size; - u32 *dest = SYSM_GetCardRomHeader()->main_ram_address; - // NTRセキュア領域の再配置 - DC_InvalidateRange( (void *)SYSM_CARD_NTR_SECURE_BUF, SECURE_AREA_SIZE ); // キャッシュケア - size = ( SYSM_GetCardRomHeader()->main_size < SECURE_AREA_SIZE ) ? - SYSM_GetCardRomHeader()->main_size : SECURE_AREA_SIZE; - // romの再配置情報を参照して、セキュア領域の再配置先を変更する必要が無いか調べる - if( SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC].src != NULL ) - { - dest = (u32 *)SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC].src; - } - MI_CpuCopyFast( (void *)SYSM_CARD_NTR_SECURE_BUF, dest, size ); - + u32 *dest ; + // NTRセキュア領域の再配置は後でbootAPIおよびrebootライブラリにて行う if( SYSM_GetCardRomHeader()->platform_code & PLATFORM_CODE_FLAG_TWL ) { // TWLモード // TWLセキュア領域の再配置 @@ -924,9 +914,15 @@ static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle ) OS_ReleaseLockID( id ); SVC_HMACSHA1Update( &ctx, - (const void*)((u32)module_addr[l] + ARM9_ENCRYPT_DEF_SIZE), - (module_size[l] - ARM9_ENCRYPT_DEF_SIZE) ); - SVC_HMACSHA1GetHash( &ctx, calculated_hash ); + (const void*)(SYSM_CARD_NTR_SECURE_BUF + ARM9_ENCRYPT_DEF_SIZE), + (SECURE_AREA_SIZE - ARM9_ENCRYPT_DEF_SIZE) ); + if( module_size[l] > SECURE_AREA_SIZE ) + { + SVC_HMACSHA1Update( &ctx, + (const void*)((u32)module_addr[l] + SECURE_AREA_SIZE), + (module_size[l] - SECURE_AREA_SIZE) ); + SVC_HMACSHA1GetHash( &ctx, calculated_hash ); + } }else { SVC_CalcHMACSHA1( calculated_hash, (const void*)module_addr[l], module_size[l],