初期化時にDS互換Blowfishキーテーブルをコピー。

ブート前のWRAM0/1クリア。
現状ではARM9でのキーテーブルコピー時にはライトスルーしているはずだが念のためキャッシュをフラッシュしておく。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@849 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nakasima 2008-03-07 09:23:00 +00:00
parent ed41e55df5
commit c0492ee4af
7 changed files with 32 additions and 13 deletions

View File

@ -30,9 +30,9 @@
#define reg_MI_MC_SWP (*(REGType8v *) ( REG_MC1_ADDR + 1 ) )
#ifdef ISDBG_MB_CHILD_
#define PRE_CLEAR_NUM_MAX (6*2)
#define PRE_CLEAR_NUM_MAX (7*2)
#else
#define PRE_CLEAR_NUM_MAX (4*2)
#define PRE_CLEAR_NUM_MAX (5*2)
#endif
#define COPY_NUM_MAX (4*3)
@ -109,7 +109,7 @@ BOOL BOOT_WaitStart( void )
u32 *post_clear_list;
// メモリリストの設定
// [TODO:] ショップアプリで鍵を残す場合、NANDファーム引数の領域WRAMにあるを消さないように注意。
// WRAMリマップ後の消し忘れがないように不要な鍵はpre clearで消す。
// WRAMリマップ後の消し漏れやバッファオーバランの懸念回避のため不要な鍵はpre clearで消す。
// [TODO:] pre clearにARM9/7共用WRAMの32KBも入れる。
static u32 mem_list[PRE_CLEAR_NUM_MAX + 1 + COPY_NUM_MAX + 2 + POST_CLEAR_NUM_MAX + 1] =
{
@ -121,6 +121,7 @@ BOOL BOOT_WaitStart( void )
HW_PRV_WRAM_END - 0x600, (HW_PRV_WRAM_END - HW_PRV_WRAM_SYSRV_SIZE) - (HW_PRV_WRAM_END - 0x600),
HW_PRV_WRAM_END - 0x600 + 0x20, HW_PRV_WRAM_END - (HW_PRV_WRAM_END - 0x600 + 0x20),
#endif
HW_WRAM_LTD, HW_WRAM_LTD_END - HW_WRAM_LTD,
HW_MAIN_MEM_SHARED, HW_RED_RESERVED - HW_MAIN_MEM_SHARED,
NULL,
// copy forward

View File

@ -73,6 +73,7 @@ void BOOT_Ready( void )
(void)OS_SetIrqFunction( OS_IE_SUBP, ie_subphandler );
OS_EnableInterrupts();
(void)OS_SetIrqMask( OS_IE_SUBP ); // サブプロセッサ割り込みのみを許可。
MI_SetWramBank(MI_WRAM_ARM7_ALL); // WRAM0/1の最終配置はOS_Bootで行う
reg_PXI_SUBPINTF = SUBP_RECV_IF_ENABLE | 0x0f00; // ARM9ステートを "0x0f" に
// ※もうFIFOはクリア済みなので、使わない。
// ARM7からの通知待ち
@ -91,13 +92,14 @@ void BOOT_Ready( void )
MIHeader_WramRegs *pWRAMREGS = (MIHeader_WramRegs *)pROMH->main_wram_config_data;
reg_GX_VRAMCNT_C = pWRAMREGS->main_vrambnk_c;
reg_GX_VRAMCNT_D = pWRAMREGS->main_vrambnk_d;
reg_GX_VRAMCNT_WRAM = pWRAMREGS->main_wrambnk_01;
// WRAM0/1の最終配置はOS_Bootで行う
}
// SDK共通リブート
{
// メモリリストの設定
// [TODO:] ショップアプリで鍵を残す場合、NANDファーム引数の領域(ITCMにある)を消さないように注意
// [TODO:] ショップアプリで鍵を残す場合、NANDファーム引数の領域(ITCMにある)を消さないように注意。
// バッファオーバランの懸念回避のため不要な鍵はpre clearで消す。
static u32 mem_list[] =
{
// pre clear

View File

@ -28,6 +28,8 @@ extern "C" {
#ifdef USE_LOCAL_KEYTABLE
// 初期化テーブル
extern const BLOWFISH_CTX GCDi_BlowfishInitTableDS;
#else
extern BLOWFISH_CTX GCDi_BlowfishInitTableBufDS;
#endif
// Function Prototype ------------------------------------------------------------------------

View File

@ -27,7 +27,9 @@ static u32 F(const BLOWFISH_CTX *ctx, u32 x);
void GCDm_MakeBlowfishTableDS(CardBootData *cbd, s32 keyLen)
{
#ifdef USE_LOCAL_KEYTABLE
const BLOWFISH_CTX *blowfishInitTablep = &GCDi_BlowfishInitTableDS;
const BLOWFISH_CTX *initTable = &GCDi_BlowfishInitTableDS;
#else
const BLOWFISH_CTX *initTable = &GCDi_BlowfishInitTableBufDS;
#endif
u32 blowfishedKey[2];
@ -36,12 +38,8 @@ void GCDm_MakeBlowfishTableDS(CardBootData *cbd, s32 keyLen)
u32 *keyBuf = cbd->keyBuf;
BLOWFISH_CTX *ctx = &cbd->keyTable;
#ifdef USE_LOCAL_KEYTABLE
MI_CpuCopyFast((void *)blowfishInitTablep, (void *)ctx, sizeof(BLOWFISH_CTX));
#else
MI_CpuCopyFast((void *)HW_WRAM_0_LTD, (void *)ctx, sizeof(BLOWFISH_CTX));
#endif
MI_CpuCopyFast((void *)initTable, (void *)ctx, sizeof(BLOWFISH_CTX));
keyBuf[0] = *RomHeaderGameCode;
keyBuf[1] = *RomHeaderGameCode >> 1;
keyBuf[2] = *RomHeaderGameCode << 1;

View File

@ -11,9 +11,14 @@
in whole or in part, without the prior written consent of Nintendo.
*---------------------------------------------------------------------------*/
#include <hotswTypes.h>
#include <blowfish.h>
#include <twl/ltdwram_begin.h>
const BLOWFISH_CTX GCDi_BlowfishInitTableDS ATTRIBUTE_ALIGN(4) = {
#ifndef USE_LOCAL_KEYTABLE
BLOWFISH_CTX GCDi_BlowfishInitTableBufDS;
#else
const BLOWFISH_CTX GCDi_BlowfishInitTableDS = {
0x5f20d599, 0xb9f54457, 0xd9a4196e, 0x945a6a9e,
0xebf1aed8, 0x3ae27541, 0x32d08293, 0xd531ee33,
0x9a6157cc, 0x1ba20637, 0xf5723979, 0xbef6ae55,
@ -280,4 +285,7 @@ const BLOWFISH_CTX GCDi_BlowfishInitTableDS ATTRIBUTE_ALIGN(4) = {
0xb5fd02cd, 0xaa5bbce9, 0x7e19a4d8, 0x81945d0e,
0xad776f9e, 0x93740ed6, 0x18c4e796, 0x19f5ad5f
};
#endif // USE_LOCAL_KEYTABLE
#include <twl/ltdwram_end.h>

View File

@ -113,6 +113,8 @@ static void DebugPrintErrorMessage(HotSwState state);
HotSwState HOTSWi_RefreshBadBlock(u32 romMode);
// Static Values ------------------------------------------------------------
#include <twl/ltdwram_begin.h>
static char encrypt_object_key[] ATTRIBUTE_ALIGN(4) = "encryObj";
static char rom_emu_info[] ATTRIBUTE_ALIGN(4) = "TWLD";
@ -170,6 +172,7 @@ static CardBootFunction s_funcTable[] = {
ReadIDGame, ReadPageGame}, // Game ƒ<C692>[ƒhŠÖ<C5A0>
};
#include <twl/ltdwram_end.h>
// ===========================================================================
// Function Describe
@ -184,6 +187,10 @@ void HOTSW_Init(u32 threadPrio)
OS_InitTick();
OS_InitThread();
#ifndef USE_LOCAL_KEYTABLE
// 初期化後に他の用途でWRAM_0を使用できるようにローカルバッファへコピーしておく
MI_CpuCopyFast((void *)HW_WRAM_0_LTD, &GCDi_BlowfishInitTableBufDS, sizeof(BLOWFISH_CTX));
#endif
// PXI<58>‰Šú‰»
PXI_Init();
PXI_SetFifoRecvCallback(PXI_FIFO_TAG_HOTSW, InterruptCallbackPxi);

View File

@ -116,6 +116,7 @@ void SYSMi_SendKeysToARM7( void )
MI_SetWramBank(MI_WRAM_ARM9_ALL);
// DS互換BlowfishテーブルをARM7へ渡す
MI_CpuCopyFast( &((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->ds_blowfish, (void *)HW_WRAM_0, sizeof(BLOWFISH_CTX) );
DC_FlushRange( (void *)HW_WRAM_0, sizeof(BLOWFISH_CTX) );
MI_SetWramBank(MI_WRAM_ARM7_ALL);
}