From d42503d188189694744c020fff073ae4a7e0f80a Mon Sep 17 00:00:00 2001 From: nakasima Date: Fri, 16 May 2008 09:34:22 +0000 Subject: [PATCH] =?UTF-8?q?NAND=E3=82=A2=E3=83=97=E3=83=AA=E3=83=96?= =?UTF-8?q?=E3=83=BC=E3=83=88=E6=99=82=E3=81=AB=E3=82=AB=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=82=A2=E3=83=97=E3=83=AA=E3=81=AEROM=E3=83=98=E3=83=83?= =?UTF-8?q?=E3=83=80=E3=82=92=E5=8F=82=E7=85=A7=E3=81=97=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=82=8B=E7=AE=87=E6=89=80=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=82?= =?UTF-8?q?=20HOTSW=E7=B5=82=E4=BA=86=E5=87=A6=E7=90=86=E3=81=AE=E5=AE=8C?= =?UTF-8?q?=E4=BA=86=E3=82=92ARM9=E3=81=A7=E7=A2=BA=E8=AA=8D=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/trunk@1383 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/libraries_sysmenu/boot/ARM9/src/bootAPI.c | 5 +++++ build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c | 13 +++++++++---- .../libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c | 15 +++++++++++++-- build/libraries_sysmenu/sysmenu/ARM9/src/title.c | 6 ++++-- include/sysmenu/hotsw/common/hotsw.h | 3 +++ include/sysmenu/sysmenu_lib/common/sysmenu_work.h | 1 + 6 files changed, 35 insertions(+), 8 deletions(-) diff --git a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c index d54f3e0b..b0ada1da 100644 --- a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c @@ -61,6 +61,11 @@ void BOOT_Ready( void ) BOOL isNtrMode; int i; + // HOTSW終了処理待ち + while( ! HOTSW_isFinalized() ) { + OS_Sleep( 1 ); + } + // エントリアドレスの正当性をチェックし、無効な場合は無限ループに入る。 // SYSMi_CheckEntryAddress(); diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index db5ac3d3..5c5ed835 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -1908,7 +1908,7 @@ static void FinalizeHotSw(HotSwApliType type) if(type == HOTSW_APLITYPE_CARD){ ClearUnnecessaryCardRegister(); - return; + goto final; } isCardExist = HOTSW_IsCardExist(); @@ -1918,7 +1918,7 @@ static void FinalizeHotSw(HotSwApliType type) // カードがなかったら、レジスタクリアしてリターン if(!isCardExist){ ClearAllCardRegister(); - return; + goto final; } switch(type){ @@ -1932,7 +1932,7 @@ static void FinalizeHotSw(HotSwApliType type) OS_PutString("Failed To Change Game Mode... Card Slot Power Off\n"); - return; + goto final; } break; @@ -1944,7 +1944,8 @@ static void FinalizeHotSw(HotSwApliType type) OS_Sleep(1); } - if(s_cbData.pBootSegBuf->rh.s.game_card_on){ + // NANDアプリヘッダはコピー済み + if(((ROM_Header*)SYSM_CARD_ROM_HEADER_BUF)->s.game_card_on){ McPowerOn(); s_cbData.modeType = HOTSW_MODE2; @@ -1967,6 +1968,10 @@ static void FinalizeHotSw(HotSwApliType type) // 必要なレジスタ以外クリア ClearUnnecessaryCardRegister(); + +final: + // 終了完了通知 + SYSMi_GetWork()->flags.hotsw.isFinalized = TRUE; } diff --git a/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c b/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c index ac9dbf40..5cb98dc4 100644 --- a/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c +++ b/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c @@ -117,6 +117,17 @@ void HOTSW_FinalizeHotSWAsync( HotSwApliType apliType ) } +/*---------------------------------------------------------------------------* + Name: HOTSW_isFinalized + + Description: 終了処理が完了したかを返す + *---------------------------------------------------------------------------*/ +BOOL HOTSW_isFinalized(void) +{ + return SYSMi_GetWork()->flags.hotsw.isFinalized; +} + + /*---------------------------------------------------------------------------* Name: HOTSW_isEnableHotSW @@ -124,7 +135,7 @@ void HOTSW_FinalizeHotSWAsync( HotSwApliType apliType ) *---------------------------------------------------------------------------*/ BOOL HOTSW_isEnableHotSW(void) { - return SYSMi_GetWork()->flags.hotsw.isEnableHotSW ? TRUE : FALSE; + return SYSMi_GetWork()->flags.hotsw.isEnableHotSW; } @@ -135,7 +146,7 @@ BOOL HOTSW_isEnableHotSW(void) *---------------------------------------------------------------------------*/ BOOL HOTSW_isCardLoadCompleted(void) { - return SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted ? TRUE : FALSE; + return SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted; } diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 41e47142..d8721bdb 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -401,6 +401,8 @@ static void SYSMi_FinalizeHotSWAsync( TitleProperty *pBootTitle, ROM_Header *hea { HotSwApliType hotsw_type; + DC_StoreRange( head, sizeof(ROM_Header) ); + switch( pBootTitle->flags.bootType ) { case LAUNCHER_BOOTTYPE_NAND: @@ -692,10 +694,10 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len); { // ヘッダ読み込み完了フラグを立てる SYSMi_GetWork()->flags.common.isHeaderLoadCompleted = TRUE; - // WRAM経由ロードの場合はAES初期化 - (void)SYSM_InitDecryptAESRegion_W( (ROM_Header_Short *)destaddr[region_header] ); // HOTSW終了処理有効化 SYSMi_FinalizeHotSWAsync( pBootTitle, head ); + // WRAM経由ロードの場合はAES初期化 + (void)SYSM_InitDecryptAESRegion_W( (ROM_Header_Short *)destaddr[region_header] ); } } diff --git a/include/sysmenu/hotsw/common/hotsw.h b/include/sysmenu/hotsw/common/hotsw.h index c7819f4f..ab6cca51 100644 --- a/include/sysmenu/hotsw/common/hotsw.h +++ b/include/sysmenu/hotsw/common/hotsw.h @@ -107,6 +107,9 @@ BOOL HOTSW_isEnableHotSW(void); // カードアプリのロードが完了しているかを返す BOOL HOTSW_isCardLoadCompleted(void); +// 終了処理が完了したかを返す +BOOL HOTSW_isFinalized(void); + #ifdef USE_WRAM_LOAD // 活栓挿抜処理の初期化 void HOTSW_Init(); diff --git a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h index b16336c4..6dc7c7b3 100644 --- a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h +++ b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h @@ -124,6 +124,7 @@ typedef struct SYSM_work { vu16 isValidCardBanner :1; // バナーデータ更新? vu16 is1stCardChecked :1; // カードデータの1stチェック完了? vu16 isCardGameMode :1; // カードがゲームモードに遷移したか? + vu16 isFinalized :1; // HOTSW終了処理完了 vu16 :0; vu8 isCardStateChanged; // カード状態更新フラグ }hotsw;