mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
アプリロード処理の整理。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1278 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
07841a7981
commit
27dc8904cb
@ -346,7 +346,7 @@ static TitleProperty *SYSMi_CheckShortcutBoot1( void )
|
|||||||
SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT )
|
SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT )
|
||||||
){
|
){
|
||||||
s_bootTitleBuf.flags.isAppRelocate = TRUE;
|
s_bootTitleBuf.flags.isAppRelocate = TRUE;
|
||||||
s_bootTitleBuf.flags.isAppLoadCompleted = TRUE;
|
s_bootTitleBuf.flags.isAppLoadCompleted = FALSE;
|
||||||
s_bootTitleBuf.flags.isInitialShortcutSkip = TRUE; // 初回起動シーケンスを飛ばす
|
s_bootTitleBuf.flags.isInitialShortcutSkip = TRUE; // 初回起動シーケンスを飛ばす
|
||||||
s_bootTitleBuf.flags.isLogoSkip = TRUE; // ロゴデモを飛ばす
|
s_bootTitleBuf.flags.isLogoSkip = TRUE; // ロゴデモを飛ばす
|
||||||
s_bootTitleBuf.flags.bootType = LAUNCHER_BOOTTYPE_ROM;
|
s_bootTitleBuf.flags.bootType = LAUNCHER_BOOTTYPE_ROM;
|
||||||
@ -400,7 +400,7 @@ static TitleProperty *SYSMi_CheckShortcutBoot2( void )
|
|||||||
if( SYSM_IsExistCard() )
|
if( SYSM_IsExistCard() )
|
||||||
{
|
{
|
||||||
s_bootTitleBuf.flags.isAppRelocate = TRUE;
|
s_bootTitleBuf.flags.isAppRelocate = TRUE;
|
||||||
s_bootTitleBuf.flags.isAppLoadCompleted = TRUE;
|
s_bootTitleBuf.flags.isAppLoadCompleted = FALSE;
|
||||||
s_bootTitleBuf.flags.isInitialShortcutSkip = TRUE; // 初回起動シーケンスを飛ばす
|
s_bootTitleBuf.flags.isInitialShortcutSkip = TRUE; // 初回起動シーケンスを飛ばす
|
||||||
s_bootTitleBuf.flags.isLogoSkip = TRUE; // ロゴデモを飛ばす
|
s_bootTitleBuf.flags.isLogoSkip = TRUE; // ロゴデモを飛ばす
|
||||||
s_bootTitleBuf.flags.bootType = LAUNCHER_BOOTTYPE_ROM;
|
s_bootTitleBuf.flags.bootType = LAUNCHER_BOOTTYPE_ROM;
|
||||||
|
|||||||
@ -73,7 +73,7 @@ extern const u8 g_devPubKey[ 4 ][ 0x80 ];
|
|||||||
static s32 ReadFile( FSFile* pf, void* buffer, s32 size );
|
static s32 ReadFile( FSFile* pf, void* buffer, s32 size );
|
||||||
static void SYSMi_EnableHotSW( BOOL enable );
|
static void SYSMi_EnableHotSW( BOOL enable );
|
||||||
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle );
|
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle );
|
||||||
static void SYSMi_Relocate( void );
|
static void SYSMi_AppendRelocateInfoCardSecureArea( void );
|
||||||
static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle );
|
static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle );
|
||||||
static void SYSMi_makeTitleIdList( void );
|
static void SYSMi_makeTitleIdList( void );
|
||||||
|
|
||||||
@ -156,10 +156,13 @@ static inline u16 SCFG_GetBondingOption(void)
|
|||||||
return (u16)(*(u8*)(HW_SYS_CONF_BUF+HWi_WSYS08_OFFSET) & HWi_WSYS08_OP_OPT_MASK);
|
return (u16)(*(u8*)(HW_SYS_CONF_BUF+HWi_WSYS08_OFFSET) & HWi_WSYS08_OP_OPT_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
//
|
//
|
||||||
|
//
|
||||||
// 情報取得
|
// 情報取得
|
||||||
//
|
//
|
||||||
|
//
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
// カードタイトルの取得
|
// カードタイトルの取得
|
||||||
@ -197,7 +200,7 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
|||||||
|
|
||||||
pTitleList_Card->pBanner = &s_bannerBuf[ CARD_BANNER_INDEX ];
|
pTitleList_Card->pBanner = &s_bannerBuf[ CARD_BANNER_INDEX ];
|
||||||
pTitleList_Card->flags.isValid = TRUE;
|
pTitleList_Card->flags.isValid = TRUE;
|
||||||
pTitleList_Card->flags.isAppLoadCompleted = TRUE;
|
pTitleList_Card->flags.isAppLoadCompleted = FALSE;
|
||||||
pTitleList_Card->flags.isAppRelocate = TRUE;
|
pTitleList_Card->flags.isAppRelocate = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,7 +363,9 @@ static s32 ReadFile(FSFile* pf, void* buffer, s32 size)
|
|||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
//
|
//
|
||||||
// アプリ起動
|
//
|
||||||
|
// アプリロード
|
||||||
|
//
|
||||||
//
|
//
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
@ -427,7 +432,7 @@ static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle )
|
|||||||
if( ! bSuccess )
|
if( ! bSuccess )
|
||||||
{
|
{
|
||||||
OS_TPrintf("RebootSystem failed: cant open file\n");
|
OS_TPrintf("RebootSystem failed: cant open file\n");
|
||||||
return;
|
goto ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -446,8 +451,7 @@ OS_TPrintf("RebootSystem failed: cant open file\n");
|
|||||||
if( ! bSuccess )
|
if( ! bSuccess )
|
||||||
{
|
{
|
||||||
OS_TPrintf("RebootSystem failed: cant seek file(0)\n");
|
OS_TPrintf("RebootSystem failed: cant seek file(0)\n");
|
||||||
FS_CloseFile(file);
|
goto ERROR;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
readLen = FS_ReadFile(file, header, (s32)sizeof(header));
|
readLen = FS_ReadFile(file, header, (s32)sizeof(header));
|
||||||
@ -455,8 +459,7 @@ OS_TPrintf("RebootSystem failed: cant seek file(0)\n");
|
|||||||
if( readLen != (s32)sizeof(header) )
|
if( readLen != (s32)sizeof(header) )
|
||||||
{
|
{
|
||||||
OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", header, 0, sizeof(header), readLen);
|
OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", header, 0, sizeof(header), readLen);
|
||||||
FS_CloseFile(file);
|
goto ERROR;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( head->s.nintendo_logo_crc16 != 0xCF56 )
|
if( head->s.nintendo_logo_crc16 != 0xCF56 )
|
||||||
@ -471,8 +474,7 @@ OS_TPrintf("%02X ", header[i * 0x10 + j]);
|
|||||||
OS_TPrintf("\n");
|
OS_TPrintf("\n");
|
||||||
}
|
}
|
||||||
OS_TPrintf("RebootSystem failed: logo CRC error\n");
|
OS_TPrintf("RebootSystem failed: logo CRC error\n");
|
||||||
FS_CloseFile(file);
|
goto ERROR;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !(head->s.platform_code & PLATFORM_CODE_FLAG_TWL) )
|
if( !(head->s.platform_code & PLATFORM_CODE_FLAG_TWL) )
|
||||||
@ -488,15 +490,13 @@ OS_TPrintf("RebootSystem failed: logo CRC error\n");
|
|||||||
if( ! bSuccess )
|
if( ! bSuccess )
|
||||||
{
|
{
|
||||||
OS_TPrintf("RebootSystem failed: cant seek file(0)\n");
|
OS_TPrintf("RebootSystem failed: cant seek file(0)\n");
|
||||||
FS_CloseFile(file);
|
goto ERROR;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
readLen = FS_ReadFile(file, &s_authcode, (s32)sizeof(s_authcode));
|
readLen = FS_ReadFile(file, &s_authcode, (s32)sizeof(s_authcode));
|
||||||
if( readLen != (s32)sizeof(s_authcode) )
|
if( readLen != (s32)sizeof(s_authcode) )
|
||||||
{
|
{
|
||||||
OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", &s_authcode, 0, sizeof(s_authcode), readLen);
|
OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", &s_authcode, 0, sizeof(s_authcode), readLen);
|
||||||
FS_CloseFile(file);
|
goto ERROR;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -535,8 +535,7 @@ OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", &s_authcode,
|
|||||||
&(SYSMi_GetWork()->romRelocateInfo[i]), isTwlApp ) )
|
&(SYSMi_GetWork()->romRelocateInfo[i]), isTwlApp ) )
|
||||||
{
|
{
|
||||||
OS_TPrintf("RebootSystem failed: ROM Load Region error\n");
|
OS_TPrintf("RebootSystem failed: ROM Load Region error\n");
|
||||||
FS_CloseFile(file);
|
goto ERROR;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -565,8 +564,7 @@ OS_TPrintf("RebootSystem failed: cant read file(%p, %d, %d, %d)\n", &s_authcode,
|
|||||||
if( ! bSuccess )
|
if( ! bSuccess )
|
||||||
{
|
{
|
||||||
OS_TPrintf("RebootSystem failed: cant seek file(%d)\n", source[i]);
|
OS_TPrintf("RebootSystem failed: cant seek file(%d)\n", source[i]);
|
||||||
FS_CloseFile(file);
|
goto ERROR;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LOAD_APP_VIA_WRAM
|
#ifdef LOAD_APP_VIA_WRAM
|
||||||
@ -598,8 +596,7 @@ OS_TPrintf("RebootSystem : Load VIA WRAM %d.\n", i);
|
|||||||
if ( !result )
|
if ( !result )
|
||||||
{
|
{
|
||||||
OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
|
OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
|
||||||
FS_CloseFile(file);
|
goto ERROR;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
OS_TPrintf("RebootSystem : Load VIA PRIMAL FS %d.\n", i);
|
OS_TPrintf("RebootSystem : Load VIA PRIMAL FS %d.\n", i);
|
||||||
@ -608,8 +605,7 @@ OS_TPrintf("RebootSystem : Load VIA PRIMAL FS %d.\n", i);
|
|||||||
if( readLen < 0 )
|
if( readLen < 0 )
|
||||||
{
|
{
|
||||||
OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
|
OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
|
||||||
FS_CloseFile(file);
|
goto ERROR;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
#endif // LOAD_APP_VIA_WRAM
|
#endif // LOAD_APP_VIA_WRAM
|
||||||
|
|
||||||
@ -625,6 +621,10 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
|
|||||||
|
|
||||||
}
|
}
|
||||||
SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE;
|
SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE;
|
||||||
|
return;
|
||||||
|
|
||||||
|
ERROR:
|
||||||
|
(void)FS_CloseFile(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -645,18 +645,20 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle )
|
|||||||
s_authResult = AUTH_RESULT_PROCESSING;
|
s_authResult = AUTH_RESULT_PROCESSING;
|
||||||
// アプリ未ロード状態なら、ロード開始
|
// アプリ未ロード状態なら、ロード開始
|
||||||
if( !pBootTitle->flags.isAppLoadCompleted ) {
|
if( !pBootTitle->flags.isAppLoadCompleted ) {
|
||||||
SYSMi_GetWork()->flags.common.isLoadSucceeded = FALSE;
|
SYSMi_GetWork()->flags.common.isLoadFinished = FALSE;
|
||||||
OS_InitThread();
|
|
||||||
OS_CreateThread( &s_thread, (void (*)(void *))SYSMi_LoadTitleThreadFunc, (void*)pBootTitle, stack+STACK_SIZE/sizeof(u64), STACK_SIZE,THREAD_PRIO );
|
if( pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM ) {
|
||||||
OS_WakeupThreadDirect( &s_thread );
|
SYSMi_AppendRelocateInfoCardSecureArea();
|
||||||
}else if( pBootTitle->flags.isAppRelocate ) {
|
}else {
|
||||||
// アプリロード済みで、再配置要求ありなら、再配置(カードのみ対応)
|
SYSMi_GetWork()->flags.common.isLoadSucceeded = FALSE;
|
||||||
SYSMi_Relocate();
|
OS_InitThread();
|
||||||
SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE;
|
OS_CreateThread( &s_thread, (void (*)(void *))SYSMi_LoadTitleThreadFunc, (void*)pBootTitle, stack+STACK_SIZE/sizeof(u64), STACK_SIZE,THREAD_PRIO );
|
||||||
}else
|
OS_WakeupThreadDirect( &s_thread );
|
||||||
{
|
}
|
||||||
// アプリロード済みで、再配置要求なし
|
}else {
|
||||||
|
// アプリロード済み
|
||||||
SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE;
|
SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE;
|
||||||
|
SYSMi_GetWork()->flags.common.isLoadFinished = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM ) {
|
if( pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_ROM ) {
|
||||||
@ -668,8 +670,8 @@ void SYSM_StartLoadTitle( TitleProperty *pBootTitle )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// カードアプリケーションの再配置
|
// カードアプリのセキュア領域を再配置情報に追加
|
||||||
static void SYSMi_Relocate( void )
|
static void SYSMi_AppendRelocateInfoCardSecureArea( void )
|
||||||
{
|
{
|
||||||
u32 size;
|
u32 size;
|
||||||
u32 *dest ;
|
u32 *dest ;
|
||||||
@ -690,15 +692,32 @@ static void SYSMi_Relocate( void )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// アプリロード済み?
|
// アプリロード済みかどうかをチェック
|
||||||
BOOL SYSM_IsLoadTitleFinished( void )
|
BOOL SYSM_IsLoadTitleFinished( void )
|
||||||
{
|
{
|
||||||
if( SYSMi_GetWork()->flags.common.isLoadSucceeded ) {
|
// ロード済みの時は、常にTRUE
|
||||||
return TRUE;
|
if( !SYSMi_GetWork()->flags.common.isLoadFinished ) {
|
||||||
|
if( SYSMi_GetWork()->flags.common.isCardBoot ) {
|
||||||
|
// カードブートの時は、HOTSWライブラリのロード完了をチェック。
|
||||||
|
SYSMi_GetWork()->flags.common.isLoadFinished = SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted;
|
||||||
|
SYSMi_GetWork()->flags.common.isLoadSucceeded = TRUE;
|
||||||
|
}else {
|
||||||
|
// NANDブートの時は、ロードスレッドの完了をチェック。
|
||||||
|
SYSMi_GetWork()->flags.common.isLoadFinished = OS_IsThreadTerminated( &s_thread );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return OS_IsThreadTerminated( &s_thread );
|
return SYSMi_GetWork()->flags.common.isLoadFinished ? TRUE : FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// アプリ認証
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
// TWLアプリおよびNTR拡張NANDアプリ共通のヘッダ認証処理
|
// TWLアプリおよびNTR拡張NANDアプリ共通のヘッダ認証処理
|
||||||
static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle )
|
static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle )
|
||||||
{
|
{
|
||||||
|
|||||||
@ -87,7 +87,8 @@ typedef struct SYSM_work {
|
|||||||
vu32 isValidTSD :1; // NITRO設定データ無効フラグ
|
vu32 isValidTSD :1; // NITRO設定データ無効フラグ
|
||||||
vu32 isLogoSkip :1; // ロゴデモスキップ
|
vu32 isLogoSkip :1; // ロゴデモスキップ
|
||||||
vu32 isHeaderLoadCompleted :1; // アプリヘッダロード完了?
|
vu32 isHeaderLoadCompleted :1; // アプリヘッダロード完了?
|
||||||
vu32 isLoadSucceeded :1; // アプリロード完了?
|
vu32 isLoadFinished :1; // アプリロード完了?
|
||||||
|
vu32 isLoadSucceeded :1; // アプリロード成功?
|
||||||
vu32 isCardBoot :1; // カードブートか?
|
vu32 isCardBoot :1; // カードブートか?
|
||||||
vu32 isInitialSettings :1; // 初回起動シーケンスか?
|
vu32 isInitialSettings :1; // 初回起動シーケンスか?
|
||||||
vu32 isBrokenHWNormalInfo :1; // HWノーマル情報が破損している。
|
vu32 isBrokenHWNormalInfo :1; // HWノーマル情報が破損している。
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user