From 7cb3a9df572441ee1ec13b2155c322a41838f8da Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b08762b0-b915-fc4b-9d8c-17b2551a87ff> Date: Thu, 7 Aug 2008 07:38:18 +0000 Subject: [PATCH] =?UTF-8?q?(=E6=9B=B4=E6=96=B0=EF=BC=9AAkabane=20Jumpei)?= =?UTF-8?q?=20=E3=83=BB=E4=B8=8D=E6=AD=A3=E3=81=AA=E3=82=AB=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=82=92=E6=8C=BF=E3=81=97=E3=81=9F=E3=81=82=E3=81=A8?= =?UTF-8?q?=E3=80=81=E3=82=AB=E3=83=BC=E3=83=89=E3=81=8C=E8=AA=8D=E8=AD=98?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E3=83=90=E3=82=B0=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=80=82=20=E3=83=BB=E3=82=AB=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=AE=E8=AA=AD=E3=81=BF=E3=83=9F=E3=82=B9=E3=82=92?= =?UTF-8?q?=E3=81=97=E3=81=9F=E5=A0=B4=E5=90=88=E3=80=81=E3=83=90=E3=83=83?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=81=AE=E3=82=AF=E3=83=AA=E3=82=A2=E3=82=92?= =?UTF-8?q?=E8=A1=8C=E3=81=86=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=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@2124 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../hotsw/ARM7/include/hotswTypes.h | 1 + .../libraries_sysmenu/hotsw/ARM7/src/hotsw.c | 96 ++++++++++++------- 2 files changed, 62 insertions(+), 35 deletions(-) diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h index a42ab4b6..af8fd04d 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h @@ -236,6 +236,7 @@ typedef enum HotSwState{ HOTSW_DATA_DECRYPT_ERROR, HOTSW_BUFFER_OVERRUN_ERROR, HOTSW_MODE_ERROR, + HOTSW_ILLEGAL_CARD_ERROR, HOTSW_UNEXPECTED_ERROR } HotSwState; diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 1ccb9c9a..3289cd7e 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -131,7 +131,7 @@ HotSwState HOTSWi_RefreshBadBlock(u32 romMode); static void CheckCardInsert(BOOL cardExist); static void CheckCardPullOut(BOOL cardExist); - +static void PulledOutSequence(void); // Static Values ------------------------------------------------------------ #include @@ -148,7 +148,7 @@ static BootSegmentData *s_pBootSegBuffer; static u32 *s_pSecureSegBuffer; static u32 *s_pSecure2SegBuffer; -static CardBootData s_cbData; +static CardBootData s_cbData ATTRIBUTE_ALIGN(4); static SYSMRomEmuInfo s_romEmuInfo; static BOOL s_debuggerFlg; @@ -515,10 +515,32 @@ static HotSwState LoadCardData(void) // ---------------------- Game Mode ---------------------- romMode = HOTSW_ROM_MODE_GAME; + if(retval != HOTSW_SUCCESS || s_cbData.illegalCardFlg){ + retval = (retval == HOTSW_SUCCESS) ? HOTSW_ILLEGAL_CARD_ERROR : retval; + + // 排他制御ここまで + UnlockHotSwRsc(&SYSMi_GetWork()->lockCardRsc); + + goto finalize; + } + // ID読み込み state = ReadIDGame(&s_cbData); retval = (retval == HOTSW_SUCCESS) ? state : retval; + // カードIDの比較をして、一致しなければFALSEを返す + { + u32 secure_ID = (s_cbData.modeType == HOTSW_MODE1) ? s_cbData.id_scr : s_cbData.id_scr2; + if(secure_ID != s_cbData.id_gam){ + retval = (retval == HOTSW_SUCCESS) ? HOTSW_ID_CHECK_ERROR : retval; + + // 排他制御ここまで + UnlockHotSwRsc(&SYSMi_GetWork()->lockCardRsc); + + goto finalize; + } + } + // バナーファイルの読み込み state = LoadBannerData(); retval = (retval == HOTSW_SUCCESS) ? state : retval; @@ -526,12 +548,6 @@ static HotSwState LoadCardData(void) // 排他制御ここまで(※CRCチェックまでにミスがなかったら、排他制御ここまで) UnlockHotSwRsc(&SYSMi_GetWork()->lockCardRsc); - // カードIDの比較をして、一致しなければFALSEを返す - if(s_cbData.id_scr != s_cbData.id_gam){ - retval = (retval == HOTSW_SUCCESS) ? HOTSW_ID_CHECK_ERROR : retval; - goto finalize; - } - // 認証コード読み込み&ワーク領域にコピー state = CheckCardAuthCode(); retval = (retval == HOTSW_SUCCESS) ? state : retval; @@ -640,6 +656,8 @@ static HotSwState ReadSecureModeCardData(void) HotSwState retval = HOTSW_SUCCESS; HotSwState state = HOTSW_SUCCESS; + u32 secure_ID; + // PNG設定 state = s_funcTable[s_debuggerFlg].SetPNG_S(&s_cbData); retval = (retval == HOTSW_SUCCESS) ? state : retval; @@ -652,9 +670,10 @@ static HotSwState ReadSecureModeCardData(void) retval = (retval == HOTSW_SUCCESS) ? state : retval; // カードIDの比較をして、一致しなければFALSEを返す - if(s_cbData.id_nml != s_cbData.id_scr){ - retval = (retval == HOTSW_SUCCESS) ? HOTSW_ID_CHECK_ERROR : retval; - } + secure_ID = (s_cbData.modeType == HOTSW_MODE1) ? s_cbData.id_scr : s_cbData.id_scr2; + if(s_cbData.id_nml != secure_ID){ + retval = (retval == HOTSW_SUCCESS) ? HOTSW_ID_CHECK_ERROR : retval; + } if(retval == HOTSW_SUCCESS){ // Secure領域のSegment読み込み @@ -1631,36 +1650,16 @@ static void HotSwThread(void *arg) s_isPulledOut = FALSE; // エラー処理 - if(retval != HOTSW_SUCCESS || s_cbData.illegalCardFlg){ - ClearCardFlgs(); - McPowerOff(); - - s_isPulledOut = TRUE; - + if(retval != HOTSW_SUCCESS){ + McPowerOff(); + PulledOutSequence(); break; } } // カードが抜けてたら else{ -#ifdef USE_WRAM_LOAD - SendPxiMessage(HOTSW_CARD_PULLOUT); -#endif - - ClearCardFlgs(); - - MI_CpuClear32(&s_cbData, sizeof(CardBootData)); - - MI_CpuClearFast(s_pBootSegBuffer, s_BootSegBufSize); - MI_CpuClearFast(s_pSecureSegBuffer, s_SecureSegBufSize); - MI_CpuClearFast(s_pSecure2SegBuffer, s_Secure2SegBufSize); - MI_CpuClearFast((u32 *)SYSM_CARD_BANNER_BUF, sizeof(TWLBannerFile)); - - s_isPulledOut = TRUE; - - // ワンセグのスリープ時シャットダウン対策を戻す - MCU_EnableDeepSleepToPowerLine( MCU_PWR_LINE_33, TRUE ); - + PulledOutSequence(); break; } } // Card Read while loop @@ -1671,6 +1670,33 @@ static void HotSwThread(void *arg) } +/*---------------------------------------------------------------------------* + Name: PulledOutSequence + + Description: カード抜け処理 + *---------------------------------------------------------------------------*/ +static void PulledOutSequence(void) +{ +#ifdef USE_WRAM_LOAD + SendPxiMessage(HOTSW_CARD_PULLOUT); +#endif + + ClearCardFlgs(); + + MI_CpuClear32(&s_cbData, sizeof(CardBootData)); + + MI_CpuClearFast(s_pBootSegBuffer, s_BootSegBufSize); + MI_CpuClearFast(s_pSecureSegBuffer, s_SecureSegBufSize); + MI_CpuClearFast(s_pSecure2SegBuffer, s_Secure2SegBufSize); + MI_CpuClearFast((u32 *)SYSM_CARD_BANNER_BUF, sizeof(TWLBannerFile)); + + s_isPulledOut = TRUE; + + // ワンセグのスリープ時シャットダウン対策を戻す + MCU_EnableDeepSleepToPowerLine( MCU_PWR_LINE_33, TRUE ); +} + + /*---------------------------------------------------------------------------* Name: ClearCardFlgs