・SDK5.0FCplus4用IPLブランチのマージ

・時間計測処理の追加

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1597 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2008-06-11 05:33:45 +00:00
parent a0145ed624
commit f99d45cd2f
11 changed files with 271 additions and 11 deletions

View File

@ -201,6 +201,17 @@ Autoload WRAM
Library libathdrv_sp$(LIBSUFFIX).a (.bss)
Library libathdrv_sp$(LIBSUFFIX).a (.data)
# FATFS core symbols
Object OBJECT(FATFSi_lfi2text, libfatfs_sp$(LIBSUFFIX).a) (.text) # 360 BYTEs
Object OBJECT(FATFSi_pc_findin, libfatfs_sp$(LIBSUFFIX).a) (.text) # 904 BYTEs
Object OBJECT(FATFSi_pc_patcmp_vfat, libfatfs_sp$(LIBSUFFIX).a) (.text) # 436 BYTEs
Object OBJECT(FATFSi_pc_ascii_mfile, libfatfs_sp$(LIBSUFFIX).a) (.text) # 160 BYTEs
Object OBJECT(FATFSi_map_ascii_to_unicode, libfatfs_sp$(LIBSUFFIX).a) (.text) # 48 BYTEs
Object OBJECT(SDCARD_Intr_Thread, libfatfs_sp$(LIBSUFFIX).a) (.text) # 520 BYTEs
Object OBJECT(FATFSi_unicode_cmp_to_ascii_char, libfatfs_sp$(LIBSUFFIX).a) (.text) # 40 BYTEs
Object OBJECT(FATFSi_pc_read_blk, libfatfs_sp$(LIBSUFFIX).a) (.text) # 352 BYTEs
Object * (.rsvwram)
}

View File

@ -25,6 +25,8 @@ typedef struct BannerCheckParam {
u32 size;
}BannerCheckParam;
#define MEASURE_BANNER_LOAD_TIME 0
// extern data-----------------------------------------------------------------
// function's prototype-------------------------------------------------------
@ -66,7 +68,11 @@ BOOL BANNER_ReadBannerFromCARD( u32 bannerOffset, TWLBannerFile *pBanner )
BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
{
#define PATH_LENGTH 1024
#if (MEASURE_BANNER_LOAD_TIME == 1)
OSTick start;
#endif
FSFile file[1];
BOOL bSuccess;
char path[PATH_LENGTH];
@ -75,9 +81,15 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
FS_InitFile(file);
#if (MEASURE_BANNER_LOAD_TIME == 1)
start = OS_GetTick();
#endif
readLen = NAM_GetTitleBootContentPathFast( path, titleID );
#if (MEASURE_BANNER_LOAD_TIME == 1)
OS_TPrintf( "NAM_GetTitleBootContentPath : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
#endif
// ファイルパスを取得
if(readLen != NAM_OK){
@ -85,6 +97,10 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
return FALSE;
}
#if (MEASURE_BANNER_LOAD_TIME == 1)
start = OS_GetTick();
#endif
// ファイルオープン
bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R);
if( ! bSuccess )
@ -93,6 +109,11 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
return FALSE;
}
#if (MEASURE_BANNER_LOAD_TIME == 1)
OS_TPrintf( "OpenFileEX : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
start = OS_GetTick();
#endif
// ROMヘッダのバナーデータオフセットを読み込む
bSuccess = FS_SeekFile(file, 0x68, FS_SEEK_SET);
if( ! bSuccess )
@ -101,6 +122,12 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
FS_CloseFile(file);
return FALSE;
}
#if (MEASURE_BANNER_LOAD_TIME == 1)
OS_TPrintf( "FS_SeekFile offset: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
start = OS_GetTick();
#endif
readLen = FS_ReadFile(file, &offset, sizeof(offset));
if( readLen != sizeof(offset) )
{
@ -108,9 +135,18 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
FS_CloseFile(file);
return FALSE;
}
#if (MEASURE_BANNER_LOAD_TIME == 1)
OS_TPrintf( "FS_ReadFile offset : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
#endif
// バナーが存在する場合のみリード
if( offset ) {
#if (MEASURE_BANNER_LOAD_TIME == 1)
start = OS_GetTick();
#endif
bSuccess = FS_SeekFile(file, offset, FS_SEEK_SET);
if( ! bSuccess )
{
@ -118,6 +154,12 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
FS_CloseFile(file);
return FALSE;
}
#if (MEASURE_BANNER_LOAD_TIME == 1)
OS_TPrintf( "FS_SeekFile banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
start = OS_GetTick();
#endif
readLen = FS_ReadFile( file, pDst, (s32)sizeof(TWLBannerFile) );
if( readLen != (s32)sizeof(TWLBannerFile) )
{
@ -125,21 +167,46 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
FS_CloseFile(file);
return FALSE;
}
#if (MEASURE_BANNER_LOAD_TIME == 1)
OS_TPrintf( "FS_ReadFile banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
start = OS_GetTick();
#endif
if( !BANNER_CheckBanner( pDst ) )
{
// 正当性チェック失敗の場合はバッファクリア
MI_CpuClearFast( pDst, sizeof(TWLBannerFile) );
}
#if (MEASURE_BANNER_LOAD_TIME == 1)
OS_TPrintf( "check banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
#endif
}else {
// バナーが存在しない場合はバッファクリア
MI_CpuClearFast( pDst, sizeof(TWLBannerFile) );
}
#if (MEASURE_BANNER_LOAD_TIME == 1)
start = OS_GetTick();
#endif
FS_CloseFile(file);
#if (MEASURE_BANNER_LOAD_TIME == 1)
OS_TPrintf( "close file : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
start = OS_GetTick();
#endif
// サブバナーファイルを読み込んでみる
if(NAM_OK == NAM_GetTitleBannerFilePath( path, titleID ))
{
#if (MEASURE_BANNER_LOAD_TIME == 1)
OS_TPrintf( "NAM_GetTitleBannerFilePath : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
start = OS_GetTick();
#endif
if( FS_OpenFileEx(file, path, FS_FILEMODE_R) )
{
TWLSubBannerFile subBanner;
@ -153,16 +220,21 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
// 成功したのでコピーする
pDst->h = subBanner.h;
pDst->anime = subBanner.anime;
OS_TPrintf("BANNER_ReadBanner_NAND : subbanner check succeed. id=%.16x\n", titleID);
// OS_TPrintf("BANNER_ReadBanner_NAND : subbanner check succeed. id=%.16x\n", titleID);
}else
{
OS_TPrintf("BANNER_ReadBanner_NAND : subbanner check failed. id=%.16x\n", titleID);
// OS_TPrintf("BANNER_ReadBanner_NAND : subbanner check failed. id=%.16x\n", titleID);
}
}else
{
OS_TPrintf("BANNER_ReadBanner_NAND : subbanner read failed. id=%.16x\n", titleID);
}
}
#if (MEASURE_BANNER_LOAD_TIME == 1)
OS_TPrintf( "open-read-close-check subbanner : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
#endif
}
return TRUE;

View File

@ -784,6 +784,9 @@ static void NAMUTi_ClearWiFiSettings( void )
*---------------------------------------------------------------------------*/
static void PrintDirectory(s32 depth, const char* path)
{
#ifdef SDK_FINALROM
#pragma unused(path)
#endif
int i;
for (i=0; i<depth; i++)
@ -805,6 +808,9 @@ static void PrintDirectory(s32 depth, const char* path)
*---------------------------------------------------------------------------*/
static void PrintFile(s32 depth, const char* filename)
{
#ifdef SDK_FINALROM
#pragma unused(filename)
#endif
int i;
for (i=0; i<depth+1; i++)

View File

@ -23,6 +23,9 @@
#include "fs_wram.h"
// define data-----------------------------------------------------------------
#define MEASURE_MAKELIST_TIME 0
#define CARD_BANNER_INDEX ( LAUNCHER_TITLE_LIST_NUM - 1 )
#define LAUNCHER_KEY_INDEX 0 // ファームから送られてくる鍵のうちLauncherキーのインデックス
@ -1627,7 +1630,13 @@ static void SYSMi_makeTitleIdList( void )
int l;
u8 count = 0;
int max = ( s_listLength < OS_TITLEIDLIST_MAX ) ? s_listLength : OS_TITLEIDLIST_MAX;
OSTick start;
#if (MEASURE_MAKELIST_TIME == 1)
OSTick prev;
#endif
// ŽžŠÔŒvª<C2AA><E28098>
start = OS_GetTick();
if( s_pTitleIDList == NULL )
{
OS_TPrintf("SYSMi_makeTitleIdList failed: SYSM_InitNandTitleList() is not called.\n");
@ -1672,7 +1681,22 @@ static void SYSMi_makeTitleIdList( void )
continue;
}
// romヘッダ読み込み
#if (MEASURE_MAKELIST_TIME == 1)
// ŽžŠÔŒvªP
prev = OS_GetTick();
#endif
NAM_GetTitleBootContentPathFast(path, s_pTitleIDList[l]);
#if (MEASURE_MAKELIST_TIME == 1)
OS_TPrintf("SYSMi_makeTitleIdList : NAM_GetTitleBootContentPathFast %dms\n",OS_TicksToMilliSeconds(OS_GetTick() - prev));
// endŽžŠÔŒvªP
// ŽžŠÔŒvªQ
prev = OS_GetTick();
#endif
FS_InitFile( file );
bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R);
if( ! bSuccess )
@ -1697,6 +1721,10 @@ static void SYSMi_makeTitleIdList( void )
}
FS_CloseFile(file);
pe_hs = (ROM_Header_Short *)&e_hs;
// endŽžŠÔŒvªQ
#if (MEASURE_MAKELIST_TIME == 1)
OS_TPrintf("SYSMi_makeTitleIdList : read header. %dms\n",OS_TicksToMilliSeconds(OS_GetTick() - prev));
#endif
}
for(m=0;m<MAKER_CODE_MAX;m++)
@ -1756,6 +1784,8 @@ static void SYSMi_makeTitleIdList( void )
}
}
list->num = count;
// endŽžŠÔŒvª<C2AA><E28098>
OS_TPrintf("SYSMi_makeTitleIdList : total %dms\n",OS_TicksToMilliSeconds(OS_GetTick() - start));
}

View File

@ -16,6 +16,7 @@
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <twl/nam.h>
#include <sysmenu.h>
// define data------------------------------------------
@ -246,3 +247,31 @@ BOOL UTL_CheckRTCTime( RTCTime *timep )
return TRUE;
}
//======================================================================
// タイトル数取得
//======================================================================
// ローンチ対象のアプリ数カウント
int UTL_GetInstalledSoftBoxCount( void )
{
int l;
int listNum;
int validNum = 0;
OSTitleId titleIDArray[ LCFG_TWL_FREE_SOFT_BOX_COUNT_MAX ];
MI_CpuClear32( titleIDArray, sizeof(titleIDArray) );
// インストールされているNANDアプリ全タイトルのTitleID取得
listNum = NAM_GetNumTitles();
(void)NAM_GetTitleList( titleIDArray, (u32)listNum );
// 取得したタイトルがローンチ対象かどうかをチェック
for( l = 0; l < listNum; l++ ) {
// "Not Launch"でない かつ "Data Only"でない なら有効なタイトルとしてリストに追加
if( ( titleIDArray[ l ] & ( TITLE_ID_NOT_LAUNCH_FLAG_MASK | TITLE_ID_DATA_ONLY_FLAG_MASK ) ) == 0 ) {
validNum++;
}
}
return validNum;
}

View File

@ -7,7 +7,7 @@ OUT_KEY : rsa_public.sbin
WRAM_RBIN: ./wram_regs/wram_regs.rbin
MIRROR_OFS: 0x100000
MIRROR_OFS: 0x80000
DECOMP_PROC : ARM9 # ARM9 or ARM7

View File

@ -7,7 +7,7 @@ OUT_KEY : rsa_public.sbin
WRAM_RBIN: ../../norfirm/norfirm-print/wram_regs/wram_regs.rbin
MIRROR_OFS: 0x100000
MIRROR_OFS: 0x80000
DECOMP_PROC : ARM9 # ARM9 or ARM7

View File

@ -7,7 +7,7 @@ OUT_KEY : rsa_public.sbin
WRAM_RBIN: ./wram_regs/wram_regs.rbin
MIRROR_OFS: 0x100000
MIRROR_OFS: 0x80000
DECOMP_PROC : ARM9 # ARM9 or ARM7

View File

@ -32,6 +32,8 @@
#define INIT_DEVICES_LIKE_UIG_LAUNCHER
#define MEASURE_TIME 1
// function's prototype-------------------------------------------------------
static void INTR_VBlank( void );
static void deleteTmp();
@ -134,7 +136,7 @@ void TwlMain( void )
};
u32 state = LOGODEMO_INIT;
TitleProperty *pBootTitle = NULL;
OSTick start, end = 0;
OSTick allstart, start, end = 0;
BOOL direct_boot = FALSE;
#ifdef DEBUG_LAUNCHER_DUMP
@ -149,6 +151,17 @@ void TwlMain( void )
// OS初期化------------------------
OS_InitTick();
// start 時間計測total
#if (MEASURE_TIME == 1)
allstart = OS_GetTick();
#endif
// start時間計測
#if (MEASURE_TIME == 1)
start = OS_GetTick();
#endif
PM_Init();
(void)OS_EnableIrq();
@ -171,24 +184,39 @@ void TwlMain( void )
#ifdef USE_WRAM_LOAD
HOTSW_Init();
#endif
//NAMの初期化
NAM_Init( Alloc, Free );
OS_TPrintf( "SYSM_work size = 0x%x\n", sizeof(SYSM_work) );
// 割り込み許可--------------------
(void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank);
(void)OS_EnableIrqMask(OS_IE_V_BLANK);
(void)GX_VBlankIntr(TRUE);
// システムの初期化----------------
InitAllocator(); // ※SYSM_Init以外のSYSMライブラリ関数を呼ぶ前に
// Alloc, Freeで登録したメモリアロケータを初期化してください。
// end時間計測
#if (MEASURE_TIME == 1)
OS_TPrintf( "System Init Time 1: %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
#endif
// start時間計測-b
#if (MEASURE_TIME == 1)
start = OS_GetTick();
#endif
// Alloc, Freeで登録したメモリアロケータを初期化してください。
#ifdef INIT_DEVICES_LIKE_UIG_LAUNCHER
// カメラ初期化
CAMERA_Init();
// end時間計測-b
#if (MEASURE_TIME == 1)
OS_TPrintf( "Camera Init: %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
#endif
// DSP初期化
#if 0
{
@ -211,11 +239,27 @@ void TwlMain( void )
DSP_UnloadJpegDecoder();
}
#endif
#endif // INIT_DEVICES_LIKE_UIG_LAUNCHER
// start時間計測-c
#if (MEASURE_TIME == 1)
start = OS_GetTick();
#endif
// 各種パラメータの取得------------
pBootTitle = SYSM_ReadParameters(); // 本体設定データ、リセットパラメータのリード、検査用オート起動カード判定、量産ライン用キーショートカット起動判定等のリード
// end時間計測-c
#if (MEASURE_TIME == 1)
OS_TPrintf( "SYSM_ReadParameters: %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
#endif
// start時間計測
#if (MEASURE_TIME == 1)
start = OS_GetTick();
#endif
// TPキャリブレーション
UTL_CaribrateTP( LCFG_TSD_GetTPCalibrationPtr() );
@ -225,21 +269,53 @@ void TwlMain( void )
if( !LCFG_TSD_IsFinishedInitialSetting() ) {
// 初回起動シーケンス判定
}
(void)SYSM_GetCardTitleList( s_titleList ); // カードアプリリストの取得カードアプリはs_titleList[0]に格納される)
// end時間計測
#if (MEASURE_TIME == 1)
OS_TPrintf( "GetCardTitleList Time : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
#endif
// start時間計測3
#if (MEASURE_TIME == 1)
start = OS_GetTick();
#endif
// TMPフォルダのクリーン
SYSM_DeleteTmpDirectory( pBootTitle );
// end時間計測3
#if (MEASURE_TIME == 1)
OS_TPrintf( "TmpClean : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
#endif
// start時間計測4
#if (MEASURE_TIME == 1)
start = OS_GetTick();
#endif
// NANDタイトルリストの準備
SYSM_InitNandTitleList();
// end時間計測4
#if (MEASURE_TIME == 1)
OS_TPrintf( "InitNandTitleList : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
#endif
// start時間計測5
#if (MEASURE_TIME == 1)
start = OS_GetTick();
#endif
// 「ダイレクトブートでない」なら
if( !pBootTitle ) {
// NAND & カードアプリリスト取得
(void)SYSM_GetNandTitleList( s_titleList, LAUNCHER_TITLE_LIST_NUM ); // NANDアプリリストの取得内蔵アプリはs_titleList[1]から格納される)
}
// end時間計測5
#if (MEASURE_TIME == 1)
OS_TPrintf( "GetNandTitleList : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
#endif
// start時間計測6
#if (MEASURE_TIME == 1)
start = OS_GetTick();
#endif
// 「ダイレクトブートでない」もしくは
// 「ダイレクトブートだが、ロゴデモ表示」の時、各種リソースのロード------------
if( !pBootTitle ||
@ -251,9 +327,17 @@ void TwlMain( void )
timestamp = OS_GetSharedFontTimestamp();
if( timestamp > 0 ) OS_TPrintf( "SharedFont timestamp : %08x\n", timestamp );
}
// end時間計測6
#if (MEASURE_TIME == 1)
OS_TPrintf( "GetSharedFont : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
#endif
// 開始ステートの判定--------------
// start時間計測7
#if (MEASURE_TIME == 1)
start = OS_GetTick();
#endif
if( pBootTitle ) {
// ダイレクトブートなら、ロゴ、ランチャーを飛ばしてロード開始
if( pBootTitle->flags.isLogoSkip ) {
@ -292,19 +376,36 @@ void TwlMain( void )
s_strmThreadStack + THREAD_STACK_SIZE / sizeof(u64),
THREAD_STACK_SIZE, STREAM_THREAD_PRIO);
OS_WakeupThreadDirect(&s_strmThread);
// end時間計測7
#if (MEASURE_TIME == 1)
OS_TPrintf( "time 7 (etc...) : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
#endif
// start時間計測8
#if (MEASURE_TIME == 1)
start = OS_GetTick();
#endif
// 無線ファームウェアを無線モジュールにダウンロードする。
#ifndef DISABLE_WLFIRM_LOAD
if( FALSE == InstallWlanFirmware( SYSM_IsHotStart() ) ) {
OS_TPrintf( "ERROR: Wireless firmware download failed!\n" );
}
#endif // DISABLE_WLFIRM_LOAD
// end時間計測8
#if (MEASURE_TIME == 1)
OS_TPrintf( "Load WlanFirm Time : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
#endif
if( SYSM_IsFatalError() ) {
// FATALエラー処理
}
// end 時間計測total
#if (MEASURE_TIME == 1)
OS_TPrintf( "Total Time : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - allstart ) );
#endif
// メインループ--------------------
while( 1 ) {
OS_WaitIrq(1, OS_IE_V_BLANK); // Vブランク割り込み待ち

Binary file not shown.

View File

@ -19,6 +19,7 @@
#define __SYSM_UTIL_H__
#include <twl.h>
#include <sysmenu.h>
#ifdef __cplusplus
extern "C" {
@ -53,6 +54,16 @@ extern BOOL UTL_IsLeapYear100( u32 year ); //
extern u32 UTL_CalcPCTLInquiryCode( void ); // 問い合わせコード(10進8桁)算出
extern u32 UTL_CalcPCTLMasterKey( void ); // マスターキー  算出※内部でRTC_GetDateを使用します。
// タイトル数取得内部でNAMを使用するので、NAM_Initが事前に呼ばれている必要あり
extern int UTL_GetInstalledSoftBoxCount( void );
// アプリROMヘッダの要EULAフラグ取得
static inline BOOL UTL_IsROMHeaderEULARequired( void )
{
return (BOOL)SYSM_GetAppRomHeader()->agree_EULA;
}
#endif
#ifdef __cplusplus