mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
マウント情報を一時的にバッファに格納し、rebootの際の再配置コピーにて正規の位置へ移動されるように変更
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@933 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
c8d8e4f517
commit
3b31dbb1e3
@ -35,12 +35,12 @@
|
||||
#define reg_MI_MC_SWP (*(REGType8v *) ( REG_MC1_ADDR + 1 ) )
|
||||
|
||||
#ifdef ISDBG_MB_CHILD_
|
||||
#define PRE_CLEAR_NUM_MAX (7*2)
|
||||
#define PRE_CLEAR_NUM_MAX (6*2)
|
||||
#else
|
||||
#define PRE_CLEAR_NUM_MAX (5*2)
|
||||
#define PRE_CLEAR_NUM_MAX (4*2)
|
||||
#endif
|
||||
|
||||
#define COPY_NUM_MAX (4*3)
|
||||
#define COPY_NUM_MAX (5*3)
|
||||
#define POST_CLEAR_NUM_MAX (12 + 4*2)
|
||||
|
||||
// extern data-------------------------------------------------------
|
||||
@ -59,7 +59,7 @@ static u32 twl_post_clear_list[POST_CLEAR_NUM_MAX + 1] =
|
||||
HW_PARAM_WIRELESS_FIRMWARE_DATA_END, SYSM_OWN_ARM7_MMEM_ADDR,
|
||||
SYSM_OWN_ARM7_MMEM_ADDR_END, OS_BOOT_A9CODE_BUF,
|
||||
OS_BOOT_A9CODE_BUF + OS_BOOT_CODE_SIZE, SYSM_OWN_ARM9_MMEM_ADDR,
|
||||
SYSM_OWN_ARM9_MMEM_ADDR_END, HW_TWL_MAIN_MEM_SHARED,
|
||||
SYSM_OWN_ARM9_MMEM_ADDR_END, SYSM_TWL_MOUNT_INFO_TMP_BUFFER + SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN,
|
||||
NULL,
|
||||
};
|
||||
|
||||
@ -69,7 +69,7 @@ static u32 nitro_post_clear_list[POST_CLEAR_NUM_MAX + 1] =
|
||||
HW_PARAM_RESERVED_END, SYSM_OWN_ARM7_MMEM_ADDR,
|
||||
SYSM_OWN_ARM7_MMEM_ADDR_END, OS_BOOT_A9CODE_BUF,
|
||||
SYSM_TWL_ARM9_LTD_LOAD_MMEM, SYSM_DBG_NTR_SYSTEM_BUF,
|
||||
SYSM_OWN_ARM9_MMEM_ADDR_END, HW_TWL_MAIN_MEM_SHARED,
|
||||
SYSM_OWN_ARM9_MMEM_ADDR_END, SYSM_TWL_MOUNT_INFO_TMP_BUFFER + SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN,
|
||||
NULL,
|
||||
};
|
||||
|
||||
@ -129,8 +129,7 @@ BOOL BOOT_WaitStart( void )
|
||||
(void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。
|
||||
(void)OS_SetIrqMaskEx(0);
|
||||
|
||||
// [TODO]アプリによって示されるマウント情報アドレスは、ランチャーにとって常に安全な場所なのか?
|
||||
// マウント情報の登録
|
||||
// マウント情報を一時的にSYSM_TWL_MOUNT_INFO_TMP_BUFFERに登録
|
||||
SYSMi_SetBootAppMountInfo( &SYSMi_GetWork2()->bootTitleProperty );
|
||||
|
||||
BOOTi_ClearREG_RAM(); // ARM7側のメモリ&レジスタクリア。
|
||||
@ -217,7 +216,6 @@ BOOL BOOT_WaitStart( void )
|
||||
{
|
||||
// pre clear
|
||||
SYSM_OWN_ARM7_WRAM_ADDR, NULL, // SYSM_OWN_ARM7_WRAM_ADDR(SDK_AUTOLOAD_WRAM_START)はリンカから与えられるので定数でない
|
||||
NULL, NULL, // 定数でないのであとで設定
|
||||
SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM7_MMEM_ADDR_END - SYSM_OWN_ARM7_MMEM_ADDR,
|
||||
SYSM_OWN_ARM9_MMEM_ADDR, SYSM_OWN_ARM9_MMEM_ADDR_END - SYSM_OWN_ARM9_MMEM_ADDR,
|
||||
HW_WRAM_BASE, HW_WRAM_SIZE, // 共有WRAM Launcherの特殊配置なので、BASEからサイズぶん
|
||||
@ -229,19 +227,13 @@ BOOL BOOT_WaitStart( void )
|
||||
// post clear
|
||||
NULL,
|
||||
};
|
||||
if( ! isNtrMode )
|
||||
{
|
||||
mem_list[1] = (u32)th->s.sub_mount_info_ram_address - SYSM_OWN_ARM7_WRAM_ADDR;
|
||||
mem_list[2] = ((u32)th->s.sub_mount_info_ram_address + SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN);
|
||||
mem_list[3] = SYSM_OWN_ARM7_WRAM_ADDR_END - ((u32)th->s.sub_mount_info_ram_address + SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN);
|
||||
}else
|
||||
{
|
||||
mem_list[1] = (SYSM_OWN_ARM7_WRAM_ADDR_END / 2) - SYSM_OWN_ARM7_WRAM_ADDR;
|
||||
mem_list[2] = (SYSM_OWN_ARM7_WRAM_ADDR_END / 2);
|
||||
mem_list[3] = SYSM_OWN_ARM7_WRAM_ADDR_END - (SYSM_OWN_ARM7_WRAM_ADDR_END / 2) ;
|
||||
}
|
||||
|
||||
mem_list[1] = SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR;
|
||||
|
||||
// copy forwardリスト設定
|
||||
mem_list[list_count++] = SYSM_TWL_MOUNT_INFO_TMP_BUFFER;
|
||||
mem_list[list_count++] = (u32)th->s.sub_mount_info_ram_address;
|
||||
mem_list[list_count++] = SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN;
|
||||
for( l=0; l<RELOCATE_INFO_NUM ; l++ )
|
||||
{
|
||||
if( SYSMi_GetWork()->romRelocateInfo[l].src != NULL && !SYSMi_GetWork()->romRelocateInfo[l].rev )
|
||||
|
||||
@ -39,7 +39,7 @@
|
||||
// extern data-----------------------------------------------------------------
|
||||
// function's prototype--------------------------------------------------------
|
||||
static void SYSMi_SetBootSRLPath( LauncherBootType bootType, NAMTitleId titleID );
|
||||
static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc );
|
||||
static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc, OSMountInfo *pDst );
|
||||
static void SYSMi_ModifySaveDataMount( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt );
|
||||
static void SYSMi_ModifySaveDataMountForLauncher( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt );
|
||||
|
||||
@ -76,6 +76,7 @@ OSMountInfo s_defaultMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = {
|
||||
// ランチャーのマウント情報セット
|
||||
void SYSMi_SetLauncherMountInfo( void )
|
||||
{
|
||||
ROM_Header_Short *header = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
|
||||
NAMTitleId titleID = (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->titleID;
|
||||
|
||||
// bootSRLパスを設定(ランチャーが自分で設定するのは厄介なので、NANDファームからHW_TWL_FS_BOOT_SRL_PATH_BUF経由で
|
||||
@ -97,11 +98,12 @@ void SYSMi_SetLauncherMountInfo( void )
|
||||
// マウント情報のセット
|
||||
SYSMi_SetMountInfoCore( LAUNCHER_BOOTTYPE_NAND,
|
||||
titleID,
|
||||
&s_defaultMountList[0] );
|
||||
&s_defaultMountList[0],
|
||||
(OSMountInfo *)header->sub_mount_info_ram_address );
|
||||
}
|
||||
|
||||
|
||||
// システム領域に、ブートするアプリのマウント情報を登録する
|
||||
// SYSM_TWL_MOUNT_INFO_TMP_BUFFERに、ブートするアプリのマウント情報を登録する
|
||||
void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle )
|
||||
{
|
||||
// アプリがTWL対応でない場合は、何もセットせずにリターン
|
||||
@ -113,7 +115,7 @@ void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle )
|
||||
// SYSMi_SetBootSRLPath( (LauncherBootType)pBootTitle->flags.bootType,
|
||||
// pBootTitle->titleID );
|
||||
|
||||
STD_CopyLStringZeroFill( (char *)((u32)((( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->sub_mount_info_ram_address) + SYSM_MOUNT_INFO_SIZE),
|
||||
STD_CopyLStringZeroFill( (char *)(SYSM_TWL_MOUNT_INFO_TMP_BUFFER + SYSM_MOUNT_INFO_SIZE),
|
||||
SYSMi_GetWork2()->bootContentPath, OS_MOUNT_PATH_LEN );
|
||||
|
||||
// セーブデータ有無によるマウント情報の編集
|
||||
@ -130,7 +132,8 @@ void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle )
|
||||
// マウント情報のセット
|
||||
SYSMi_SetMountInfoCore( (LauncherBootType)pBootTitle->flags.bootType,
|
||||
pBootTitle->titleID,
|
||||
&s_defaultMountList[0] );
|
||||
&s_defaultMountList[0],
|
||||
(OSMountInfo *)SYSM_TWL_MOUNT_INFO_TMP_BUFFER );
|
||||
|
||||
/*
|
||||
※※ 注意 ※※
|
||||
@ -140,46 +143,12 @@ void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle )
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
// 起動SRLパスをシステム領域にセット
|
||||
static void SYSMi_SetBootSRLPath( LauncherBootType bootType, NAMTitleId titleID )
|
||||
{
|
||||
static char path[ FS_ENTRY_LONGNAME_MAX ];
|
||||
ROM_Header_Short *header = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
|
||||
|
||||
switch( bootType )
|
||||
{
|
||||
case LAUNCHER_BOOTTYPE_NAND:
|
||||
if( NAM_GetTitleBootContentPathFast( path, titleID ) != NAM_OK ) {
|
||||
OS_TPrintf( "ERROR: BootContentPath Get failed.\n" );
|
||||
}
|
||||
break;
|
||||
case LAUNCHER_BOOTTYPE_TEMP:
|
||||
STD_TSNPrintf( path, FS_ENTRY_LONGNAME_MAX, OS_TMP_APP_PATH, titleID );
|
||||
break;
|
||||
default:
|
||||
path[ 0 ] = 0;
|
||||
// STD_StrCpy( path, (const char*)"rom:" ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。
|
||||
break;
|
||||
}
|
||||
|
||||
if( path[ 0 ] ) {
|
||||
STD_CopyLStringZeroFill( (char *)((u32)header->sub_mount_info_ram_address + SYSMi_MOUNT_INFO_SIZE), path, OS_MOUNT_PATH_LEN );
|
||||
}else {
|
||||
MI_CpuClearFast( (char *)((u32)header->sub_mount_info_ram_address + SYSMi_MOUNT_INFO_SIZE), OS_MOUNT_PATH_LEN );
|
||||
}
|
||||
OS_TPrintf( "boot SRL path : %s\n", (char *)((u32)header->sub_mount_info_ram_address + SYSMi_MOUNT_INFO_SIZE) ); // ※OS_Init前で呼ぶとPrintfできないので注意。
|
||||
}
|
||||
*/
|
||||
|
||||
// マウント情報をシステム領域に書き込み
|
||||
static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc )
|
||||
// マウント情報を指定されたアドレスに書き込み
|
||||
static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc, OSMountInfo *pDst )
|
||||
{
|
||||
#pragma unused(bootType)
|
||||
|
||||
int i;
|
||||
ROM_Header_Short *header = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
|
||||
OSMountInfo *pDst = (OSMountInfo *)header->sub_mount_info_ram_address;
|
||||
char contentpath[ FS_ENTRY_LONGNAME_MAX ];
|
||||
|
||||
// タイトルIDからcontentのファイルパスをセット
|
||||
|
||||
@ -100,6 +100,8 @@ extern u32 SDK_AUTOLOAD_WRAM_START[];
|
||||
#define SYSM_TWL_ARM7_LTD_HYB_LOAD_WRAM 0x037f8000 // ロード可能なARM7 LTD static WRAM アドレス
|
||||
#define SYSM_TWL_ARM7_LTD_HYB_LOAD_WRAM_END SYSM_NTR_ARM7_LOAD_WRAM_END // ロード可能なARM7 LTD static WRAM 最終アドレス
|
||||
|
||||
// マウント情報一時バッファ
|
||||
#define SYSM_TWL_MOUNT_INFO_TMP_BUFFER 0x02ff3400 // マウント情報の一時バッファ
|
||||
|
||||
// ※旧NTR-IPL2のレガシーコード 整理予定
|
||||
#define SYSM_ARM9_LOAD_MMEM_LAST_ADDR 0x02280000 // ロード可能なARM9 staticメインメモリ最終アドレス
|
||||
|
||||
Loading…
Reference in New Issue
Block a user