From 58ae377663510926f2108f7754c14564950b0ff2 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Thu, 20 Dec 2007 01:54:51 +0000 Subject: [PATCH] =?UTF-8?q?SYSM=5FCheckLoadRegionAndSetRelocateInfo?= =?UTF-8?q?=E3=82=92=E5=A4=89=E6=9B=B4=20=E3=80=80=E3=83=BB=E4=BB=96?= =?UTF-8?q?=E3=81=AE=E3=82=BD=E3=83=BC=E3=82=B9=E3=81=8B=E3=82=89=E3=82=82?= =?UTF-8?q?=E4=BD=BF=E3=81=88=E3=82=8B=E3=82=88=E3=81=86=E3=80=81static?= =?UTF-8?q?=E3=81=A7=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=9F=20?= =?UTF-8?q?=E3=80=80=E3=83=BBTWL=E3=82=A2=E3=83=97=E3=83=AA=E3=81=8B?= =?UTF-8?q?=E3=81=A9=E3=81=86=E3=81=8B=E3=81=AE=E3=83=95=E3=83=A9=E3=82=B0?= =?UTF-8?q?=E3=82=92=E5=BC=95=E6=95=B0=E3=81=A7=E6=8C=87=E5=AE=9A=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@381 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/sysmenu_lib.c | 46 ++++++++++++------- .../sysmenu/sysmenu_lib/ARM9/sysmenu_api.h | 9 ++++ 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 4cfe008a..81a49ba1 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -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; iromRelocateInfo[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); diff --git a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h index a5ce5596..32bdff8d 100644 --- a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h +++ b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h @@ -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を認証してブート