SYSM_CheckLoadRegionAndSetRelocateInfoを変更

・他のソースからも使えるよう、staticでなくなった
 ・TWLアプリかどうかのフラグを引数で指定するよう変更

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@381 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2007-12-20 01:54:51 +00:00
parent cd910f66d0
commit 58ae377663
2 changed files with 38 additions and 17 deletions

View File

@ -64,12 +64,6 @@ static TWLBannerFile s_bannerBuf[ LAUNCHER_TITLE_LIST_NUM ] ATTRIBUTE_ALIGN(32);
// const data------------------------------------------------------------------
typedef enum RomSegmentName {
ARM9_STATIC,
ARM7_STATIC,
ARM9_LTD_STATIC,
ARM7_LTD_STATIC
}RomSegmentName;
typedef struct RomSegmentRange {
u32 start;
@ -83,6 +77,13 @@ static RomSegmentRange romSegmentRange[RELOCATE_INFO_NUM] = {
{ SYSM_TWL_ARM7_LTD_LOAD_MMEM, SYSM_TWL_ARM7_LTD_LOAD_MMEM_END },
};
static RomSegmentRange romSegmentRangeNitro[RELOCATE_INFO_NUM] = {
{ SYSM_NTR_ARM9_LOAD_MMEM, SYSM_NTR_ARM9_LOAD_MMEM_END },
{ SYSM_NTR_ARM7_LOAD_MMEM, SYSM_NTR_ARM7_LOAD_MMEM_END },
{ SYSM_TWL_ARM9_LTD_LOAD_MMEM, SYSM_TWL_ARM9_LTD_LOAD_MMEM_END },
{ SYSM_TWL_ARM7_LTD_LOAD_MMEM, SYSM_TWL_ARM7_LTD_LOAD_MMEM_END },
};
static u32 load_region_check_list[RELOCATE_INFO_NUM][RELOCATE_INFO_NUM * 2 - 1] =
{
{SYSM_NTR_ARM7_LOAD_MMEM, SYSM_NTR_ARM7_LOAD_MMEM_END,
@ -579,14 +580,24 @@ static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfoEx
}
// SYSMi_CheckLoadRegionAndSetRelocateInfoExのラッパー関数
static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfo( RomSegmentName seg, u32 *dest, u32 length, Relocate_Info *info )
BOOL SYSM_CheckLoadRegionAndSetRelocateInfo( RomSegmentName seg, u32 *dest, u32 length, Relocate_Info *info, BOOL isTwlApp)
{
// TWLにしか対応していないので注意。ヘッダを見てNTRならデフォルト配置領域を変更してやる必要あり。
return SYSMi_CheckLoadRegionAndSetRelocateInfoEx(dest, length, romSegmentRange[seg], load_region_check_list[seg], info);
RomSegmentRange *rsr;
if( isTwlApp )
{
rsr = romSegmentRange;
}else
{
//NTR専用
rsr = romSegmentRangeNitro;
}
return SYSMi_CheckLoadRegionAndSetRelocateInfoEx(dest, length, rsr[seg], load_region_check_list[seg], info);
}
// TWLアプリのみ対応、NTRはまだ
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle )
{ enum
{
enum
{
region_header = 0,
region_arm9_ntr,
@ -658,7 +669,12 @@ OS_TPrintf("RebootSystem failed: logo CRC error\n");
FS_CloseFile(file);
return;
}
if( header[0x12] && 0x03 == 0 )
{
//NTR専用ROM
}
// 各領域を読み込む
source [region_header ] = 0x00000000;
length [region_header ] = HW_TWL_ROM_HEADER_BUF_SIZE;
@ -679,18 +695,14 @@ OS_TPrintf("RebootSystem failed: logo CRC error\n");
source [region_arm7_twl] = *(const u32*)&header[0x1D0];
length [region_arm7_twl] = *(const u32*)&header[0x1DC];
destaddr[region_arm7_twl] = *(const u32*)&header[0x1D8];
if( header[0x12] && 0x03 == 0 )
{
//NTR専用ROM
}
MI_CpuClearFast( (void *)SYSMi_GetWork()->romRelocateInfo, RELOCATE_INFO_NUM * sizeof(Relocate_Info) );
// 領域読み込み先のチェック及び再配置情報データの作成
for( i=0; i<RELOCATE_INFO_NUM; i++ )
{
if ( !SYSMi_CheckLoadRegionAndSetRelocateInfo( (RomSegmentName)i, &(destaddr[i+region_arm9_ntr]), length[i+region_arm9_ntr], &(SYSMi_GetWork()->romRelocateInfo[i]) ) )
if ( !SYSM_CheckLoadRegionAndSetRelocateInfo( (RomSegmentName)i, &(destaddr[i+region_arm9_ntr]), length[i+region_arm9_ntr],
&(SYSMi_GetWork()->romRelocateInfo[i]), TRUE ) )
{
OS_TPrintf("RebootSystem failed: ROM Load Region error\n");
FS_CloseFile(file);

View File

@ -68,6 +68,14 @@ typedef enum AuthResult {
AUTH_RESULT_ENTRY_ADDRESS_ERROR = 5
}AuthResult;
// ROMセグメント名
typedef enum RomSegmentName {
ARM9_STATIC = 0,
ARM7_STATIC = 1,
ARM9_LTD_STATIC = 2,
ARM7_LTD_STATIC = 3
}RomSegmentName;
// global variable------------------------------------------------------
extern void *(*SYSM_Alloc)( u32 size ); // ライブラリ内部使用
@ -85,6 +93,7 @@ extern int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card ); //
extern int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size ); // NAND アプリタイトルリストの取得
// アプリ起動
BOOL SYSM_CheckLoadRegionAndSetRelocateInfo( RomSegmentName seg, u32 *dest, u32 length, Relocate_Info *info, BOOL isTwlApp ); //
extern void SYSM_StartLoadTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを別スレッドでロード開始
extern BOOL SYSM_IsLoadTitleFinished( TitleProperty *pBootTitle ); // SYSM_StartLoadTitleで起動したスレッドが終了したかどうかを確認
extern AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを認証してブート