SDK3729に対応中。(ランチャーが動かない)

BootSRLPathをTMPブート時にセットするよう変更。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@495 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-01-21 12:09:10 +00:00
parent 0deab36684
commit db4df023f6
14 changed files with 121 additions and 62 deletions

View File

@ -38,9 +38,9 @@
void SYSMi_SetLauncherMountInfo( void );
void SYSM_SetBootAppMountInfo( TitleProperty *pBootTitle );
static void SYSMi_SetBootSRLPath( NAMTitleId titleID, OSBootType bootType );
static void SYSMi_SetMountInfoCore( const OSMountInfo *pSrc );
static void SYSMi_ModifySaveDataMount( NAMTitleId titleID, OSMountInfo *pMountTgt );
static void SYSMi_SetBootSRLPath( OSBootType bootType, NAMTitleId titleID );
static void SYSMi_SetMountInfoCore( OSBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc );
static void SYSMi_ModifySaveDataMount( OSBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt );
// global variable-------------------------------------------------------------
@ -72,31 +72,52 @@ OSMountInfo s_defaultMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = {
BootSRLPathは"rom:"""
"nand:" "nand1:"userPermissionは"OS_MOUNT_USR_R"
*/
// ランチャーのマウント情報セット
void SYSMi_SetLauncherMountInfo( void )
{
// ※とりあえず自身はROMブートで。後で修正
// SYSMi_SetBootSRLPath( ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。
SYSMi_SetMountInfoCore( &s_defaultMountList[0] );
NAMTitleId titleID = TITLE_ID_LAUNCHER;
// マウント情報のクリア
MI_CpuClearFast( (void *)HW_TWL_FS_MOUNT_INFO_BUF, HW_TWL_ROM_HEADER_BUF - HW_TWL_FS_MOUNT_INFO_BUF );
// ※とりあえず自身はROMブートで。[TODO:]後で修正
// SYSMi_SetBootSRLPath( OS_BOOTTYPE_NAND, titleID ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。
// セーブデータ有無によるマウント情報の編集
SYSMi_ModifySaveDataMount( OS_BOOTTYPE_NAND,
titleID,
&s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ] );
// マウント情報のセット
SYSMi_SetMountInfoCore( OS_BOOTTYPE_NAND,
titleID,
&s_defaultMountList[0] );
}
// システム領域に、ブートするアプリのマウント情報を登録する
void SYSM_SetBootAppMountInfo( TitleProperty *pBootTitle )
{
u32 titleID_Hi = (u32)( pBootTitle->titleID >> 32 ); // u64で論理演算はできない
// 起動アプリのSRLパスをセット
SYSMi_SetBootSRLPath( pBootTitle->titleID, (OSBootType)pBootTitle->flags.bootType );
// マウント情報のクリア
MI_CpuClearFast( (void *)HW_TWL_FS_MOUNT_INFO_BUF, HW_TWL_ROM_HEADER_BUF - HW_TWL_FS_MOUNT_INFO_BUF );
// ユーザーアプリの場合、"nand:", "nand2:"アーカイブを変更。
if( ( titleID_Hi & TITLEID_HI_APP_SYS_FLAG ) == 0 ) {
s_defaultMountList[ 1 ].userPermission = 0; // "nand:"
s_defaultMountList[ 2 ].userPermission = 0; // "nand2:"
// アプリがTWL対応でない場合は、何もセットせずにリターン
if( ( (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->platform_code ) == 0 ) {
return;
}
// 起動アプリのSRLパスをセット
SYSMi_SetBootSRLPath( (OSBootType)pBootTitle->flags.bootType,
pBootTitle->titleID );
// セーブデータ有無によるマウント情報の編集
SYSMi_ModifySaveDataMount( pBootTitle->titleID, &s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ] );
SYSMi_ModifySaveDataMount( (OSBootType)pBootTitle->flags.bootType,
pBootTitle->titleID,
&s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ] );
// マウント情報のセット
SYSMi_SetMountInfoCore( (OSBootType)pBootTitle->flags.bootType,
pBootTitle->titleID,
&s_defaultMountList[0] );
/*
  
@ -104,36 +125,53 @@ void SYSM_SetBootAppMountInfo( TitleProperty *pBootTitle )
FSライブラリおよびFSを使用したESやNAMライブラリが全く使用できなくなる
FSライブラリを使用する処理は
*/
SYSMi_SetMountInfoCore( (const OSMountInfo *)&s_defaultMountList[0] ); // マウント情報のセット
}
// 起動SRLパスをシステム領域にセット
static void SYSMi_SetBootSRLPath( NAMTitleId titleID, OSBootType bootType )
static void SYSMi_SetBootSRLPath( OSBootType bootType, NAMTitleId titleID )
{
static char path[ FS_ENTRY_LONGNAME_MAX ];
MI_CpuClear8( path, FS_ENTRY_LONGNAME_MAX );
if( bootType == OS_BOOTTYPE_NAND ) {
switch( bootType )
{
case OS_BOOTTYPE_NAND:
if( NAM_GetTitleBootContentPathFast( path, titleID ) != NAM_OK ) {
OS_TPrintf( "ERROR: BootContentPath Get failed.\n" );
}
}else {
break;
case OS_BOOTTYPE_TEMP:
STD_TSNPrintf( path, 31, "nand:/tmp/%.16llx.srl", titleID );
break;
default:
path[ 0 ] = 0;
// STD_StrCpy( path, (const char*)"rom:" ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。
break;
}
STD_CopyLStringZeroFill( (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF, path, OS_MOUNT_PATH_LEN );
if( path[ 0 ] ) {
STD_CopyLStringZeroFill( (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF, path, OS_MOUNT_PATH_LEN );
}
// OS_TPrintf( "boot path : %s\n", (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF ); // ※今はOS_Init前で呼ばれるので、Printfできない。
}
// マウント情報をシステム領域に書き込み
static void SYSMi_SetMountInfoCore( const OSMountInfo *pSrc )
static void SYSMi_SetMountInfoCore( OSBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc )
{
OSMountInfo *pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF;
#pragma unused(bootType)
int i;
u32 titleID_Hi = (u32)( titleID >> 32 ); // u64で論理演算はできない
OSMountInfo *pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF;
MI_CpuClearFast( (void *)HW_TWL_FS_MOUNT_INFO_BUF, HW_TWL_FS_BOOT_SRL_PATH_BUF - HW_TWL_FS_MOUNT_INFO_BUF );
// ユーザーアプリの場合、"nand:", "nand2:"アーカイブを変更。
if( ( titleID_Hi & TITLEID_HI_APP_SYS_FLAG ) == 0 ) {
pSrc[ 1 ].userPermission = 0; // "nand:"
pSrc[ 2 ].userPermission = 0; // "nand2:"
}
// セット
for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) {
if( pSrc->drive[ 0 ] ) {
MI_CpuCopyFast( pSrc, pDst, sizeof(OSMountInfo) );
@ -152,15 +190,20 @@ static void SYSMi_SetMountInfoCore( const OSMountInfo *pSrc )
// タイトルIDをもとにセーブデータ有無を判定して、マウント情報を編集する。
static void SYSMi_ModifySaveDataMount( NAMTitleId titleID, OSMountInfo *pMountTgt )
static void SYSMi_ModifySaveDataMount( OSBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt )
{
int i;
u32 titleID_Hi = (u32)( titleID >> 32 ); // u64で論理演算はできない
// ※カードからブートされた場合でも、titleIDが"NANDアプリ"の場合は、セーブデータをマウントするようにしている。
// タイトルIDが"NANDアプリ"の場合は、セーブデータ有無を判定して、パスをセット
if( titleID_Hi & TITLEID_HI_MEDIA_NAND_FLAG ) {
// セーブデータ有無を判定して、パスをセット
if( ( ( bootType == OS_BOOTTYPE_NAND ) && // NANDアプリがNANDからブートされた時
( titleID_Hi & TITLEID_HI_MEDIA_NAND_FLAG ) ) ||
( ( bootType == OS_BOOTTYPE_ROM ) && // ISデバッガ上で、NANDアプリがROM からブートされた時
( titleID_Hi & TITLEID_HI_MEDIA_NAND_FLAG ) &&
( SYSMi_GetWork()->isOnDebugger ) )
) {
char saveFilePath[ 2 ][ FS_ENTRY_LONGNAME_MAX ];
u32 saveDataSize[ 2 ];
saveDataSize[ 0 ] = (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->private_save_data_size;

View File

@ -51,10 +51,9 @@ static void SYSMi_Relocate( void );
static BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner );
static BOOL SYSMi_CheckBannerFile( NTRBannerFile *pBanner );
// global variable-------------------------------------------------------------
void *(*SYSM_Alloc)( u32 size );
void (*SYSM_Free )( void *ptr );
void *(*SYSMi_Alloc)( u32 size );
void (*SYSMi_Free )( void *ptr );
#ifdef SYSM_DEBUG_
SYSM_work *pSysm; // デバッガでのSYSMワークのウォッチ用
@ -84,28 +83,42 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
// ランチャーのマウント情報セット
SYSMi_SetLauncherMountInfo();
OS_Init();
// ARM7コンポーネント用プロテクションユニット領域変更
OS_SetProtectionRegion( 2, SYSM_OWN_ARM7_MMEM_ADDR, 512KB );
// ARM9用ブートコード配置のため、アリーナHi位置を下げる
OS_SetMainArenaHi( (void *)SYSM_OWN_ARM9_MMEM_ADDR_END );
SYSM_SetAllocFunc( pAlloc, pFree );
reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット
}
void SYSM_SetArena( void )
{
// ARM9用ブートコード配置のため、アリーナHi位置を下げる
OS_SetMainArenaHi( (void *)SYSM_OWN_ARM9_MMEM_ADDR_END );
}
// システムメニューライブラリ用メモリアロケータの設定
void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) )
{
SYSM_Alloc = pAlloc;
SYSM_Free = pFree;
SYSMi_Alloc = pAlloc;
SYSMi_Free = pFree;
}
void *SYSM_Alloc( u32 size )
{
void *p = SYSMi_Alloc( size );
OS_TPrintf( "SYSM_Alloc : %08x %xbytes\n", p, size );
return p;
}
void SYSM_Free( void *ptr )
{
OS_TPrintf( "SYSM_Free : %08x\n", ptr );
SYSMi_Free( ptr );
}
// ============================================================================
//
// 情報取得
@ -155,12 +168,12 @@ TitleProperty *SYSM_ReadParameters( void )
// HW情報のリード
//-----------------------------------------------------
// ノーマル情報リード
if( LCFG_ReadHWNormalInfo() != LCFG_TSF_READ_RESULT_SUCCEEDED ) {
if( !LCFG_ReadHWNormalInfo() ) {
OS_TPrintf( "HW Normal Info Broken!\n" );
SYSMi_GetWork()->isBrokenHWNormalInfo = TRUE;
}
// セキュア情報リード
if( LCFG_ReadHWSecureInfo() != LCFG_TSF_READ_RESULT_SUCCEEDED ) {
if( !LCFG_ReadHWSecureInfo() ) {
OS_TPrintf( "HW Secure Info Broken!\n" );
SYSMi_GetWork()->isBrokenHWSecureInfo = TRUE;
}
@ -168,7 +181,7 @@ TitleProperty *SYSM_ReadParameters( void )
//-----------------------------------------------------
// 本体設定データのリード
//-----------------------------------------------------
if( LCFG_ReadTWLSettingsFile() ) { // NANDからTWL本体設定データをリード
if( LCFG_ReadTWLSettings() ) { // NANDからTWL本体設定データをリード
SYSM_CaribrateTP(); // 読み出したTWL本体設定データをもとにTPキャリブレーション。
brightness = (u8)LCFG_TSD_GetBacklightBrightness();
}
@ -871,7 +884,7 @@ void SYSM_SetBackLightBrightness( u8 brightness )
LCFG_TSD_SetBacklightBrightness( brightness );
// [TODO:] バックライト輝度は毎回セーブせずに、アプリ起動やリセット、電源OFF時に値が変わっていたらセーブするようにする。
LCFG_WriteTWLSettingsFile();
LCFG_WriteTWLSettings();
}
@ -1091,9 +1104,9 @@ static void SYSMi_CheckRTC( void )
) { // RTCの異常を検出したら、rtc入力フラグrtcOffsetを0にしてNVRAMに書き込み。
OS_TPrintf("\"RTC reset\" or \"Illegal RTC data\" detect!\n");
LCFG_TSD_SetFlagDateTime( FALSE );
TSD_SetRTCOffset( 0 ); // [TODO:]本来は、LCFG_TSD_SetRTCOffset( 0 ); SDK_5_00pr2では間違っている。
LCFG_TSD_SetRTCOffset( 0 );
LCFG_TSD_SetRTCLastSetYear( 0 );
LCFG_WriteTWLSettingsFile();
LCFG_WriteTWLSettings();
}
}

View File

@ -20,7 +20,6 @@
#include "HWInfoWriter.h"
// extern data-----------------------------------------------------------------
extern void SYSMi_SetLauncherMountInfo( void );
// define data-----------------------------------------------------------------
@ -39,8 +38,6 @@ static void INTR_VBlank( void );
// ============================================================================
void TwlMain(void)
{
SYSMi_SetLauncherMountInfo();
// <20>‰Šú‰»----------------------------------
OS_Init();
OS_InitTick();

View File

@ -17,8 +17,8 @@
#----------------------------------------------------------------------------
SUBDIRS = \
../../../libraries_sysmenu/sysmenu \
# ../../../libraries_sysmenu/hotsw \
# ../../../libraries_sysmenu/sysmenu \
# ../../../components/hyena.TWL
# ../../../libraries_sysmenu/reloc_info \
# ../../../libraries_sysmenu/boot \

View File

@ -74,8 +74,10 @@ void TwlMain( void )
TitleProperty *pBootTitle = NULL;
OSTick start, end = 0;
BOOL direct_boot = FALSE;
OS_Init();
// システムメニュー初期化----------
SYSM_SetArena();
SYSM_Init( Alloc, Free ); // OS_Initは、本関数内でコールしているので、コールする必要なし。
// OS初期化------------------------

View File

@ -422,7 +422,7 @@ int TP_CalibrationMain( void )
// ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み
// ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettingsFile();
(void)LCFG_WriteTWLSettings();
ReturnMenu();
return 0;

View File

@ -77,7 +77,7 @@ void TwlMain(void)
// TWL設定データファイルの読み込み
// ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_ReadHWSecureInfo();
g_isValidTSD = LCFG_ReadTWLSettingsFile();
g_isValidTSD = LCFG_ReadTWLSettings();
if( g_isValidTSD ) {
SYSM_CaribrateTP();
}

View File

@ -323,7 +323,7 @@ int SelectCountryMain( void )
// ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み
// ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettingsFile();
(void)LCFG_WriteTWLSettings();
MachineSettingInit();
return 0;

View File

@ -181,7 +181,7 @@ int SelectLanguageMain( void )
// ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み
// ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettingsFile();
(void)LCFG_WriteTWLSettings();
MachineSettingInit();
return 0;

View File

@ -432,7 +432,7 @@ static void PushKeys( u16 code, NameOrComment noc )
// ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み
// ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettingsFile();// ファイルへ書き込み
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み
// セーブ後にキャンセル処理と合流
case CANCEL_BUTTON_:
SetOwnerInfoInit();
@ -768,7 +768,7 @@ static int SetBirthdayMain( void )
// ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み
// ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettingsFile();// ファイルへ書き込み
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み
SetOwnerInfoInit();
g_pNowProcess = SetOwnerInfoMain;
return 0;
@ -889,7 +889,7 @@ static int SetUserColorMain( void )
// ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み
// ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettingsFile();// ファイルへ書き込み
(void)LCFG_WriteTWLSettings();// ファイルへ書き込み
SetOwnerInfoInit();
g_pNowProcess = SetOwnerInfoMain;
return 0;

View File

@ -376,14 +376,14 @@ static int InputRtcDateTimeMain( void )
MI_CpuCopy32( &s_pWork->dtp.Date, &date, sizeof(RTCDate) );
date.year -= 2000;
(void)RTC_SetDateTime( &date, &s_pWork->dtp.Time );
TSD_SetRTCOffset( SYSM_CalcRTCOffset( &date, &s_pWork->dtp.Time ) );
LCFG_TSD_SetRTCOffset( SYSM_CalcRTCOffset( &date, &s_pWork->dtp.Time ) );
}
LCFG_TSD_SetFlagDateTime( TRUE ); // RTC入力フラグを立てる。
// ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み
// ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettingsFile();
(void)LCFG_WriteTWLSettings();
// 上画面の表示更新
GetAndDrawRTCData( &g_rtcDraw, TRUE );
@ -544,10 +544,10 @@ void ClearRTC( void )
RTCTime time = { 0, 0, 0 };
(void)RTC_SetDateTime( &date, &time );
LCFG_TSD_SetFlagDateTime( TRUE );
TSD_SetRTCOffset( 0 ); // [TODO:]SDKの関数名が間違っている
LCFG_TSD_SetRTCOffset( 0 );
LCFG_TSD_SetRTCLastSetYear( 0 );
// ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルへの書き込み
// ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_WriteTWLSettingsFile();
(void)LCFG_WriteTWLSettings();
}

View File

@ -70,13 +70,16 @@ typedef enum AuthResult {
// global variable------------------------------------------------------
extern void *(*SYSM_Alloc)( u32 size ); // ライブラリ内部使用
extern void (*SYSM_Free)( void *ptr ); // 同上
extern void *SYSM_Alloc( u32 size );
extern void SYSM_Free( void *ptr );
//extern void *(*SYSM_Alloc)( u32 size ); // ライブラリ内部使用
//extern void (*SYSM_Free)( void *ptr ); // 同上
// function-------------------------------------------------------------
// 初期化
extern void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ); // 初期化。OS_Initの前のへんでコールしてください。
extern void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ); // 初期化。
extern void SYSM_SetArena( void ); // システムメニューのアリーナ初期化。OS_Initの後で呼んでください。
extern void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) ); // SYSM_initで設定した場合は必要なし。
extern TitleProperty *SYSM_ReadParameters( void ); // 本体設定データ、リセットパラメータなどを取得

View File

@ -29,6 +29,7 @@ extern "C" {
#endif
// define data ------------------------------------
#define TITLE_ID_LAUNCHER ( 0x0003000752434e4cLLU )
#define CLONE_BOOT_MODE 1
#define OTHER_BOOT_MODE 2