From 3c0cde169d38545cc62c73b57bae2aa631030c40 Mon Sep 17 00:00:00 2001 From: yosiokat Date: Fri, 27 Jun 2008 09:01:49 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=BBLCFG=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=81=AE=E3=83=A1=E3=82=A4=E3=83=B3=E3=83=A1=E3=83=A2=E3=83=AA?= =?UTF-8?q?=E3=81=B8=E3=81=AE=E5=B1=95=E9=96=8B=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=80=82=20=E3=83=BBTWL=E6=9C=AC=E4=BD=93?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=83=87=E3=83=BC=E3=82=BF=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=BC=E3=83=89=EF=BC=86=E3=83=AA=E3=82=AB=E3=83=90=E3=83=AA?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=81=AE=E4=BF=AE=E6=AD=A3=E3=80=82?= 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/branches/20080626_SDK500fc_plus5_branch@1742 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/sysmenu_lib.c | 49 +++++++++++++------ 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 1b948697..c8073738 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -29,7 +29,8 @@ extern void LCFG_VerifyAndRecoveryNTRSettings( void ); // function's prototype------------------------------------------------------- void _start_AutoloadDoneCallback(void* argv[]); -static void SYSMi_CopyLCFGData( u32 dst_addr ); +static void SYSMi_CopyLCFGDataHWInfo( u32 dst_addr ); +static void SYSMi_CopyLCFGDataSettings( void ); static TitleProperty *SYSMi_CheckDebuggerBannerViewModeBoot( void ); static TitleProperty *SYSMi_CheckShortcutBoot1( void ); static TitleProperty *SYSMi_CheckShortcutBoot2( void ); @@ -186,21 +187,34 @@ TitleProperty *SYSM_ReadParameters( void ) UTL_SetFatalError( FATAL_ERROR_HWINFO_SECURE ); } + //----------------------------------------------------- + // システム領域にHWInfoをコピー //----------------------------------------------------- + // NTRカードアプリARM9コードのロード領域とメモリがかち合うが、先頭0x4000はセキュア領域で別バッファに格納されるので、 + // ここでこれらのパラメータをロードしても大丈夫。 + SYSMi_CopyLCFGDataHWInfo( (u32)s_lcfgBuffer ); + + //----------------------------------------------------- // 本体設定データのリード(※必ずHWSecureInforリード後に実行すること。LanguageBitmapを判定に使うため) //----------------------------------------------------- { u8 *pBuffer = SYSM_Alloc( LCFG_READ_TEMP ); if( pBuffer ) { - if( !LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer ) ) { // NANDからTWL本体設定データをリード - // リード失敗時は、ファイルをリカバリ - if( LCFG_RecoveryTWLSettings() ) { - // リカバリ成功時は、フラッシュ壊れシーケンスへ - // 関数内で、LCFGのisBrokenTWLSettingsフラグがセットされる。 + // NANDからTWL本体設定データをリード + BOOL isRead = LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer ); + + // リード失敗ファイルが存在する場合は、ファイルをリカバリ + if( LCFG_RecoveryTWLSettings() ) { + if( isRead ) { + // ミラーデータのうち、一方がリードできていたなら何もしない。 }else { - // リカバリ失敗時は、FALTALエラー - UTL_SetFatalError( FATAL_ERROR_TWLSETTINGS ); + // リードに完全に失敗していた場合は、フラッシュ壊れシーケンスへ。 + LCFG_TSD_SetFlagFinishedBrokenTWLSettings( FALSE ); + (void)LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); // LCFG_READ_TEMP > LCFG_WRITE_TEMP なので、pBufferをそのまま流用 } + }else { + // リカバリ失敗時は、FALTALエラー + UTL_SetFatalError( FATAL_ERROR_TWLSETTINGS ); } SYSM_Free( pBuffer ); }else { @@ -211,11 +225,11 @@ TitleProperty *SYSM_ReadParameters( void ) } //----------------------------------------------------- - // システム領域に本体設定などをコピー + // システム領域に本体設定をコピー //----------------------------------------------------- // NTRカードアプリARM9コードのロード領域とメモリがかち合うが、先頭0x4000はセキュア領域で別バッファに格納されるので、 // ここでこれらのパラメータをロードしても大丈夫。 - SYSMi_CopyLCFGData( (u32)s_lcfgBuffer ); + SYSMi_CopyLCFGDataSettings(); //----------------------------------------------------- // 無線ON/OFFフラグをもとに、LEDを設定する。 @@ -328,8 +342,8 @@ TitleProperty *SYSM_ReadParameters( void ) } -// 本体設定データなどのメモリ展開。 -static void SYSMi_CopyLCFGData( u32 dst_addr ) +// HWInfoのメモリ展開。 +static void SYSMi_CopyLCFGDataHWInfo( u32 dst_addr ) { // HotStart時にも保持する必要のあるデータをランチャー用に移動するプリロードパラメータバッファにコピー。 MI_CpuCopy8( (void *)HW_PARAM_WIRELESS_FIRMWARE_DATA, (void *)(dst_addr + HW_PARAM_TWL_SETTINGS_DATA_SIZE), @@ -338,10 +352,17 @@ static void SYSMi_CopyLCFGData( u32 dst_addr ) // プリロードパラメータアドレスをランチャー向けに変更。 *(u32 *)HW_PRELOAD_PARAMETER_ADDR = dst_addr; - // 本体設定データ、HWノーマル情報、HWセキュア情報をメモリに展開しておく - MI_CpuCopyFast( LCFGi_GetTSD(), (void *)HW_PARAM_TWL_SETTINGS_DATA, sizeof(LCFGTWLSettingsData) ); + // HWノーマル情報、HWセキュア情報をメモリに展開しておく MI_CpuCopyFast( LCFGi_GetHWN(), (void *)HW_PARAM_TWL_HW_NORMAL_INFO, sizeof(LCFGTWLHWNormalInfo) ); MI_CpuCopyFast( LCFGi_GetHWS(), (void *)HW_HW_SECURE_INFO, HW_HW_SECURE_INFO_END - HW_HW_SECURE_INFO ); +} + + +// 本体設定データのメモリ展開。 +static void SYSMi_CopyLCFGDataSettings( void ) +{ + // 本体設定データ + MI_CpuCopyFast( LCFGi_GetTSD(), (void *)HW_PARAM_TWL_SETTINGS_DATA, sizeof(LCFGTWLSettingsData) ); // 本体設定データのLauncherStatus部分をクリアしておく {