カード抜去時にROMエミュレーション情報をクリアしないように変更。

NANDアプリデバッグ時にROMエミュレーションしないケースに対応。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1074 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nakasima 2008-04-07 09:56:46 +00:00
parent 4db0d8c3d8
commit cd6d0fbfa9
5 changed files with 52 additions and 26 deletions

View File

@ -38,7 +38,7 @@ HotSwState ChangeModeNormal2(CardBootData *cbd);
HotSwState LoadTable(void);
// デバッガのROMエミュレーション情報読み込み
HotSwState ReadRomEmulationInfo(CardBootData *cbd);
HotSwState ReadRomEmulationInfo(SYSMRomEmuInfo *info);
// ■ セキュアモードのコマンド ■

View File

@ -290,11 +290,9 @@ typedef struct CardBootData{
u32 arm7Ltd;
BOOL twlFlg;
BOOL debuggerFlg;
u32 romStatus;
u32 romEmuBuf[ROM_EMULATION_DATA_SIZE/sizeof(u32)];
u32 keyBuf[KEY_BUF_SIZE];
CardTypeEx cardType;

View File

@ -353,11 +353,11 @@ HotSwState LoadTable(void)
Description: Romエミュレーション情報の読み込み
*---------------------------------------------------------------------------*/
HotSwState ReadRomEmulationInfo(CardBootData *cbd)
HotSwState ReadRomEmulationInfo(SYSMRomEmuInfo *info)
{
u32 count=0;
u32 temp;
u32 *dst = cbd->romEmuBuf;
u32 *dst = (void*)info;
// 量産用CPUでは平文アクセス防止のためリードしない
if ( ! (*(u8*)(OS_CHIPTYPE_DEBUGGER_ADDR) & OS_CHIPTYPE_DEBUGGER_MASK) )
@ -428,7 +428,7 @@ static void SetSecureCommand(SecureCommandType type, CardBootData *cbd)
cndLE.dw |= cbd->vbi;
cndLE.dw |= data << HSWOP_S_VA_SHIFT;
if(!cbd->debuggerFlg){
if(!HOTSWi_IsRomEmulation()){
// コマンドの暗号化
EncryptByBlowfish( &cbd->keyTable, (u32*)&cndLE.b[4], (u32*)cndLE.b );
}
@ -481,7 +481,7 @@ HotSwState ReadIDSecure(CardBootData *cbd)
}
// スクランブルの設定
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
scrambleMask = HOTSWi_IsRomEmulation() ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
// コマンド作成・設定
SetSecureCommand(S_RD_ID, cbd);
@ -520,7 +520,7 @@ HotSwState ReadIDSecure(CardBootData *cbd)
*---------------------------------------------------------------------------*/
HotSwState ReadSegSecure(CardBootData *cbd)
{
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
u32 scrambleMask = HOTSWi_IsRomEmulation() ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
u32 *buf = (cbd->modeType == HOTSW_MODE1) ? cbd->pSecureSegBuf : cbd->pSecure2SegBuf;
u32 loop, pc, size, interval, i, j=0, k;
u64 segNum = 4;
@ -605,7 +605,7 @@ HotSwState SwitchONPNGSecure(CardBootData *cbd)
}
// スクランブルの設定
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
scrambleMask = HOTSWi_IsRomEmulation() ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
// コマンド作成・設定
SetSecureCommand(S_PNG_ON, cbd);
@ -643,7 +643,7 @@ HotSwState SwitchOFFPNGSecure(CardBootData *cbd)
}
// スクランブルの設定
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
scrambleMask = HOTSWi_IsRomEmulation() ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
// コマンド作成・設定
SetSecureCommand(S_PNG_OFF, cbd);
@ -683,7 +683,7 @@ HotSwState ChangeModeSecure(CardBootData *cbd)
}
// スクランブルの設定
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
scrambleMask = HOTSWi_IsRomEmulation() ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
// コマンド作成・設定
SetSecureCommand(S_CHG_MODE, cbd);

View File

@ -105,6 +105,8 @@ static u32 *s_pSecureSegBuffer; //
static u32 *s_pSecure2SegBuffer; // カード抜けてもバッファの場所覚えとく
static CardBootData s_cbData;
static SYSMRomEmuInfo s_romEmuInfo;
static BOOL debuggerFlg;
// HMACSHA1の鍵
static u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = {
@ -310,7 +312,7 @@ static HotSwState LoadCardData(void)
s_cbData.cardType = (s_cbData.id_nml & HOTSW_ROMID_1TROM_MASK) ? DS_CARD_TYPE_2 : DS_CARD_TYPE_1;
{
SYSMRomEmuInfo *romEmuInfo = (void *)s_cbData.romEmuBuf;
SYSMRomEmuInfo *romEmuInfo = (void *)&s_romEmuInfo;
// バナーリードが完了して、フラグ処理が終わるまでARM9と排他制御する
LockHotSwRsc(&SYSMi_GetWork()->lockCardRsc);
@ -323,24 +325,19 @@ static HotSwState LoadCardData(void)
if ( ! SYSMi_GetWork()->flags.hotsw.is1stCardChecked )
{
// Romエミュレーション情報を取得
state = ReadRomEmulationInfo(&s_cbData);
state = ReadRomEmulationInfo(&s_romEmuInfo);
retval = (retval == HOTSW_SUCCESS) ? state : retval;
// 取得したRomエミュレーション情報を比較
s_cbData.debuggerFlg = TRUE;
debuggerFlg = TRUE;
if ( romEmuInfo->magic_code != SYSM_ROMEMU_INFO_MAGIC_CODE ){
s_cbData.debuggerFlg = FALSE;
debuggerFlg = FALSE;
}
}
// 初回のRomエミュレーション情報を使用
if(s_cbData.debuggerFlg &&
#ifndef DEBUG_USED_CARD_SLOT_B_
romEmuInfo->isEnableSlot1){
#else
romEmuInfo->isEnableSlot2){
#endif
OS_PutString("Read Debugger\n");
if(HOTSWi_IsRomEmulation()){
OS_PutString("Read Emuration ROM\n");
s_cbData.cardType = ROM_EMULATION;
s_cbData.gameCommondParam = s_cbData.pBootSegBuf->rh.s.game_cmd_param & ~SCRAMBLE_MASK;
OS_TPrintf("SYSMi_GetWork()->gameCommondParam : 0x%08x\n", s_cbData.gameCommondParam);
@ -541,7 +538,32 @@ HotSwState HOTSWi_RefreshBadBlock(u32 romMode)
* ----------------------------------------------------------------- */
void* HOTSW_GetRomEmulationBuffer(void)
{
return s_cbData.romEmuBuf;
return &s_romEmuInfo;
}
/* -----------------------------------------------------------------
* HOTSWi_IsRunOnDebugger関数
*
* ISデバッガ上で動作しているか
* ----------------------------------------------------------------- */
BOOL HOTSWi_IsRunOnDebugger(void)
{
return debuggerFlg;
}
/* -----------------------------------------------------------------
* HOTSWi_IsRomEmulation関数
*
* ROMをエミュレーションしているか
* ----------------------------------------------------------------- */
BOOL HOTSWi_IsRomEmulation(void)
{
return debuggerFlg &&
#ifndef DEBUG_USED_CARD_SLOT_B_
s_romEmuInfo.isEnableSlot1;
#else
s_romEmuInfo.isEnableSlot2;
#endif
}
/* -----------------------------------------------------------------
@ -583,10 +605,10 @@ static HotSwState LoadBannerData(void)
}
// デバッガ情報
if ( ! SYSMi_GetWork()->flags.hotsw.is1stCardChecked && s_cbData.debuggerFlg )
if ( ! SYSMi_GetWork()->flags.hotsw.is1stCardChecked && debuggerFlg )
{
MI_CpuCopy8( HOTSW_GetRomEmulationBuffer(), &SYSMi_GetWork()->romEmuInfo, ROM_EMULATION_DATA_SIZE );
SYSMi_GetWork()->flags.hotsw.isOnDebugger = s_cbData.debuggerFlg;
MI_CpuCopy8( HOTSW_GetRomEmulationBuffer(), &s_romEmuInfo, ROM_EMULATION_DATA_SIZE );
SYSMi_GetWork()->flags.hotsw.isOnDebugger = debuggerFlg;
}
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;

View File

@ -84,6 +84,12 @@ SDK_INLINE void* HOTSW_GetRomEmulationBuffer(void)
}
#endif // SDK_ARM9
// ISデバッガ上で動作しているか
BOOL HOTSWi_IsRunOnDebugger(void);
// ROMをエミュレーションしているか
BOOL HOTSWi_IsRomEmulation(void);
// デバッガ通信用にカードスロットの電源をONにする。
void HOTSWi_TurnCardPowerOn(u32 slot);