mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
いらないコードを削除
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2880 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
ddc559677d
commit
5d7fe7c5f9
@ -210,19 +210,6 @@ static void KamiThread(void *arg)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KAMI_CLEAR_NAND_ERRORLOG:
|
|
||||||
{
|
|
||||||
if (sdmcFormatNandLog(TRUE))
|
|
||||||
{
|
|
||||||
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND);
|
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -58,17 +58,7 @@ typedef void (*KAMICallback)(KAMIResult result, void *arg);
|
|||||||
|
|
||||||
void KamiPxiInit( void );
|
void KamiPxiInit( void );
|
||||||
|
|
||||||
KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback);
|
|
||||||
KAMIResult ExeFormat(FormatMode format_mode);
|
|
||||||
KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read);
|
KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read);
|
||||||
KAMIResult kamiMcuWriteFirm(void* buffer );
|
|
||||||
KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read);
|
|
||||||
KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read);
|
|
||||||
KAMIResult kamiCDC_GoDsMode( void );
|
|
||||||
KAMIResult kamiClearNandErrorLog( void );
|
|
||||||
KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg );
|
|
||||||
KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes );
|
|
||||||
KAMIResult kamiGetNandCID( void* buffer );
|
|
||||||
|
|
||||||
// (重要)
|
// (重要)
|
||||||
// ARM7が読み書きするためリード前はInvalidate、ライト前はフラッシュしてください。
|
// ARM7が読み書きするためリード前はInvalidate、ライト前はフラッシュしてください。
|
||||||
@ -81,22 +71,6 @@ static KAMIResult kamiNandWrite(u32 block, void* buffer, u32 count)
|
|||||||
{
|
{
|
||||||
return kamiNandIo(block, buffer, count, FALSE);
|
return kamiNandIo(block, buffer, count, FALSE);
|
||||||
}
|
}
|
||||||
static KAMIResult kamiMcuRead(u8 reg_no, void* buffer)
|
|
||||||
{
|
|
||||||
return kamiMcuIo((u32)reg_no, buffer, 0, TRUE);
|
|
||||||
}
|
|
||||||
static KAMIResult kamiMcuWrite(u8 reg_no, u8 value)
|
|
||||||
{
|
|
||||||
return kamiMcuIo((u32)reg_no, NULL, (u32)value, FALSE);
|
|
||||||
}
|
|
||||||
static KAMIResult kamiARM7Read(u32 addr, void* buffer)
|
|
||||||
{
|
|
||||||
return kamiARM7Io(addr, buffer, 0, TRUE);
|
|
||||||
}
|
|
||||||
static KAMIResult kamiARM7Write(u32 addr, u8 value)
|
|
||||||
{
|
|
||||||
return kamiARM7Io(addr, NULL, value, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
|||||||
@ -136,11 +136,6 @@ Property
|
|||||||
#
|
#
|
||||||
CodecMode $(MAKEROM_CODEC_MODE)
|
CodecMode $(MAKEROM_CODEC_MODE)
|
||||||
|
|
||||||
#
|
|
||||||
# SCFG: scfg lock [TRUE/FALSE]
|
|
||||||
#
|
|
||||||
LockSCFG FALSE
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# DisableDebug :最終ROMでは、実行時にデバッグできないようにTRUEにする必要があります。
|
# DisableDebug :最終ROMでは、実行時にデバッグできないようにTRUEにする必要があります。
|
||||||
#
|
#
|
||||||
@ -158,11 +153,6 @@ AppendProperty
|
|||||||
# don't have to edit
|
# don't have to edit
|
||||||
Publisher Nintendo
|
Publisher Nintendo
|
||||||
|
|
||||||
#
|
|
||||||
# Application type : [USER/SYSTEM]
|
|
||||||
# don't have to edit
|
|
||||||
#AppType System
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# launch title on the launcher : [TRUE/FALSE]
|
# launch title on the launcher : [TRUE/FALSE]
|
||||||
# don't have to edit
|
# don't have to edit
|
||||||
@ -173,11 +163,6 @@ AppendProperty
|
|||||||
# don't have to edit
|
# don't have to edit
|
||||||
DataOnly FALSE
|
DataOnly FALSE
|
||||||
|
|
||||||
#
|
|
||||||
# Secure title : [TRUE/FALSE]
|
|
||||||
# don't have to edit
|
|
||||||
#Secure TRUE
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Boot allowed Media: [GameCard/NAND]
|
# Boot allowed Media: [GameCard/NAND]
|
||||||
#
|
#
|
||||||
|
|||||||
@ -84,79 +84,6 @@ void KamiPxiInit( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
//typedef void (*KAMICallback)(KAMIResult result, void *arg);
|
|
||||||
/*
|
|
||||||
void CDC_ReadCallback(KAMIResult result, void* arg);
|
|
||||||
void CDC_ReadCallback(KAMIResult result, void* arg)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: フォーマット実行関数
|
|
||||||
|
|
||||||
Description:
|
|
||||||
|
|
||||||
Arguments: FormatMode
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback)
|
|
||||||
{
|
|
||||||
OSIntrMode enabled;
|
|
||||||
|
|
||||||
// ロック
|
|
||||||
enabled = OS_DisableInterrupts();
|
|
||||||
if (kamiWork.lock)
|
|
||||||
{
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
return KAMI_RESULT_BUSY;
|
|
||||||
}
|
|
||||||
kamiWork.lock = TRUE;
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
|
|
||||||
kamiWork.callback = callback;
|
|
||||||
kamiWork.arg = 0;
|
|
||||||
kamiWork.data = 0;
|
|
||||||
|
|
||||||
if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode) == FALSE)
|
|
||||||
{
|
|
||||||
return KAMI_RESULT_SEND_ERROR;
|
|
||||||
}
|
|
||||||
return KAMI_RESULT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
KAMIResult ExeFormat(FormatMode format_mode)
|
|
||||||
{
|
|
||||||
OSIntrMode enabled;
|
|
||||||
|
|
||||||
// ロック
|
|
||||||
enabled = OS_DisableInterrupts();
|
|
||||||
if (kamiWork.lock)
|
|
||||||
{
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
return KAMI_RESULT_BUSY;
|
|
||||||
}
|
|
||||||
kamiWork.lock = TRUE;
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
|
|
||||||
kamiWork.callback = NULL;
|
|
||||||
kamiWork.arg = 0;
|
|
||||||
kamiWork.data = 0;
|
|
||||||
|
|
||||||
if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode))
|
|
||||||
{
|
|
||||||
KamiWaitBusy();
|
|
||||||
return (KAMIResult)kamiWork.result;
|
|
||||||
}
|
|
||||||
return KAMI_RESULT_SEND_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: NANDアクセス関数
|
Name: NANDアクセス関数
|
||||||
|
|
||||||
@ -166,7 +93,6 @@ KAMIResult ExeFormat(FormatMode format_mode)
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read)
|
KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read)
|
||||||
{
|
{
|
||||||
OSIntrMode enabled;
|
OSIntrMode enabled;
|
||||||
@ -206,353 +132,6 @@ KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read)
|
|||||||
return KAMI_RESULT_SEND_ERROR;
|
return KAMI_RESULT_SEND_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: kamiMcuWriteFirm
|
|
||||||
|
|
||||||
Description: MCUファーム更新関数
|
|
||||||
|
|
||||||
Arguments: buffer : new mcu data buffer
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
KAMIResult kamiMcuWriteFirm(void* buffer )
|
|
||||||
{
|
|
||||||
OSIntrMode enabled;
|
|
||||||
u8 data[4+2]; // 3の倍数
|
|
||||||
int i;
|
|
||||||
|
|
||||||
MI_CpuClear8( data, sizeof(data));
|
|
||||||
|
|
||||||
// ロック
|
|
||||||
enabled = OS_DisableInterrupts();
|
|
||||||
if (kamiWork.lock)
|
|
||||||
{
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
return KAMI_RESULT_BUSY;
|
|
||||||
}
|
|
||||||
kamiWork.lock = TRUE;
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
|
|
||||||
kamiWork.callback = NULL;
|
|
||||||
kamiWork.arg = 0;
|
|
||||||
|
|
||||||
// データ作成
|
|
||||||
KAMI_PACK_U32(&data[0], &buffer);
|
|
||||||
|
|
||||||
if (KamiSendPxiCommand(KAMI_MCU_WRITE_FIRM, 5, (u8)0))
|
|
||||||
{
|
|
||||||
for (i = 0; i < 4; i+=3)
|
|
||||||
{
|
|
||||||
KamiSendPxiData(&data[i]);
|
|
||||||
}
|
|
||||||
KamiWaitBusy();
|
|
||||||
return (KAMIResult)kamiWork.result;
|
|
||||||
}
|
|
||||||
|
|
||||||
return KAMI_RESULT_SEND_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: MCUアクセス関数
|
|
||||||
|
|
||||||
Description:
|
|
||||||
|
|
||||||
Arguments: None.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read)
|
|
||||||
{
|
|
||||||
OSIntrMode enabled;
|
|
||||||
u8 data[12];
|
|
||||||
int i;
|
|
||||||
|
|
||||||
MI_CpuClear8( data, sizeof(data));
|
|
||||||
|
|
||||||
// ロック
|
|
||||||
enabled = OS_DisableInterrupts();
|
|
||||||
if (kamiWork.lock)
|
|
||||||
{
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
return KAMI_RESULT_BUSY;
|
|
||||||
}
|
|
||||||
kamiWork.lock = TRUE;
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
|
|
||||||
kamiWork.callback = NULL;
|
|
||||||
kamiWork.arg = 0;
|
|
||||||
if (is_read)
|
|
||||||
{
|
|
||||||
kamiWork.data = (u8*)buffer;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
kamiWork.data = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// データ作成
|
|
||||||
KAMI_PACK_U32(&data[0], ®_no);
|
|
||||||
KAMI_PACK_U32(&data[4], &value);
|
|
||||||
|
|
||||||
if (KamiSendPxiCommand(KAMI_MCU_IO, 13, (u8)is_read))
|
|
||||||
{
|
|
||||||
for (i = 0; i < 12; i+=3)
|
|
||||||
{
|
|
||||||
KamiSendPxiData(&data[i]);
|
|
||||||
}
|
|
||||||
KamiWaitBusy();
|
|
||||||
return (KAMIResult)kamiWork.result;
|
|
||||||
}
|
|
||||||
return KAMI_RESULT_SEND_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: ARM7アクセス関数
|
|
||||||
|
|
||||||
Description:
|
|
||||||
|
|
||||||
Arguments: None.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read)
|
|
||||||
{
|
|
||||||
OSIntrMode enabled;
|
|
||||||
u8 data[12];
|
|
||||||
int i;
|
|
||||||
|
|
||||||
MI_CpuClear8( data, sizeof(data));
|
|
||||||
|
|
||||||
// ロック
|
|
||||||
enabled = OS_DisableInterrupts();
|
|
||||||
if (kamiWork.lock)
|
|
||||||
{
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
return KAMI_RESULT_BUSY;
|
|
||||||
}
|
|
||||||
kamiWork.lock = TRUE;
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
|
|
||||||
kamiWork.callback = NULL;
|
|
||||||
kamiWork.arg = 0;
|
|
||||||
if (is_read)
|
|
||||||
{
|
|
||||||
kamiWork.data = (u8*)buffer;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
kamiWork.data = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// データ作成
|
|
||||||
KAMI_PACK_U32(&data[0], &addr);
|
|
||||||
KAMI_PACK_U32(&data[4], &value);
|
|
||||||
|
|
||||||
if (KamiSendPxiCommand(KAMI_ARM7_IO, 13, (u8)is_read))
|
|
||||||
{
|
|
||||||
for (i = 0; i < 12; i+=3)
|
|
||||||
{
|
|
||||||
KamiSendPxiData(&data[i]);
|
|
||||||
}
|
|
||||||
KamiWaitBusy();
|
|
||||||
return (KAMIResult)kamiWork.result;
|
|
||||||
}
|
|
||||||
|
|
||||||
return KAMI_RESULT_SEND_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: kamiCDC_GoDsMode
|
|
||||||
|
|
||||||
Description: CODECをDSモードへ遷移させる関数
|
|
||||||
|
|
||||||
Arguments: None.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
KAMIResult kamiCDC_GoDsMode( void )
|
|
||||||
{
|
|
||||||
OSIntrMode enabled;
|
|
||||||
|
|
||||||
// ロック
|
|
||||||
enabled = OS_DisableInterrupts();
|
|
||||||
if (kamiWork.lock)
|
|
||||||
{
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
return KAMI_RESULT_BUSY;
|
|
||||||
}
|
|
||||||
kamiWork.lock = TRUE;
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
|
|
||||||
kamiWork.callback = NULL;
|
|
||||||
kamiWork.arg = 0;
|
|
||||||
kamiWork.data = 0;
|
|
||||||
|
|
||||||
if (KamiSendPxiCommand(KAMI_CDC_GO_DSMODE, 0, (u8)0))
|
|
||||||
{
|
|
||||||
KamiWaitBusy();
|
|
||||||
return (KAMIResult)kamiWork.result;
|
|
||||||
}
|
|
||||||
return KAMI_RESULT_SEND_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: kamiClearNandErrorLog
|
|
||||||
|
|
||||||
Description: NVRAMのNANDエラー情報をクリアします。
|
|
||||||
|
|
||||||
Arguments: None.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
KAMIResult kamiClearNandErrorLog( void )
|
|
||||||
{
|
|
||||||
OSIntrMode enabled;
|
|
||||||
|
|
||||||
// ロック
|
|
||||||
enabled = OS_DisableInterrupts();
|
|
||||||
if (kamiWork.lock)
|
|
||||||
{
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
return KAMI_RESULT_BUSY;
|
|
||||||
}
|
|
||||||
kamiWork.lock = TRUE;
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
|
|
||||||
kamiWork.callback = NULL;
|
|
||||||
kamiWork.arg = 0;
|
|
||||||
kamiWork.data = 0;
|
|
||||||
|
|
||||||
if (KamiSendPxiCommand(KAMI_CLEAR_NAND_ERRORLOG, 0, (u8)0))
|
|
||||||
{
|
|
||||||
KamiWaitBusy();
|
|
||||||
return (KAMIResult)kamiWork.result;
|
|
||||||
}
|
|
||||||
return KAMI_RESULT_SEND_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: kamiGetCameraModuleTypesAsync
|
|
||||||
|
|
||||||
Description: カメラモジュールタイプを取得します(非同期版)
|
|
||||||
|
|
||||||
Arguments: None.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg )
|
|
||||||
{
|
|
||||||
OSIntrMode enabled;
|
|
||||||
|
|
||||||
if (pTypes == NULL)
|
|
||||||
{
|
|
||||||
return KAMI_RESULT_INVALID_PARAMETER;
|
|
||||||
}
|
|
||||||
|
|
||||||
enabled = OS_DisableInterrupts();
|
|
||||||
if (kamiWork.lock)
|
|
||||||
{
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
return KAMI_RESULT_BUSY;
|
|
||||||
}
|
|
||||||
kamiWork.lock = TRUE;
|
|
||||||
kamiWork.callback = callback;
|
|
||||||
kamiWork.arg = arg;
|
|
||||||
kamiWork.data = (u8*)pTypes;
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
|
|
||||||
if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0))
|
|
||||||
{
|
|
||||||
return KAMI_RESULT_SUCCESS;
|
|
||||||
}
|
|
||||||
return KAMI_RESULT_SEND_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: kamiGetCameraModuleTypes
|
|
||||||
|
|
||||||
Description: カメラモジュールタイプを取得します(同期版)
|
|
||||||
|
|
||||||
Arguments: None.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes )
|
|
||||||
{
|
|
||||||
OSIntrMode enabled;
|
|
||||||
|
|
||||||
if (pTypes == NULL)
|
|
||||||
{
|
|
||||||
return KAMI_RESULT_INVALID_PARAMETER;
|
|
||||||
}
|
|
||||||
|
|
||||||
enabled = OS_DisableInterrupts();
|
|
||||||
if (kamiWork.lock)
|
|
||||||
{
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
return KAMI_RESULT_BUSY;
|
|
||||||
}
|
|
||||||
kamiWork.lock = TRUE;
|
|
||||||
kamiWork.callback = NULL;
|
|
||||||
kamiWork.arg = 0;
|
|
||||||
kamiWork.data = (u8*)pTypes;
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
|
|
||||||
if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0))
|
|
||||||
{
|
|
||||||
KamiWaitBusy();
|
|
||||||
return (KAMIResult)kamiWork.result;
|
|
||||||
}
|
|
||||||
return KAMI_RESULT_SEND_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: kamiGetNandCID
|
|
||||||
|
|
||||||
Description: NANDのCIDを取得します。
|
|
||||||
|
|
||||||
Arguments: buffer : 16バイトバッファ
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
KAMIResult kamiGetNandCID(void* buffer )
|
|
||||||
{
|
|
||||||
OSIntrMode enabled;
|
|
||||||
u8 data[4+2]; // 3の倍数
|
|
||||||
|
|
||||||
MI_CpuClear8( data, sizeof(data));
|
|
||||||
|
|
||||||
// ロック
|
|
||||||
enabled = OS_DisableInterrupts();
|
|
||||||
if (kamiWork.lock)
|
|
||||||
{
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
return KAMI_RESULT_BUSY;
|
|
||||||
}
|
|
||||||
kamiWork.lock = TRUE;
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
|
||||||
|
|
||||||
kamiWork.callback = NULL;
|
|
||||||
kamiWork.arg = 0;
|
|
||||||
kamiWork.data = (u8*)buffer;
|
|
||||||
|
|
||||||
if (KamiSendPxiCommand(KAMI_GET_NAND_CID, 0, 0))
|
|
||||||
{
|
|
||||||
KamiWaitBusy();
|
|
||||||
return (KAMIResult)kamiWork.result;
|
|
||||||
}
|
|
||||||
|
|
||||||
return KAMI_RESULT_SEND_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
PXI関連
|
PXI関連
|
||||||
|
|||||||
@ -30,9 +30,6 @@
|
|||||||
マクロ定義
|
マクロ定義
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
// NANDファーム書き込みの際にNVRAMの未割り当て領域+予約領域を0クリアする場合は定義します(開発用)
|
|
||||||
//#define CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL
|
|
||||||
|
|
||||||
#define ROUND_UP(value, alignment) \
|
#define ROUND_UP(value, alignment) \
|
||||||
(((u32)(value) + (alignment-1)) & ~(alignment-1))
|
(((u32)(value) + (alignment-1)) & ~(alignment-1))
|
||||||
|
|
||||||
@ -175,7 +172,6 @@ BOOL GetNandFirmBinPath(void)
|
|||||||
if (!STD_CompareString( pExtension, ".nand") || !STD_CompareString( pExtension, ".NAND"))
|
if (!STD_CompareString( pExtension, ".nand") || !STD_CompareString( pExtension, ".NAND"))
|
||||||
{
|
{
|
||||||
STD_CopyString( sFilePath[sFileNum], info->longname );
|
STD_CopyString( sFilePath[sFileNum], info->longname );
|
||||||
//kamiFontPrintfConsole(CONSOLE_ORANGE, "%d:%s\n", sFileNum, info->longname);
|
|
||||||
|
|
||||||
// 最大16個で終了
|
// 最大16個で終了
|
||||||
if (++sFileNum >= FILE_NUM_MAX)
|
if (++sFileNum >= FILE_NUM_MAX)
|
||||||
@ -217,9 +213,6 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
u16 crc_w1, crc_w2;
|
u16 crc_w1, crc_w2;
|
||||||
u16 crc_r1, crc_r2;
|
u16 crc_r1, crc_r2;
|
||||||
u16 crc_norfirm_reserved_area_w, crc_norfirm_reserved_area_r;
|
u16 crc_norfirm_reserved_area_w, crc_norfirm_reserved_area_r;
|
||||||
#ifdef CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL
|
|
||||||
u32 write_offset;
|
|
||||||
#endif // CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL
|
|
||||||
|
|
||||||
// .nandファイルオープン
|
// .nandファイルオープン
|
||||||
FS_InitFile(&file);
|
FS_InitFile(&file);
|
||||||
@ -234,7 +227,6 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
file_size = FS_GetFileLength(&file) ;
|
file_size = FS_GetFileLength(&file) ;
|
||||||
if (file_size > (800*1024))
|
if (file_size > (800*1024))
|
||||||
{
|
{
|
||||||
//kamiFontPrintfConsoleEx(1, "too big file size!\n");
|
|
||||||
FS_CloseFile(&file);
|
FS_CloseFile(&file);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -247,7 +239,6 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
pTempBuf = allocFunc( alloc_size );
|
pTempBuf = allocFunc( alloc_size );
|
||||||
if (pTempBuf == NULL)
|
if (pTempBuf == NULL)
|
||||||
{
|
{
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail Alloc()!\n");
|
|
||||||
FS_CloseFile(&file);
|
FS_CloseFile(&file);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -260,7 +251,6 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
DC_FlushRange(pTempBuf, file_size);
|
DC_FlushRange(pTempBuf, file_size);
|
||||||
if (!read_is_ok)
|
if (!read_is_ok)
|
||||||
{
|
{
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail FS_ReadFile!\n");
|
|
||||||
FS_CloseFile(&file);
|
FS_CloseFile(&file);
|
||||||
freeFunc(pTempBuf);
|
freeFunc(pTempBuf);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -276,7 +266,6 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
// まずNORHeaderDS領域を書き込む(40byte?)
|
// まずNORHeaderDS領域を書き込む(40byte?)
|
||||||
if (NVRAMi_Write(0, sizeof(NORHeaderDS), (void*)pTempBuf) != NVRAM_RESULT_SUCCESS)
|
if (NVRAMi_Write(0, sizeof(NORHeaderDS), (void*)pTempBuf) != NVRAM_RESULT_SUCCESS)
|
||||||
{
|
{
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
|
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,7 +277,6 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
if (NVRAMi_Read(0, sizeof(NORHeaderDS), pTempBuf) != NVRAM_RESULT_SUCCESS)
|
if (NVRAMi_Read(0, sizeof(NORHeaderDS), pTempBuf) != NVRAM_RESULT_SUCCESS)
|
||||||
{
|
{
|
||||||
OS_PutString("Fail NVRAMi_Read()!\n");
|
OS_PutString("Fail NVRAMi_Read()!\n");
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()!\n");
|
|
||||||
}
|
}
|
||||||
DC_FlushRange(pTempBuf, sizeof(NORHeaderDS));
|
DC_FlushRange(pTempBuf, sizeof(NORHeaderDS));
|
||||||
|
|
||||||
@ -299,7 +287,6 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
if ( crc_w1 != crc_r1 )
|
if ( crc_w1 != crc_r1 )
|
||||||
{
|
{
|
||||||
freeFunc(pTempBuf);
|
freeFunc(pTempBuf);
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail! CRC check %x!=%x\n", crc_w1, crc_r1);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -313,7 +300,6 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
|
|
||||||
if (NVRAMi_Write(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
if (NVRAMi_Write(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
||||||
{
|
{
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
|
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,7 +311,6 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
|
|
||||||
if (NVRAMi_Read(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
if (NVRAMi_Read(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
||||||
{
|
{
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n");
|
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -336,49 +321,21 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
// NORファームリザーブ領域のCRC比較
|
// NORファームリザーブ領域のCRC比較
|
||||||
if ( crc_norfirm_reserved_area_w != crc_norfirm_reserved_area_r )
|
if ( crc_norfirm_reserved_area_w != crc_norfirm_reserved_area_r )
|
||||||
{
|
{
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail! Norfirm Reserved Area CRC check %x!=%x\n", crc_norfirm_reserved_area_w, crc_norfirm_reserved_area_r);
|
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL
|
|
||||||
DC_InvalidateRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
|
|
||||||
// 未割り当て領域+予約領域を0クリアします(開発用)
|
|
||||||
if (NVRAMi_Read(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_PAGE_SIZE, &sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
|
||||||
{
|
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n");
|
|
||||||
result = FALSE;
|
|
||||||
}
|
|
||||||
sReservedAreaEndAddress = (u32)(*(u16 *)sNvramPageSizeBuffer << NVRAM_CONFIG_DATA_OFFSET_SHIFT) - 0xA00;// TWL WiFi設定 + NTR WiFi設定 を差し引く
|
|
||||||
//OS_Printf("end = %x\n", sReservedAreaEndAddress);
|
|
||||||
|
|
||||||
MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE );
|
|
||||||
DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
|
|
||||||
|
|
||||||
for (write_offset=NVRAM_NON_ASIGNED_AREA_ADDRESS; write_offset < sReservedAreaEndAddress; write_offset += NVRAM_PAGE_SIZE)
|
|
||||||
{
|
|
||||||
if (NVRAMi_Write(write_offset, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
|
||||||
{
|
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
|
|
||||||
result = FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//OS_Printf("write_offset = %x\n", write_offset);
|
|
||||||
#else
|
|
||||||
// 未割り当て領域先頭256byte+予約領域を0クリアします
|
// 未割り当て領域先頭256byte+予約領域を0クリアします
|
||||||
|
|
||||||
MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE );
|
MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE );
|
||||||
DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
|
DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
|
||||||
|
|
||||||
if (NVRAMi_Write(NVRAM_NON_ASIGNED_AREA_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
if (NVRAMi_Write(NVRAM_NON_ASIGNED_AREA_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
||||||
{
|
{
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
|
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DC_InvalidateRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
|
DC_InvalidateRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
|
||||||
if (NVRAMi_Read(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_PAGE_SIZE, &sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
if (NVRAMi_Read(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_PAGE_SIZE, &sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
||||||
{
|
{
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n");
|
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
sReservedAreaEndAddress = (u32)(*(u16 *)sNvramPageSizeBuffer << NVRAM_CONFIG_DATA_OFFSET_SHIFT) - 0xA00;// TWL WiFi設定 + NTR WiFi設定 を差し引く
|
sReservedAreaEndAddress = (u32)(*(u16 *)sNvramPageSizeBuffer << NVRAM_CONFIG_DATA_OFFSET_SHIFT) - 0xA00;// TWL WiFi設定 + NTR WiFi設定 を差し引く
|
||||||
@ -388,27 +345,12 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
|
|
||||||
if (NVRAMi_Write(sReservedAreaEndAddress - 0x100, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
if (NVRAMi_Write(sReservedAreaEndAddress - 0x100, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
|
||||||
{
|
{
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
|
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// NANDログ情報のクリア
|
|
||||||
if (kamiClearNandErrorLog() != KAMI_RESULT_SUCCESS)
|
|
||||||
{
|
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail kamiClearNandErrorLog()\n");
|
|
||||||
result = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// nandfirmバージョンの消去(デバッグ用)
|
|
||||||
kamiEraseNandfirmVersion(nandfirm_size);
|
|
||||||
|
|
||||||
// kamiFontPrintfConsoleEx(0, "NAND Firm Import Start!\n");
|
|
||||||
|
|
||||||
// NAND書き込み
|
// NAND書き込み
|
||||||
write_block = nandfirm_size/NAND_BLOCK_BYTE + (nandfirm_size % NAND_BLOCK_BYTE != 0);
|
write_block = nandfirm_size/NAND_BLOCK_BYTE + (nandfirm_size % NAND_BLOCK_BYTE != 0);
|
||||||
kamiNandWrite( NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE, pTempBuf+NAND_FIRM_START_OFFSET, write_block ); // ブロック単位、バイト単位、ブロック単位
|
kamiNandWrite( NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE, pTempBuf+NAND_FIRM_START_OFFSET, write_block ); // ブロック単位、バイト単位、ブロック単位
|
||||||
// kamiFontLoadScreenData();
|
|
||||||
|
|
||||||
// CRCを計算するので念のためにクリアしてからリードする
|
// CRCを計算するので念のためにクリアしてからリードする
|
||||||
MI_CpuClear8( pTempBuf, nandfirm_size );
|
MI_CpuClear8( pTempBuf, nandfirm_size );
|
||||||
@ -417,7 +359,6 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
// CRCチェックのためNandからリード
|
// CRCチェックのためNandからリード
|
||||||
if (kamiNandRead(NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE, pTempBuf, write_block ) == KAMI_RESULT_SEND_ERROR)
|
if (kamiNandRead(NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE, pTempBuf, write_block ) == KAMI_RESULT_SEND_ERROR)
|
||||||
{
|
{
|
||||||
//kamiFontPrintfConsoleEx(1, "kamiNandRead ... %s!\n", "ERROR");
|
|
||||||
}
|
}
|
||||||
DC_FlushRange(pTempBuf, nandfirm_size);
|
DC_FlushRange(pTempBuf, nandfirm_size);
|
||||||
|
|
||||||
@ -427,12 +368,10 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
|
|||||||
// NAND部分についてのCRCチェック
|
// NAND部分についてのCRCチェック
|
||||||
if (crc_w2 == crc_r2)
|
if (crc_w2 == crc_r2)
|
||||||
{
|
{
|
||||||
// kamiFontPrintfConsoleEx(0, "Success! CRC check %x==%x\n", crc_w2, crc_r2);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
//kamiFontPrintfConsoleEx(1, "Fail! CRC check %x!=%x\n", crc_w2, crc_r2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// メモリ解放
|
// メモリ解放
|
||||||
|
|||||||
@ -102,9 +102,6 @@ TwlMain()
|
|||||||
// initialize file-system
|
// initialize file-system
|
||||||
FS_Init(FS_DMA_NOT_USE);
|
FS_Init(FS_DMA_NOT_USE);
|
||||||
|
|
||||||
// SDカードの挿抜イベント監視コールバック設定
|
|
||||||
// FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL);
|
|
||||||
|
|
||||||
// FS_Initの後の方が良い模様
|
// FS_Initの後の方が良い模様
|
||||||
InitAllocation();
|
InitAllocation();
|
||||||
|
|
||||||
@ -128,17 +125,6 @@ TwlMain()
|
|||||||
// RED_LAUNCHER_VERが0でフォーマットに失敗するので強制的に書き換える
|
// RED_LAUNCHER_VERが0でフォーマットに失敗するので強制的に書き換える
|
||||||
MI_StoreLE8((void*)HW_TWL_RED_LAUNCHER_VER, 1);
|
MI_StoreLE8((void*)HW_TWL_RED_LAUNCHER_VER, 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef AUTO_FORMAT_MODE
|
|
||||||
// 検査工程ではNANDが初期化されていないがその状態でFATにアクセスすると
|
|
||||||
// 問題があるため強制的にフォーマットを行う 2008/06/18
|
|
||||||
// ExeFormat(FORMAT_MODE_QUICK);
|
|
||||||
//
|
|
||||||
// Secure情報を読み込む前にフォーマットしてしまうとSecure情報が消えてしまう。
|
|
||||||
// そうするとシリアルNoが書き換わってしまうのでこの処理はなくす。
|
|
||||||
// 検査工程と異なりNandInitializerが実行される段階ではフォーマット済みなはず。
|
|
||||||
// 仮に未フォーマットであったとしてもBadFormat扱いとなる。2009/03/05
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef TWL_CAPTURE_VERSION
|
#ifndef TWL_CAPTURE_VERSION
|
||||||
ReadTWLSettings();
|
ReadTWLSettings();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user