NAMUT_Format に全Shareデータ(0000~0005)の初期化を行う処理を追加。

ファイルクリア処理の高速化のためにクリアバッファサイズを256Byte->4096Byteへ

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1872 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
kamikawa 2008-07-14 07:42:09 +00:00
parent 376c88f474
commit 085e06a113
2 changed files with 130 additions and 18 deletions

View File

@ -41,7 +41,7 @@
#define DIRECTORY_DEPTH_MAX 16 // ディレクトリの深さの最大NANDの正規構成としては最大6
#define TITLE_ID_HI_SIZE 8
#define TITLE_LIST_MAX 256
#define CLEAR_DATA_SIZE 256
#define CLEAR_DATA_SIZE 4096 // ファイル消去データ用512の倍数で大きいほど処理が早い
// 本体初期化(NAND初期化)実行時に
// 指定ディレクトリ以下は全て消去されます。
@ -64,6 +64,7 @@ static const char* sFillFileList[] =
#define VOLUME_INITIAL_VALUE 5 // 本体初期化時に設定する本体ボリューム値
#define BACKLIGHT_INITIAL_VALUE 3 // 本体初期化時に設定するバックライト輝度
#define NAMUT_SHARE_ARCHIVE_MAX 6 // shareデータ個数
/*---------------------------------------------------------------------------*
@ -74,7 +75,6 @@ static NAMUTFree spFreeFunc;
static FSDirectoryEntryInfo sEntryInfo;
static NAMTitleId sTitleIdArray[TITLE_LIST_MAX];
static char sCurrentFullPath[FS_ENTRY_LONGNAME_MAX];
static u8 sClearData[CLEAR_DATA_SIZE] ATTRIBUTE_ALIGN(32);
static u32 sNCFGAddr;
/*---------------------------------------------------------------------------*
@ -84,6 +84,7 @@ static u32 sNCFGAddr;
static BOOL NAMUTi_DeleteNonprotectedTitle(void);
static BOOL NAMUTi_DeleteNonprotectedTitleEntity(const char* path);
static BOOL NAMUTi_ClearSavedataAll(void);
static BOOL NAMUTi_InitShareData(void);
static BOOL NAMUTi_MountAndFormatOtherTitleSaveData(u64 titleID, const char *arcname);
static void NAMUTi_DrawNandTree(s32 depth, const char *path);
static BOOL NAMUTi_RandClearFile(const char* path);
@ -96,7 +97,7 @@ static void PrintFile(s32 depth, const char* path);
Description: NAMUT
Arguments: allocFunc:
Arguments: allocFunc: (32byteアライメント
freeFunc:
Returns:
@ -134,13 +135,20 @@ BOOL NAMUT_Format(void)
OS_TWarning("Fail! NAMUTi_DeleteNonprotectedTitle()\n");
}
// プロテクトタイトルのセーブデータをフォーマットします
// プロテクトタイトルのセーブデータを初期化します
if (!NAMUTi_ClearSavedataAll())
{
ret = FALSE;
OS_TWarning("Fail! NAMUTi_ClearSavedataAll()\n");
}
// shareデータを初期化します
if (!NAMUTi_InitShareData())
{
ret = FALSE;
OS_TWarning("Fail! NAMUTi_InitShareData()\n");
}
// 指定ファイルを乱数でクリアします
for (i=0; i<sizeof(sFillFileList)/sizeof(sFillFileList[0]); i++)
{
@ -447,9 +455,9 @@ BOOL NAMUTi_DestroySubBanner(const char* path)
}
pBanner = spAllocFunc( sizeof(TWLSubBannerFile) );
if (!pBanner)
{
OS_TWarning("Allocation failed. (%d)\n");
return FALSE;
}
@ -509,6 +517,12 @@ static BOOL NAMUTi_MountAndFormatOtherTitleSaveData(u64 titleID, const char *arc
}
pWork = spAllocFunc( sizeof(FSFATFSArchiveWork) );
if (!pWork)
{
OS_TWarning("Allocation failed. (%d)\n");
return FALSE;
}
MI_CpuClear8( pWork, sizeof(FSFATFSArchiveWork) );
// マウント試行。
result = FSi_MountSpecialArchive(titleID, arcname, pWork);
@ -544,6 +558,90 @@ static BOOL NAMUTi_MountAndFormatOtherTitleSaveData(u64 titleID, const char *arc
return succeeded;
}
/*---------------------------------------------------------------------------*
Name: NAMUTi_InitShareData
Description: Shareデータファイルを乱数クリア
Share:/
Arguments: None
Returns: TRUE
*---------------------------------------------------------------------------*/
static BOOL NAMUTi_InitShareData(void)
{
BOOL succeeded = TRUE;
FSFATFSArchiveWork* pWork;
char path[NAM_PATH_LEN];
FSResult result;
int i;
if (!spAllocFunc || !spFreeFunc)
{
return FALSE;
}
pWork = spAllocFunc( sizeof(FSFATFSArchiveWork) );
if (!pWork)
{
OS_TWarning("Allocation failed. (%d)\n");
return FALSE;
}
MI_CpuClear8( pWork, sizeof(FSFATFSArchiveWork) );
for (i=0;i<NAMUT_SHARE_ARCHIVE_MAX;i++)
{
// 乱数クリア
STD_TSNPrintf(path, NAM_PATH_LEN, "nand:/shared2/000%d", i);
if (NAMUTi_RandClearFile(path) == FALSE)
{
// ファイルが存在しないものとみなし終了
OS_TPrintf("%s is not exist\n", path);
break;
}
// マウント
result = FSi_MountSpecialArchive((OSTitleId)i, "share", pWork);
if (result != FS_RESULT_SUCCESS)
{
succeeded = FALSE;
OS_TWarning("FSi_MountSpecialArchive failed. (%d)\n", result);
continue;
}
// Mediaフォーマット
if (!FATFSi_FormatMedia("share:/"))
{
succeeded = FALSE;
OS_TWarning("FATFSi_FormatMedia failed. (%d)\n", FATFS_GetLastError());
FSi_MountSpecialArchive(0, NULL, pWork);
continue;
}
// Driveフォーマット
if (!FATFS_FormatDrive("share:/"))
{
succeeded = FALSE;
OS_TWarning("FATFS_FormatDrive failed. (%d)\n", FATFS_GetLastError());
FSi_MountSpecialArchive(0, NULL, pWork);
continue;
}
// アンマウント
result = FSi_MountSpecialArchive((OSTitleId)i, NULL, pWork);
if (result != FS_RESULT_SUCCESS)
{
succeeded = FALSE;
OS_TWarning("FSi_MountSpecialArchive failed. (%d)\n", result);
continue;
}
}
spFreeFunc ( pWork );
return succeeded;
}
/*---------------------------------------------------------------------------*
Name: NAMUTi_RandClearFile
@ -565,16 +663,26 @@ static BOOL NAMUTi_RandClearFile(const char* path)
{
// ファイルをランダムデータでクリア
u32 filesize = FS_GetFileLength(&file);
u8* pClearData = spAllocFunc( CLEAR_DATA_SIZE );
if (!pClearData)
{
OS_TWarning("Allocation failed. (%d)\n");
FS_CloseFile(&file);
return FALSE;
}
for (; filesize > CLEAR_DATA_SIZE; filesize -= CLEAR_DATA_SIZE)
{
if( AES_Rand(sClearData, CLEAR_DATA_SIZE) != AES_RESULT_SUCCESS )
if( AES_Rand(pClearData, CLEAR_DATA_SIZE) != AES_RESULT_SUCCESS )
{
spFreeFunc( pClearData );
return FALSE;
}
FS_WriteFile(&file, sClearData, CLEAR_DATA_SIZE);
FS_WriteFile(&file, pClearData, CLEAR_DATA_SIZE);
}
FS_WriteFile(&file, sClearData, (s32)filesize);
FS_WriteFile(&file, pClearData, (s32)filesize);
FS_CloseFile(&file);
spFreeFunc( pClearData );
}
else
{
@ -796,8 +904,14 @@ static void NAMUTi_ClearWiFiSettings( void )
#define NCFG_ADDR 0x20
#define NTR_WIFI_DATA_SIZE 0x400
#define TWL_WIFI_DATA_SIZE 0x600
int total_size = ( NTR_WIFI_DATA_SIZE + TWL_WIFI_DATA_SIZE );
u32 total_size = ( NTR_WIFI_DATA_SIZE + TWL_WIFI_DATA_SIZE );
u8* pClearData = spAllocFunc( total_size );
if (!pClearData)
{
OS_TWarning("Allocation failed. (%d)\n");
return;
}
if (!NVRAMi_IsInitialized()) {
NVRAMi_Init();
}
@ -806,13 +920,11 @@ static void NAMUTi_ClearWiFiSettings( void )
NVRAMi_Read( NCFG_ADDR, 2, (u8 *)&sNCFGAddr);
sNCFGAddr = (u32)( ( sNCFGAddr << 3 ) - ( NTR_WIFI_DATA_SIZE + TWL_WIFI_DATA_SIZE ) );
MI_CpuFillFast( sClearData, 0xffffffff, CLEAR_DATA_SIZE);
DC_FlushRange( sClearData, CLEAR_DATA_SIZE );
while( total_size > 0 ) {
NVRAMi_Write( sNCFGAddr, CLEAR_DATA_SIZE , sClearData );
sNCFGAddr += CLEAR_DATA_SIZE;
total_size -= CLEAR_DATA_SIZE;
}
MI_CpuFillFast( pClearData, 0xffffffff, total_size);
DC_FlushRange( pClearData, total_size );
NVRAMi_Write( sNCFGAddr, total_size , pClearData );
spFreeFunc( pClearData );
}

View File

@ -32,7 +32,7 @@ typedef void (*NAMUTFree)(void* ptr);
Description: NAMUT
Arguments: allocFunc:
Arguments: allocFunc: (32byteアライメント
freeFunc:
Returns: