mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
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:
parent
cd910f66d0
commit
58ae377663
@ -64,12 +64,6 @@ static TWLBannerFile s_bannerBuf[ LAUNCHER_TITLE_LIST_NUM ] ATTRIBUTE_ALIGN(32);
|
|||||||
|
|
||||||
|
|
||||||
// const data------------------------------------------------------------------
|
// const data------------------------------------------------------------------
|
||||||
typedef enum RomSegmentName {
|
|
||||||
ARM9_STATIC,
|
|
||||||
ARM7_STATIC,
|
|
||||||
ARM9_LTD_STATIC,
|
|
||||||
ARM7_LTD_STATIC
|
|
||||||
}RomSegmentName;
|
|
||||||
|
|
||||||
typedef struct RomSegmentRange {
|
typedef struct RomSegmentRange {
|
||||||
u32 start;
|
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 },
|
{ 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] =
|
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,
|
{SYSM_NTR_ARM7_LOAD_MMEM, SYSM_NTR_ARM7_LOAD_MMEM_END,
|
||||||
@ -579,14 +580,24 @@ static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfoEx
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 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ならデフォルト配置領域を変更してやる必要あり。
|
RomSegmentRange *rsr;
|
||||||
return SYSMi_CheckLoadRegionAndSetRelocateInfoEx(dest, length, romSegmentRange[seg], load_region_check_list[seg], info);
|
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 )
|
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle )
|
||||||
{ enum
|
{
|
||||||
|
enum
|
||||||
{
|
{
|
||||||
region_header = 0,
|
region_header = 0,
|
||||||
region_arm9_ntr,
|
region_arm9_ntr,
|
||||||
@ -658,7 +669,12 @@ OS_TPrintf("RebootSystem failed: logo CRC error\n");
|
|||||||
FS_CloseFile(file);
|
FS_CloseFile(file);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( header[0x12] && 0x03 == 0 )
|
||||||
|
{
|
||||||
|
//NTR専用ROM
|
||||||
|
}
|
||||||
|
|
||||||
// 各領域を読み込む
|
// 各領域を読み込む
|
||||||
source [region_header ] = 0x00000000;
|
source [region_header ] = 0x00000000;
|
||||||
length [region_header ] = HW_TWL_ROM_HEADER_BUF_SIZE;
|
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];
|
source [region_arm7_twl] = *(const u32*)&header[0x1D0];
|
||||||
length [region_arm7_twl] = *(const u32*)&header[0x1DC];
|
length [region_arm7_twl] = *(const u32*)&header[0x1DC];
|
||||||
destaddr[region_arm7_twl] = *(const u32*)&header[0x1D8];
|
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) );
|
MI_CpuClearFast( (void *)SYSMi_GetWork()->romRelocateInfo, RELOCATE_INFO_NUM * sizeof(Relocate_Info) );
|
||||||
|
|
||||||
// 領域読み込み先のチェック及び再配置情報データの作成
|
// 領域読み込み先のチェック及び再配置情報データの作成
|
||||||
for( i=0; i<RELOCATE_INFO_NUM; i++ )
|
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");
|
OS_TPrintf("RebootSystem failed: ROM Load Region error\n");
|
||||||
FS_CloseFile(file);
|
FS_CloseFile(file);
|
||||||
|
|||||||
@ -68,6 +68,14 @@ typedef enum AuthResult {
|
|||||||
AUTH_RESULT_ENTRY_ADDRESS_ERROR = 5
|
AUTH_RESULT_ENTRY_ADDRESS_ERROR = 5
|
||||||
}AuthResult;
|
}AuthResult;
|
||||||
|
|
||||||
|
// ROMセグメント名
|
||||||
|
typedef enum RomSegmentName {
|
||||||
|
ARM9_STATIC = 0,
|
||||||
|
ARM7_STATIC = 1,
|
||||||
|
ARM9_LTD_STATIC = 2,
|
||||||
|
ARM7_LTD_STATIC = 3
|
||||||
|
}RomSegmentName;
|
||||||
|
|
||||||
|
|
||||||
// global variable------------------------------------------------------
|
// global variable------------------------------------------------------
|
||||||
extern void *(*SYSM_Alloc)( u32 size ); // ライブラリ内部使用
|
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 アプリタイトルリストの取得
|
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 void SYSM_StartLoadTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを別スレッドでロード開始
|
||||||
extern BOOL SYSM_IsLoadTitleFinished( TitleProperty *pBootTitle ); // SYSM_StartLoadTitleで起動したスレッドが終了したかどうかを確認
|
extern BOOL SYSM_IsLoadTitleFinished( TitleProperty *pBootTitle ); // SYSM_StartLoadTitleで起動したスレッドが終了したかどうかを確認
|
||||||
extern AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを認証してブート
|
extern AuthResult SYSM_AuthenticateTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを認証してブート
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user