mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
再配置後clearリストの生成を実装(動作検証はrebootライブラリの修正待ち)
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@306 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
83ece203e0
commit
565c57aedb
@ -120,7 +120,15 @@ BOOL BOOT_WaitStart( void )
|
|||||||
}
|
}
|
||||||
mem_list[list_count++] = NULL;
|
mem_list[list_count++] = NULL;
|
||||||
|
|
||||||
// [TODO]post clearリスト設定
|
// post clearリスト設定
|
||||||
|
for( l=0; l<RELOCATE_INFO_NUM ; l++ )
|
||||||
|
{
|
||||||
|
if( SYSMi_GetWork()->romRelocateInfo[l].post_clear_addr != NULL )
|
||||||
|
{
|
||||||
|
mem_list[list_count++] = SYSMi_GetWork()->romRelocateInfo[l].post_clear_addr;
|
||||||
|
mem_list[list_count++] = SYSMi_GetWork()->romRelocateInfo[l].post_clear_length;
|
||||||
|
}
|
||||||
|
}
|
||||||
mem_list[list_count] = NULL;
|
mem_list[list_count] = NULL;
|
||||||
|
|
||||||
// リブート
|
// リブート
|
||||||
|
|||||||
@ -549,21 +549,44 @@ BOOL SYSM_IsValidTSD( void )
|
|||||||
static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfoEx
|
static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfoEx
|
||||||
( u32 *dest, u32 length, RomSegmentRange default_region, u32 *check_dest, Relocate_Info *info )
|
( u32 *dest, u32 length, RomSegmentRange default_region, u32 *check_dest, Relocate_Info *info )
|
||||||
{
|
{
|
||||||
if( default_region.end - default_region.start - 1 < length ) return FALSE;// サイズオーバー
|
if( default_region.end - default_region.start < length ) return FALSE;// サイズオーバー
|
||||||
if( !( default_region.start <= *dest && *dest + length < default_region.end ) )
|
if( !( default_region.start <= *dest && *dest + length <= default_region.end ) )
|
||||||
{
|
{
|
||||||
// 再配置の必要あり
|
// 再配置の必要あり
|
||||||
while( *check_dest != NULL )
|
while( *check_dest != NULL )
|
||||||
{
|
{
|
||||||
if( check_dest[0] <= *dest + length && *dest < check_dest[1] ) return FALSE;// チェック領域に被ったらNG
|
if( check_dest[0] < *dest + length && *dest < check_dest[1] ) return FALSE;// チェック領域に被ったらNG
|
||||||
check_dest += 2;
|
check_dest += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ここまで来ていれば再配置可能
|
// ここまで来ていれば再配置可能
|
||||||
if( default_region.start <= *dest && *dest < default_region.end )
|
// 後方コピーフラグOFF
|
||||||
|
info->rev = FALSE;
|
||||||
|
if( default_region.start < *dest + length && *dest + length <= default_region.end )
|
||||||
{
|
{
|
||||||
// デフォルト配置領域の後部に、再配置先の先頭部が被っているので、後方コピーフラグON
|
// デフォルト配置領域の先頭部に、再配置先の後部が被っている
|
||||||
info->rev = TRUE;
|
// ポストクリア情報
|
||||||
|
info->post_clear_addr = *dest + length;
|
||||||
|
info->post_clear_length = default_region.end - (*dest + length);
|
||||||
|
}
|
||||||
|
else if( default_region.start <= *dest && *dest < default_region.end )
|
||||||
|
{
|
||||||
|
// デフォルト配置領域の後部に、再配置先の先頭部が被っている
|
||||||
|
// ポストクリア情報
|
||||||
|
info->post_clear_addr = default_region.start;
|
||||||
|
info->post_clear_length = *dest - default_region.start;
|
||||||
|
if( *dest < default_region.start + length )
|
||||||
|
{
|
||||||
|
// 更に、デフォルト配置領域にロードしたデータの最後尾と再配置先の先頭部が被っている
|
||||||
|
// 後方コピーフラグON
|
||||||
|
info->rev = TRUE;
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
// まったく被っていない
|
||||||
|
// ポストクリア情報
|
||||||
|
info->post_clear_addr = default_region.start;
|
||||||
|
info->post_clear_length = default_region.end - default_region.start;
|
||||||
}
|
}
|
||||||
info->src = default_region.start;
|
info->src = default_region.start;
|
||||||
info->dest = *dest;
|
info->dest = *dest;
|
||||||
@ -575,6 +598,8 @@ static BOOL SYSMi_CheckLoadRegionAndSetRelocateInfoEx
|
|||||||
info->src = NULL;
|
info->src = NULL;
|
||||||
info->dest = NULL;
|
info->dest = NULL;
|
||||||
info->length = NULL;
|
info->length = NULL;
|
||||||
|
info->post_clear_addr = NULL;
|
||||||
|
info->post_clear_length = NULL;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -54,6 +54,8 @@ typedef struct Relocate_Info
|
|||||||
u32 src;
|
u32 src;
|
||||||
u32 dest;
|
u32 dest;
|
||||||
u32 length;
|
u32 length;
|
||||||
|
u32 post_clear_addr;
|
||||||
|
u32 post_clear_length;
|
||||||
BOOL rev;
|
BOOL rev;
|
||||||
}Relocate_Info;
|
}Relocate_Info;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user