mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
プリロードパラメータを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:
parent
f5168cc5b8
commit
f88d4aaa49
@ -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) );
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user