ダイレクトブート時、アプリに引き渡すタイトルリストがおかしくなっていたのを修正

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1632 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2008-06-16 01:18:05 +00:00
parent 9e169f7548
commit 633e5602b3
3 changed files with 42 additions and 4 deletions

View File

@ -111,6 +111,8 @@ static u8 *s_calc_hash = NULL;
static BOOL s_b_dev = FALSE;
static BOOL s_result_phase1 = FALSE;
static BOOL s_nand_title_list_maker_info_enabled = FALSE;
static u8 dht_buffer[DS_HASH_TABLE_SIZE] ATTRIBUTE_ALIGN(256);
static DHTFile *const dht = (DHTFile*)dht_buffer;
static const u8* hash0;
@ -359,7 +361,7 @@ BOOL SYSMi_CopyCardBanner( void )
// インポートされているすべてのNANDアプリを列挙したリストの準備
// SYSM_GetNandTitleListおよびSYSM_TryToBootTitle前に呼ぶ必要あり
// SYSM_GetNandTitleListおよびSYSM_GetNandTitleListMakerInfo前に呼ぶ必要あり
BOOL SYSM_InitNandTitleList( void )
{
OSTick start;
@ -481,9 +483,30 @@ static BOOL MakeTitleListMakerInfoFromTitleID( TitleListMakerInfo *info, OSTitle
return SYSM_MakeTitleListMakerInfoFromHeader( info, &e_hs);
}
// SYSM_InitNandTitleListを事前に呼ぶ必要あり
// この関数か、SYSM_GetNandTitleListのどちらかをSYSM_TryToBootTitle前に呼ぶ必要あり
void SYSM_GetNandTitleListMakerInfo( void )
{
int l;
if( s_pTitleIDList == NULL || s_pTitleListMakerInfo == NULL )
{
OS_TPrintf("SYSM_GetNandTitleListMakerInfo failed : SYSM_InitNandTitleList() is not called.");
return;
}
for( l = 0; l < s_listLength; l++ ) {
MakeTitleListMakerInfoFromTitleID( &s_pTitleListMakerInfo[l], s_pTitleIDList[ l ] );
}
s_nand_title_list_maker_info_enabled = TRUE;
}
// ローンチ対象となるNANDタイトルリストの取得
// listNumには、pTitleList_Nandの長さを与える
// 得られる最大のタイトル数は、(LAUNCHER_TITLE_LIST_NUM - 1)に制限される(ランチャーが表示できる最大数からカードぶんを引いた数)
// SYSM_InitNandTitleListを事前に呼ぶ必要あり
// この関数か、SYSM_GetNandTitleListMakerInfoのどちらかをSYSM_TryToBootTitle前に呼ぶ必要あり
// return:取得したNANDタイトルの数
int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
{
@ -493,7 +516,11 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
int validNum = 0;
NAMTitleId titleIDArray[ LAUNCHER_TITLE_LIST_NUM - 1 ];// ローンチ可能なタイトルリストの一時置き場
if( s_pTitleIDList == NULL || s_pTitleListMakerInfo == NULL ) return -1;
if( s_pTitleIDList == NULL || s_pTitleListMakerInfo == NULL )
{
OS_TPrintf("SYSM_GetNandTitleList failed : SYSM_InitNandTitleList() is not called.");
return -1;
}
// 取得したタイトルがローンチ対象かどうかをチェック
for( l = 0; l < s_listLength; l++ ) {
@ -516,6 +543,7 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
{
MakeTitleListMakerInfoFromTitleID( &s_pTitleListMakerInfo[l], s_pTitleIDList[ l ] );
}
s_nand_title_list_maker_info_enabled = TRUE;
// 念のため残り領域を0クリア
for( l = validNum; l < LAUNCHER_TITLE_LIST_NUM - 1; l++ ) {
@ -1676,6 +1704,7 @@ BOOL SYSM_IsAuthenticateTitleFinished( void )
}
// ロード済みの指定タイトルの認証とブートを行う
// SYSM_GetNandTitleListまたはSYSM_GetNandTitleListMakerInfoのどちらかをSYSM_TryToBootTitle前に呼ぶ必要あり
AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle )
{
if(s_authResult != AUTH_RESULT_SUCCEEDED)
@ -1737,6 +1766,11 @@ static void SYSMi_makeTitleIdList( void )
return;
}
if( !s_nand_title_list_maker_info_enabled )
{
OS_TPrintf("SYSMi_makeTitleIdList failed: SYSM_GetNandTitleList or SYSM_GetNandTitleListMakerInfo is not called.\n");
}
// とりあえずゼロクリア
MI_CpuClear8( (void *)HW_OS_TITLE_ID_LIST, HW_OS_TITLE_ID_LIST_SIZE );

View File

@ -303,7 +303,10 @@ void TwlMain( void )
if( !pBootTitle ) {
// NAND & カードアプリリスト取得
(void)SYSM_GetNandTitleList( s_titleList, LAUNCHER_TITLE_LIST_NUM ); // NANDアプリリストの取得内蔵アプリはs_titleList[1]から格納される)
}
}else
{
SYSM_GetNandTitleListMakerInfo(); // アプリに引き渡すタイトルリスト作成用情報の取得
}
// end時間計測5
#if (MEASURE_TIME == 1)
OS_TPrintf( "GetNandTitleList : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );

View File

@ -127,6 +127,7 @@ extern int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card ); //
extern BOOL SYSM_InitNandTitleList( void ); // NANDアプリタイトルリスト取得準備
extern void SYSM_FreeNandTitleList( void ); // NANDアプリタイトルリスト
extern int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size ); // NAND アプリタイトルリストの取得
extern void SYSM_GetNandTitleListMakerInfo( void ); // アプリ引き渡しタイトルリスト作成用情報の取得(ダイレクトブート用)
// アプリ起動
extern void SYSM_StartLoadTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを別スレッドでロード開始
@ -151,7 +152,7 @@ extern BOOL SYSM_IsLoadTitlePaused(void); //
extern void SYSM_ResumeLoadingThread( BOOL force ); // ローディングスレッドが一時停止していたら再開
extern BOOL SYSM_MakeTitleListMakerInfoFromHeader( TitleListMakerInfo *info, ROM_Header_Short *hs);
// タイトルリスト作成用情報をヘッダ情報から作成
// アプリ引き渡しタイトルリスト作成用情報をヘッダ情報から作成
#endif