mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新:Akabane Jumpei)
・カードロック位置を修正 ・Clone Boot判定を追加 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@700 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
5955f2c920
commit
fd89b0dbbf
@ -20,6 +20,7 @@
|
|||||||
#include <dsCardType2.h>
|
#include <dsCardType2.h>
|
||||||
#include <romEmulation.h>
|
#include <romEmulation.h>
|
||||||
#include <customNDma.h>
|
#include <customNDma.h>
|
||||||
|
#include <../build/libraries/mb/common/include/mb_fileinfo.h> // MB_AUTHCODE_SIZE
|
||||||
|
|
||||||
//#define HOTSW_FORCE_CARD_B
|
//#define HOTSW_FORCE_CARD_B
|
||||||
|
|
||||||
@ -95,6 +96,7 @@ static HotSwState ReadRomEmulationData(void);
|
|||||||
static HotSwState ReadIDNormal(void);
|
static HotSwState ReadIDNormal(void);
|
||||||
static HotSwState LoadStaticModule(void);
|
static HotSwState LoadStaticModule(void);
|
||||||
static HotSwState LoadCardData(void);
|
static HotSwState LoadCardData(void);
|
||||||
|
static HotSwState CheckCardAuthCode(void);
|
||||||
|
|
||||||
static void SetHotSwState(BOOL busy);
|
static void SetHotSwState(BOOL busy);
|
||||||
|
|
||||||
@ -222,7 +224,7 @@ void HOTSW_Init(void)
|
|||||||
|
|
||||||
// Secure Segment バッファの設定
|
// Secure Segment バッファの設定
|
||||||
HOTSW_SetSecureSegmentBuffer((void *)SYSM_CARD_NTR_SECURE_BUF, SECURE_AREA_SIZE );
|
HOTSW_SetSecureSegmentBuffer((void *)SYSM_CARD_NTR_SECURE_BUF, SECURE_AREA_SIZE );
|
||||||
|
|
||||||
// カードが挿さってあったらスレッドを起動する
|
// カードが挿さってあったらスレッドを起動する
|
||||||
if(HOTSW_IsCardExist()){
|
if(HOTSW_IsCardExist()){
|
||||||
// OS_PutString("Card Boot Start\n");
|
// OS_PutString("Card Boot Start\n");
|
||||||
@ -248,6 +250,8 @@ void HOTSW_Init(void)
|
|||||||
*
|
*
|
||||||
* ※BootSegmentBuffer SecureSegmentBufferの設定を行ってから
|
* ※BootSegmentBuffer SecureSegmentBufferの設定を行ってから
|
||||||
* この関数を呼んでください。
|
* この関数を呼んでください。
|
||||||
|
*
|
||||||
|
* [TODO:]カードのロックを見直し。InitでロックIDをがめておいて使うのでもOK
|
||||||
* ----------------------------------------------------------------- */
|
* ----------------------------------------------------------------- */
|
||||||
static HotSwState LoadCardData(void)
|
static HotSwState LoadCardData(void)
|
||||||
{
|
{
|
||||||
@ -257,8 +261,25 @@ static HotSwState LoadCardData(void)
|
|||||||
|
|
||||||
start = OS_GetTick();
|
start = OS_GetTick();
|
||||||
|
|
||||||
|
// カードのロックIDを取得
|
||||||
|
tempLockID = OS_GetLockID();
|
||||||
|
if(tempLockID == OS_LOCK_ID_ERROR){
|
||||||
|
return HOTSW_CARD_LOCK_ERROR;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
s_cbData.lockID = (u16)tempLockID;
|
||||||
|
}
|
||||||
|
|
||||||
|
// カードのロック
|
||||||
|
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||||
|
LockExCard(s_cbData.lockID);
|
||||||
|
#else
|
||||||
|
OS_LockCard(s_cbData.lockID);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// カード電源リセット
|
||||||
#ifdef SDK_ARM7
|
#ifdef SDK_ARM7
|
||||||
// カード電源リセット
|
// [TODO:] リセットしている間はカードをロックする
|
||||||
McPowerOff();
|
McPowerOff();
|
||||||
McPowerOn();
|
McPowerOn();
|
||||||
#else // SDK_ARM9
|
#else // SDK_ARM9
|
||||||
@ -273,25 +294,9 @@ static HotSwState LoadCardData(void)
|
|||||||
// バッファのクリア
|
// バッファのクリア
|
||||||
MI_CpuClearFast(s_pBootSegBuffer, s_BootSegBufSize);
|
MI_CpuClearFast(s_pBootSegBuffer, s_BootSegBufSize);
|
||||||
MI_CpuClearFast(s_pSecureSegBuffer, s_SecureSegBufSize);
|
MI_CpuClearFast(s_pSecureSegBuffer, s_SecureSegBufSize);
|
||||||
|
|
||||||
// カードのロックIDを取得
|
|
||||||
tempLockID = OS_GetLockID();
|
|
||||||
if(tempLockID == OS_LOCK_ID_ERROR){
|
|
||||||
return HOTSW_CARD_LOCK_ERROR;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
s_cbData.lockID = (u16)tempLockID;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ブート処理開始
|
// ブート処理開始
|
||||||
if(HOTSW_IsCardExist()){
|
if(HOTSW_IsCardExist()){
|
||||||
// カードのロック
|
|
||||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
|
||||||
LockExCard(s_cbData.lockID);
|
|
||||||
#else
|
|
||||||
OS_LockCard(s_cbData.lockID);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// カード側でKey Tableをロードする
|
// カード側でKey Tableをロードする
|
||||||
retval = LoadTable();
|
retval = LoadTable();
|
||||||
|
|
||||||
@ -415,25 +420,28 @@ static HotSwState LoadCardData(void)
|
|||||||
if(s_cbData.id_scr != s_cbData.id_gam){
|
if(s_cbData.id_scr != s_cbData.id_gam){
|
||||||
return HOTSW_ID_CHECK_ERROR;
|
return HOTSW_ID_CHECK_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 常駐モジュール残りを指定先に転送
|
// 常駐モジュール残りを指定先に転送
|
||||||
retval = LoadStaticModule();
|
retval = LoadStaticModule();
|
||||||
|
|
||||||
// ARM9常駐モジュールの先頭2KBの暗号化領域を複合化
|
// ARM9常駐モジュールの先頭2KBの暗号化領域を複合化
|
||||||
DecryptObjectFile();
|
DecryptObjectFile();
|
||||||
}
|
|
||||||
|
|
||||||
// カードのロック開放
|
// 認証コード読み込み&ワーク領域にコピー
|
||||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
retval = CheckCardAuthCode();
|
||||||
UnlockExCard(s_cbData.lockID);
|
}
|
||||||
#else
|
|
||||||
OS_UnlockCard(s_cbData.lockID);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
retval = HOTSW_PULLED_OUT_ERROR;
|
retval = HOTSW_PULLED_OUT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// カードのロック開放
|
||||||
|
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||||
|
UnlockExCard(s_cbData.lockID);
|
||||||
|
#else
|
||||||
|
OS_UnlockCard(s_cbData.lockID);
|
||||||
|
#endif
|
||||||
|
|
||||||
// カードロックIDの開放
|
// カードロックIDの開放
|
||||||
OS_ReleaseLockID( s_cbData.lockID );
|
OS_ReleaseLockID( s_cbData.lockID );
|
||||||
|
|
||||||
@ -591,6 +599,39 @@ static HotSwState LoadStaticModule(void)
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------
|
||||||
|
* CheckCardAuthCode関数
|
||||||
|
*
|
||||||
|
* Rom Headerの認証コードアドレスを読んで、クローンブート対応か判定する
|
||||||
|
*
|
||||||
|
* 注:カードブート処理中は呼び出さないようにする
|
||||||
|
* ----------------------------------------------------------------- */
|
||||||
|
static HotSwState CheckCardAuthCode(void)
|
||||||
|
{
|
||||||
|
u32 authBuf[PAGE_SIZE/sizeof(u32)];
|
||||||
|
u32 auth_offset = s_cbData.pBootSegBuf->rh.s.rom_valid_size ? s_cbData.pBootSegBuf->rh.s.rom_valid_size : 0x01000000;
|
||||||
|
u32 page_offset = auth_offset & 0xFFFFFE00;
|
||||||
|
HotSwState retval = HOTSW_SUCCESS;
|
||||||
|
|
||||||
|
u8 *p = (u8 *)authBuf;
|
||||||
|
|
||||||
|
if(!HOTSW_IsCardExist()){
|
||||||
|
return HOTSW_PULLED_OUT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = s_funcTable[s_cbData.cardType].ReadPage_G( &s_cbData, page_offset, authBuf, MB_AUTHCODE_SIZE );
|
||||||
|
|
||||||
|
p += auth_offset & 0x000001FF;
|
||||||
|
if( *p++ == 'a' && *p == 'c' ) {
|
||||||
|
OS_PutString(" ☆ Clone Boot Mode\n");
|
||||||
|
SYSMi_GetWork()->cloneBootMode = CLONE_BOOT_MODE;
|
||||||
|
}else {
|
||||||
|
OS_PutString(" □ Other Boot Mode\n");
|
||||||
|
SYSMi_GetWork()->cloneBootMode = OTHER_BOOT_MODE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------
|
/* -----------------------------------------------------------------
|
||||||
* HOTSW_SetBootSegmentBuffer関数
|
* HOTSW_SetBootSegmentBuffer関数
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user