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 );
|
extern void LCFG_VerifyAndRecoveryNTRSettings( void );
|
||||||
|
|
||||||
// function's prototype-------------------------------------------------------
|
// function's prototype-------------------------------------------------------
|
||||||
static void SYSMi_CopyLCFGData( void );
|
static void SYSMi_CopyLCFGData( u32 dst_addr );
|
||||||
static TitleProperty *SYSMi_CheckDebuggerBannerViewModeBoot( void );
|
static TitleProperty *SYSMi_CheckDebuggerBannerViewModeBoot( void );
|
||||||
static TitleProperty *SYSMi_CheckShortcutBoot1( void );
|
static TitleProperty *SYSMi_CheckShortcutBoot1( void );
|
||||||
static TitleProperty *SYSMi_CheckShortcutBoot2( void );
|
static TitleProperty *SYSMi_CheckShortcutBoot2( void );
|
||||||
@ -45,6 +45,9 @@ SYSM_work *pSysm; //
|
|||||||
ROM_Header_Short *pRomHeader;
|
ROM_Header_Short *pRomHeader;
|
||||||
#endif
|
#endif
|
||||||
// static variable-------------------------------------------------------------
|
// 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;
|
static TitleProperty s_bootTitleBuf;
|
||||||
|
|
||||||
@ -174,7 +177,7 @@ TitleProperty *SYSM_ReadParameters( void )
|
|||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
// NTRカードアプリARM9コードのロード領域とメモリがかち合うが、先頭0x4000はセキュア領域で別バッファに格納されるので、
|
// NTRカードアプリARM9コードのロード領域とメモリがかち合うが、先頭0x4000はセキュア領域で別バッファに格納されるので、
|
||||||
// ここでこれらのパラメータをロードしても大丈夫。
|
// ここでこれらのパラメータをロードしても大丈夫。
|
||||||
SYSMi_CopyLCFGData();
|
SYSMi_CopyLCFGData( (u32)s_lcfgBuffer );
|
||||||
|
|
||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
// 無線ON/OFFフラグをもとに、LEDを設定する。
|
// 無線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セキュア情報をメモリに展開しておく
|
// 本体設定データ、HWノーマル情報、HWセキュア情報をメモリに展開しておく
|
||||||
MI_CpuCopyFast( LCFGi_GetTSD(), (void *)HW_PARAM_TWL_SETTINGS_DATA, sizeof(LCFGTWLSettingsData) );
|
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) );
|
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