mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
再利用しやすいようにコメント追加
Menuに限定しないAPIのMenuを削除 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@60 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
1ae654a35f
commit
bf5462bb6f
@ -31,6 +31,8 @@ extern u32 NAND_FAT_PARTITION_COUNT;
|
||||
|
||||
/*
|
||||
専用DMA関数
|
||||
MI_NDmaライブラリが全然足りないので、APIを追加
|
||||
最終的には標準ライブラリだけで全部できて欲しい
|
||||
*/
|
||||
//---------------- register setting
|
||||
static inline void MIi_SetSrc( u32 ndmaNo, u32 src )
|
||||
@ -94,6 +96,18 @@ extern volatile SDMC_ERR_CODE SDCARD_ErrStatus;
|
||||
extern s16 SDCARD_SDHCFlag; /* SDHCカードフラグ */
|
||||
extern SDPortContext* SDNandContext; /* NAND初期化パラメータ */
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: WaitFifoFull
|
||||
|
||||
Description: waiting to fill the SD FIFO
|
||||
|
||||
SDカードからの読み込みデータがFIFOから読み込める状態になるまで
|
||||
ストールします。
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static inline void WaitFifoFull( void )
|
||||
{
|
||||
while( (*SDIF_CNT & SDIF_CNT_FULL) == 0 )
|
||||
@ -105,6 +119,18 @@ static inline void WaitFifoFull( void )
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: StartToRead
|
||||
|
||||
Description: start to read from SD I/F
|
||||
|
||||
SDカードからの読み込みの開始処理を行います。
|
||||
|
||||
Arguments: block begining sector to transfer
|
||||
count number of setctors to transfer
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void StartToRead(u32 block, u32 count)
|
||||
{
|
||||
*SDIF_FSC = count;
|
||||
@ -125,6 +151,17 @@ static void StartToRead(u32 block, u32 count)
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: StopToRead
|
||||
|
||||
Description: stop to read from SD I/F
|
||||
|
||||
SDカードからの読み込みの完了処理を行います。
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void StopToRead( void )
|
||||
{
|
||||
if( !SD_CheckFPGAReg( SD_STOP,SD_STOP_SEC_ENABLE ) ){
|
||||
@ -153,6 +190,15 @@ static AESCounter aesCounter;
|
||||
|
||||
Description: enable AES data path
|
||||
|
||||
次に読み込むデータがAES暗号化されていることを、外部から
|
||||
IO関数に通知するためのAPIです。
|
||||
|
||||
このAPIを呼び出した直後に読み込むデータのAESの初期値を指定
|
||||
しておけば、以後のシーケンシャルな呼び出しでの初期値は自動
|
||||
計算されます。
|
||||
ランダムアクセスを行う場合は、そのたびにこのAPIを呼び出す
|
||||
必要があります。
|
||||
|
||||
Arguments: counter initial counter value
|
||||
|
||||
Returns: None
|
||||
@ -168,6 +214,9 @@ void FATFS_EnableAES( const AESCounter* pCounter )
|
||||
|
||||
Description: bypass AES
|
||||
|
||||
次に読み込むデータがAES暗号化されていないことを、外部から
|
||||
IO関数に通知するためのAPIです。
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
@ -182,6 +231,10 @@ void FATFS_DisableAES( void )
|
||||
|
||||
Description: normal read
|
||||
|
||||
普通にNAND/SDカードを読み込みます。
|
||||
|
||||
割り込み禁止状態で高速に動作する仕様になっています。
|
||||
|
||||
Arguments: block: source sector number in NAND
|
||||
dest: dest address (4 bytes alignment)
|
||||
count: sectors to transfer
|
||||
@ -205,6 +258,12 @@ static u16 ReadNormal(u32 block, void *dest, u16 count)
|
||||
|
||||
Description: AES read
|
||||
|
||||
AESをかけながらNAND/SDカードを読み込みます。
|
||||
AESの鍵の設定はあらかじめ行っておく必要があります。
|
||||
AESの初期値の設定は、FATFS_EnableAESの引数から計算されます。
|
||||
|
||||
割り込み禁止状態で高速に動作する仕様になっています。
|
||||
|
||||
Arguments: block: source sector number in NAND
|
||||
dest: dest address (4 bytes alignment)
|
||||
count: sectors to transfer
|
||||
@ -272,6 +331,10 @@ err:
|
||||
|
||||
Description: 上位層からのセクタリード/ライト要求を受ける
|
||||
|
||||
Readに対してのみ、独自の関数を使用するドライバのIO関数です。
|
||||
AESの有無の判定は断片化時に未検証です。
|
||||
(間に論理領域の読み込みが挟まる可能性があるかも)
|
||||
|
||||
Arguments: driveno : ドライブ番号
|
||||
block : 開始ブロック番号
|
||||
buffer :
|
||||
@ -307,6 +370,8 @@ static BOOL nandRtfsIoFirm( int driveno, u32 block, void* buffer, u16 count, BOO
|
||||
|
||||
Description: 上位層からのセクタリード/ライト要求を受ける
|
||||
|
||||
Readに対してのみ、独自の関数を使用するドライバのIO関数です。
|
||||
|
||||
Arguments: driveno : ドライブ番号
|
||||
block : 開始ブロック番号
|
||||
buffer :
|
||||
@ -342,6 +407,8 @@ static BOOL sdmcRtfsIoFirm( int driveno, u32 block, void* buffer, u16 count, BOO
|
||||
|
||||
Description: sdmcドライバをドライブに割り当てる
|
||||
|
||||
独自のIO関数を使用するように初期化します。
|
||||
|
||||
Arguments: driveno : ドライブ番号
|
||||
|
||||
Returns:
|
||||
@ -395,6 +462,8 @@ static BOOL nandRtfsAttachFirm( int driveno, int partition_no)
|
||||
|
||||
Description: sdmcドライバをドライブに割り当てる
|
||||
|
||||
独自のIO関数を使用するように初期化します。
|
||||
|
||||
Arguments: driveno : ドライブ番号
|
||||
|
||||
Returns:
|
||||
@ -426,7 +495,14 @@ static BOOL sdmcRtfsAttachFirm( int driveno)
|
||||
|
||||
Description: init file system
|
||||
|
||||
Arguments: None
|
||||
FATFSを初期化します。
|
||||
標準のFATFS_Initの使用しない部分を省略しているだけです。
|
||||
以前のNANDコンテキストが残っているなら、初期化時間を著しく
|
||||
短縮できます。
|
||||
FATFS用のメモリヒープ(OS_ARENA_MAIN_SUBPRIVの関連とヒープ)は
|
||||
あらかじめ確保しておいてください。
|
||||
|
||||
Arguments: nandContext context of nand driver's previous life
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
@ -452,9 +528,15 @@ BOOL FATFS_InitFIRM( void* nandContext )
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FATFS_MountDriveFirm
|
||||
|
||||
Description: mount nand partition
|
||||
Description: mount specified partition
|
||||
|
||||
Arguments: None
|
||||
指定したデバイスの指定したパーティションを指定したドライブに
|
||||
マウントします。NANDまたはSDカードのみ対応しています。
|
||||
このAPIでマウントした場合、独自のIO関数を使用するようになります。
|
||||
|
||||
Arguments: driveno drive number "A:" is 0
|
||||
media media type
|
||||
partition_no pertition number
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -22,6 +22,25 @@
|
||||
#include <rtfs.h>
|
||||
#include <devices/sdif_reg.h>
|
||||
|
||||
/*
|
||||
PROFILE_ENABLE を定義するとある程度のパフォーマンスチェックができます。
|
||||
利用するためには、main.cかどこかに、u32 profile[256]; u32 pf_cnt; を
|
||||
定義する必要があります。
|
||||
*/
|
||||
//#define PROFILE_ENABLE
|
||||
|
||||
#ifdef SDK_FINALROM // FINALROMで無効化
|
||||
#undef PROFILE_ENABLE
|
||||
#endif
|
||||
|
||||
#ifdef PROFILE_ENABLE
|
||||
#define PROFILE_PXI_SEND 1000000000
|
||||
#define PROFILE_PXI_RECV 2000000000
|
||||
extern u32 profile[];
|
||||
extern u32 pf_cnt;
|
||||
#endif
|
||||
|
||||
|
||||
#define PXI_FIFO_TAG_DATA PXI_FIFO_TAG_USER_0
|
||||
|
||||
static ROM_Header* const rh= (ROM_Header*)(HW_MAIN_MEM_SYSTEM_END - 0x2000);
|
||||
@ -31,6 +50,10 @@ static int menu_fd = -1;
|
||||
Name: FATFS_OpenRecentMenu
|
||||
|
||||
Description: open recent menu file
|
||||
システムメニューのファイルを特定し、オープンし、ファイルIDを
|
||||
menu_fdにセットします。
|
||||
最終的には、固定のタイトルメタデータを読み込み、eTicketの処理
|
||||
をして、システムメニューのファイルを特定することになる予定。
|
||||
|
||||
Arguments: driveno drive number ('A' is 0)
|
||||
|
||||
@ -53,15 +76,17 @@ BOOL FATFS_OpenRecentMenu( int driveno )
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FATFS_OpenSpecifiedMenu
|
||||
Name: FATFS_OpenSpecifiedSrl
|
||||
|
||||
Description: open specified menu file
|
||||
|
||||
任意のファイルをオープンし、ファイルIDをmenu_fdにセットします。
|
||||
|
||||
Arguments: menufile target filename
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL FATFS_OpenSpecifiedMenu( const char* menufile )
|
||||
BOOL FATFS_OpenSpecifiedSrl( const char* menufile )
|
||||
{
|
||||
menu_fd = po_open((u8*)menufile, PO_BINARY, 0);
|
||||
if (menu_fd < 0)
|
||||
@ -74,13 +99,36 @@ BOOL FATFS_OpenSpecifiedMenu( const char* menufile )
|
||||
#define HEADER_SIZE 0x1000
|
||||
#define AUTH_SIZE ROM_HEADER_SIGN_TARGET_SIZE
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
#define PROFILE_PXI_SEND 1000000000
|
||||
#define PROFILE_PXI_RECV 2000000000
|
||||
extern u32 profile[];
|
||||
extern u32 pf_cnt;
|
||||
#endif
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FATFS_LoadBuffer
|
||||
|
||||
Description: load data and pass to ARM9 via WRAM[B]
|
||||
|
||||
LoadBufferメカニズムで、FAT中のファイルの内容をARM9に転送します。
|
||||
|
||||
[LoadBufferメカニズム]
|
||||
WRAM[B]を利用して、ARM7,ARM9間のデータ転送を行います。
|
||||
WRAM[B]の各スロットをバケツリレー方式で渡します。
|
||||
1スロット分のデータまたは全データが格納できたとき、ARM9へ
|
||||
FIRM_PXI_ID_LOAD_PIRIODを送信します。
|
||||
データ残がある場合は次のスロットの処理に移ります。
|
||||
2回目以降の呼び出しでは、前回最後のスロットの続きから使用します。
|
||||
使用したいスロットがARM9側に割り当てられているときは、ARM7側に
|
||||
なるまでストールします。
|
||||
|
||||
[使用条件]
|
||||
WRAM[B]をロックせず、初期状態としてARM7側に倒しておくこと。
|
||||
|
||||
[注意点]
|
||||
offsetとsizeはARM9に通知されません。別の経路で同期を取ってください。
|
||||
SRLファイルを読み込む場合は、互いにROMヘッダを参照できれば十分です。
|
||||
(ROMヘッダ部分は元から知っているはず)
|
||||
|
||||
Arguments: offset offset of the file to load (512 bytes alignment)
|
||||
size size to load
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static BOOL FATFS_LoadBuffer(u32 offset, u32 size)
|
||||
{
|
||||
u8* base = (u8*)HW_FIRM_LOAD_BUFFER_BASE;
|
||||
@ -91,7 +139,7 @@ static BOOL FATFS_LoadBuffer(u32 offset, u32 size)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// x2: after Seek
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
@ -104,7 +152,7 @@ OS_TPrintf("%s: dest=%X, unit=%X\n", __func__, dest, unit);
|
||||
while (MI_GetWramBankMaster_B(count) != MI_WRAM_ARM7) // waiting to be master
|
||||
{
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// x3...: after to wait ARM9
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
@ -112,7 +160,7 @@ OS_TPrintf("%s: dest=%X, unit=%X\n", __func__, dest, unit);
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// x4...: before PXI
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_PIRIOD; // checkpoint
|
||||
@ -127,7 +175,16 @@ OS_TPrintf("%s: dest=%X, unit=%X\n", __func__, dest, unit);
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FATFS_LoadHeader
|
||||
|
||||
Description: load menu header
|
||||
Description: load header
|
||||
|
||||
SRLのROMヘッダ部分を読み込み、ARM9に渡します。
|
||||
送信前に、ARM9へ FIRM_PXI_ID_LOAD_HEADER を送信します。
|
||||
送信後、ARM9から FIRM_PXI_ID_AUTH_HEADER を受信します。
|
||||
この時点で、メインメモリの所定の位置にROMヘッダが格納されたと
|
||||
想定します。
|
||||
問題なければ、seedデータを16バイト受信します。
|
||||
受け取ったseedはSeedAとKeyCに設定されます。
|
||||
makerom.TWLまたはIPLの仕様に依存します。
|
||||
|
||||
Arguments: None
|
||||
|
||||
@ -141,7 +198,7 @@ BOOL FATFS_LoadHeader( void )
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 10: before PXI
|
||||
pf_cnt = 10;
|
||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_HEADER; // checkpoint
|
||||
@ -151,12 +208,12 @@ BOOL FATFS_LoadHeader( void )
|
||||
PXI_NotifyID( FIRM_PXI_ID_LOAD_HEADER );
|
||||
FATFS_DisableAES();
|
||||
if (!FATFS_LoadBuffer(0, AUTH_SIZE) ||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 12: after to load half
|
||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||
#endif
|
||||
!FATFS_LoadBuffer(AUTH_SIZE, HEADER_SIZE - AUTH_SIZE) ||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 1x: after to load remain
|
||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||
#endif
|
||||
@ -164,7 +221,7 @@ BOOL FATFS_LoadHeader( void )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 1x: after PXI
|
||||
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_HEADER; // checkpoint
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -195,6 +252,9 @@ BOOL FATFS_LoadHeader( void )
|
||||
|
||||
Description: get counter
|
||||
|
||||
offsetに対応したAESのカウンタ値を計算します。
|
||||
makerom.TWL内のコードに依存します。
|
||||
|
||||
Arguments: offset offset from head of ROM_Header
|
||||
|
||||
Returns: counter
|
||||
@ -213,6 +273,17 @@ static AESCounter* FATFSi_GetCounter( u32 offset )
|
||||
|
||||
Description: setup whiere to use AES
|
||||
|
||||
AES暗号化されたデータを読み込むためのセットアップを行います。
|
||||
fatfs_sdmc.cのドライバを使用していることが条件となります。
|
||||
(TwlSDK標準で行う場合は、その仕様に合わせて修正が必要!)
|
||||
|
||||
このAPIを呼び出す前に、メインメモリの所定の位置にROMヘッダが
|
||||
格納されている必要があります。
|
||||
|
||||
鍵の選択も行っていますが、鍵の設定は別の場所で行っておく
|
||||
必要があります。
|
||||
makerom.TWLまたはIPLの使用に依存します。
|
||||
|
||||
Arguments: offset offset of region from head of ROM_Header
|
||||
size size of region
|
||||
|
||||
@ -243,20 +314,28 @@ static void FATFSi_SetupAES( u32 offset, u32 size )
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FATFS_LoadMenu
|
||||
Name: FATFS_LoadStatic
|
||||
|
||||
Description: load menu binary
|
||||
Description: load static binary
|
||||
|
||||
ARM9/ARM7のStaticおよびLTD Staticを読み込みます。
|
||||
送信前に、ARM9へFIRM_PXI_ID_LOAD_*_STATICを送信します。
|
||||
送信後は、ARM9からFIRM_PXI_ID_AUTH_*_STATICを受信します。
|
||||
サイズが0の場合は、そのパートのPXI通信すら行いません。
|
||||
|
||||
このAPIを呼び出す前に、メインメモリの所定の位置にROMヘッダが
|
||||
格納されている必要があります。
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE if success
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL FATFS_LoadMenu( void )
|
||||
BOOL FATFS_LoadStatic( void )
|
||||
{
|
||||
// load ARM9 static region without AES
|
||||
if ( rh->s.main_size > 0 )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 30: before PXI
|
||||
pf_cnt = 30;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -269,7 +348,7 @@ BOOL FATFS_LoadMenu( void )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 3x: after PXI
|
||||
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM9_STATIC; // checkpoint
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -278,7 +357,7 @@ BOOL FATFS_LoadMenu( void )
|
||||
// load ARM7 static region without AES
|
||||
if ( rh->s.sub_size > 0 )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 50: before PXI
|
||||
pf_cnt = 50;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -291,7 +370,7 @@ BOOL FATFS_LoadMenu( void )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 5x: after PXI
|
||||
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM7_STATIC; // checkpoint
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -300,7 +379,7 @@ BOOL FATFS_LoadMenu( void )
|
||||
// load ARM9 extended static region with AES
|
||||
if ( rh->s.main_ltd_size > 0 )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 70: before PXI
|
||||
pf_cnt = 70;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -313,7 +392,7 @@ BOOL FATFS_LoadMenu( void )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 7x: after PXI
|
||||
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC; // checkpoint
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -322,7 +401,7 @@ BOOL FATFS_LoadMenu( void )
|
||||
// load ARM7 extended static region with AES
|
||||
if ( rh->s.sub_ltd_size > 0 )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 90: before PXI
|
||||
pf_cnt = 90;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -335,7 +414,7 @@ BOOL FATFS_LoadMenu( void )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 9x: after PXI
|
||||
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC; // checkpoint
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -345,15 +424,20 @@ BOOL FATFS_LoadMenu( void )
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FATFS_BootMenu
|
||||
Name: FATFS_Boot
|
||||
|
||||
Description: boot menu
|
||||
Description: boot
|
||||
|
||||
ROMヘッダの情報を引数に、OSi_Bootを呼び出すだけです。
|
||||
|
||||
このAPIを呼び出す前に、メインメモリの所定の位置にROMヘッダが
|
||||
格納されている必要があります。
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void FATFS_BootMenu( void )
|
||||
void FATFS_Boot( void )
|
||||
{
|
||||
OSi_Boot( rh->s.sub_entry_address, (MIHeader_WramRegs*)rh->s.main_wram_config_data );
|
||||
}
|
||||
|
||||
@ -19,6 +19,25 @@
|
||||
#include <firm.h>
|
||||
#include <firm/format/format_rom.h>
|
||||
|
||||
/*
|
||||
PROFILE_ENABLE を定義するとある程度のパフォーマンスチェックができます。
|
||||
利用するためには、main.cかどこかに、u32 profile[256]; u32 pf_cnt; を
|
||||
定義する必要があります。
|
||||
*/
|
||||
//#define PROFILE_ENABLE
|
||||
|
||||
#ifdef SDK_FINALROM // FINALROMで無効化
|
||||
#undef PROFILE_ENABLE
|
||||
#endif
|
||||
|
||||
#ifdef PROFILE_ENABLE
|
||||
#define PROFILE_PXI_SEND 1000000000
|
||||
#define PROFILE_PXI_RECV 2000000000
|
||||
extern u32 profile[];
|
||||
extern u32 pf_cnt;
|
||||
#endif
|
||||
|
||||
|
||||
#define PXI_FIFO_TAG_DATA PXI_FIFO_TAG_USER_0
|
||||
|
||||
static ROM_Header* const rh = (ROM_Header*)HW_TWL_ROM_HEADER_BUF;
|
||||
@ -31,6 +50,7 @@ static ROM_Header* const rh = (ROM_Header*)HW_TWL_ROM_HEADER_BUF;
|
||||
|
||||
/*
|
||||
SHA1
|
||||
ほぼMATHライブラリやDGTライブラリと同じだが、システムコールを使っている
|
||||
*/
|
||||
|
||||
typedef struct SHA1_CTX // 実際には、サイズが同じなら中身は何でも良い
|
||||
@ -77,6 +97,7 @@ static inline void SHA1_Calc(u8* md, const void* data, u32 len)
|
||||
|
||||
/*
|
||||
HMAC (SHA1)
|
||||
ほぼMATHライブラリやDGTライブラリと同じだが、システムコールを使っている
|
||||
*/
|
||||
|
||||
#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8)
|
||||
@ -187,6 +208,21 @@ static const u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = {
|
||||
0x87, 0x46, 0x58, 0x24,
|
||||
};
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CheckRomCertificate
|
||||
|
||||
Description: check the certification in the ROM
|
||||
|
||||
ROMヘッダに付加された証明書のチェックを行います。
|
||||
makerom.TWL内のコードに依存します。
|
||||
|
||||
Arguments: pool pointer to the pool info for SVC_DecryptoSign
|
||||
pCert pointer to the certification
|
||||
pCAPubKey pointer to the public key for the certification
|
||||
gameCode initial code
|
||||
|
||||
Returns: TRUE if success
|
||||
*---------------------------------------------------------------------------*/
|
||||
static BOOL CheckRomCertificate( int* pool, const RomCertificate *pCert, const void* pCAPubKey, u32 gameCode )
|
||||
{
|
||||
u8 digest[DIGEST_SIZE_SHA1];
|
||||
@ -219,13 +255,38 @@ static BOOL CheckRomCertificate( int* pool, const RomCertificate *pCert, const v
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
#define PROFILE_PXI_SEND 1000000000
|
||||
#define PROFILE_PXI_RECV 2000000000
|
||||
extern u32 profile[];
|
||||
extern u32 pf_cnt;
|
||||
#endif
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: MI_LoadBuffer
|
||||
|
||||
Description: receive data from ARM7 and store(move) via WRAM[B]
|
||||
|
||||
LoadBufferメカニズムで、ファイルの内容をARM7から受け取ります。
|
||||
引数でSHA1_CTXを指定していた場合、コピーのついでにSHA1の計算も
|
||||
行います。
|
||||
|
||||
[LoadBufferメカニズム]
|
||||
WRAM[B]を利用して、ARM7,ARM9間のデータ転送を行います。
|
||||
WRAM[B]の各スロットをバケツリレー方式で渡します。
|
||||
1スロット分のデータまたは全データが格納されたとき、ARM7から
|
||||
FIRM_PXI_ID_LOAD_PIRIODを受信します。
|
||||
ARM9は受信後にそのスロットの使用権をARM9に変更してデータを
|
||||
取り出し、完了後にメモリをクリアして(セキュリティ)、使用権を
|
||||
ARM7に戻します。
|
||||
|
||||
[使用条件]
|
||||
WRAM[B]をロックせず、初期状態としてARM7側に倒しておくこと。
|
||||
|
||||
[注意点]
|
||||
offsetとsizeはARM7から通知されません。別の経路で同期を取ってください。
|
||||
SRLファイルを読み込む場合は、互いにROMヘッダを参照できれば十分です。
|
||||
(ROMヘッダ部分は元から知っているはず)
|
||||
|
||||
Arguments: dest destination address for received data
|
||||
size size to load
|
||||
ctx context for SHA1 if execute SHA1_Update
|
||||
|
||||
Returns: TRUE if success
|
||||
*---------------------------------------------------------------------------*/
|
||||
static BOOL MI_LoadBuffer(u8* dest, u32 size, SHA1_CTX *ctx)
|
||||
{
|
||||
u8* base = (u8*)HW_FIRM_LOAD_BUFFER_BASE;
|
||||
@ -239,7 +300,7 @@ OS_TPrintf("%s: src=%X, unit=%X\n", __func__, src, unit);
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// x2...: after PXI
|
||||
profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_PIRIOD;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -271,6 +332,23 @@ OS_TPrintf("%s: src=%X, unit=%X\n", __func__, src, unit);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: MI_LoadModule
|
||||
|
||||
Description: receive module from ARM7 and store(move) via WRAM[B]
|
||||
|
||||
MI_LoadBufferの上位APIで、引数にSHA1のハッシュ値を渡すことで
|
||||
SHA1ハッシュチェックを行います。
|
||||
|
||||
すでにハッシュ値が分かっていて、ちょうどSHA1の計算範囲全体を
|
||||
読み込む場合に便利です。
|
||||
|
||||
Arguments: dest destination address for received data
|
||||
size size to load
|
||||
digest digest to compare
|
||||
|
||||
Returns: TRUE if success
|
||||
*---------------------------------------------------------------------------*/
|
||||
static /*inline*/ BOOL MI_LoadModule(void* dest, u32 size, const u8 digest[DIGEST_SIZE_SHA1])
|
||||
{
|
||||
HMAC_CTX ctx;
|
||||
@ -284,7 +362,7 @@ static /*inline*/ BOOL MI_LoadModule(void* dest, u32 size, const u8 digest[DIGES
|
||||
return FALSE;
|
||||
}
|
||||
HMAC_GetHash(&ctx, md);
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// xx: after SHA1
|
||||
profile[pf_cnt++] = (u32)20202020; // checkpoint
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -305,6 +383,14 @@ static /*inline*/ BOOL MI_LoadModule(void* dest, u32 size, const u8 digest[DIGES
|
||||
|
||||
Description: load header
|
||||
|
||||
SRLのROMヘッダ部分をARM7から受け取り、認証します。
|
||||
受信前に、ARM7から FIRM_PXI_ID_LOAD_HEADER を受信します。
|
||||
受信後、認証が通ったならARM7へ FIRM_PXI_ID_AUTH_HEADER を送信
|
||||
します。それ以前に、メインメモリの所定の位置にROMヘッダが格納
|
||||
されていなければなりません。
|
||||
続けて、seedデータを16バイト送信します。
|
||||
makerom.TWLまたはIPLの仕様に依存します。
|
||||
|
||||
Arguments: pool pointer to the pool info for SVC_DecryptoSign
|
||||
rsa_key key address
|
||||
|
||||
@ -320,12 +406,12 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key )
|
||||
|
||||
SHA1_Init(&ctx);
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
pf_cnt = 10;
|
||||
#endif
|
||||
// load header (hash target)
|
||||
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_HEADER ||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 10: after PXI
|
||||
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_HEADER), FALSE) ||
|
||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||
@ -335,7 +421,7 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key )
|
||||
return FALSE;
|
||||
}
|
||||
SHA1_GetHash(&ctx, md);
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 1x: after HMAC
|
||||
profile[pf_cnt++] = (u32)2020202020; // checkpoint
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -365,7 +451,7 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key )
|
||||
result = FALSE;
|
||||
}
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 1x: after RSA, before PXI
|
||||
profile[pf_cnt++] = (u32)128128128; // checkpoint
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -385,26 +471,34 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key )
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: MI_LoadMenu
|
||||
Name: MI_LoadStatic
|
||||
|
||||
Description: load menu program
|
||||
Description: load static binary
|
||||
|
||||
ARM9/ARM7のStaticおよびLTD Staticを受信します。
|
||||
受信前に、ARM7からFIRM_PXI_ID_LOAD_*_STATICを受信します。
|
||||
受信後、認証が通ったならARM7へFIRM_PXI_ID_AUTH_*_STATICを送信
|
||||
します。サイズが0の場合は、そのパートのPXI通信すら行いません。
|
||||
|
||||
このAPIを呼び出す前に、メインメモリの所定の位置にROMヘッダが
|
||||
格納されている必要があります。
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE if success
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL MI_LoadMenu( void )
|
||||
BOOL MI_LoadStatic( void )
|
||||
{
|
||||
// load ARM9 static region
|
||||
if ( rh->s.main_size > 0 )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 30: before PXI
|
||||
pf_cnt = 30;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM9_STATIC ||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 31: after PXI
|
||||
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM9_STATIC), FALSE) ||
|
||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||
@ -413,7 +507,7 @@ BOOL MI_LoadMenu( void )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 3x: after PXI
|
||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM9_STATIC; // checkpoint
|
||||
#endif
|
||||
@ -423,13 +517,13 @@ BOOL MI_LoadMenu( void )
|
||||
// load ARM7 static region
|
||||
if ( rh->s.sub_size > 0 )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 50: before PXI
|
||||
pf_cnt = 50;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM7_STATIC ||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 51: after PXI
|
||||
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM7_STATIC), FALSE) ||
|
||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||
@ -438,7 +532,7 @@ BOOL MI_LoadMenu( void )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 5x: after PXI
|
||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM7_STATIC; // checkpoint
|
||||
#endif
|
||||
@ -448,13 +542,13 @@ BOOL MI_LoadMenu( void )
|
||||
// load ARM9 extended static region
|
||||
if ( rh->s.main_ltd_size > 0 )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 70: before PXI
|
||||
pf_cnt = 70;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC ||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 71: after PXI
|
||||
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC), FALSE) ||
|
||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||
@ -463,7 +557,7 @@ BOOL MI_LoadMenu( void )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 7x: after PXI
|
||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC; // checkpoint
|
||||
#endif
|
||||
@ -472,13 +566,13 @@ BOOL MI_LoadMenu( void )
|
||||
// load ARM7 extended static region
|
||||
if ( rh->s.sub_ltd_size > 0 )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 90: before PXI
|
||||
pf_cnt = 90;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC ||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 91: after PXI
|
||||
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC), FALSE) ||
|
||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||
@ -487,7 +581,7 @@ BOOL MI_LoadMenu( void )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 9x: before PXI
|
||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC; // checkpoint
|
||||
#endif
|
||||
@ -497,15 +591,20 @@ BOOL MI_LoadMenu( void )
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: MI_BootMenu
|
||||
Name: MI_Boot
|
||||
|
||||
Description: boot menu
|
||||
Description: boot
|
||||
|
||||
ROMヘッダの情報を引数に、OSi_Bootを呼び出すだけです。
|
||||
|
||||
このAPIを呼び出す前に、メインメモリの所定の位置にROMヘッダが
|
||||
格納されている必要があります。
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void MI_BootMenu( void )
|
||||
void MI_Boot( void )
|
||||
{
|
||||
OSi_Boot( rh->s.main_entry_address, (MIHeader_WramRegs*)rh->s.main_wram_config_data );
|
||||
}
|
||||
|
||||
@ -154,16 +154,16 @@ void TwlSpMain( void )
|
||||
#endif
|
||||
OS_SetDebugLED(++step);
|
||||
|
||||
if ( FATFS_LoadHeader() && FATFS_LoadMenu() )
|
||||
if ( FATFS_LoadHeader() && FATFS_LoadStatic() )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
// 127: before BootMenu
|
||||
// 127: before Boot
|
||||
pf_cnt = PRFILE_MAX-1;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
OS_SetDebugLED(++step);
|
||||
|
||||
FATFS_BootMenu();
|
||||
FATFS_Boot();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,9 +25,17 @@ static u8 acHeap[RSA_HEAP_SIZE] __attribute__ ((aligned (32)));
|
||||
static int acPool[3];
|
||||
|
||||
/*
|
||||
Profile
|
||||
PROFILE_ENABLE を定義するとある程度のパフォーマンスチェックができます。
|
||||
利用するためには、main.cかどこかに、u32 profile[256]; u32 pf_cnt = 0; を
|
||||
定義する必要があります。
|
||||
*/
|
||||
#ifndef SDK_FINALROM
|
||||
#define PROFILE_ENABLE
|
||||
|
||||
#ifdef SDK_FINALROM // FINALROMで無効化
|
||||
#undef PROFILE_ENABLE
|
||||
#endif
|
||||
|
||||
#ifdef PROFILE_ENABLE
|
||||
#define PRFILE_MAX 128
|
||||
u32 profile[PRFILE_MAX];
|
||||
u32 pf_cnt = 0;
|
||||
@ -89,13 +97,13 @@ void TwlMain( void )
|
||||
{
|
||||
PreInit();
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 0: before PXI
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
|
||||
OS_InitFIRM();
|
||||
#ifndef SDK_FINALROM
|
||||
#ifdef PROFILE_ENABLE
|
||||
OS_InitTick();
|
||||
// 1: after PXI
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -104,15 +112,15 @@ void TwlMain( void )
|
||||
SVC_InitSignHeap( acPool, acHeap, sizeof(acHeap) );
|
||||
|
||||
// load menu
|
||||
if ( MI_LoadHeader( acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadMenu() )
|
||||
if ( MI_LoadHeader( acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadStatic() )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
// 127: before BootMenu
|
||||
#ifdef PROFILE_ENABLE
|
||||
// 127: before Boot
|
||||
pf_cnt = PRFILE_MAX-1;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
|
||||
MI_BootMenu();
|
||||
MI_Boot();
|
||||
}
|
||||
|
||||
EraseAll();
|
||||
|
||||
@ -148,19 +148,19 @@ void TwlSpMain( void )
|
||||
switch ( PAD_Read() & PAD_KEYPORT_MASK )
|
||||
{
|
||||
case 0:
|
||||
result = FATFS_OpenSpecifiedMenu( MENU_FILE );
|
||||
result = FATFS_OpenSpecifiedSrl( MENU_FILE );
|
||||
break;
|
||||
case PAD_BUTTON_A:
|
||||
result = FATFS_OpenSpecifiedMenu( MENU_FILE_A );
|
||||
result = FATFS_OpenSpecifiedSrl( MENU_FILE_A );
|
||||
break;
|
||||
case PAD_BUTTON_B:
|
||||
result = FATFS_OpenSpecifiedMenu( MENU_FILE_B );
|
||||
result = FATFS_OpenSpecifiedSrl( MENU_FILE_B );
|
||||
break;
|
||||
case PAD_BUTTON_L:
|
||||
result = FATFS_OpenSpecifiedMenu( MENU_FILE_L );
|
||||
result = FATFS_OpenSpecifiedSrl( MENU_FILE_L );
|
||||
break;
|
||||
case PAD_BUTTON_R:
|
||||
result = FATFS_OpenSpecifiedMenu( MENU_FILE_R );
|
||||
result = FATFS_OpenSpecifiedSrl( MENU_FILE_R );
|
||||
break;
|
||||
default:
|
||||
OS_SetDebugLED( (u8)(PAD_Read() & PAD_KEYPORT_MASK) );
|
||||
@ -176,16 +176,16 @@ void TwlSpMain( void )
|
||||
#endif
|
||||
OS_SetDebugLED(++step);
|
||||
|
||||
if ( FATFS_LoadHeader() && FATFS_LoadMenu() )
|
||||
if ( FATFS_LoadHeader() && FATFS_LoadStatic() )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
// 127: before BootMenu
|
||||
// 127: before Boot
|
||||
pf_cnt = PRFILE_MAX-1;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
OS_SetDebugLED(++step);
|
||||
|
||||
FATFS_BootMenu();
|
||||
FATFS_Boot();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -114,15 +114,15 @@ void TwlMain( void )
|
||||
SVC_InitSignHeap( acPool, acHeap, sizeof(acHeap) );
|
||||
|
||||
// load menu
|
||||
if ( MI_LoadHeader( acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadMenu() )
|
||||
if ( MI_LoadHeader( acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadStatic() )
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
// 127: before BootMenu
|
||||
// 127: before Boot
|
||||
pf_cnt = PRFILE_MAX-1;
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
|
||||
MI_BootMenu();
|
||||
MI_Boot();
|
||||
}
|
||||
|
||||
EraseAll();
|
||||
|
||||
@ -36,7 +36,7 @@ extern "C" {
|
||||
BOOL FATFS_OpenRecentMenu( int driveno );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FATFS_OpenSpecifiedMenu
|
||||
Name: FATFS_OpenSpecifiedSrl
|
||||
|
||||
Description: open specified menu file
|
||||
|
||||
@ -44,7 +44,7 @@ BOOL FATFS_OpenRecentMenu( int driveno );
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL FATFS_OpenSpecifiedMenu( const char* menufile );
|
||||
BOOL FATFS_OpenSpecifiedSrl( const char* menufile );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FATFS_LoadHeader
|
||||
@ -58,26 +58,26 @@ BOOL FATFS_OpenSpecifiedMenu( const char* menufile );
|
||||
BOOL FATFS_LoadHeader( void );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FATFS_LoadMenu
|
||||
Name: FATFS_LoadStatic
|
||||
|
||||
Description: load menu binary
|
||||
Description: load static binary
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE if success
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL FATFS_LoadMenu( void );
|
||||
BOOL FATFS_LoadStatic( void );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: FATFS_BootMenu
|
||||
Name: FATFS_Boot
|
||||
|
||||
Description: boot menu
|
||||
Description: boot
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void FATFS_BootMenu( void );
|
||||
void FATFS_Boot( void );
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@ -37,26 +37,26 @@ extern "C" {
|
||||
BOOL MI_LoadHeader( int* pool, const void* rsa_key );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: MI_LoadMenu
|
||||
Name: MI_LoadStatic
|
||||
|
||||
Description: load menu program
|
||||
Description: load static binary
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE if success
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL MI_LoadMenu( void );
|
||||
BOOL MI_LoadStatic( void );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: MI_BootMenu
|
||||
Name: MI_Boot
|
||||
|
||||
Description: boot menu
|
||||
Description: boot
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void MI_BootMenu( void );
|
||||
void MI_Boot( void );
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user