mirror of
https://github.com/rvtr/twl_wrapsdk.git
synced 2025-10-31 06:11:10 -04:00
support dual header nandfirm image
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@252 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
parent
8faf7a4f6b
commit
74db391601
@ -53,7 +53,7 @@ static void VBlankIntr(void);
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
|
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
static u16 path_str[512/sizeof(u16)]; //ロングファイル名
|
static u16 path_str[512/sizeof(u16)]; //ロングファイル名
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ static BOOL getchar_yes_no_prompt(void)
|
|||||||
static int pow10( int count)
|
static int pow10( int count)
|
||||||
{
|
{
|
||||||
int i, result;
|
int i, result;
|
||||||
|
|
||||||
result = 1;
|
result = 1;
|
||||||
for( i=0; i<count; i++) {
|
for( i=0; i<count; i++) {
|
||||||
result *= 10;
|
result *= 10;
|
||||||
@ -98,7 +98,7 @@ static int get_number_prompt( void)
|
|||||||
char c;
|
char c;
|
||||||
int j, keta, pow_num, result_num;
|
int j, keta, pow_num, result_num;
|
||||||
int size_num[3]; //3桁MBytes
|
int size_num[3]; //3桁MBytes
|
||||||
|
|
||||||
while( (c = kmc_getchar()) != '\r') {
|
while( (c = kmc_getchar()) != '\r') {
|
||||||
if( (c >= '0')&&(c <= '9')) {
|
if( (c >= '0')&&(c <= '9')) {
|
||||||
kmc_putchar( c);
|
kmc_putchar( c);
|
||||||
@ -111,7 +111,7 @@ static int get_number_prompt( void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
keta = i;
|
keta = i;
|
||||||
|
|
||||||
result_num = 0;
|
result_num = 0;
|
||||||
for( j=0; j<keta; j++) {
|
for( j=0; j<keta; j++) {
|
||||||
pow_num = pow10( keta-i);
|
pow_num = pow10( keta-i);
|
||||||
@ -150,14 +150,14 @@ void TwlSpMain(void)
|
|||||||
PCFD fd;
|
PCFD fd;
|
||||||
CHKDISK_STATS dstat;
|
CHKDISK_STATS dstat;
|
||||||
DEV_GEOMETRY geometry;
|
DEV_GEOMETRY geometry;
|
||||||
|
|
||||||
|
|
||||||
// OS初期化
|
// OS初期化
|
||||||
OS_Init();
|
OS_Init();
|
||||||
|
|
||||||
OS_InitTick();
|
OS_InitTick();
|
||||||
OS_InitAlarm();
|
OS_InitAlarm();
|
||||||
|
|
||||||
// PXI初期化、ARM9と同期
|
// PXI初期化、ARM9と同期
|
||||||
PXI_Init();
|
PXI_Init();
|
||||||
|
|
||||||
@ -178,7 +178,7 @@ void TwlSpMain(void)
|
|||||||
OS_InitThread();
|
OS_InitThread();
|
||||||
|
|
||||||
PRINTDEBUG("\nnand_formatter_kmc starts.\n");
|
PRINTDEBUG("\nnand_formatter_kmc starts.\n");
|
||||||
|
|
||||||
/*----- RTFSが使うヒープ作成 -----*/
|
/*----- RTFSが使うヒープ作成 -----*/
|
||||||
{
|
{
|
||||||
OSHeapHandle hh;
|
OSHeapHandle hh;
|
||||||
@ -206,7 +206,7 @@ void TwlSpMain(void)
|
|||||||
}
|
}
|
||||||
DBG_PRINTF( "es\n");
|
DBG_PRINTF( "es\n");
|
||||||
DBG_CHAR( '\n');
|
DBG_CHAR( '\n');
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
nand_fat_partition_num = 1;
|
nand_fat_partition_num = 1;
|
||||||
@ -238,7 +238,7 @@ void TwlSpMain(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
nand_fat_partition_num++;
|
nand_fat_partition_num++;
|
||||||
|
|
||||||
// DBG_PRINTF( "FAT PARTITION 3 SIZE?(MBytes) -> ");
|
// DBG_PRINTF( "FAT PARTITION 3 SIZE?(MBytes) -> ");
|
||||||
// partition_MB_size[INDEX_FAT3_PARTITION] = get_number_prompt();
|
// partition_MB_size[INDEX_FAT3_PARTITION] = get_number_prompt();
|
||||||
// DBG_PRINTF( " (%d MBytes)\n\n", partition_MB_size[INDEX_FAT3_PARTITION]);
|
// DBG_PRINTF( " (%d MBytes)\n\n", partition_MB_size[INDEX_FAT3_PARTITION]);
|
||||||
@ -246,8 +246,8 @@ void TwlSpMain(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
DBG_PRINTF( "%d FAT Partitions.\n", nand_fat_partition_num);
|
DBG_PRINTF( "%d FAT Partitions.\n", nand_fat_partition_num);
|
||||||
|
|
||||||
|
|
||||||
/*----- nandfirmチェック -----*/
|
/*----- nandfirmチェック -----*/
|
||||||
// pc_raw_read( 5, (byte*)block_buf, 1, 1, TRUE);
|
// pc_raw_read( 5, (byte*)block_buf, 1, 1, TRUE);
|
||||||
nandRtfsIo( 5, 1, (byte*)block_buf, 1, TRUE);
|
nandRtfsIo( 5, 1, (byte*)block_buf, 1, TRUE);
|
||||||
@ -255,19 +255,25 @@ void TwlSpMain(void)
|
|||||||
arm9_size = *(u32*)(((u8*)block_buf)+0x2C);
|
arm9_size = *(u32*)(((u8*)block_buf)+0x2C);
|
||||||
arm7_ofs = *(u32*)(((u8*)block_buf)+0x30);
|
arm7_ofs = *(u32*)(((u8*)block_buf)+0x30);
|
||||||
arm7_size = *(u32*)(((u8*)block_buf)+0x3C);
|
arm7_size = *(u32*)(((u8*)block_buf)+0x3C);
|
||||||
|
if (arm9_ofs == 0x800 || arm7_ofs == 0x800) // there is a duplicate header for mirroring
|
||||||
|
{
|
||||||
|
nandRtfsIo( 5, 3, (byte*)block_buf, 1, TRUE); // get header for mirroring image
|
||||||
|
arm9_ofs = *(u32*)(((u8*)block_buf)+0x20);
|
||||||
|
arm7_ofs = *(u32*)(((u8*)block_buf)+0x30);
|
||||||
|
}
|
||||||
// DBG_PRINTF( "arm9: 0x%x, 0x%x\n", arm9_ofs, arm9_size);
|
// DBG_PRINTF( "arm9: 0x%x, 0x%x\n", arm9_ofs, arm9_size);
|
||||||
// DBG_PRINTF( "arm7: 0x%x, 0x%x\n", arm7_ofs, arm7_size);
|
// DBG_PRINTF( "arm7: 0x%x, 0x%x\n", arm7_ofs, arm7_size);
|
||||||
|
|
||||||
if( ((arm9_ofs + arm9_size) == arm7_ofs) && (arm9_ofs < arm7_ofs) &&
|
if( ((arm9_ofs + arm9_size) == arm7_ofs) && (arm9_ofs < arm7_ofs) &&
|
||||||
(arm9_size != 0) && (arm7_size != 0)) {
|
(arm9_size != 0) && (arm7_size != 0)) {
|
||||||
nand_firm_size = arm7_ofs + arm7_size;
|
nand_firm_size = (arm9_ofs < arm7_ofs ? arm7_ofs + arm7_size : arm9_ofs + arm9_size);
|
||||||
DBG_PRINTF( "nandfirm found. (size:0x%x bytes)\n", nand_firm_size);
|
DBG_PRINTF( "nandfirm found. (size:0x%x bytes)\n", nand_firm_size);
|
||||||
nand_firm_size = (nand_firm_size / 1024 / 1024) +
|
nand_firm_size = (nand_firm_size / 1024 / 1024) +
|
||||||
(((nand_firm_size % (1024*1024)) != 0)? 1:0);
|
(((nand_firm_size % (1024*1024)) != 0)? 1:0);
|
||||||
// DBG_PRINTF( "firm %dMB, raw %dMB\n", nand_firm_size, partition_MB_size[INDEX_RAW_PARTITION]);
|
// DBG_PRINTF( "firm %dMB, raw %dMB\n", nand_firm_size, partition_MB_size[INDEX_RAW_PARTITION]);
|
||||||
|
|
||||||
if( nand_firm_size > partition_MB_size[INDEX_RAW_PARTITION]) {
|
if( nand_firm_size > partition_MB_size[INDEX_RAW_PARTITION]) {
|
||||||
|
|
||||||
DBG_PRINTF( "YOUR SETTING WILL ERASE NAND FIRM, OK?(y/n) -> ");
|
DBG_PRINTF( "YOUR SETTING WILL ERASE NAND FIRM, OK?(y/n) -> ");
|
||||||
if( FALSE == getchar_yes_no_prompt()) {
|
if( FALSE == getchar_yes_no_prompt()) {
|
||||||
PRINTDEBUG( "o\n");
|
PRINTDEBUG( "o\n");
|
||||||
@ -283,7 +289,7 @@ void TwlSpMain(void)
|
|||||||
}else{
|
}else{
|
||||||
DBG_PRINTF( "nandfirm is not found.\n");
|
DBG_PRINTF( "nandfirm is not found.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
NAND_FLASH_FORMAT_START:
|
NAND_FLASH_FORMAT_START:
|
||||||
/*------------------------------*/
|
/*------------------------------*/
|
||||||
|
|
||||||
@ -332,8 +338,8 @@ NAND_FLASH_FORMAT_START:
|
|||||||
PRINTDEBUG( "pc_set_default_drive failed\n");
|
PRINTDEBUG( "pc_set_default_drive failed\n");
|
||||||
goto NAND_FLASH_FORMAT_END;
|
goto NAND_FLASH_FORMAT_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
// PRINTDEBUG( "pc_check_disk start. please wait.\n");
|
// PRINTDEBUG( "pc_check_disk start. please wait.\n");
|
||||||
// pc_check_disk( (byte*)"F:", &dstat, 0, 1, 1);
|
// pc_check_disk( (byte*)"F:", &dstat, 0, 1, 1);
|
||||||
@ -345,14 +351,14 @@ NAND_FLASH_FORMAT_START:
|
|||||||
PRINTDEBUG( "Invalid parameter. (size over)\n");
|
PRINTDEBUG( "Invalid parameter. (size over)\n");
|
||||||
goto NAND_FLASH_FORMAT_END;
|
goto NAND_FLASH_FORMAT_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
if( !pc_format_media( (byte*)path_str, &geometry)) {
|
if( !pc_format_media( (byte*)path_str, &geometry)) {
|
||||||
PRINTDEBUG( "pc_format_media failed\n");
|
PRINTDEBUG( "pc_format_media failed\n");
|
||||||
goto NAND_FLASH_FORMAT_END;
|
goto NAND_FLASH_FORMAT_END;
|
||||||
}
|
}
|
||||||
PRINTDEBUG( "build MBR success.\n");
|
PRINTDEBUG( "build MBR success.\n");
|
||||||
|
|
||||||
/*ボリュームフォーマット*/
|
/*ボリュームフォーマット*/
|
||||||
if( !pc_format_volume( (byte*)path_str, &geometry)) {
|
if( !pc_format_volume( (byte*)path_str, &geometry)) {
|
||||||
PRINTDEBUG( "pc_format_volume (p0) failed\n");
|
PRINTDEBUG( "pc_format_volume (p0) failed\n");
|
||||||
@ -362,7 +368,7 @@ NAND_FLASH_FORMAT_START:
|
|||||||
/*-------------------------------------------------*/
|
/*-------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*マウント(F:p0, G:p1, H:p2, I:p3)*/
|
/*マウント(F:p0, G:p1, H:p2, I:p3)*/
|
||||||
for( i=1; i<nand_fat_partition_num; i++) {
|
for( i=1; i<nand_fat_partition_num; i++) {
|
||||||
if( nandRtfsAttach( (5+i), i) == FALSE) {
|
if( nandRtfsAttach( (5+i), i) == FALSE) {
|
||||||
@ -396,7 +402,7 @@ NAND_FLASH_FORMAT_START:
|
|||||||
}
|
}
|
||||||
/*----------------------*/
|
/*----------------------*/
|
||||||
DBG_CHAR( '\n');
|
DBG_CHAR( '\n');
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
for( i=0; i<nand_fat_partition_num; i++) {
|
for( i=0; i<nand_fat_partition_num; i++) {
|
||||||
VOLUME_LABEL[0] = (byte)(((int)'F') + i);
|
VOLUME_LABEL[0] = (byte)(((int)'F') + i);
|
||||||
@ -428,7 +434,7 @@ NAND_FLASH_FORMAT_START:
|
|||||||
|
|
||||||
|
|
||||||
NAND_FLASH_FORMAT_END:
|
NAND_FLASH_FORMAT_END:
|
||||||
|
|
||||||
PRINTDEBUG( "nand_formatter_kmc ends.\n");
|
PRINTDEBUG( "nand_formatter_kmc ends.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user