NTRセキュア領域の移動を、rebootライブラリで行うようにbootAPIでメモリリストを設定

TWLカードアプリハッシュ計算処理を少々変更
NTRでもマウント情報をヘッダに従って配置しようとしていたので修正

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1266 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2008-04-25 02:31:20 +00:00
parent c77e040990
commit ff8443c7ab
2 changed files with 34 additions and 19 deletions

View File

@ -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ƒŠƒXƒg<C692>Ýè
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; l<RELOCATE_INFO_NUM ; l++ )
{
if( SYSMi_GetWork()->romRelocateInfo[l].src != NULL && !SYSMi_GetWork()->romRelocateInfo[l].rev )
@ -196,6 +214,7 @@ BOOL BOOT_WaitStart( void )
mem_list[list_count++] = NULL;
// copy backwardƒŠƒXƒg<C692>Ýè
// モジュール再配置コピーbackward
for( l=0; l<RELOCATE_INFO_NUM ; l++ )
{
if( SYSMi_GetWork()->romRelocateInfo[l].src != NULL && SYSMi_GetWork()->romRelocateInfo[l].rev )

View File

@ -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],