mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
無線ファームロード処理の修正。HotStart初期化に失敗した時は、その場でColdStartロードを再実行するようにする。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@951 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
5928ff205a
commit
3f548b7ba5
@ -35,6 +35,27 @@ const LauncherParamBody *SYSM_GetLauncherParamBody( void )
|
||||
}
|
||||
|
||||
|
||||
// ホットスタートか?
|
||||
BOOL SYSM_IsHotStart( void )
|
||||
{
|
||||
return (BOOL)SYSMi_GetWork()->flags.common.isHotStart;
|
||||
}
|
||||
|
||||
|
||||
// FATALエラーかどうかをセット
|
||||
void SYSM_SetFatalError( BOOL isFatalError )
|
||||
{
|
||||
SYSMi_GetWork()->flags.common.isFatalError = isFatalError;
|
||||
}
|
||||
|
||||
|
||||
// FATALエラーか?
|
||||
BOOL SYSM_IsFatalError( void )
|
||||
{
|
||||
return (BOOL)SYSMi_GetWork()->flags.common.isFatalError;
|
||||
}
|
||||
|
||||
|
||||
// ロゴデモスキップかどうかをセット
|
||||
void SYSM_SetLogoDemoSkip( BOOL skip )
|
||||
{
|
||||
@ -69,13 +90,6 @@ BOOL SYSMi_IsDebuggerBannerViewMode( void )
|
||||
}
|
||||
|
||||
|
||||
// TPリード可能状態か?
|
||||
BOOL SYSM_IsTPReadable( void )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
// TSD有効/無効をセット
|
||||
void SYSM_SetValidTSD( BOOL valid )
|
||||
{
|
||||
|
||||
@ -584,6 +584,8 @@ static TitleProperty *ProcessPads( TitleProperty *pTitleList )
|
||||
{
|
||||
//PlayStream(&strm, filename);
|
||||
ret = &pTitleList[selected];
|
||||
// ブートするアプリのindex番号を本体設定に保存する。(実際の保存は、SYSMライブラリがブート時に行います。)
|
||||
LCFG_TSD_SetLastTimeBootSoftIndex( (u8)selected );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -54,7 +54,8 @@
|
||||
/*
|
||||
internal variables
|
||||
*/
|
||||
|
||||
static BOOL s_isHotStartWLFirm;
|
||||
static volatile BOOL s_isFinished;
|
||||
static u32* pNwmBuf;
|
||||
static u8* pFwBuffer = 0;
|
||||
#if (MEASURE_WIRELESS_INITTIME == 1)
|
||||
@ -339,12 +340,13 @@ void PrintDigest(u8 *digest)
|
||||
#endif
|
||||
|
||||
|
||||
BOOL InstallWlanFirmware(void)
|
||||
BOOL InstallWlanFirmware( BOOL isHotStartWLFirm )
|
||||
{
|
||||
NWMRetCode err;
|
||||
BOOL isColdStart;
|
||||
|
||||
pNwmBuf = 0;
|
||||
s_isFinished = FALSE;
|
||||
pNwmBuf = 0;
|
||||
pFwBuffer = 0;
|
||||
|
||||
OS_InitMessageQueue(&mesq, mesAry, sizeof(mesAry)/sizeof(mesAry[0]));
|
||||
@ -357,7 +359,10 @@ BOOL InstallWlanFirmware(void)
|
||||
TemporallyなWorkaroundとして、この場合はColdStart扱いにしています。
|
||||
初期化時間等の要因を鑑みて、本実装をどうするか検討します。
|
||||
*/
|
||||
if (TRUE == SYSMi_GetWork()->flags.common.isHotStart)
|
||||
|
||||
s_isHotStartWLFirm = isHotStartWLFirm;
|
||||
|
||||
if (TRUE == isHotStartWLFirm )
|
||||
{
|
||||
isColdStart = FALSE;
|
||||
|
||||
@ -498,7 +503,7 @@ instfirm_error:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
BOOL GetWlanFirmwareInstallResult(WLANFirmResult *pResult);
|
||||
BOOL GetWlanFirmwareInstallResult(WLANFirmResult *pResult)
|
||||
{
|
||||
OSMessage msg;
|
||||
@ -510,3 +515,31 @@ BOOL GetWlanFirmwareInstallResult(WLANFirmResult *pResult)
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
// 無線ファームロード完了?
|
||||
BOOL PollingInstallWlanFirmware( void )
|
||||
{
|
||||
if ( !s_isFinished ) {
|
||||
WLANFirmResult result;
|
||||
if( GetWlanFirmwareInstallResult( &result ) ) {
|
||||
if( result != WLANFIRM_RESULT_SUCCESS ) {
|
||||
// ロード失敗
|
||||
if( !s_isHotStartWLFirm ) {
|
||||
// ColdStartの無線ファームロードなら、FATALエラー
|
||||
SYSM_SetFatalError( TRUE );
|
||||
}else {
|
||||
// そうでない場合は、ColdStartロードで再度実行。
|
||||
if( !InstallWlanFirmware( FALSE ) ) {
|
||||
SYSM_SetFatalError( TRUE );
|
||||
s_isFinished = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
s_isFinished = TRUE;
|
||||
}
|
||||
}
|
||||
return s_isFinished;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -33,23 +33,25 @@ typedef enum {
|
||||
|
||||
InstallWlanFirmware
|
||||
|
||||
引数 :なし
|
||||
引数 :BOOL isForceLoad : TRUE->強制ファームロード, FALSE->ファームロードせずリスタート
|
||||
返り値:TRUE … 無線ファームウェアインストールの非同期処理中
|
||||
FALSE … 無線ファームウェアインストールに失敗した
|
||||
*/
|
||||
|
||||
BOOL InstallWlanFirmware(void);
|
||||
BOOL InstallWlanFirmware( BOOL isHotStartWLFirm );
|
||||
|
||||
|
||||
/*
|
||||
|
||||
GetWlanFirmwareInstallResult
|
||||
PollingInstallWlanFirmware
|
||||
|
||||
引数 :pResult 無線ファームウェアインストール結果コード(WLANFirmResult)
|
||||
引数 :なし
|
||||
返り値:TRUE … 無線ファームウェアインストール処理が完了
|
||||
FALSE … 無線ファームウェアインストール処理が未完了
|
||||
*/
|
||||
|
||||
BOOL GetWlanFirmwareInstallResult(WLANFirmResult *pResult);
|
||||
BOOL PollingInstallWlanFirmware( void );
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -100,10 +100,7 @@ void TwlMain( void )
|
||||
(void)OS_EnableInterrupts();
|
||||
|
||||
SYSM_InitPXI(); // 割り込み許可後にコールする必要あり。
|
||||
while ( ! PXI_IsCallbackReady( PXI_FIFO_TAG_HOTSW, PXI_PROC_ARM7 ) )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
FS_Init( FS_DMA_NOT_USE );
|
||||
|
||||
#ifdef DEBUG_LAUNCHER_DUMP
|
||||
@ -132,10 +129,10 @@ void TwlMain( void )
|
||||
// 各種パラメータの取得------------
|
||||
pBootTitle = SYSM_ReadParameters(); // 本体設定データ、リセットパラメータのリード、検査用オート起動カード判定、量産ライン用キーショートカット起動判定等のリード
|
||||
|
||||
if( SYSMi_GetWork()->flags.common.isFatalError ) {
|
||||
if( SYSM_IsFatalError() ) {
|
||||
// FATALエラー処理
|
||||
}
|
||||
if( SYSMi_GetWork()->flags.common.isInitialSettings ) {
|
||||
if( !LCFG_TSD_IsFinishedInitialSetting() ) {
|
||||
// 初回起動シーケンス判定
|
||||
}
|
||||
|
||||
@ -209,11 +206,14 @@ void TwlMain( void )
|
||||
|
||||
// 無線ファームウェアを無線モジュールにダウンロードする。
|
||||
#if( WIRELESS_FIRM_LOADING == 1 )
|
||||
if( FALSE == InstallWlanFirmware() ) {
|
||||
if( FALSE == InstallWlanFirmware( SYSM_IsHotStart() ) ) {
|
||||
OS_TPrintf( "ERROR: Wireless firmware download failed!\n" );
|
||||
}
|
||||
#endif
|
||||
|
||||
if( SYSM_IsFatalError() ) {
|
||||
// FATALエラー処理
|
||||
}
|
||||
|
||||
// メインループ--------------------
|
||||
while( 1 ) {
|
||||
@ -280,6 +280,7 @@ void TwlMain( void )
|
||||
break;
|
||||
case AUTHENTICATE:
|
||||
if( ( direct_boot || ( !direct_boot && LauncherFadeout( s_titleList ) ) ) &&
|
||||
PollingInstallWlanFirmware() && // アプリブート前に無線ファームのロードは完了しておく必要がある
|
||||
SYSM_IsAuthenticateTitleFinished() )
|
||||
{
|
||||
switch ( SYSM_TryToBootTitle( pBootTitle, s_titleList ) ) { // アプリ認証結果取得orブート 成功時:never return
|
||||
@ -300,8 +301,12 @@ void TwlMain( void )
|
||||
// カードアプリリストの取得(スレッドで随時カード挿抜を通知されるものをメインループで取得)
|
||||
(void)SYSM_GetCardTitleList( s_titleList );
|
||||
|
||||
// 無線ファームロードのポーリング
|
||||
(void)PollingInstallWlanFirmware();
|
||||
|
||||
// コマンドフラッシュ
|
||||
(void)SND_FlushCommand(SND_COMMAND_NOBLOCK);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user