NVRAM関連のアクセスをSDKのライブラリを使用するように変更。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1673 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
kamikawa 2008-06-23 08:47:13 +00:00
parent a16c96d8cf
commit 82ee8c8c55
10 changed files with 27 additions and 334 deletions

View File

@ -30,7 +30,6 @@ SRCS = crt0.SCFG_NOLOCK.c \
main.c \
kami_pxi.c \
formatter.c \
nvram_misc.c \
mcu_firm.c
TARGET_NAME = armadillo

View File

@ -41,7 +41,6 @@ Ltdautoload SCRWRAM
Object $(OBJDIR)/main.o
Object $(OBJDIR)/kami_pxi.o
Object $(OBJDIR)/formatter.o
Object $(OBJDIR)/nvram_misc.o
Object $(OBJDIR)/mcu_firm.o
Library libsea_sp$(LIBSUFFIX).a

View File

@ -1,43 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - NandInitializer
File: nvram.h
Copyright 2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_NVRAM_H_
#define FIRM_NVRAM_H_
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef SDK_ARM9
#else // SDK_ARM7
/*---------------------------------------------------------------------------*
ŠÖ<EFBFBD>è`
*---------------------------------------------------------------------------*/
void NVRAMi_Read(u32 address, void *buf, u32 size);
void NVRAMi_Write(u32 address, void *buf, u32 size);
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_NVRAM_H_ */
#endif

View File

@ -21,7 +21,6 @@
#include "fifo.h"
#include "twl/cdc.h"
#include "formatter.h"
#include "nvram.h"
#include "mcu_firm.h"
#include <twl/ltdmain_begin.h>
#include <twl/mcu.h>
@ -129,7 +128,6 @@ static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err)
{
case KAMI_EXE_FORMAT:
case KAMI_NAND_IO:
case KAMI_NVRAM_IO:
case KAMI_MCU_WRITE_FIRM:
case KAMI_MCU_IO:
case KAMI_ARM7_IO:
@ -227,30 +225,6 @@ static void KamiThread(void *arg)
}
break;
case KAMI_NVRAM_IO:
{
BOOL is_read;
u32 adress;
void* buffer;
u32 size;
is_read = (BOOL)kamiWork.data[0];
KAMI_UNPACK_U32(&adress, &kamiWork.data[1]);
KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[5]);
KAMI_UNPACK_U32(&size, &kamiWork.data[9]);
if (is_read)
{
NVRAMi_Read( adress, buffer, size );
}
else
{
NVRAMi_Write( adress, buffer, size );
}
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS);
}
break;
case KAMI_MCU_WRITE_FIRM:
{
void* buffer;

View File

@ -1,181 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - NandInitializer
File: nvram_misc.c
Copyright 2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include "nvram.h"
#include "spi_sp.h"
#include "nvram_sp.h"
/*---------------------------------------------------------------------------*
Name: NvramCheckReadyToRead
Description: NVRAMを読み出し可能な状態かどうか確認する
Arguments: None.
Returns: BOOL - TRUEを返す
FALSEの場合は読み出し禁止の状態
*---------------------------------------------------------------------------*/
static BOOL NvramCheckReadyToRead(void)
{
u16 tempStatus;
// ステータスレジスタ読み出し
NVRAM_ReadStatusRegister((u8 *)(&tempStatus));
// 書き込みもしくは消去操作中かを確認
if (tempStatus & NVRAM_STATUS_REGISTER_WIP)
{
return FALSE;
}
return TRUE;
}
/*---------------------------------------------------------------------------*
Name: NvramCheckReadyToWrite
Description: NVRAMを書き込み可能な状態かどうか確認する
Arguments: None.
Returns: BOOL - TRUEを返す
FALSEの場合は書き込み禁止の状態
*---------------------------------------------------------------------------*/
static BOOL NvramCheckReadyToWrite(void)
{
u16 tempStatus;
// ステータスレジスタ読み出し
NVRAM_ReadStatusRegister((u8 *)(&tempStatus));
// 書き込みもしくは消去操作中かを確認
if (tempStatus & NVRAM_STATUS_REGISTER_WIP)
{
return FALSE;
}
// 書き込み許可されているかを確認
if (!(tempStatus & NVRAM_STATUS_REGISTER_WEL))
{
return FALSE;
}
return TRUE;
}
/*---------------------------------------------------------------------------*
Name: NVRAM_WaitOperation
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void NVRAM_WaitOperation(void)
{
while( NvramCheckReadyToRead() == FALSE ) {
}
}
/*---------------------------------------------------------------------------*
Name: NVRAM_WaitWriteEnable
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void NVRAM_WaitWriteEnable(void)
{
while( NvramCheckReadyToWrite() == FALSE ) {
}
}
/*---------------------------------------------------------------------------*
Name: NVRAMi_Read
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void NVRAMi_Read(u32 address, void *buf, u32 size)
{
NVRAM_WaitOperation();
NVRAM_ReadDataBytes(address, size, buf);
return;
}
/*---------------------------------------------------------------------------*
Name: NVRAMi_Write
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void NVRAMi_Write(u32 address, void *buf, u32 size)
{
u32 i;
u32 page_start;
u32 page_end;
u32 offset_start;
u32 offset_end;
u8 *src_ptr;
u8 temp_buffer[SPI_NVRAM_PAGE_SIZE];
src_ptr = (u8 *)buf;
page_start = (address / SPI_NVRAM_PAGE_SIZE) * SPI_NVRAM_PAGE_SIZE;
page_end = ((address+size-1) / SPI_NVRAM_PAGE_SIZE ) * SPI_NVRAM_PAGE_SIZE;
offset_start = address % SPI_NVRAM_PAGE_SIZE;
offset_end = (address+size-1) % SPI_NVRAM_PAGE_SIZE;
while( page_start <= page_end ) {
if( offset_start != 0 ) {
NVRAMi_Read(page_start, temp_buffer, offset_start);
}
if( page_start != page_end ) {
for( i = offset_start ; i < SPI_NVRAM_PAGE_SIZE ; i++ ) {
temp_buffer[i] = *src_ptr++;
}
}
else {
for( i = offset_start ; i <= offset_end ; i++ ) {
temp_buffer[i] = *src_ptr++;
}
if( offset_end != (SPI_NVRAM_PAGE_SIZE-1) ) {
NVRAMi_Read(page_start+offset_end+1, &(temp_buffer[offset_end+1]), SPI_NVRAM_PAGE_SIZE - (offset_end+1) );
}
}
NVRAM_WriteEnable();
NVRAM_WaitWriteEnable();
NVRAM_PageErase((u32)page_start);
NVRAM_WaitOperation();
NVRAM_WriteEnable();
NVRAM_PageWrite((u32)page_start, (u16)SPI_NVRAM_PAGE_SIZE, temp_buffer);
NVRAM_WaitOperation();
page_start += SPI_NVRAM_PAGE_SIZE;
offset_start = 0;
}
}

View File

@ -61,7 +61,6 @@ 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 kamiNvramIo(u32 address, void* buffer, u32 size, 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);
@ -81,14 +80,6 @@ static KAMIResult kamiNandWrite(u32 block, void* buffer, u32 count)
{
return kamiNandIo(block, buffer, count, FALSE);
}
static KAMIResult kamiNvramRead(u32 adress, void* buffer, u32 size)
{
return kamiNvramIo(adress, buffer, size, TRUE);
}
static KAMIResult kamiNvramWrite(u32 adress, void* buffer, u32 size)
{
return kamiNvramIo(adress, buffer, size, FALSE);
}
static KAMIResult kamiMcuRead(u8 reg_no, void* buffer)
{
return kamiMcuIo((u32)reg_no, buffer, 0, TRUE);

View File

@ -204,53 +204,6 @@ KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read)
return KAMI_RESULT_SEND_ERROR;
}
/*---------------------------------------------------------------------------*
Name: Nvramアクセス関数
Description:
Arguments: None.
Returns:
*---------------------------------------------------------------------------*/
KAMIResult kamiNvramIo(u32 address, void* buffer, u32 size, BOOL is_read)
{
OSIntrMode enabled;
u8 data[12];
int i;
// ロック
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;
// データ作成
KAMI_PACK_U32(&data[0], &address);
KAMI_PACK_U32(&data[4], &buffer);
KAMI_PACK_U32(&data[8], &size);
if (KamiSendPxiCommand(KAMI_NVRAM_IO, 12, (u8)is_read))
{
for (i = 0; i < 12; i+=3)
{
KamiSendPxiData(&data[i]);
}
KamiWaitBusy();
return (KAMIResult)kamiWork.result;
}
return KAMI_RESULT_SEND_ERROR;
}
/*---------------------------------------------------------------------------*
Name: kamiMcuWriteFirm

View File

@ -19,6 +19,7 @@
#include <twl/fatfs.h>
#include <nitro/card.h>
#include <twl/nam.h>
#include <nitro/nvram.h>
#include "kami_font.h"
#include "kami_pxi.h"
@ -131,9 +132,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
crc_w2 = SVC_GetCRC16( 0xffff, pTempBuf+512, file_size-512 );
// まずNORHeaderDS領域を書き込む40byte?
if (kamiNvramWrite(0, (void*)pTempBuf, sizeof(NORHeaderDS)) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write(0, sizeof(NORHeaderDS), (void*)pTempBuf) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramWrite()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
result = FALSE;
}
@ -142,9 +143,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
DC_FlushRange(pTempBuf, sizeof(NORHeaderDS));
// CRCチェックのためNvramからリード
if (kamiNvramRead(0, pTempBuf, sizeof(NORHeaderDS) ) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Read(0, sizeof(NORHeaderDS), pTempBuf) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramRead()!\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()!\n");
}
DC_StoreRange(pTempBuf, sizeof(NORHeaderDS));
@ -167,9 +168,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
// NORファームリザーブ領域の書き込みデータのCRCを計算
crc_norfirm_reserved_area_w = SVC_GetCRC16( 0xffff, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
if (kamiNvramWrite(NVRAM_NORFIRM_RESERVED_ADDRESS, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramWrite()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
result = FALSE;
}
@ -179,9 +180,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
// 読み込みはARM7が直接メモリに書き出すため
DC_FlushRange(sNvramPageSizeBuffer, NVRAM_PAGE_SIZE);
if (kamiNvramRead(NVRAM_NORFIRM_RESERVED_ADDRESS, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Read(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramRead()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n");
result = FALSE;
}
@ -199,9 +200,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
#ifdef CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL
DC_InvalidateRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
// 未割り当て領域+予約領域を0クリアします(開発用)
if (kamiNvramRead(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, &sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Read(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_PAGE_SIZE, &sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramRead()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n");
result = FALSE;
}
sReservedAreaEndAddress = (u32)(*(u16 *)sNvramPageSizeBuffer << NVRAM_CONFIG_DATA_OFFSET_SHIFT) - 0xA00;// TWL WiFi設定 + NTR WiFi設定 を差し引く
@ -212,9 +213,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
for (write_offset=NVRAM_NON_ASIGNED_AREA_ADDRESS; write_offset < sReservedAreaEndAddress; write_offset += NVRAM_PAGE_SIZE)
{
if (kamiNvramWrite(write_offset, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write(write_offset, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramWrite()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
result = FALSE;
}
}
@ -225,16 +226,16 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE );
DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
if (kamiNvramWrite(NVRAM_NON_ASIGNED_AREA_ADDRESS, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write(NVRAM_NON_ASIGNED_AREA_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramWrite()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
result = FALSE;
}
DC_InvalidateRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
if (kamiNvramRead(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, &sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Read(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_PAGE_SIZE, &sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramRead()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n");
result = FALSE;
}
sReservedAreaEndAddress = (u32)(*(u16 *)sNvramPageSizeBuffer << NVRAM_CONFIG_DATA_OFFSET_SHIFT) - 0xA00;// TWL WiFi設定 + NTR WiFi設定 を差し引く
@ -242,9 +243,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE );
DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
if (kamiNvramWrite(sReservedAreaEndAddress - 0x100, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write(sReservedAreaEndAddress - 0x100, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramWrite()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
result = FALSE;
}
#endif

View File

@ -21,6 +21,7 @@
#include <nitro/card.h>
#include <twl/nam.h>
#include <stddef.h>
#include <nitro/nvram.h>
#include "kami_font.h"
#include "kami_pxi.h"
#include "process_topmenu.h"
@ -350,9 +351,9 @@ static BOOL WriteNorfirm(char* file_name)
crc_w2 = SVC_GetCRC16( 0xffff, pTempBuf+512, file_size-512 );
// まずNORHeaderDS領域を書き込む40byte?
if (kamiNvramWrite(0, (void*)pTempBuf, sizeof(NORHeaderDS)) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write(0, sizeof(NORHeaderDS), (void*)pTempBuf ) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail SPI_NvramPageWrite()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
result = FALSE;
}
@ -360,9 +361,9 @@ static BOOL WriteNorfirm(char* file_name)
DC_InvalidateRange(pTempBuf, sizeof(NORHeaderDS));
// CRCチェックのためNvramからリード
if (kamiNvramRead(0, pTempBuf, sizeof(NORHeaderDS) ) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Read(0, sizeof(NORHeaderDS), pTempBuf) != NVRAM_RESULT_SUCCESS)
{
OS_Printf("kamiNvramRead ... ERROR!\n");
OS_Printf("NVRAMi_Read ... ERROR!\n");
}
// 書き込み後のCRCを計算
@ -386,9 +387,9 @@ static BOOL WriteNorfirm(char* file_name)
while ( nor_addr < file_size)
{
// 書きこみ
if (kamiNvramWrite((u32)nor_addr, (void*)(pTempBuf + nor_addr), NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write((u32)nor_addr, NVRAM_PAGE_SIZE, (void*)(pTempBuf + nor_addr)) != NVRAM_RESULT_SUCCESS)
{
OS_TPrintf("======= Fail SPI_NvramPageWrite() ======== \n");
OS_TPrintf("======= Fail NVRAMi_Write() ======== \n");
result = FALSE;
break;
}
@ -405,7 +406,7 @@ static BOOL WriteNorfirm(char* file_name)
DC_InvalidateRange(pTempBuf, file_size);
// CRCチェックのためNvramからリード
if (kamiNvramRead(0, pTempBuf, file_size ) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Read(0, file_size, pTempBuf ) != NVRAM_RESULT_SUCCESS)
{
OS_Printf("kamiNvramRead ... ERROR!\n");
}

View File

@ -63,7 +63,6 @@ typedef enum KamiCommand
KAMI_TEST_COMMAND,
KAMI_EXE_FORMAT,
KAMI_NAND_IO,
KAMI_NVRAM_IO,
KAMI_MCU_IO,
KAMI_MCU_WRITE_FIRM,
KAMI_ARM7_IO,