mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新:Akabane Jumpei)
・Secure1,2モードのデータリードシーケンスを共通化 ・ソースちょっと整理 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1110 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
598f263932
commit
3035b1ffb3
@ -92,24 +92,19 @@ HotSwState ReadIDNormal(CardBootData *cbd)
|
|||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_STAT | (0x1 & LATENCY1_MASK);
|
reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_STAT | (0x1 & LATENCY1_MASK);
|
||||||
|
|
||||||
#if 0
|
|
||||||
// DMAが終了するまで待つ
|
|
||||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
|
||||||
#else
|
|
||||||
// メッセージ受信
|
// メッセージ受信
|
||||||
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||||
#endif
|
|
||||||
|
|
||||||
return HOTSW_SUCCESS;
|
return HOTSW_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: ReadBootSegNormal
|
Name: ReadBootSegNormal
|
||||||
*
|
|
||||||
* Description: ノーマルモードのBoot Segment読み込み
|
Description: ノーマルモードのBoot Segment読み込み
|
||||||
*
|
|
||||||
* CT=240ns Latency1=0x1fff Latency2=0x3f Pagecount=8page
|
CT=240ns Latency1=0x1fff Latency2=0x3f Pagecount=8page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ReadBootSegNormal(CardBootData *cbd)
|
HotSwState ReadBootSegNormal(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -165,13 +160,8 @@ HotSwState ReadBootSegNormal(CardBootData *cbd)
|
|||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = START_MASK | CT_MASK | PC_MASK & (pc << PC_SHIFT) | LATENCY2_MASK | LATENCY1_MASK;
|
reg_HOTSW_MCCNT1 = START_MASK | CT_MASK | PC_MASK & (pc << PC_SHIFT) | LATENCY2_MASK | LATENCY1_MASK;
|
||||||
|
|
||||||
#if 0
|
|
||||||
// DMAが終了するまで待つ
|
|
||||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
|
||||||
#else
|
|
||||||
// メッセージ受信
|
// メッセージ受信
|
||||||
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||||
#endif
|
|
||||||
|
|
||||||
page++;
|
page++;
|
||||||
}
|
}
|
||||||
@ -210,13 +200,8 @@ HotSwState ReadStatusNormal(CardBootData *cbd)
|
|||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = (cbd->gameCommondParam & ~SCRAMBLE_MASK) | START_MASK | HOTSW_PAGE_STAT;
|
reg_HOTSW_MCCNT1 = (cbd->gameCommondParam & ~SCRAMBLE_MASK) | START_MASK | HOTSW_PAGE_STAT;
|
||||||
|
|
||||||
#if 0
|
|
||||||
// DMAが終了するまで待つ
|
|
||||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
|
||||||
#else
|
|
||||||
// メッセージ受信
|
// メッセージ受信
|
||||||
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||||
#endif
|
|
||||||
|
|
||||||
return HOTSW_SUCCESS;
|
return HOTSW_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -255,11 +240,11 @@ HotSwState RefreshBadBlockNormal(CardBootData *cbd)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: ChangeModeNormal
|
Name: ChangeModeNormal
|
||||||
*
|
|
||||||
* Description: ノーマルモードからセキュアモードへの変更
|
Description: ノーマルモードからセキュアモードへの変更
|
||||||
*
|
|
||||||
* CT=240ns Latency1=0x18 Latency2=0 Pagecount=0page
|
CT=240ns Latency1=0x18 Latency2=0 Pagecount=0page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ChangeModeNormal(CardBootData *cbd)
|
HotSwState ChangeModeNormal(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -268,11 +253,11 @@ HotSwState ChangeModeNormal(CardBootData *cbd)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: ChangeModeNorma2
|
Name: ChangeModeNorma2
|
||||||
*
|
|
||||||
* Description: ノーマルモードからセキュア2モードへの変更
|
Description: ノーマルモードからセキュア2モードへの変更
|
||||||
*
|
|
||||||
* CT=240ns Latency1=0x18 Latency2=0 Pagecount=0page
|
CT=240ns Latency1=0x18 Latency2=0 Pagecount=0page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ChangeModeNormal2(CardBootData *cbd)
|
HotSwState ChangeModeNormal2(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -335,19 +320,15 @@ HotSwState LoadTable(void)
|
|||||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK | REG_MI_MCCNT0_I_MASK);
|
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK | REG_MI_MCCNT0_I_MASK);
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_16;
|
reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_16 | LATENCY2_MASK & (0x18 << LATENCY2_SHIFT);
|
||||||
|
|
||||||
#if 0
|
|
||||||
// DMAが終了するまで待つ
|
|
||||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
|
||||||
#else
|
|
||||||
// メッセージ受信
|
// メッセージ受信
|
||||||
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||||
#endif
|
|
||||||
|
|
||||||
return HOTSW_SUCCESS;
|
return HOTSW_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ReadRomEmulationInfo
|
Name: ReadRomEmulationInfo
|
||||||
|
|
||||||
@ -466,15 +447,16 @@ static void PreSendSecureCommand(CardBootData *cbd, u32 *scrambleMask)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: ReadIDSecure
|
Name: ReadIDSecure
|
||||||
*
|
|
||||||
* Description:
|
Description:
|
||||||
*
|
|
||||||
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=Status
|
CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=Status
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ReadIDSecure(CardBootData *cbd)
|
HotSwState ReadIDSecure(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
u32 scrambleMask;
|
u32 scrambleMask;
|
||||||
|
u32 *buf = (cbd->modeType == HOTSW_MODE1) ? &cbd->id_scr : &cbd->id_scr2;
|
||||||
|
|
||||||
if(!HOTSW_IsCardAccessible()){
|
if(!HOTSW_IsCardAccessible()){
|
||||||
return HOTSW_PULLED_OUT_ERROR;
|
return HOTSW_PULLED_OUT_ERROR;
|
||||||
@ -490,7 +472,7 @@ HotSwState ReadIDSecure(CardBootData *cbd)
|
|||||||
PreSendSecureCommand(cbd, &scrambleMask);
|
PreSendSecureCommand(cbd, &scrambleMask);
|
||||||
|
|
||||||
// NewDMA転送の準備
|
// NewDMA転送の準備
|
||||||
HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_scr, sizeof(cbd->id_scr) );
|
HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, buf, sizeof(buf) );
|
||||||
|
|
||||||
// MCCNT0 レジスタ設定
|
// MCCNT0 レジスタ設定
|
||||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||||
@ -498,14 +480,9 @@ HotSwState ReadIDSecure(CardBootData *cbd)
|
|||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_STAT | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_STAT | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
|
|
||||||
#if 0
|
|
||||||
// DMAが終了するまで待つ
|
|
||||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
|
||||||
#else
|
|
||||||
// メッセージ受信
|
// メッセージ受信
|
||||||
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||||
#endif
|
|
||||||
|
|
||||||
// コマンドカウンタインクリメント
|
// コマンドカウンタインクリメント
|
||||||
cbd->vbi++;
|
cbd->vbi++;
|
||||||
|
|
||||||
@ -514,9 +491,9 @@ HotSwState ReadIDSecure(CardBootData *cbd)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: ReadSegSecure
|
Name: ReadSegSecure
|
||||||
*
|
|
||||||
* Description:
|
Description:
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ReadSegSecure(CardBootData *cbd)
|
HotSwState ReadSegSecure(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -564,25 +541,20 @@ HotSwState ReadSegSecure(CardBootData *cbd)
|
|||||||
|
|
||||||
// MCCNT0 レジスタ設定
|
// MCCNT0 レジスタ設定
|
||||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (pc << PC_SHIFT) | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (pc << PC_SHIFT) | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
|
|
||||||
#if 0
|
|
||||||
// DMAが終了するまで待つ
|
|
||||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
|
||||||
#else
|
|
||||||
// メッセージ受信
|
// メッセージ受信
|
||||||
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||||
#endif
|
|
||||||
|
|
||||||
// 転送済みページ数
|
// 転送済みページ数
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 読み込みセグメント番号インクリメント
|
// 読み込みセグメント番号インクリメント
|
||||||
segNum++;
|
segNum++;
|
||||||
|
|
||||||
// コマンドカウンタインクリメント
|
// コマンドカウンタインクリメント
|
||||||
cbd->vbi++;
|
cbd->vbi++;
|
||||||
}
|
}
|
||||||
@ -592,9 +564,9 @@ HotSwState ReadSegSecure(CardBootData *cbd)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: SwitchONPNGSecure
|
Name: SwitchONPNGSecure
|
||||||
*
|
|
||||||
* Description:
|
Description:
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState SwitchONPNGSecure(CardBootData *cbd)
|
HotSwState SwitchONPNGSecure(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -630,9 +602,9 @@ HotSwState SwitchONPNGSecure(CardBootData *cbd)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: SwitchOFFPNGSecure
|
Name: SwitchOFFPNGSecure
|
||||||
*
|
|
||||||
* Description:
|
Description:
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState SwitchOFFPNGSecure(CardBootData *cbd)
|
HotSwState SwitchOFFPNGSecure(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -668,11 +640,11 @@ HotSwState SwitchOFFPNGSecure(CardBootData *cbd)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: ChangeModeSecure
|
Name: ChangeModeSecure
|
||||||
*
|
|
||||||
* Description:
|
Description:
|
||||||
*
|
|
||||||
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page
|
CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ChangeModeSecure(CardBootData *cbd)
|
HotSwState ChangeModeSecure(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -711,9 +683,9 @@ HotSwState ChangeModeSecure(CardBootData *cbd)
|
|||||||
// ■ ゲームモードのコマンド ■
|
// ■ ゲームモードのコマンド ■
|
||||||
// ■------------------------------------■
|
// ■------------------------------------■
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: ReadIDGame
|
Name: ReadIDGame
|
||||||
*
|
|
||||||
* Description: ゲームモードでIDを読み込む
|
Description: ゲームモードでIDを読み込む
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ReadIDGame(CardBootData *cbd)
|
HotSwState ReadIDGame(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -738,24 +710,19 @@ HotSwState ReadIDGame(CardBootData *cbd)
|
|||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_STAT;
|
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_STAT;
|
||||||
|
|
||||||
#if 0
|
|
||||||
// DMAが終了するまで待つ
|
|
||||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
|
||||||
#else
|
|
||||||
// メッセージ受信
|
// メッセージ受信
|
||||||
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||||
#endif
|
|
||||||
|
|
||||||
return HOTSW_SUCCESS;
|
return HOTSW_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: ReadPageGame
|
Name: ReadPageGame
|
||||||
*
|
|
||||||
* Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む
|
Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む
|
||||||
*
|
|
||||||
* CT=150ns Pagecount=1page Latency=RomHeaderで指定の値
|
CT=150ns Pagecount=1page Latency=RomHeaderで指定の値
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ReadPageGame(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
HotSwState ReadPageGame(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||||
{
|
{
|
||||||
@ -788,13 +755,8 @@ HotSwState ReadPageGame(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
|||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_1;
|
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_1;
|
||||||
|
|
||||||
#if 0
|
|
||||||
// DMAが終了するまで待つ
|
|
||||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
|
||||||
#else
|
|
||||||
// メッセージ受信
|
// メッセージ受信
|
||||||
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return HOTSW_SUCCESS;
|
return HOTSW_SUCCESS;
|
||||||
@ -802,9 +764,9 @@ HotSwState ReadPageGame(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: ReadStatusGame
|
Name: ReadStatusGame
|
||||||
*
|
|
||||||
* Description: ゲームモードでステータスを読み込む
|
Description: ゲームモードでステータスを読み込む
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ReadStatusGame(CardBootData *cbd)
|
HotSwState ReadStatusGame(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -829,22 +791,17 @@ HotSwState ReadStatusGame(CardBootData *cbd)
|
|||||||
// MCCNT1 レジスタ設定 (START = 1 W/R = 0 PC = 111(ステータスリード) その他Romヘッダの情報におまかせ)
|
// MCCNT1 レジスタ設定 (START = 1 W/R = 0 PC = 111(ステータスリード) その他Romヘッダの情報におまかせ)
|
||||||
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_STAT;
|
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_STAT;
|
||||||
|
|
||||||
#if 0
|
|
||||||
// DMAが終了するまで待つ
|
|
||||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
|
||||||
#else
|
|
||||||
// メッセージ受信
|
// メッセージ受信
|
||||||
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||||
#endif
|
|
||||||
|
|
||||||
return HOTSW_SUCCESS;
|
return HOTSW_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -----------------------------------------------------------------
|
/* -----------------------------------------------------------------
|
||||||
* RefreshBadBlockGame関数
|
RefreshBadBlockGame関数
|
||||||
*
|
|
||||||
* ゲームモードでバッドブロックを置換
|
ゲームモードでバッドブロックを置換
|
||||||
* ----------------------------------------------------------------- */
|
* ----------------------------------------------------------------- */
|
||||||
HotSwState RefreshBadBlockGame(CardBootData *cbd)
|
HotSwState RefreshBadBlockGame(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -32,7 +32,7 @@
|
|||||||
#define CHATTERING_COUNTER 0x1988 // 100ms分 (0x1988 * 15.3us = 100000us)
|
#define CHATTERING_COUNTER 0x1988 // 100ms分 (0x1988 * 15.3us = 100000us)
|
||||||
#define COUNTER_A 0x51C // 20ms分 ( 0x51C * 15.3us = 20012us)
|
#define COUNTER_A 0x51C // 20ms分 ( 0x51C * 15.3us = 20012us)
|
||||||
|
|
||||||
#define CARD_EXIST_CHECK_INTERVAL 300
|
#define CARD_EXIST_CHECK_INTERVAL 200
|
||||||
|
|
||||||
#define UNDEF_CODE 0xe7ffdeff // 未定義コード
|
#define UNDEF_CODE 0xe7ffdeff // 未定義コード
|
||||||
#define ENCRYPT_DEF_SIZE 0x800 // 2KB ※ ARM9常駐モジュール先頭2KB
|
#define ENCRYPT_DEF_SIZE 0x800 // 2KB ※ ARM9常駐モジュール先頭2KB
|
||||||
@ -81,6 +81,7 @@ static void McPowerOff(void);
|
|||||||
static void SetMCSCR(void);
|
static void SetMCSCR(void);
|
||||||
|
|
||||||
static BOOL isTwlModeLoad(void);
|
static BOOL isTwlModeLoad(void);
|
||||||
|
static HotSwState ReadSecureModeCardData(void);
|
||||||
|
|
||||||
static void GenVA_VB_VD(void);
|
static void GenVA_VB_VD(void);
|
||||||
static HotSwState DecryptObjectFile(void);
|
static HotSwState DecryptObjectFile(void);
|
||||||
@ -424,27 +425,9 @@ static HotSwState LoadCardData(void)
|
|||||||
// ---------------------- Secure Mode ----------------------
|
// ---------------------- Secure Mode ----------------------
|
||||||
romMode = HOTSW_ROM_MODE_SECURE;
|
romMode = HOTSW_ROM_MODE_SECURE;
|
||||||
|
|
||||||
// PNG設定
|
// SecureモードのIDとSecureSegmentを読み込む
|
||||||
state = s_funcTable[s_cbData.cardType].SetPNG_S(&s_cbData);
|
state = ReadSecureModeCardData();
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
|
|
||||||
// DS側符号生成回路初期値設定 (レジスタ設定)
|
|
||||||
SetMCSCR();
|
|
||||||
|
|
||||||
// ID読み込み
|
|
||||||
state = s_funcTable[s_cbData.cardType].ReadID_S(&s_cbData);
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(retval == HOTSW_SUCCESS){
|
|
||||||
// Secure領域のSegment読み込み
|
|
||||||
state = s_funcTable[s_cbData.cardType].ReadSegment_S(&s_cbData);
|
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ★TWLカード対応 一旦リセット後Secure2モードに移行
|
// ★TWLカード対応 一旦リセット後Secure2モードに移行
|
||||||
// SCFG
|
// SCFG
|
||||||
@ -477,20 +460,9 @@ static HotSwState LoadCardData(void)
|
|||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
|
|
||||||
// ---------------------- Secure2 Mode ----------------------
|
// ---------------------- Secure2 Mode ----------------------
|
||||||
// PNG設定
|
// Secure2モードのIDとSecureSegmentを読み込む
|
||||||
state = s_funcTable[s_cbData.cardType].SetPNG_S(&s_cbData);
|
state = ReadSecureModeCardData();
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
|
||||||
|
|
||||||
// DS側符号生成回路初期値設定 (レジスタ設定)
|
|
||||||
SetMCSCR();
|
|
||||||
|
|
||||||
// セキュア2カードID読み込み
|
|
||||||
state = s_funcTable[s_cbData.cardType].ReadID_S(&s_cbData);
|
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
|
|
||||||
// Secure2領域のSegment読み込み
|
|
||||||
state = s_funcTable[s_cbData.cardType].ReadSegment_S(&s_cbData);
|
|
||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ゲームモードに移行
|
// ゲームモードに移行
|
||||||
@ -631,6 +603,44 @@ static BOOL isTwlModeLoad(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: ReadSecureModeCardData
|
||||||
|
|
||||||
|
Description: セキュアモードの各種読み込みを行う関数
|
||||||
|
|
||||||
|
※ s_cbData.modeTypeの設定はこの関数の外で行う
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static HotSwState ReadSecureModeCardData(void)
|
||||||
|
{
|
||||||
|
HotSwState retval = HOTSW_SUCCESS;
|
||||||
|
HotSwState state = HOTSW_SUCCESS;
|
||||||
|
|
||||||
|
// PNG設定
|
||||||
|
state = s_funcTable[s_cbData.cardType].SetPNG_S(&s_cbData);
|
||||||
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
|
|
||||||
|
// DS側符号生成回路初期値設定 (レジスタ設定)
|
||||||
|
SetMCSCR();
|
||||||
|
|
||||||
|
// ID読み込み
|
||||||
|
state = s_funcTable[s_cbData.cardType].ReadID_S(&s_cbData);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(retval == HOTSW_SUCCESS){
|
||||||
|
// Secure領域のSegment読み込み
|
||||||
|
state = s_funcTable[s_cbData.cardType].ReadSegment_S(&s_cbData);
|
||||||
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: HOTSWi_RefreshBadBlock
|
Name: HOTSWi_RefreshBadBlock
|
||||||
|
|
||||||
@ -1378,6 +1388,9 @@ static void HotSwThread(void *arg)
|
|||||||
// → 1.全てのレジスタをクリアする (カードがささっていない時)
|
// → 1.全てのレジスタをクリアする (カードがささっていない時)
|
||||||
// 2.一度電源を落としてNomalモードにする (NANDアプリ等を起動する場合)
|
// 2.一度電源を落としてNomalモードにする (NANDアプリ等を起動する場合)
|
||||||
// 3.必要なレジスタを残して、後はクリア (ささっているカードを起動する場合)
|
// 3.必要なレジスタを残して、後はクリア (ささっているカードを起動する場合)
|
||||||
|
//
|
||||||
|
// NANDアプリ起動時の終了処理が確認できたら、、BOOTAPIでKillThreadでスレッドを殺せるようにしておく。
|
||||||
|
// スレッドを殺す前に、IREQとDET割り込みを無効にしておく。
|
||||||
// HOTSW_Finalize();
|
// HOTSW_Finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user