バナーリード時のバナーチェックを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-----------------------------------------------------------------
// function's prototype-------------------------------------------------------
static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner );
static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner );
// global variable-------------------------------------------------------------
// static variable-------------------------------------------------------------
@ -43,8 +43,20 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner );
// カードバナーリード※NTR-IPL2仕様
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
{
#ifndef DEBUG_USED_CARD_SLOT_B_
// ※スロットAからのリードなら問題ないが、スロットBからは直接読めないので
#pragma unused(bannerOffset)
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;
u16 id = (u16)OS_GetLockID();
@ -55,25 +67,18 @@ BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
CARD_UnlockRom( id );
OS_ReleaseLockID( id );
isRead = SYSMi_CheckBannerFile( (NTRBannerFile *)pBanner );
isRead = SYSMi_CheckBannerFile( (TWLBannerFile *)pBanner );
if( !isRead ) {
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
}
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;
BOOL retval = TRUE;
@ -82,6 +87,7 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner )
BannerCheckParam bannerCheckList[ BANNER_VER_NTR_MAX ];
BannerCheckParam *pChk = &bannerCheckList[ 0 ];
// NTR互換部分は標準でチェック
bannerCheckList[ 0 ].pSrc = (u8 *)&( pBanner->v1 );
bannerCheckList[ 0 ].size = sizeof( BannerFileV1 );
bannerCheckList[ 1 ].pSrc = (u8 *)&( pBanner->v2 );
@ -102,6 +108,12 @@ static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner )
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;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

Binary file not shown.