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