diff --git a/build/components/hyena.TWL/src/main.c b/build/components/hyena.TWL/src/main.c index 31fa5be7..38be5003 100644 --- a/build/components/hyena.TWL/src/main.c +++ b/build/components/hyena.TWL/src/main.c @@ -133,6 +133,10 @@ TwlSpMain(void) } PMi_SetControl( PMIC_CTL_BKLT1 | PMIC_CTL_BKLT2 ); +#ifdef INITIAL_KEYTABLE_PRELOAD + HOTSW_CopyInitialKeyTable(); +#endif + // OS 初期化 OS_Init(); PrintDebugInfo(); diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index b50abec3..115a7986 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -208,9 +208,11 @@ void HOTSW_Init(u32 threadPrio) OS_InitTick(); OS_InitThread(); +#ifndef INITIAL_KEYTABLE_PRELOAD // 初期化後に他の用途でWRAM_0を使用できるようにローカルバッファへコピーしておく MI_CpuCopyFast((void *)HW_WRAM_0_LTD, &HotSwBlowfishInitTableBufDS, sizeof(BLOWFISH_CTX)); - +#endif + // PXI初期化 PXI_Init(); PXI_SetFifoRecvCallback(PXI_FIFO_TAG_HOTSW, InterruptCallbackPxi); @@ -307,6 +309,27 @@ void HOTSW_Init(u32 threadPrio) } +/*---------------------------------------------------------------------------* + Name: HOTSW_CopyInitialKeyTable + + Description: DS互換BlowfishテーブルをWRAM経由でローカルにコピーする + + ※この関数はHOTSW_Initが呼ばれる前に呼んで下さい。 + *---------------------------------------------------------------------------*/ +#ifdef INITIAL_KEYTABLE_PRELOAD +void HOTSW_CopyInitialKeyTable(void) +{ + // ARM9でKey Tableの用意が出来るまでポーリング + while( !SYSMi_GetWork()->flags.hotsw.isKeyTableLoadReady ){ + OS_SpinWait( 0x400 ); + } + + // 初期化後に他の用途でWRAM_0を使用できるようにローカルバッファへコピーしておく + MI_CpuCopyFast((void *)HW_WRAM_0_LTD, &HotSwBlowfishInitTableBufDS, sizeof(BLOWFISH_CTX)); +} +#endif + + /*---------------------------------------------------------------------------* Name: LoadCardData diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 49630b54..7b35a7e1 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -61,7 +61,7 @@ static TitleProperty s_bootTitleBuf; // // ============================================================================ -#if 0 +#if 1 // AutoloadDoneCallbackを利用して鍵を引き渡す void _start_AutoloadDoneCallback(void* argv[]) { @@ -81,7 +81,7 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ) #endif /* SYSM_DEBUG_ */ // ARM7で使用する分の鍵を渡す - SYSMi_SendKeysToARM7(); + //SYSMi_SendKeysToARM7(); // ランチャーのマウント情報セット //SYSMi_SetLauncherMountInfo(); @@ -140,6 +140,10 @@ void SYSMi_SendKeysToARM7( void ) // MI_CpuCopyFast( &((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->aes_key[ 0 ], (void *)&GetDeliverBROM9KeyAddr()->aes_key[ 0 ], AES_KEY_SIZE ); DC_FlushRange( (void *)HW_WRAM_0, sizeof(DeliverBROM9Key) ); MI_SetWramBank(MI_WRAM_ARM7_ALL); + +#ifdef INITIAL_KEYTABLE_PRELOAD + SYSMi_GetWork()->flags.hotsw.isKeyTableLoadReady = TRUE; +#endif } diff --git a/include/sysmenu/hotsw/common/hotsw.h b/include/sysmenu/hotsw/common/hotsw.h index 1bd0f629..4679d5bf 100644 --- a/include/sysmenu/hotsw/common/hotsw.h +++ b/include/sysmenu/hotsw/common/hotsw.h @@ -26,7 +26,7 @@ extern "C" { // Define ------------------------------------------------------------------- #define SYSM_HOTSW_ENABLE_ROMEMU #define USE_WRAM_LOAD -//#define INITIAL_KEYTABLE_PRELOAD +#define INITIAL_KEYTABLE_PRELOAD //#define USE_NEW_DMA //#define HOTSW_NO_MESSAGE // Printf抑制スイッチ @@ -39,8 +39,8 @@ extern "C" { #define HOTSW_PutString OS_PutString #endif #else - #define HOTSW_TPrintf( ... ) ((void)0) - #define HOTSW_PutString( ... ) ((void)0) + #define HOTSW_TPrintf( ... ) ((void)0) + #define HOTSW_PutString( ... ) ((void)0) #endif // enum ------------------------------------------------------------------- @@ -170,6 +170,11 @@ CardDataReadState HOTSW_ReadCardDataOnGameMode(const void* src, void* dest, u32 // 活栓挿抜処理の初期化 void HOTSW_Init(u32 threadPrio); +#ifdef INITIAL_KEYTABLE_PRELOAD +// DS互換BlowfishテーブルをWRAM経由でローカルにコピーする +void HOTSW_CopyInitialKeyTable(void); +#endif + // カードの存在判定 BOOL HOTSW_IsCardExist(void); diff --git a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h index 23f09727..e9f8c718 100644 --- a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h +++ b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h @@ -119,8 +119,9 @@ typedef struct SYSM_work { vu16 :0; vu8 isCardStateChanged; // カード状態更新フラグ vu8 isBusyHotSW; // 活線挿抜処理中? + vu8 isKeyTableLoadReady; // Key Tableのロード準備完了? }hotsw; - }flags; // 8B + }flags; // 9B OSLockWord lockCardRsc ATTRIBUTE_ALIGN(8); // カードリソース排他制御用 OSLockWord lockHotSW; // カードリソース排他制御用