NandFormatter ver.0の起動制限がうまくいっていなかったのを修正。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1253 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-04-24 05:46:54 +00:00
parent 0ad1f75557
commit 0db2184e7d
3 changed files with 38 additions and 36 deletions

View File

@ -39,12 +39,21 @@
#define CLRLIST_REBOOT_STACK_PAD_SIZE_IDX (2*3+1)
#define TITLE_ID_NAND_INITIALIZER 0x00030011304E4941UL // 0NIA
// 起動制限をかけるタイトル一覧
typedef struct TitleBlackList {
OSTitleId titleID;
int rom_version;
}TitleBlackList;
// extern data-------------------------------------------------------
// function's prototype----------------------------------------------
static void BOOTi_ClearREG_RAM( void );
static void BOOTi_CutAwayRegionList( u32 *regionlist, u32 start, u32 end );
static void BOOTi_CheckTitleBlackList( void );
// global variables--------------------------------------------------
@ -74,6 +83,13 @@ static u32 nitro_post_clear_list[POST_CLEAR_NUM_MAX + 1] =
// const data--------------------------------------------------------
// 起動制限をかけるタイトル一覧
static const TitleBlackList s_blackList[] = {
{ TITLE_ID_NAND_INITIALIZER, 0 },
{ 0UL, -1 },
};
void BOOT_Init( void )
{
reg_PXI_MAINPINTF = 0x0000;
@ -103,6 +119,9 @@ BOOL BOOT_WaitStart( void )
MI_CpuCopyFast( (void *)SYSM_CARD_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
}
// ブラックリストをチェックし、起動制限をかける
BOOTi_CheckTitleBlackList();
(void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。
(void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。
(void)OS_SetIrqMaskEx(0);
@ -374,3 +393,21 @@ static void BOOTi_CutAwayRegionList( u32 *regionlist, u32 start, u32 end )
BOOTi_DeliteElementFromList( regionlist, (u32)n );
}
}
// 起動制限をかけるブラックリストTITLEのチェック
static void BOOTi_CheckTitleBlackList( void )
{
const TitleBlackList *pBlackList = &s_blackList[ 0 ];
ROM_Header_Short *pROMH = (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
while( pBlackList->rom_version >= 0 ) {
if( ( pBlackList->titleID == pROMH->titleID ) &&
( pBlackList->rom_version == pROMH->rom_version ) ) {
OS_TPrintf( "Hit black list : %c%c%c%c ver.%d...Terminate.\n",
pROMH->titleID_Lo[ 3 ], pROMH->titleID_Lo[ 2 ], pROMH->titleID_Lo[ 1 ], pROMH->titleID_Lo[ 0 ],
pROMH->rom_version );
OS_Terminate();
}
pBlackList++;
}
}

View File

@ -30,31 +30,16 @@
// define data-------------------------------------------------------
#define SUBP_RECV_IF_ENABLE 0x4000
#define TITLE_ID_NAND_INITIALIZER 0x00030011304E4941UL // 0NIA
// 起動制限をかけるタイトル一覧
typedef struct TitleBlackList {
OSTitleId titleID;
int rom_version;
}TitleBlackList;
// extern data-------------------------------------------------------
// function's prototype----------------------------------------------
static void BOOTi_ClearREG_RAM( void );
static void BOOTi_CheckTitleBlackList( void );
// global variables--------------------------------------------------
// static variables--------------------------------------------------
// 起動制限をかけるタイトル一覧
static const TitleBlackList s_blackList[] = {
{ TITLE_ID_NAND_INITIALIZER, 0 },
{ 0UL, -1 },
};
// const data--------------------------------------------------------
void BOOT_Init( void )
{
@ -76,9 +61,6 @@ void BOOT_Ready( void )
BOOL isNtrMode;
int i;
// ブラックリストをチェックし、起動制限をかける
BOOTi_CheckTitleBlackList();
// エントリアドレスの正当性をチェックし、無効な場合は無限ループに入る。
// SYSMi_CheckEntryAddress();
@ -102,6 +84,7 @@ void BOOT_Ready( void )
OS_WaitIrq( 1, OS_IE_SUBP );
OS_TPrintf( "INTR SUBP passed!!\n" );
// 割り込みをクリアして最終ブートシーケンスへ。
reg_PXI_SUBPINTF &= 0x0f00; // サブプロセッサ割り込み許可フラグをクリア
(void)OS_DisableIrq();
@ -228,21 +211,3 @@ static void BOOTi_ClearREG_RAM( void )
// レジスタクリアは基本的に OS_Boot で行う
}
// 起動制限をかけるブラックリストTITLEのチェック
static void BOOTi_CheckTitleBlackList( void )
{
const TitleBlackList *pBlackList = &s_blackList[ 0 ];
ROM_Header_Short *pROMH = (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
while( pBlackList->rom_version >= 0 ) {
if( ( pBlackList->titleID == pROMH->titleID ) &&
( pBlackList->rom_version == pROMH->rom_version ) ) {
OS_TPrintf( "Hit black list : %c%c%c%c ver.%d...Terminate.\n",
pROMH->titleID_Lo[ 3 ], pROMH->titleID_Lo[ 2 ], pROMH->titleID_Lo[ 1 ], pROMH->titleID_Lo[ 0 ],
pROMH->rom_version );
OS_Terminate();
}
pBlackList++;
}
}