mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新:Akabane Jumpei)
・不正なカードを挿したあと、カードが認識されないバグを修正。 ・カードの読みミスをした場合、バッファのクリアを行うように修正。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2124 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
9b0340d11a
commit
7cb3a9df57
@ -236,6 +236,7 @@ typedef enum HotSwState{
|
|||||||
HOTSW_DATA_DECRYPT_ERROR,
|
HOTSW_DATA_DECRYPT_ERROR,
|
||||||
HOTSW_BUFFER_OVERRUN_ERROR,
|
HOTSW_BUFFER_OVERRUN_ERROR,
|
||||||
HOTSW_MODE_ERROR,
|
HOTSW_MODE_ERROR,
|
||||||
|
HOTSW_ILLEGAL_CARD_ERROR,
|
||||||
HOTSW_UNEXPECTED_ERROR
|
HOTSW_UNEXPECTED_ERROR
|
||||||
} HotSwState;
|
} HotSwState;
|
||||||
|
|
||||||
|
|||||||
@ -131,7 +131,7 @@ HotSwState HOTSWi_RefreshBadBlock(u32 romMode);
|
|||||||
static void CheckCardInsert(BOOL cardExist);
|
static void CheckCardInsert(BOOL cardExist);
|
||||||
static void CheckCardPullOut(BOOL cardExist);
|
static void CheckCardPullOut(BOOL cardExist);
|
||||||
|
|
||||||
|
static void PulledOutSequence(void);
|
||||||
|
|
||||||
// Static Values ------------------------------------------------------------
|
// Static Values ------------------------------------------------------------
|
||||||
#include <twl/ltdwram_begin.h>
|
#include <twl/ltdwram_begin.h>
|
||||||
@ -148,7 +148,7 @@ static BootSegmentData *s_pBootSegBuffer;
|
|||||||
static u32 *s_pSecureSegBuffer;
|
static u32 *s_pSecureSegBuffer;
|
||||||
static u32 *s_pSecure2SegBuffer;
|
static u32 *s_pSecure2SegBuffer;
|
||||||
|
|
||||||
static CardBootData s_cbData;
|
static CardBootData s_cbData ATTRIBUTE_ALIGN(4);
|
||||||
static SYSMRomEmuInfo s_romEmuInfo;
|
static SYSMRomEmuInfo s_romEmuInfo;
|
||||||
static BOOL s_debuggerFlg;
|
static BOOL s_debuggerFlg;
|
||||||
|
|
||||||
@ -515,10 +515,32 @@ static HotSwState LoadCardData(void)
|
|||||||
// ---------------------- Game Mode ----------------------
|
// ---------------------- Game Mode ----------------------
|
||||||
romMode = HOTSW_ROM_MODE_GAME;
|
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読み込み
|
// ID読み込み
|
||||||
state = ReadIDGame(&s_cbData);
|
state = ReadIDGame(&s_cbData);
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
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();
|
state = LoadBannerData();
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
@ -526,12 +548,6 @@ static HotSwState LoadCardData(void)
|
|||||||
// 排他制御ここまで(※CRCチェックまでにミスがなかったら、排他制御ここまで)
|
// 排他制御ここまで(※CRCチェックまでにミスがなかったら、排他制御ここまで)
|
||||||
UnlockHotSwRsc(&SYSMi_GetWork()->lockCardRsc);
|
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();
|
state = CheckCardAuthCode();
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
@ -640,6 +656,8 @@ static HotSwState ReadSecureModeCardData(void)
|
|||||||
HotSwState retval = HOTSW_SUCCESS;
|
HotSwState retval = HOTSW_SUCCESS;
|
||||||
HotSwState state = HOTSW_SUCCESS;
|
HotSwState state = HOTSW_SUCCESS;
|
||||||
|
|
||||||
|
u32 secure_ID;
|
||||||
|
|
||||||
// PNG設定
|
// PNG設定
|
||||||
state = s_funcTable[s_debuggerFlg].SetPNG_S(&s_cbData);
|
state = s_funcTable[s_debuggerFlg].SetPNG_S(&s_cbData);
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
@ -652,9 +670,10 @@ static HotSwState ReadSecureModeCardData(void)
|
|||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
|
|
||||||
// カードIDの比較をして、一致しなければFALSEを返す
|
// カードIDの比較をして、一致しなければFALSEを返す
|
||||||
if(s_cbData.id_nml != s_cbData.id_scr){
|
secure_ID = (s_cbData.modeType == HOTSW_MODE1) ? s_cbData.id_scr : s_cbData.id_scr2;
|
||||||
retval = (retval == HOTSW_SUCCESS) ? HOTSW_ID_CHECK_ERROR : retval;
|
if(s_cbData.id_nml != secure_ID){
|
||||||
}
|
retval = (retval == HOTSW_SUCCESS) ? HOTSW_ID_CHECK_ERROR : retval;
|
||||||
|
}
|
||||||
|
|
||||||
if(retval == HOTSW_SUCCESS){
|
if(retval == HOTSW_SUCCESS){
|
||||||
// Secure領域のSegment読み込み
|
// Secure領域のSegment読み込み
|
||||||
@ -1631,36 +1650,16 @@ static void HotSwThread(void *arg)
|
|||||||
s_isPulledOut = FALSE;
|
s_isPulledOut = FALSE;
|
||||||
|
|
||||||
// エラー処理
|
// エラー処理
|
||||||
if(retval != HOTSW_SUCCESS || s_cbData.illegalCardFlg){
|
if(retval != HOTSW_SUCCESS){
|
||||||
ClearCardFlgs();
|
McPowerOff();
|
||||||
McPowerOff();
|
PulledOutSequence();
|
||||||
|
|
||||||
s_isPulledOut = TRUE;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// カードが抜けてたら
|
// カードが抜けてたら
|
||||||
else{
|
else{
|
||||||
#ifdef USE_WRAM_LOAD
|
PulledOutSequence();
|
||||||
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 );
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} // Card Read while loop
|
} // 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
|
Name: ClearCardFlgs
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user