(更新:Akabane Jumpei)

スロットB関連の処理を削除

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1568 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
(no author) 2008-06-03 11:13:19 +00:00
parent 4e2e35740e
commit ed927daf78
2 changed files with 24 additions and 210 deletions

View File

@ -58,9 +58,6 @@ void HOTSWi_SetCommand(GCDCmd64 *cndLE)
cndBE.b[1] = cndLE->b[6]; cndBE.b[1] = cndLE->b[6];
cndBE.b[0] = cndLE->b[7]; cndBE.b[0] = cndLE->b[7];
//---- confirm CARD free
while( reg_HOTSW_MCCNT1 & REG_MI_MCCNT1_START_MASK ){}
// MCCMD レジスタ設定 // MCCMD レジスタ設定
reg_HOTSW_MCCMD0 = *(u32*)cndBE.b; reg_HOTSW_MCCMD0 = *(u32*)cndBE.b;
reg_HOTSW_MCCMD1 = *(u32*)&cndBE.b[4]; reg_HOTSW_MCCMD1 = *(u32*)&cndBE.b[4];

View File

@ -63,9 +63,6 @@ typedef enum HotSwCallBackType{
} HotSwCallBackType; } HotSwCallBackType;
// Function prototype ------------------------------------------------------- // Function prototype -------------------------------------------------------
static BOOL IsSwap(void);
static u32 GetMcSlotShift(void);
static u32 GetMcSlotMask(void);
static u32 GetMcSlotMode(void); static u32 GetMcSlotMode(void);
static void SetMcSlotMode(u32 mode); static void SetMcSlotMode(u32 mode);
@ -105,9 +102,6 @@ static void GenVA_VB_VD(void);
static HotSwState ReadImageReturnErrorCode(void* dest, s32 offset, s32 length, void* arg); static HotSwState ReadImageReturnErrorCode(void* dest, s32 offset, s32 length, void* arg);
static BOOL ReadImage(void* dest, s32 offset, s32 length, void* arg); static BOOL ReadImage(void* dest, s32 offset, s32 length, void* arg);
static s32 LockExCard(u16 lockID);
static s32 UnlockExCard(u16 lockID);
static HotSwState LoadBannerData(void); static HotSwState LoadBannerData(void);
static HotSwState CheckCardAuthCode(void); static HotSwState CheckCardAuthCode(void);
@ -176,11 +170,7 @@ static u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = {
}; };
static CardSecureModeFunction s_funcTable[] = { static CardSecureModeFunction s_funcTable[] = {
// DS Card Type 1 // Game Card
{ ReadIDSecure, ReadSegSecure, SwitchONPNGSecure, ChangeModeSecure},
// DS Card Type 2
{ ReadIDSecure, ReadSegSecure, SwitchONPNGSecure, ChangeModeSecure},
// TWL Card Type 1
{ ReadIDSecure, ReadSegSecure, SwitchONPNGSecure, ChangeModeSecure}, { ReadIDSecure, ReadSegSecure, SwitchONPNGSecure, ChangeModeSecure},
// RomEmulation // RomEmulation
{ ReadIDSecure_ROMEMU, ReadSegSecure_ROMEMU, SwitchONPNGSecure_ROMEMU, ChangeModeSecure_ROMEMU } { ReadIDSecure_ROMEMU, ReadSegSecure_ROMEMU, SwitchONPNGSecure_ROMEMU, ChangeModeSecure_ROMEMU }
@ -262,17 +252,7 @@ void HOTSW_Init(u32 threadPrio)
s_CardLockID = (u16)tempLockID; s_CardLockID = (u16)tempLockID;
} }
// カードデータロード用スレッドの生成
OS_CreateThread(&HotSwThreadData.hotswThread,
HotSwThread,
NULL,
HotSwThreadData.hotswStack + HOTSW_THREAD_STACK_SIZE / sizeof(u64),
HOTSW_THREAD_STACK_SIZE,
threadPrio
);
// カードの状態監視用スレッドの生成 ( DSテレビ対策 ) // カードの状態監視用スレッドの生成 ( DSテレビ対策 )
// [TODO] 優先度の設定
OS_CreateThread(&HotSwThreadData.monitorThread, OS_CreateThread(&HotSwThreadData.monitorThread,
MonitorThread, MonitorThread,
NULL, NULL,
@ -281,6 +261,15 @@ void HOTSW_Init(u32 threadPrio)
threadPrio threadPrio
); );
// カードデータロード用スレッドの生成 ※カード状態監視スレッドと優先度同じだけど、後に作成したこっちのスレッドが優先される
OS_CreateThread(&HotSwThreadData.hotswThread,
HotSwThread,
NULL,
HotSwThreadData.hotswStack + HOTSW_THREAD_STACK_SIZE / sizeof(u64),
HOTSW_THREAD_STACK_SIZE,
threadPrio
);
// メッセージキューの初期化 // メッセージキューの初期化
OS_InitMessageQueue( &HotSwThreadData.hotswQueue, &HotSwThreadData.hotswMsgBuffer[0], HOTSW_MSG_BUFFER_NUM ); OS_InitMessageQueue( &HotSwThreadData.hotswQueue, &HotSwThreadData.hotswMsgBuffer[0], HOTSW_MSG_BUFFER_NUM );
OS_InitMessageQueue( &HotSwThreadData.hotswDmaQueue, &HotSwThreadData.hotswDmaMsgBuffer[0], HOTSW_DMA_MSG_NUM ); OS_InitMessageQueue( &HotSwThreadData.hotswDmaQueue, &HotSwThreadData.hotswDmaMsgBuffer[0], HOTSW_DMA_MSG_NUM );
@ -319,21 +308,14 @@ void HOTSW_Init(u32 threadPrio)
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static HotSwState LoadCardData(void) static HotSwState LoadCardData(void)
{ {
OSTick start;
HotSwState retval = HOTSW_SUCCESS; HotSwState retval = HOTSW_SUCCESS;
HotSwState state = HOTSW_SUCCESS; HotSwState state = HOTSW_SUCCESS;
u32 romMode = HOTSW_ROM_MODE_NULL; u32 romMode = HOTSW_ROM_MODE_NULL;
start = OS_GetTick();
s_isHotSwBusy = TRUE; s_isHotSwBusy = TRUE;
// カードのロック // カードのロック
#ifndef DEBUG_USED_CARD_SLOT_B_
CARD_LockRom(s_CardLockID); CARD_LockRom(s_CardLockID);
#else
LockExCard(s_CardLockID);
#endif
// カード電源リセット // カード電源リセット
McPowerOff(); McPowerOff();
@ -397,11 +379,7 @@ static HotSwState LoadCardData(void)
s_debuggerFlg = FALSE; s_debuggerFlg = FALSE;
} }
} }
#if 0
else{
s_debuggerFlg = FALSE;
}
#endif
// 初回のRomエミュレーション情報を使用 // 初回のRomエミュレーション情報を使用
if(HOTSWi_IsRomEmulation()){ if(HOTSWi_IsRomEmulation()){
OS_PutString("Read Emulation ROM\n"); OS_PutString("Read Emulation ROM\n");
@ -505,7 +483,7 @@ static HotSwState LoadCardData(void)
} }
// ゲームモードに移行 // ゲームモードに移行
state = s_funcTable[s_cbData.cardType].ChangeMode_S(&s_cbData); state = s_funcTable[s_debuggerFlg].ChangeMode_S(&s_cbData);
retval = (retval == HOTSW_SUCCESS) ? state : retval; retval = (retval == HOTSW_SUCCESS) ? state : retval;
// ---------------------- Game Mode ---------------------- // ---------------------- Game Mode ----------------------
@ -573,16 +551,10 @@ end:
HOTSW_WaitCardCtrl(); HOTSW_WaitCardCtrl();
// カードのロック開放(※ロックIDは開放せずに持ち続ける) // カードのロック開放(※ロックIDは開放せずに持ち続ける)
#ifndef DEBUG_USED_CARD_SLOT_B_
CARD_UnlockRom(s_CardLockID); CARD_UnlockRom(s_CardLockID);
#else
UnlockExCard(s_CardLockID);
#endif
s_isHotSwBusy = FALSE; s_isHotSwBusy = FALSE;
// OS_TPrintf( "Load Card Time : %dms\n\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
return retval; return retval;
} }
@ -661,14 +633,14 @@ static HotSwState ReadSecureModeCardData(void)
HotSwState state = HOTSW_SUCCESS; HotSwState state = HOTSW_SUCCESS;
// PNG設定 // PNG設定
state = s_funcTable[s_cbData.cardType].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;
// DS側符号生成回路初期値設定 (レジスタ設定) // DS側符号生成回路初期値設定 (レジスタ設定)
SetMCSCR(); SetMCSCR();
// ID読み込み // ID読み込み
state = s_funcTable[s_cbData.cardType].ReadID_S(&s_cbData); state = s_funcTable[s_debuggerFlg].ReadID_S(&s_cbData);
retval = (retval == HOTSW_SUCCESS) ? state : retval; retval = (retval == HOTSW_SUCCESS) ? state : retval;
// カードIDの比較をして、一致しなければFALSEを返す // カードIDの比較をして、一致しなければFALSEを返す
@ -678,7 +650,7 @@ static HotSwState ReadSecureModeCardData(void)
if(retval == HOTSW_SUCCESS){ if(retval == HOTSW_SUCCESS){
// Secure領域のSegment読み込み // Secure領域のSegment読み込み
state = s_funcTable[s_cbData.cardType].ReadSegment_S(&s_cbData); state = s_funcTable[s_debuggerFlg].ReadSegment_S(&s_cbData);
retval = (retval == HOTSW_SUCCESS) ? state : retval; retval = (retval == HOTSW_SUCCESS) ? state : retval;
} }
@ -751,12 +723,7 @@ BOOL HOTSWi_IsRunOnDebugger(void)
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
BOOL HOTSWi_IsRomEmulation(void) BOOL HOTSWi_IsRomEmulation(void)
{ {
return s_debuggerFlg && return s_debuggerFlg && s_romEmuInfo.isEnableSlot1;
#ifndef DEBUG_USED_CARD_SLOT_B_
s_romEmuInfo.isEnableSlot1;
#else
s_romEmuInfo.isEnableSlot2;
#endif
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
@ -913,11 +880,7 @@ static void ReadCardData(u32 src, u32 dest, u32 size)
} }
// カードのロック // カードのロック
#ifndef DEBUG_USED_CARD_SLOT_B_
CARD_LockRom(s_CardLockID); CARD_LockRom(s_CardLockID);
#else
LockExCard(s_CardLockID);
#endif
while(size > 0 && state == HOTSW_SUCCESS){ while(size > 0 && state == HOTSW_SUCCESS){
// --- Boot Segment // --- Boot Segment
@ -977,11 +940,8 @@ static void ReadCardData(u32 src, u32 dest, u32 size)
dest += sendSize; dest += sendSize;
} }
#ifndef DEBUG_USED_CARD_SLOT_B_ // カードのアンロック
CARD_UnlockRom(s_CardLockID); CARD_UnlockRom(s_CardLockID);
#else
UnlockExCard(s_CardLockID);
#endif
{ {
HotSwPxiMessageForArm9 msg; HotSwPxiMessageForArm9 msg;
@ -1372,13 +1332,7 @@ static void UnlockHotSwRsc(OSLockWord* word)
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
BOOL HOTSW_IsCardExist(void) BOOL HOTSW_IsCardExist(void)
{ {
#ifndef DEBUG_USED_CARD_SLOT_B_ if( !(reg_MI_MC1 & REG_MI_MC_SL1_CDET_MASK) ){
u32 mask = (u32)(REG_MI_MC_SL1_CDET_MASK << GetMcSlotShift());
#else
u32 mask = (u32)(REG_MI_MC_SL2_CDET_MASK >> GetMcSlotShift());
#endif
if( !(reg_MI_MC1 & mask) ){
return TRUE; return TRUE;
} }
else{ else{
@ -1403,48 +1357,6 @@ BOOL HOTSW_IsCardAccessible(void)
} }
/*---------------------------------------------------------------------------*
Name: IsSwap
Description: SCFG_MC1のSWPフラグを見て
*---------------------------------------------------------------------------*/
static BOOL IsSwap(void)
{
if( reg_MI_MC1 & REG_MI_MC1_SWP_MASK ){
return TRUE;
}
else{
return FALSE;
}
}
/*---------------------------------------------------------------------------*
Name: GetMcSlotShift
Description:
*---------------------------------------------------------------------------*/
static u32 GetMcSlotShift(void)
{
return (u32)(IsSwap() * REG_MI_MC_SL2_CDET_SHIFT);
}
/*---------------------------------------------------------------------------*
Name: GetMcSlotMask
Description:
*---------------------------------------------------------------------------*/
static u32 GetMcSlotMask(void)
{
#ifndef DEBUG_USED_CARD_SLOT_B_
return (u32)(REG_MI_MC_SL1_MODE_MASK << GetMcSlotShift());
#else
return (u32)(REG_MI_MC_SL2_MODE_MASK >> GetMcSlotShift());
#endif
}
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: GetMcSlotMode Name: GetMcSlotMode
@ -1452,11 +1364,7 @@ static u32 GetMcSlotMask(void)
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static u32 GetMcSlotMode(void) static u32 GetMcSlotMode(void)
{ {
#ifndef DEBUG_USED_CARD_SLOT_B_ return reg_MI_MC1 & REG_MI_MC_SL1_MODE_MASK;
return (reg_MI_MC1 & GetMcSlotMask()) >> GetMcSlotShift();
#else
return (reg_MI_MC1 & GetMcSlotMask()) << GetMcSlotShift();
#endif
} }
@ -1467,11 +1375,7 @@ static u32 GetMcSlotMode(void)
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static void SetMcSlotMode(u32 mode) static void SetMcSlotMode(u32 mode)
{ {
#ifndef DEBUG_USED_CARD_SLOT_B_ reg_MI_MC1 = (u32)((reg_MI_MC1 & ~REG_MI_MC_SL1_MODE_MASK) | mode);
reg_MI_MC1 = (u32)((reg_MI_MC1 & ~GetMcSlotMask()) | (mode << GetMcSlotShift()));
#else
reg_MI_MC1 = (u32)((reg_MI_MC1 & ~GetMcSlotMask()) | (mode >> GetMcSlotShift()));
#endif
} }
@ -1875,11 +1779,7 @@ static BOOL ChangeGameMode(void)
{ {
HotSwState state; HotSwState state;
#ifndef DEBUG_USED_CARD_SLOT_B_
CARD_LockRom(s_CardLockID); CARD_LockRom(s_CardLockID);
#else
LockExCard(s_CardLockID);
#endif
McPowerOn(); McPowerOn();
@ -1909,9 +1809,9 @@ static BOOL ChangeGameMode(void)
state = ChangeModeNormal(&s_cbData); state = ChangeModeNormal(&s_cbData);
// ---------------------- Secure Mode ---------------------- // ---------------------- Secure Mode ----------------------
state = s_funcTable[s_cbData.cardType].SetPNG_S(&s_cbData); state = s_funcTable[s_debuggerFlg].SetPNG_S(&s_cbData);
SetMCSCR(); SetMCSCR();
state = s_funcTable[s_cbData.cardType].ChangeMode_S(&s_cbData); state = s_funcTable[s_debuggerFlg].ChangeMode_S(&s_cbData);
// ---------------------- Game Mode ---------------------- // ---------------------- Game Mode ----------------------
state = ReadIDGame(&s_cbData); state = ReadIDGame(&s_cbData);
@ -1931,11 +1831,7 @@ static BOOL ChangeGameMode(void)
HOTSW_WaitCardCtrl(); HOTSW_WaitCardCtrl();
#ifndef DEBUG_USED_CARD_SLOT_B_
CARD_UnlockRom(s_CardLockID); CARD_UnlockRom(s_CardLockID);
#else
UnlockExCard(s_CardLockID);
#endif
if(state == HOTSW_SUCCESS){ if(state == HOTSW_SUCCESS){
return TRUE; return TRUE;
@ -2155,14 +2051,6 @@ static void InterruptCallbackPxi(PXIFifoTag tag, u32 data, BOOL err)
OS_TPrintf("... Pxi Message - value:%x ctrl:%x finalize:%x read:%x bootType:%x\n", OS_TPrintf("... Pxi Message - value:%x ctrl:%x finalize:%x read:%x bootType:%x\n",
d.msg.value, d.msg.ctrl, d.msg.finalize, d.msg.read, d.msg.bootType); d.msg.value, d.msg.ctrl, d.msg.finalize, d.msg.read, d.msg.bootType);
/*
if(d.msg.read){
OS_PutString("--- ARM7\n");
OS_TPrintf("src : 0x%08x\n", SYSMi_GetWork()->cardReadParam.src);
OS_TPrintf("dst : 0x%08x\n", SYSMi_GetWork()->cardReadParam.dest);
OS_TPrintf("size : 0x%08x\n", SYSMi_GetWork()->cardReadParam.size);
}*/
HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl].read = (d.msg.read) ? TRUE : FALSE; HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl].read = (d.msg.read) ? TRUE : FALSE;
#endif #endif
HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl].ctrl = (d.msg.ctrl) ? TRUE : FALSE; HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl].ctrl = (d.msg.ctrl) ? TRUE : FALSE;
@ -2198,73 +2086,6 @@ static void InterruptCallbackCardData(void)
#endif #endif
/*---------------------------------------------------------------------------*
Name: AllocateExCardBus
Description:
*---------------------------------------------------------------------------*/
#ifdef SDK_ARM9
static inline void SetExCardProcessor(MIProcessor proc)
{
reg_HOTSW_EXMEMCNT =
(u16)((reg_HOTSW_EXMEMCNT & ~HOTSW_EXMEMCNT_SELB_MASK) | (proc << HOTSW_EXMEMCNT_SELB_SHIFT));
}
#endif
/*---------------------------------------------------------------------------*
Name: AllocateExCardBus
Description: Bへのアクセス権を設定する
*---------------------------------------------------------------------------*/
static void AllocateExCardBus(void)
{
#ifdef SDK_ARM9
// preset reset flag with status of disable interrupts in OSi_DoTryLockByWord
if ( ! ( reg_MI_MC & REG_MI_MC_SL2_CDET_MASK ) )
{
reg_MI_MCCNT1 |= REG_MI_MCCNT2_RESB_MASK;
}
SetExCardProcessor(MI_PROCESSOR_ARM9); // Arm9側で動作している場合
#endif
}
/*---------------------------------------------------------------------------*
Name: FreeExCardBus
Description: Bへのアクセス権を設定する
*---------------------------------------------------------------------------*/
static void FreeExCardBus(void)
{
#ifdef SDK_ARM9
SetExCardProcessor(MI_PROCESSOR_ARM7); // Card for SUB
#endif
}
/*---------------------------------------------------------------------------*
Name: LockSlotB
Description: Bをロックする
*---------------------------------------------------------------------------*/
static s32 LockExCard(u16 lockID)
{
return OS_LockByWord(lockID, (OSLockWord *)SLOT_B_LOCK_BUF, AllocateExCardBus);
}
/*---------------------------------------------------------------------------*
Name: UnlockSlotB
Description: Bをロックする
*---------------------------------------------------------------------------*/
static s32 UnlockExCard(u16 lockID)
{
return OS_UnlockByWord(lockID, (OSLockWord *)SLOT_B_LOCK_BUF, FreeExCardBus);
}
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: SetInterruptCallback Name: SetInterruptCallback
SetInterruptCallbackEx SetInterruptCallbackEx
@ -2291,11 +2112,7 @@ static void SetInterruptCallbackEx( OSIrqMask intr_bit, void *func )
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static void SetInterrupt(void) static void SetInterrupt(void)
{ {
#ifndef DEBUG_USED_CARD_SLOT_B_
SetInterruptCallback( OS_IE_CARD_A_DET , InterruptCallbackCardDet ); SetInterruptCallback( OS_IE_CARD_A_DET , InterruptCallbackCardDet );
#else
SetInterruptCallback( OS_IE_CARD_B_DET , InterruptCallbackCardDet );
#endif
#ifdef USE_NEW_DMA #ifdef USE_NEW_DMA
(void)OS_EnableIrqMask(OS_IE_NDMA2); (void)OS_EnableIrqMask(OS_IE_NDMA2);