mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
SCFG_Initを呼ぶようにした、
ランチャーのタイトルIDをHWSecureInfoから取得するようにした(失敗するとLNCRでリトライ)、 プロファイル周りの修正 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@519 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
4a3fc13fca
commit
256dd85977
@ -154,26 +154,28 @@ void TwlSpMain( void )
|
|||||||
{
|
{
|
||||||
int fd; // menu file descriptor
|
int fd; // menu file descriptor
|
||||||
|
|
||||||
|
#ifdef PROFILE_ENABLE
|
||||||
|
// 0: bootrom
|
||||||
|
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
||||||
|
#endif
|
||||||
|
|
||||||
InitDebugLED();
|
InitDebugLED();
|
||||||
SetDebugLED(++step); // 0x81
|
SetDebugLED(++step); // 0x81
|
||||||
|
|
||||||
PreInit();
|
PreInit();
|
||||||
|
// 1: after PreInit
|
||||||
// 0: before PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x82
|
SetDebugLED(++step); // 0x82
|
||||||
|
|
||||||
OS_InitFIRM();
|
OS_InitFIRM();
|
||||||
OS_EnableIrq();
|
OS_EnableIrq();
|
||||||
OS_EnableInterrupts();
|
OS_EnableInterrupts();
|
||||||
|
// 2: after OS_InitFIRM
|
||||||
// 1: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x83
|
SetDebugLED(++step); // 0x83
|
||||||
|
|
||||||
PostInit();
|
PostInit();
|
||||||
|
// 3: after PostInit
|
||||||
// 2: after PM_InitFIRM
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x84
|
SetDebugLED(++step); // 0x84
|
||||||
|
|
||||||
@ -185,8 +187,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FATFS_Init().\n");
|
OS_TPrintf("Failed to call FATFS_Init().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 4: after FATFS_Init
|
||||||
// 3: after FS_Init
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x85
|
SetDebugLED(++step); // 0x85
|
||||||
|
|
||||||
@ -197,8 +198,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_SET_PATH).\n");
|
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_SET_PATH).\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 5: after PXI
|
||||||
// 4: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x86
|
SetDebugLED(++step); // 0x86
|
||||||
|
|
||||||
@ -209,8 +209,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_OpenSrl().\n");
|
OS_TPrintf("Failed to call FS_OpenSrl().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 6: after FS_OpenSrl
|
||||||
// 5: after FS_OpenSrl
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x87
|
SetDebugLED(++step); // 0x87
|
||||||
|
|
||||||
@ -221,8 +220,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadHeader().\n");
|
OS_TPrintf("Failed to call FS_LoadHeader().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 7: after FS_LoadHeader
|
||||||
// 6: after FS_LoadHeader
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x88
|
SetDebugLED(++step); // 0x88
|
||||||
|
|
||||||
@ -233,8 +231,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
|
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 8: after PXI
|
||||||
// 7: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x89
|
SetDebugLED(++step); // 0x89
|
||||||
|
|
||||||
@ -242,8 +239,7 @@ void TwlSpMain( void )
|
|||||||
|
|
||||||
AESi_InitKeysFIRM();
|
AESi_InitKeysFIRM();
|
||||||
AESi_RecvSeed( rh->s.developer_encrypt );
|
AESi_RecvSeed( rh->s.developer_encrypt );
|
||||||
|
// 9: after AESi_RecvSeed
|
||||||
// 8: after AESi_RecvSeed
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x8a
|
SetDebugLED(++step); // 0x8a
|
||||||
|
|
||||||
@ -254,8 +250,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 10: after FS_LoadStatic
|
||||||
// 9: after FS_LoadStatic
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x8b
|
SetDebugLED(++step); // 0x8b
|
||||||
|
|
||||||
@ -266,9 +261,9 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
|
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 11: after PXI
|
||||||
// 10: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
#ifdef PROFILE_ENABLE
|
#ifdef PROFILE_ENABLE
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@ -207,10 +207,16 @@ static void EraseAll(void)
|
|||||||
|
|
||||||
void TwlMain( void )
|
void TwlMain( void )
|
||||||
{
|
{
|
||||||
PreInit();
|
#ifdef PROFILE_ENABLE
|
||||||
|
// 0: bootrom
|
||||||
|
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
||||||
|
#endif
|
||||||
|
|
||||||
// 0: before PXI
|
PreInit();
|
||||||
PUSH_PROFILE();
|
#ifdef PROFILE_ENABLE
|
||||||
|
// 1: before OS_InitFIRM
|
||||||
|
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
||||||
|
#endif
|
||||||
|
|
||||||
OS_InitFIRM();
|
OS_InitFIRM();
|
||||||
OS_EnableIrq();
|
OS_EnableIrq();
|
||||||
@ -219,22 +225,19 @@ void TwlMain( void )
|
|||||||
#ifdef PROFILE_ENABLE
|
#ifdef PROFILE_ENABLE
|
||||||
OS_InitTick();
|
OS_InitTick();
|
||||||
#endif
|
#endif
|
||||||
// 1: after PXI
|
// 2: after OS_InitTick
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PostInit();
|
PostInit();
|
||||||
|
// 3: after PostInit
|
||||||
// 2: after PostInit
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
STD_CopyString((char*)HW_TWL_FS_BOOT_SRL_PATH_BUF, MENU_FILE);
|
STD_CopyString((char*)HW_TWL_FS_BOOT_SRL_PATH_BUF, MENU_FILE);
|
||||||
|
// 4: after STD_CopyString
|
||||||
// 3: after FS_ResolveSrl
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PXI_NotifyID( FIRM_PXI_ID_SET_PATH );
|
PXI_NotifyID( FIRM_PXI_ID_SET_PATH );
|
||||||
|
// 5: after PXI
|
||||||
// 4: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
|
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
|
||||||
@ -242,19 +245,16 @@ void TwlMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
|
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 6: after FS_LoadHeader
|
||||||
// 5: after FS_LoadHeader
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
|
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
|
||||||
|
// 7: after PXI
|
||||||
// 6: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
AESi_SendSeed( FS_GetAesKeySeed() );
|
AESi_SendSeed( FS_GetAesKeySeed() );
|
||||||
FS_DeleteAesKeySeed();
|
FS_DeleteAesKeySeed();
|
||||||
|
// 8: after AESi_SendSeed
|
||||||
// 7: after AESi_SendSeed
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
if ( !FS_LoadStatic() )
|
if ( !FS_LoadStatic() )
|
||||||
@ -262,14 +262,13 @@ void TwlMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 9: after FS_LoadStatic
|
||||||
// 8: after FS_LoadStatic
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
||||||
|
// 10: after PXI
|
||||||
// 9: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
#ifdef PROFILE_ENABLE
|
#ifdef PROFILE_ENABLE
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@ -91,6 +91,14 @@ void OS_InitFIRM(void)
|
|||||||
//---- Init Card
|
//---- Init Card
|
||||||
#ifndef SDK_SMALL_BUILD
|
#ifndef SDK_SMALL_BUILD
|
||||||
// CARD_Init();
|
// CARD_Init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//---- init System config
|
||||||
|
#ifdef SDK_TWL
|
||||||
|
// if (OS_IsRunOnTwl() == TRUE)
|
||||||
|
// {
|
||||||
|
SCFG_Init();
|
||||||
|
// }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//---- Init Power Manager
|
//---- Init Power Manager
|
||||||
@ -142,6 +150,14 @@ void OS_InitFIRM(void)
|
|||||||
//---- Init Cartridge
|
//---- Init Cartridge
|
||||||
#ifndef SDK_TEG
|
#ifndef SDK_TEG
|
||||||
// CTRDG_Init();
|
// CTRDG_Init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//---- init System config
|
||||||
|
#ifdef SDK_TWL
|
||||||
|
// if (OS_IsRunOnTwl() == TRUE)
|
||||||
|
// {
|
||||||
|
SCFG_Init();
|
||||||
|
// }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // SDK_ARM9
|
#endif // SDK_ARM9
|
||||||
|
|||||||
@ -162,22 +162,19 @@ void TwlSpMain( void )
|
|||||||
SetDebugLED(++step); // 0x81
|
SetDebugLED(++step); // 0x81
|
||||||
|
|
||||||
PreInit();
|
PreInit();
|
||||||
|
// 1: after PreInit
|
||||||
// 1: before PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x82
|
SetDebugLED(++step); // 0x82
|
||||||
|
|
||||||
OS_InitFIRM();
|
OS_InitFIRM();
|
||||||
OS_EnableIrq();
|
OS_EnableIrq();
|
||||||
OS_EnableInterrupts();
|
OS_EnableInterrupts();
|
||||||
|
// 2: after OS_InitFIRM
|
||||||
// 2: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x83
|
SetDebugLED(++step); // 0x83
|
||||||
|
|
||||||
PostInit();
|
PostInit();
|
||||||
|
// 3: after PostInit
|
||||||
// 3: after PM_InitFIRM
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x84
|
SetDebugLED(++step); // 0x84
|
||||||
|
|
||||||
@ -189,8 +186,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FATFS_Init().\n");
|
OS_TPrintf("Failed to call FATFS_Init().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 4: after FATFS_Init
|
||||||
// 4: after FS_Init
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x85
|
SetDebugLED(++step); // 0x85
|
||||||
|
|
||||||
@ -201,7 +197,6 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_SET_PATH).\n");
|
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_SET_PATH).\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5: after PXI
|
// 5: after PXI
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x86
|
SetDebugLED(++step); // 0x86
|
||||||
@ -213,7 +208,6 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_OpenSrl().\n");
|
OS_TPrintf("Failed to call FS_OpenSrl().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6: after FS_OpenSrl
|
// 6: after FS_OpenSrl
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x87
|
SetDebugLED(++step); // 0x87
|
||||||
@ -225,7 +219,6 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadHeader().\n");
|
OS_TPrintf("Failed to call FS_LoadHeader().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 7: after FS_LoadHeader
|
// 7: after FS_LoadHeader
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x88
|
SetDebugLED(++step); // 0x88
|
||||||
@ -237,7 +230,6 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
|
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 8: after PXI
|
// 8: after PXI
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x89
|
SetDebugLED(++step); // 0x89
|
||||||
@ -246,7 +238,6 @@ void TwlSpMain( void )
|
|||||||
|
|
||||||
AESi_InitKeysFIRM();
|
AESi_InitKeysFIRM();
|
||||||
AESi_RecvSeed( rh->s.developer_encrypt );
|
AESi_RecvSeed( rh->s.developer_encrypt );
|
||||||
|
|
||||||
// 9: after AESi_RecvSeed
|
// 9: after AESi_RecvSeed
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x8a
|
SetDebugLED(++step); // 0x8a
|
||||||
@ -258,7 +249,6 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 10: after FS_LoadStatic
|
// 10: after FS_LoadStatic
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x8b
|
SetDebugLED(++step); // 0x8b
|
||||||
@ -270,9 +260,9 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
|
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 11: after PXI
|
// 11: after PXI
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
#ifdef PROFILE_ENABLE
|
#ifdef PROFILE_ENABLE
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@ -47,6 +47,7 @@ LLIBRARIES += libes.TWL$(ARCHGEN_TYPE).a libboc.TWL$(ARCHGEN_TYPE).a
|
|||||||
else
|
else
|
||||||
LLIBRARIES += ../Release/libes.TWL$(ARCHGEN_TYPE).a ../Release/libboc.TWL$(ARCHGEN_TYPE).a
|
LLIBRARIES += ../Release/libes.TWL$(ARCHGEN_TYPE).a ../Release/libboc.TWL$(ARCHGEN_TYPE).a
|
||||||
endif
|
endif
|
||||||
|
LLIBRARIES += liblcfg$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -15,6 +15,7 @@
|
|||||||
$Author$
|
$Author$
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
#include <firm.h>
|
#include <firm.h>
|
||||||
|
#include <twl/lcfg.h>
|
||||||
|
|
||||||
#ifndef FIRM_USE_TWLSDK_KEYS
|
#ifndef FIRM_USE_TWLSDK_KEYS
|
||||||
#define RSA_KEY_ADDR OSi_GetFromFirmAddr()->rsa_pubkey[0] // 鍵管理.xls参照
|
#define RSA_KEY_ADDR OSi_GetFromFirmAddr()->rsa_pubkey[0] // 鍵管理.xls参照
|
||||||
@ -39,7 +40,9 @@ static const u8 rsa_key[128] =
|
|||||||
static u8 acHeap[RSA_HEAP_SIZE] __attribute__ ((aligned (32)));
|
static u8 acHeap[RSA_HEAP_SIZE] __attribute__ ((aligned (32)));
|
||||||
static SVCSignHeapContext acPool;
|
static SVCSignHeapContext acPool;
|
||||||
|
|
||||||
#define MENU_TITLE_ID 0x000300074c4e4352ULL
|
#define MENU_TITLE_ID_HI 0x00030007ULL
|
||||||
|
#define MENU_TITLE_ID_LO 0x4c4e4352ULL
|
||||||
|
#define MENU_TITLE_ID (MENU_TITLE_ID_HI << 32 | MENU_TITLE_ID_LO)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
PROFILE_ENABLE を定義するとある程度のパフォーマンスチェックができます。
|
PROFILE_ENABLE を定義するとある程度のパフォーマンスチェックができます。
|
||||||
@ -122,6 +125,48 @@ static void PostInit(void)
|
|||||||
FS_InitFIRM();
|
FS_InitFIRM();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***************************************************************
|
||||||
|
TryResolveSrl
|
||||||
|
|
||||||
|
NANDに格納された情報からランチャーSRLを解決する
|
||||||
|
***************************************************************/
|
||||||
|
static BOOL TryResolveSrl(void)
|
||||||
|
{
|
||||||
|
u64 titleId = MENU_TITLE_ID_HI << 32;
|
||||||
|
if ( !LCFG_ReadHWSecureInfo() )
|
||||||
|
{
|
||||||
|
OS_TPrintf("Failed to load HWSecureInfo.\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
LCFG_THW_GetLauncherGameCode( (u8*)&titleId );
|
||||||
|
|
||||||
|
// 4: after LCFG_ReadHWSecureInfo
|
||||||
|
PUSH_PROFILE();
|
||||||
|
|
||||||
|
if ( !FS_ResolveSrl( titleId ) )
|
||||||
|
{
|
||||||
|
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", titleId);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
OS_TPrintf("Launcher Title ID: 0x%016llx\n", titleId);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
/***************************************************************
|
||||||
|
RetryResolveSrl
|
||||||
|
|
||||||
|
デフォルト設定からランチャーSRLを解決する
|
||||||
|
***************************************************************/
|
||||||
|
static BOOL RetryResolveSrl(void)
|
||||||
|
{
|
||||||
|
if ( !FS_ResolveSrl( MENU_TITLE_ID ) )
|
||||||
|
{
|
||||||
|
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", MENU_TITLE_ID);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
OS_TPrintf("Launcher Title ID: 0x%016llx\n", MENU_TITLE_ID);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/***************************************************************
|
/***************************************************************
|
||||||
CheckHeader
|
CheckHeader
|
||||||
|
|
||||||
@ -208,11 +253,12 @@ void TwlMain( void )
|
|||||||
// 0: bootrom
|
// 0: bootrom
|
||||||
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PreInit();
|
PreInit();
|
||||||
|
#ifdef PROFILE_ENABLE
|
||||||
// 1: before PXI
|
// 1: before OS_InitFIRM
|
||||||
PUSH_PROFILE();
|
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
||||||
|
#endif
|
||||||
OS_InitFIRM();
|
OS_InitFIRM();
|
||||||
OS_EnableIrq();
|
OS_EnableIrq();
|
||||||
OS_EnableInterrupts();
|
OS_EnableInterrupts();
|
||||||
@ -224,22 +270,18 @@ void TwlMain( void )
|
|||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PostInit();
|
PostInit();
|
||||||
|
|
||||||
// 3: after PostInit
|
// 3: after PostInit
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
if ( !FS_ResolveSrl( MENU_TITLE_ID ) )
|
if ( !TryResolveSrl() && !RetryResolveSrl() )
|
||||||
{
|
{
|
||||||
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", MENU_TITLE_ID);
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 5: after FS_ResolveSrl
|
||||||
// 4: after FS_ResolveSrl
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PXI_NotifyID( FIRM_PXI_ID_SET_PATH );
|
PXI_NotifyID( FIRM_PXI_ID_SET_PATH );
|
||||||
|
// 6: after PXI
|
||||||
// 5: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
|
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
|
||||||
@ -247,19 +289,16 @@ void TwlMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
|
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 7: after FS_LoadHeader
|
||||||
// 6: after FS_LoadHeader
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
|
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
|
||||||
|
// 8: after PXI
|
||||||
// 7: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
AESi_SendSeed( FS_GetAesKeySeed() );
|
AESi_SendSeed( FS_GetAesKeySeed() );
|
||||||
FS_DeleteAesKeySeed();
|
FS_DeleteAesKeySeed();
|
||||||
|
// 9: after AESi_SendSeed
|
||||||
// 8: after AESi_SendSeed
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
if ( !FS_LoadStatic() )
|
if ( !FS_LoadStatic() )
|
||||||
@ -267,14 +306,13 @@ void TwlMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 10: after FS_LoadStatic
|
||||||
// 9: after FS_LoadStatic
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
||||||
|
// 11: after PXI
|
||||||
// 10: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
#ifdef PROFILE_ENABLE
|
#ifdef PROFILE_ENABLE
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@ -160,22 +160,19 @@ void TwlSpMain( void )
|
|||||||
SetDebugLED(++step); // 0x81
|
SetDebugLED(++step); // 0x81
|
||||||
|
|
||||||
PreInit();
|
PreInit();
|
||||||
|
// 1: after PreInit
|
||||||
// 1: before PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x82
|
SetDebugLED(++step); // 0x82
|
||||||
|
|
||||||
OS_InitFIRM();
|
OS_InitFIRM();
|
||||||
OS_EnableIrq();
|
OS_EnableIrq();
|
||||||
OS_EnableInterrupts();
|
OS_EnableInterrupts();
|
||||||
|
|
||||||
// 2: after PXI
|
// 2: after PXI
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x83
|
SetDebugLED(++step); // 0x83
|
||||||
|
|
||||||
PostInit();
|
PostInit();
|
||||||
|
// 3: after PostInit
|
||||||
// 3: after PM_InitFIRM
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x84
|
SetDebugLED(++step); // 0x84
|
||||||
|
|
||||||
@ -187,25 +184,21 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FATFS_Init().\n");
|
OS_TPrintf("Failed to call FATFS_Init().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 4: after FATFS_Init
|
||||||
// 4: after FS_Init
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x85
|
SetDebugLED(++step); // 0x85
|
||||||
|
|
||||||
PM_BackLightOn( FALSE );
|
PM_BackLightOn( FALSE );
|
||||||
|
|
||||||
// 5:
|
// 5:
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x86
|
SetDebugLED(++step); // 0x86
|
||||||
|
|
||||||
//PM_BackLightOn( FALSE );
|
//PM_BackLightOn( FALSE );
|
||||||
|
|
||||||
// 6:
|
// 6:
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x87
|
SetDebugLED(++step); // 0x87
|
||||||
|
|
||||||
//PM_BackLightOn( FALSE );
|
//PM_BackLightOn( FALSE );
|
||||||
|
|
||||||
// 7:
|
// 7:
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x88
|
SetDebugLED(++step); // 0x88
|
||||||
@ -217,7 +210,6 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
|
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 8: after PXI
|
// 8: after PXI
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x89
|
SetDebugLED(++step); // 0x89
|
||||||
@ -226,13 +218,11 @@ void TwlSpMain( void )
|
|||||||
|
|
||||||
AESi_InitKeysFIRM();
|
AESi_InitKeysFIRM();
|
||||||
AESi_RecvSeed( rh->s.developer_encrypt );
|
AESi_RecvSeed( rh->s.developer_encrypt );
|
||||||
|
|
||||||
// 9: after AESi_RecvSeed
|
// 9: after AESi_RecvSeed
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x8a
|
SetDebugLED(++step); // 0x8a
|
||||||
|
|
||||||
PM_BackLightOn( FALSE );
|
PM_BackLightOn( FALSE );
|
||||||
|
|
||||||
// 10:
|
// 10:
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x8b
|
SetDebugLED(++step); // 0x8b
|
||||||
@ -244,9 +234,9 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
|
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 11: after PXI
|
// 11: after PXI
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
#ifdef PROFILE_ENABLE
|
#ifdef PROFILE_ENABLE
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@ -45,6 +45,7 @@ LLIBRARIES += libes.TWL$(ARCHGEN_TYPE).a libboc.TWL$(ARCHGEN_TYPE).a
|
|||||||
else
|
else
|
||||||
LLIBRARIES += ../Release/libes.TWL$(ARCHGEN_TYPE).a ../Release/libboc.TWL$(ARCHGEN_TYPE).a
|
LLIBRARIES += ../Release/libes.TWL$(ARCHGEN_TYPE).a ../Release/libboc.TWL$(ARCHGEN_TYPE).a
|
||||||
endif
|
endif
|
||||||
|
LLIBRARIES += liblcfg$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -16,6 +16,7 @@
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
#include <firm.h>
|
#include <firm.h>
|
||||||
#include <twl/aes.h>
|
#include <twl/aes.h>
|
||||||
|
#include <twl/lcfg.h>
|
||||||
|
|
||||||
#ifndef FIRM_USE_TWLSDK_KEYS
|
#ifndef FIRM_USE_TWLSDK_KEYS
|
||||||
#define RSA_KEY_ADDR OSi_GetFromFirmAddr()->rsa_pubkey[0] // 鍵管理.xls参照
|
#define RSA_KEY_ADDR OSi_GetFromFirmAddr()->rsa_pubkey[0] // 鍵管理.xls参照
|
||||||
@ -40,7 +41,9 @@ static const u8 rsa_key[128] =
|
|||||||
static u8 acHeap[RSA_HEAP_SIZE] __attribute__ ((aligned (32)));
|
static u8 acHeap[RSA_HEAP_SIZE] __attribute__ ((aligned (32)));
|
||||||
static SVCSignHeapContext acPool;
|
static SVCSignHeapContext acPool;
|
||||||
|
|
||||||
#define MENU_TITLE_ID 0x000300074c4e4352ULL
|
#define MENU_TITLE_ID_HI 0x00030007ULL
|
||||||
|
#define MENU_TITLE_ID_LO 0x4c4e4352ULL
|
||||||
|
#define MENU_TITLE_ID (MENU_TITLE_ID_HI << 32 | MENU_TITLE_ID_LO)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
PROFILE_ENABLE を定義するとある程度のパフォーマンスチェックができます。
|
PROFILE_ENABLE を定義するとある程度のパフォーマンスチェックができます。
|
||||||
@ -123,6 +126,47 @@ static void PostInit(void)
|
|||||||
FS_InitFIRM();
|
FS_InitFIRM();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***************************************************************
|
||||||
|
TryResolveSrl
|
||||||
|
|
||||||
|
NANDに格納された情報からランチャーSRLを解決する
|
||||||
|
***************************************************************/
|
||||||
|
static BOOL TryResolveSrl(void)
|
||||||
|
{
|
||||||
|
u64 titleId = MENU_TITLE_ID_HI << 32;
|
||||||
|
if ( !LCFG_ReadHWSecureInfo() )
|
||||||
|
{
|
||||||
|
OS_TPrintf("Failed to load HWSecureInfo.\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
LCFG_THW_GetLauncherGameCode( (u8*)&titleId );
|
||||||
|
// 4: after LCFG_ReadHWSecureInfo
|
||||||
|
PUSH_PROFILE();
|
||||||
|
|
||||||
|
if ( !FS_ResolveSrl( titleId ) )
|
||||||
|
{
|
||||||
|
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", titleId);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
OS_TPrintf("Launcher Title ID: 0x%016llx\n", titleId);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
/***************************************************************
|
||||||
|
RetryResolveSrl
|
||||||
|
|
||||||
|
デフォルト設定からランチャーSRLを解決する
|
||||||
|
***************************************************************/
|
||||||
|
static BOOL RetryResolveSrl(void)
|
||||||
|
{
|
||||||
|
if ( !FS_ResolveSrl( MENU_TITLE_ID ) )
|
||||||
|
{
|
||||||
|
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", MENU_TITLE_ID);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
OS_TPrintf("Launcher Title ID: 0x%016llx\n", MENU_TITLE_ID);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/***************************************************************
|
/***************************************************************
|
||||||
CheckHeader
|
CheckHeader
|
||||||
|
|
||||||
@ -211,10 +255,12 @@ void TwlMain( void )
|
|||||||
// 0: bootrom
|
// 0: bootrom
|
||||||
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
PreInit();
|
|
||||||
|
|
||||||
// 1: before PXI
|
PreInit();
|
||||||
PUSH_PROFILE();
|
#ifdef PROFILE_ENABLE
|
||||||
|
// 1: before OS_InitFIRM
|
||||||
|
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
||||||
|
#endif
|
||||||
|
|
||||||
OS_InitFIRM();
|
OS_InitFIRM();
|
||||||
OS_EnableIrq();
|
OS_EnableIrq();
|
||||||
@ -223,21 +269,18 @@ void TwlMain( void )
|
|||||||
#ifdef PROFILE_ENABLE
|
#ifdef PROFILE_ENABLE
|
||||||
OS_InitTick();
|
OS_InitTick();
|
||||||
#endif
|
#endif
|
||||||
// 2: after PXI
|
// 2: after OS_InitTick
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PostInit();
|
PostInit();
|
||||||
|
|
||||||
// 3: after PostInit
|
// 3: after PostInit
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
if ( !FS_ResolveSrl( MENU_TITLE_ID ) )
|
if ( !TryResolveSrl() && !RetryResolveSrl() )
|
||||||
{
|
{
|
||||||
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", MENU_TITLE_ID);
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 5: after FS_ResolveSrl
|
||||||
// 4: after FS_ResolveSrl
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
if ( !FS_OpenSrl( &file ) )
|
if ( !FS_OpenSrl( &file ) )
|
||||||
@ -245,8 +288,7 @@ void TwlMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_OpenSrl().\n");
|
OS_TPrintf("Failed to call FS_OpenSrl().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 6: after FS_OpenSrl
|
||||||
// 5: after FS_OpenSrl
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
if ( !FS_LoadSrlHeader( &file, &acPool, RSA_KEY_ADDR ) || !CheckHeader() )
|
if ( !FS_LoadSrlHeader( &file, &acPool, RSA_KEY_ADDR ) || !CheckHeader() )
|
||||||
@ -254,18 +296,15 @@ void TwlMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadSrlHeader() and/or CheckHeader().\n");
|
OS_TPrintf("Failed to call FS_LoadSrlHeader() and/or CheckHeader().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 7: after FS_LoadSrlHeader
|
||||||
// 6: after FS_LoadSrlHeader
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
|
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
|
||||||
|
// 8: after PXI
|
||||||
// 7: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
AESi_SendSeed( FS_GetAesKeySeed() );
|
AESi_SendSeed( FS_GetAesKeySeed() );
|
||||||
|
// 9: after AESi_SendSeed
|
||||||
// 8: after AESi_SendSeed
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
if ( !FS_LoadSrlStatic( &file ) )
|
if ( !FS_LoadSrlStatic( &file ) )
|
||||||
@ -273,14 +312,13 @@ void TwlMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadSrlStatic().\n");
|
OS_TPrintf("Failed to call FS_LoadSrlStatic().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 10: after FS_LoadSrlStatic
|
||||||
// 9: after FS_LoadSrlStatic
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
||||||
|
// 11: after PXI
|
||||||
// 10: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
#ifdef PROFILE_ENABLE
|
#ifdef PROFILE_ENABLE
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@ -153,26 +153,28 @@ void TwlSpMain( void )
|
|||||||
{
|
{
|
||||||
int fd; // menu file descriptor
|
int fd; // menu file descriptor
|
||||||
|
|
||||||
|
#ifdef PROFILE_ENABLE
|
||||||
|
// 0: bootrom
|
||||||
|
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
||||||
|
#endif
|
||||||
|
|
||||||
InitDebugLED();
|
InitDebugLED();
|
||||||
SetDebugLED(++step); // 0x81
|
SetDebugLED(++step); // 0x81
|
||||||
|
|
||||||
PreInit();
|
PreInit();
|
||||||
|
// 1: after PreInit
|
||||||
// 0: before PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x82
|
SetDebugLED(++step); // 0x82
|
||||||
|
|
||||||
OS_InitFIRM();
|
OS_InitFIRM();
|
||||||
OS_EnableIrq();
|
OS_EnableIrq();
|
||||||
OS_EnableInterrupts();
|
OS_EnableInterrupts();
|
||||||
|
// 2: after OS_InitFIRM
|
||||||
// 1: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x83
|
SetDebugLED(++step); // 0x83
|
||||||
|
|
||||||
PostInit();
|
PostInit();
|
||||||
|
// 3: after PostInit
|
||||||
// 2: after PM_InitFIRM
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x84
|
SetDebugLED(++step); // 0x84
|
||||||
|
|
||||||
@ -184,8 +186,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FATFS_Init().\n");
|
OS_TPrintf("Failed to call FATFS_Init().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 4: after FATFS_Init
|
||||||
// 3: after FS_Init
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x85
|
SetDebugLED(++step); // 0x85
|
||||||
|
|
||||||
@ -196,8 +197,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_SET_PATH).\n");
|
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_SET_PATH).\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 5: after PXI
|
||||||
// 4: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x86
|
SetDebugLED(++step); // 0x86
|
||||||
|
|
||||||
@ -208,8 +208,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_OpenSrl().\n");
|
OS_TPrintf("Failed to call FS_OpenSrl().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 6: after FS_OpenSrl
|
||||||
// 5: after FS_OpenSrl
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x87
|
SetDebugLED(++step); // 0x87
|
||||||
|
|
||||||
@ -220,8 +219,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadHeader().\n");
|
OS_TPrintf("Failed to call FS_LoadHeader().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 7: after FS_LoadHeader
|
||||||
// 6: after FS_LoadHeader
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x88
|
SetDebugLED(++step); // 0x88
|
||||||
|
|
||||||
@ -232,8 +230,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
|
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 8: after PXI
|
||||||
// 7: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x89
|
SetDebugLED(++step); // 0x89
|
||||||
|
|
||||||
@ -241,8 +238,7 @@ void TwlSpMain( void )
|
|||||||
|
|
||||||
AESi_InitKeysFIRM();
|
AESi_InitKeysFIRM();
|
||||||
AESi_RecvSeed( rh->s.developer_encrypt );
|
AESi_RecvSeed( rh->s.developer_encrypt );
|
||||||
|
// 9: after AESi_RecvSeed
|
||||||
// 8: after AESi_RecvSeed
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x8a
|
SetDebugLED(++step); // 0x8a
|
||||||
|
|
||||||
@ -253,8 +249,7 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 10: after FS_LoadStatic
|
||||||
// 9: after FS_LoadStatic
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
SetDebugLED(++step); // 0x8b
|
SetDebugLED(++step); // 0x8b
|
||||||
|
|
||||||
@ -265,9 +260,9 @@ void TwlSpMain( void )
|
|||||||
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
|
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 11: after PXI
|
||||||
// 10: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
#ifdef PROFILE_ENABLE
|
#ifdef PROFILE_ENABLE
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@ -211,10 +211,16 @@ static void EraseAll(void)
|
|||||||
|
|
||||||
void TwlMain( void )
|
void TwlMain( void )
|
||||||
{
|
{
|
||||||
PreInit();
|
#ifdef PROFILE_ENABLE
|
||||||
|
// 0: bootrom
|
||||||
|
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
||||||
|
#endif
|
||||||
|
|
||||||
// 0: before PXI
|
PreInit();
|
||||||
PUSH_PROFILE();
|
#ifdef PROFILE_ENABLE
|
||||||
|
// 1: before Init
|
||||||
|
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
|
||||||
|
#endif
|
||||||
|
|
||||||
OS_InitFIRM();
|
OS_InitFIRM();
|
||||||
OS_EnableIrq();
|
OS_EnableIrq();
|
||||||
@ -223,12 +229,11 @@ void TwlMain( void )
|
|||||||
#ifdef PROFILE_ENABLE
|
#ifdef PROFILE_ENABLE
|
||||||
OS_InitTick();
|
OS_InitTick();
|
||||||
#endif
|
#endif
|
||||||
// 1: after PXI
|
// 2: after OS_InitTick
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PostInit();
|
PostInit();
|
||||||
|
// 3: after PostInit
|
||||||
// 2: after PostInit
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
switch ( PAD_Read() & PAD_KEYPORT_MASK )
|
switch ( PAD_Read() & PAD_KEYPORT_MASK )
|
||||||
@ -252,13 +257,11 @@ void TwlMain( void )
|
|||||||
OS_TPrintf("Unknown pad pattern (%X).\n", PAD_Read() & PAD_KEYPORT_MASK);
|
OS_TPrintf("Unknown pad pattern (%X).\n", PAD_Read() & PAD_KEYPORT_MASK);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 4: after FS_ResolveSrl
|
||||||
// 3: after FS_ResolveSrl
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PXI_NotifyID( FIRM_PXI_ID_SET_PATH );
|
PXI_NotifyID( FIRM_PXI_ID_SET_PATH );
|
||||||
|
// 5: after PXI
|
||||||
// 4: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
|
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
|
||||||
@ -266,19 +269,16 @@ void TwlMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
|
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 6: after FS_LoadHeader
|
||||||
// 5: after FS_LoadHeader
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
|
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
|
||||||
|
// 7: after PXI
|
||||||
// 6: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
AESi_SendSeed( FS_GetAesKeySeed() );
|
AESi_SendSeed( FS_GetAesKeySeed() );
|
||||||
FS_DeleteAesKeySeed();
|
FS_DeleteAesKeySeed();
|
||||||
|
// 8: after AESi_SendSeed
|
||||||
// 7: after AESi_SendSeed
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
if ( !FS_LoadStatic() )
|
if ( !FS_LoadStatic() )
|
||||||
@ -286,14 +286,13 @@ void TwlMain( void )
|
|||||||
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
OS_TPrintf("Failed to call FS_LoadStatic().\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
// 9: after FS_LoadStatic
|
||||||
// 8: after FS_LoadStatic
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
|
||||||
|
// 10: after PXI
|
||||||
// 9: after PXI
|
|
||||||
PUSH_PROFILE();
|
PUSH_PROFILE();
|
||||||
|
|
||||||
#ifdef PROFILE_ENABLE
|
#ifdef PROFILE_ENABLE
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user