プリロードパラメータをreboot内でWLレジスタの判定をした後にHW_PARAM_TWL_SETTINGS_DATA_DEFAULT

にコピーするよう変更。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1341 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-05-14 07:44:11 +00:00
parent f5168cc5b8
commit f88d4aaa49
2 changed files with 84 additions and 4 deletions

View File

@ -27,7 +27,7 @@
extern void LCFG_VerifyAndRecoveryNTRSettings( void );
// function's prototype-------------------------------------------------------
static void SYSMi_CopyLCFGData( void );
static void SYSMi_CopyLCFGData( u32 dst_addr );
static TitleProperty *SYSMi_CheckDebuggerBannerViewModeBoot( void );
static TitleProperty *SYSMi_CheckShortcutBoot1( void );
static TitleProperty *SYSMi_CheckShortcutBoot2( void );
@ -45,6 +45,9 @@ SYSM_work *pSysm; //
ROM_Header_Short *pRomHeader;
#endif
// static variable-------------------------------------------------------------
static u8 s_lcfgBuffer[ HW_PARAM_TWL_SETTINGS_DATA_SIZE // 0x01fc
+ HW_PARAM_WIRELESS_FIRMWARE_DATA_SIZE // 0x0004
+ HW_PARAM_TWL_HW_NORMAL_INFO_SIZE ] ATTRIBUTE_ALIGN(32); // 0x1000
static TitleProperty s_bootTitleBuf;
@ -63,7 +66,7 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
pSysm = SYSMi_GetWork();
pRomHeader = (ROM_Header_Short *)0x027fc000;
#endif /* SYSM_DEBUG_ */
// ARM7で使用する分の鍵を渡す
SYSMi_SendKeysToARM7();
@ -174,7 +177,7 @@ TitleProperty *SYSM_ReadParameters( void )
//-----------------------------------------------------
// NTRカードアプリARM9コードのロード領域とメモリがかち合うが、先頭0x4000はセキュア領域で別バッファに格納されるので、
// ここでこれらのパラメータをロードしても大丈夫。
SYSMi_CopyLCFGData();
SYSMi_CopyLCFGData( (u32)s_lcfgBuffer );
//-----------------------------------------------------
// 無線ON/OFFフラグをもとに、LEDを設定する。
@ -292,8 +295,10 @@ TitleProperty *SYSM_ReadParameters( void )
// 本体設定データなどのメモリ展開。
static void SYSMi_CopyLCFGData( void )
static void SYSMi_CopyLCFGData( u32 dst_addr )
{
*(u32 *)HW_PRELOAD_PARAMETER_ADDR = dst_addr;
// 本体設定データ、HWーマル情報、HWセキュア情報をメモリに展開しておく
MI_CpuCopyFast( LCFGi_GetTSD(), (void *)HW_PARAM_TWL_SETTINGS_DATA, sizeof(LCFGTWLSettingsData) );
MI_CpuCopyFast( LCFGi_GetHWN(), (void *)HW_PARAM_TWL_HW_NORMAL_INFO, sizeof(LCFGTWLHWNormalInfo) );

View File

@ -357,3 +357,78 @@ static void deleteTmp()
}
}
}
#define OS_SHARED_FONT_FILE_NAME_LENGTH 0x20
typedef struct OSSharedFontHeader {
u32 timestamp;
u16 fontNum;
u8 pad[ 6 ];
u8 digest[ SVC_SHA1_DIGEST_SIZE ];
}OSSharedFontHeader;
typedef struct OSSharedFontInfo {
u8 fileName[ OS_SHARED_FONT_FILE_NAME_LENGTH ];
u8 pad[ 4 ];
u32 offset;
u32 length;
u8 digest[ SVC_SHA1_DIGEST_SIZE ];
}OSSharedFontInfo;
#if 0
BOOL ReadSharedFontTable( void )
{
#define SIGN_SIZE 0x80
#define HEADER_SIZE 0x20
const char *pPath = "sdmc:/TWLFontTable.dat";
FSFile file[1];
u8 signature[ SIGN_SIZE ];
OSSharedFontHeader header;
u8 calc_digest[ SVC_SHA1_DIGEST_SIZE ];
u8 sign_digest[ SVC_SHA1_DIGEST_SIZE ];
static u32 heap[ 4096 / sizeof(u32) ];
SVCSignHeapContext acmemoryPool;
u32 len = 0;
if( !FS_OpenFileEx( file, pPath, FS_FILEMODE_R ) ) {
return FALSE;
}
// 署名リード
if( FS_ReadFile( file, signature, SIGN_SIZE ) != SIGN_SIZE ){
goto ERROR;
}
// ヘッダリード
if( FS_ReadFile( file, header, HEADER_SIZE ) != HEADER_SIZE ){
goto ERROR;
}
// ヘッダ署名チェック
SVC_InitSignHeap( &acmemoryPool, heap, 4096 );
if( !SVC_DecryptSign( &acmemoryPool, sign_digest, signature, pPubKey ) ) {
goto ERROR;
}
// フォントInfoテーブルリード
len = sizeof(OSSHaredFontInfo) * header->fontNum;
if( FS_ReadFile( file, infoTable, len ) != len ){
goto ERROR;
}
// フォントInfoテーブル ハッシュチェック
SVC_CalcSHA1( calc_digest, infoTable, len );
if( !SVC_CompareSHA1( calc_digest, header->digest ) ) {
return FALSE;
}
FS_CloseFile( file );
ERROR:
FS_CloseFile( file );
return FALSE;
}
#endif