バナーリード時のバナーチェックをTWLバナーに対応させる。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@605 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-02-06 11:09:42 +00:00
parent 14dadacc65
commit 0720894cba
8 changed files with 62 additions and 30 deletions

View File

@ -27,7 +27,7 @@ typedef struct BannerCheckParam {
// extern data----------------------------------------------------------------- // extern data-----------------------------------------------------------------
// function's prototype------------------------------------------------------- // function's prototype-------------------------------------------------------
static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner ); static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner );
// global variable------------------------------------------------------------- // global variable-------------------------------------------------------------
// static variable------------------------------------------------------------- // static variable-------------------------------------------------------------
@ -43,8 +43,20 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner );
// カードバナーリード※NTR-IPL2仕様 // カードバナーリード※NTR-IPL2仕様
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner ) BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
{ {
#ifndef DEBUG_USED_CARD_SLOT_B_ #pragma unused(bannerOffset)
// ※スロットAからのリードなら問題ないが、スロットBからは直接読めないので BOOL isRead;
if( SYSMi_GetWork()->flags.common.isValidCardBanner ) {
DC_InvalidateRange( (void *)SYSM_CARD_BANNER_BUF, 0x3000 );
MI_CpuCopyFast( (void *)SYSM_CARD_BANNER_BUF, pBanner, sizeof(TWLBannerFile) );
}
isRead = SYSMi_CheckBannerFile( pBanner );
if( !isRead ) {
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
}
return isRead;
/*
// ※カードライブラリでは、スロットAからのリードなら問題ないが、スロットBからは読めないのでとりあえず使わない
BOOL isRead; BOOL isRead;
u16 id = (u16)OS_GetLockID(); u16 id = (u16)OS_GetLockID();
@ -55,25 +67,18 @@ BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
CARD_UnlockRom( id ); CARD_UnlockRom( id );
OS_ReleaseLockID( id ); OS_ReleaseLockID( id );
isRead = SYSMi_CheckBannerFile( (NTRBannerFile *)pBanner ); isRead = SYSMi_CheckBannerFile( (TWLBannerFile *)pBanner );
if( !isRead ) { if( !isRead ) {
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) ); MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
} }
return isRead; return isRead;
#else */
#pragma unused(bannerOffset)
if( SYSMi_GetWork()->flags.common.isValidCardBanner ) {
DC_InvalidateRange( (void *)SYSM_CARD_BANNER_BUF, 0x3000 );
MI_CpuCopyFast( (void *)SYSM_CARD_BANNER_BUF, pBanner, sizeof(TWLBannerFile) );
}
return (BOOL)SYSMi_GetWork()->flags.common.isValidCardBanner;
#endif
} }
// バナーデータの正誤チェック // バナーデータの正誤チェック
static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner ) static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner )
{ {
int i; int i;
BOOL retval = TRUE; BOOL retval = TRUE;
@ -82,6 +87,7 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner )
BannerCheckParam bannerCheckList[ BANNER_VER_NTR_MAX ]; BannerCheckParam bannerCheckList[ BANNER_VER_NTR_MAX ];
BannerCheckParam *pChk = &bannerCheckList[ 0 ]; BannerCheckParam *pChk = &bannerCheckList[ 0 ];
// NTR互換部分は標準でチェック
bannerCheckList[ 0 ].pSrc = (u8 *)&( pBanner->v1 ); bannerCheckList[ 0 ].pSrc = (u8 *)&( pBanner->v1 );
bannerCheckList[ 0 ].size = sizeof( BannerFileV1 ); bannerCheckList[ 0 ].size = sizeof( BannerFileV1 );
bannerCheckList[ 1 ].pSrc = (u8 *)&( pBanner->v2 ); bannerCheckList[ 1 ].pSrc = (u8 *)&( pBanner->v2 );
@ -102,6 +108,12 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner )
pChk++; pChk++;
} }
// TWLバナーなら、バナーアニメ部もチェック
if( pBanner->h.platform == BANNER_PLATFORM_TWL ) {
if( pBanner->h.crc16_anime != SVC_GetCRC16( 0xffff, &pBanner->anime, sizeof(BannerAnime) ) ) {
retval = FALSE;
}
}
return retval; return retval;
} }

View File

@ -58,6 +58,10 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
{ {
BOOL retval = FALSE; BOOL retval = FALSE;
// [TODO:] ROMヘッダの platform_code がNTR,TWL-HYB,TWL-LTD以外のもの
// region_codeが本体情報と違うもの
// の場合は、正常に認識できないタイトルであることを示す。
if( SYSMi_GetWork()->flags.common.isCardStateChanged ) { if( SYSMi_GetWork()->flags.common.isCardStateChanged ) {
MI_CpuClear32( pTitleList_Card, sizeof(TitleProperty) ); MI_CpuClear32( pTitleList_Card, sizeof(TitleProperty) );
@ -66,9 +70,16 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
if( SYSM_IsExistCard() ) { if( SYSM_IsExistCard() ) {
u16 id = (u16)OS_GetLockID(); u16 id = (u16)OS_GetLockID();
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する (void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
// ROMヘッダのリード
DC_InvalidateRange( (void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE ); // キャッシュケア DC_InvalidateRange( (void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE ); // キャッシュケア
MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BAK, (void *)SYSM_CARD_ROM_HEADER_BUF, SYSM_CARD_ROM_HEADER_SIZE ); // ROMヘッダコピー MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BAK, (void *)SYSM_CARD_ROM_HEADER_BUF, SYSM_CARD_ROM_HEADER_SIZE ); // ROMヘッダコピー
SYSMi_GetWork()->cardHeaderCrc16 = SYSMi_GetWork()->cardHeaderCrc16; // ROMヘッダCRCコピー SYSMi_GetWork()->cardHeaderCrc16 = SYSMi_GetWork()->cardHeaderCrc16; // ROMヘッダCRCコピー
// バナーデータのリード
SYSMi_ReadCardBannerFile( SYSM_GetCardRomHeader()->banner_offset, &s_bannerBuf[ CARD_BANNER_INDEX ] );
pTitleList_Card->pBanner = &s_bannerBuf[ CARD_BANNER_INDEX ];
SYSMi_GetWork()->flags.common.isCardStateChanged = FALSE; // カード情報更新フラグを落とす SYSMi_GetWork()->flags.common.isCardStateChanged = FALSE; // カード情報更新フラグを落とす
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する (void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
OS_ReleaseLockID( id ); OS_ReleaseLockID( id );
@ -77,14 +88,6 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
pTitleList_Card->flags.isAppLoadCompleted = TRUE; pTitleList_Card->flags.isAppLoadCompleted = TRUE;
pTitleList_Card->flags.isAppRelocate = TRUE; pTitleList_Card->flags.isAppRelocate = TRUE;
pTitleList_Card->pBanner = NULL; pTitleList_Card->pBanner = NULL;
// バナーデータのリード
if( SYSM_GetCardRomHeader()->banner_offset &&
SYSMi_ReadCardBannerFile( SYSM_GetCardRomHeader()->banner_offset, &s_bannerBuf[ CARD_BANNER_INDEX ] ) ) {
pTitleList_Card->pBanner = &s_bannerBuf[ CARD_BANNER_INDEX ];
}else {
MI_CpuClearFast( &s_bannerBuf[ CARD_BANNER_INDEX ], sizeof(TWLBannerFile) );
}
} }
retval = TRUE; retval = TRUE;
@ -179,6 +182,7 @@ static BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, u8 *pDst )
// ファイルパスを取得 // ファイルパスを取得
if(readLen != NAM_OK){ if(readLen != NAM_OK){
OS_TPrintf("NAM_GetTitleBootContentPath failed %lld,%d\n", titleID, readLen ); OS_TPrintf("NAM_GetTitleBootContentPath failed %lld,%d\n", titleID, readLen );
return FALSE;
} }
// ファイルオープン // ファイルオープン
@ -589,7 +593,7 @@ AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle )
} }
// ※ROMヘッダ認証 // ※ROMヘッダ認証
// [TODO:] NANDアプリの場合、pBootTitle->titleIDとROMヘッダのtitleIDの一致確認を必ずする。
// マウント情報の登録 // マウント情報の登録
SYSMi_SetBootAppMountInfo( pBootTitle ); SYSMi_SetBootAppMountInfo( pBootTitle );

View File

@ -422,7 +422,9 @@ int TP_CalibrationMain( void )
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み // TWL設定データファイルへの書き込み
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettings(); if( !LCFG_WriteTWLSettings() ) {
OS_TPrintf( "TWL settings write failed.\n" );
}
ReturnMenu(); ReturnMenu();
return 0; return 0;

View File

@ -323,7 +323,9 @@ int SelectCountryMain( void )
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み // TWL設定データファイルへの書き込み
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettings(); if( !LCFG_WriteTWLSettings() ) {
OS_TPrintf( "TWL settings write failed.\n" );
}
MachineSettingInit(); MachineSettingInit();
return 0; return 0;

View File

@ -181,7 +181,9 @@ int SelectLanguageMain( void )
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み // TWL設定データファイルへの書き込み
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettings(); if( !LCFG_WriteTWLSettings() ) {
OS_TPrintf( "TWL settings write failed.\n" );
}
MachineSettingInit(); MachineSettingInit();
return 0; return 0;

View File

@ -432,7 +432,9 @@ static void PushKeys( u16 code, NameOrComment noc )
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み // TWL設定データファイルへの書き込み
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み if( !LCFG_WriteTWLSettings() ) {
OS_TPrintf( "TWL settings write failed.\n" );
}
// セーブ後にキャンセル処理と合流 // セーブ後にキャンセル処理と合流
case CANCEL_BUTTON_: case CANCEL_BUTTON_:
SetOwnerInfoInit(); SetOwnerInfoInit();
@ -768,7 +770,9 @@ static int SetBirthdayMain( void )
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み // TWL設定データファイルへの書き込み
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み if( !LCFG_WriteTWLSettings() ) {
OS_TPrintf( "TWL settings write failed.\n" );
}
SetOwnerInfoInit(); SetOwnerInfoInit();
g_pNowProcess = SetOwnerInfoMain; g_pNowProcess = SetOwnerInfoMain;
return 0; return 0;
@ -889,7 +893,9 @@ static int SetUserColorMain( void )
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み // TWL設定データファイルへの書き込み
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み if( !LCFG_WriteTWLSettings() ) {
OS_TPrintf( "TWL settings write failed.\n" );
}
SetOwnerInfoInit(); SetOwnerInfoInit();
g_pNowProcess = SetOwnerInfoMain; g_pNowProcess = SetOwnerInfoMain;
return 0; return 0;

View File

@ -383,7 +383,9 @@ static int InputRtcDateTimeMain( void )
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み // TWL設定データファイルへの書き込み
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettings(); if( !LCFG_WriteTWLSettings() ) {
OS_TPrintf( "TWL settings write failed.\n" );
}
// 上画面の表示更新 // 上画面の表示更新
GetAndDrawRTCData( &g_rtcDraw, TRUE ); GetAndDrawRTCData( &g_rtcDraw, TRUE );
@ -549,5 +551,7 @@ void ClearRTC( void )
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み // TWL設定データファイルへの書き込み
// :::::::::::::::::::::::::::::::::::::::::::::: // ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettings(); if( !LCFG_WriteTWLSettings() ) {
OS_TPrintf( "TWL settings write failed.\n" );
}
} }

Binary file not shown.