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関数
|
専用DMA関数
|
||||||
|
MI_NDmaライブラリが全然足りないので、APIを追加
|
||||||
|
最終的には標準ライブラリだけで全部できて欲しい
|
||||||
*/
|
*/
|
||||||
//---------------- register setting
|
//---------------- register setting
|
||||||
static inline void MIi_SetSrc( u32 ndmaNo, u32 src )
|
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 s16 SDCARD_SDHCFlag; /* SDHCカードフラグ */
|
||||||
extern SDPortContext* SDNandContext; /* NAND初期化パラメータ */
|
extern SDPortContext* SDNandContext; /* NAND初期化パラメータ */
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: WaitFifoFull
|
||||||
|
|
||||||
|
Description: waiting to fill the SD FIFO
|
||||||
|
|
||||||
|
SDカードからの読み込みデータがFIFOから読み込める状態になるまで
|
||||||
|
ストールします。
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
static inline void WaitFifoFull( void )
|
static inline void WaitFifoFull( void )
|
||||||
{
|
{
|
||||||
while( (*SDIF_CNT & SDIF_CNT_FULL) == 0 )
|
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)
|
static void StartToRead(u32 block, u32 count)
|
||||||
{
|
{
|
||||||
*SDIF_FSC = 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 )
|
static void StopToRead( void )
|
||||||
{
|
{
|
||||||
if( !SD_CheckFPGAReg( SD_STOP,SD_STOP_SEC_ENABLE ) ){
|
if( !SD_CheckFPGAReg( SD_STOP,SD_STOP_SEC_ENABLE ) ){
|
||||||
@ -153,6 +190,15 @@ static AESCounter aesCounter;
|
|||||||
|
|
||||||
Description: enable AES data path
|
Description: enable AES data path
|
||||||
|
|
||||||
|
次に読み込むデータがAES暗号化されていることを、外部から
|
||||||
|
IO関数に通知するためのAPIです。
|
||||||
|
|
||||||
|
このAPIを呼び出した直後に読み込むデータのAESの初期値を指定
|
||||||
|
しておけば、以後のシーケンシャルな呼び出しでの初期値は自動
|
||||||
|
計算されます。
|
||||||
|
ランダムアクセスを行う場合は、そのたびにこのAPIを呼び出す
|
||||||
|
必要があります。
|
||||||
|
|
||||||
Arguments: counter initial counter value
|
Arguments: counter initial counter value
|
||||||
|
|
||||||
Returns: None
|
Returns: None
|
||||||
@ -168,6 +214,9 @@ void FATFS_EnableAES( const AESCounter* pCounter )
|
|||||||
|
|
||||||
Description: bypass AES
|
Description: bypass AES
|
||||||
|
|
||||||
|
次に読み込むデータがAES暗号化されていないことを、外部から
|
||||||
|
IO関数に通知するためのAPIです。
|
||||||
|
|
||||||
Arguments: None
|
Arguments: None
|
||||||
|
|
||||||
Returns: None
|
Returns: None
|
||||||
@ -182,6 +231,10 @@ void FATFS_DisableAES( void )
|
|||||||
|
|
||||||
Description: normal read
|
Description: normal read
|
||||||
|
|
||||||
|
普通にNAND/SDカードを読み込みます。
|
||||||
|
|
||||||
|
割り込み禁止状態で高速に動作する仕様になっています。
|
||||||
|
|
||||||
Arguments: block: source sector number in NAND
|
Arguments: block: source sector number in NAND
|
||||||
dest: dest address (4 bytes alignment)
|
dest: dest address (4 bytes alignment)
|
||||||
count: sectors to transfer
|
count: sectors to transfer
|
||||||
@ -205,6 +258,12 @@ static u16 ReadNormal(u32 block, void *dest, u16 count)
|
|||||||
|
|
||||||
Description: AES read
|
Description: AES read
|
||||||
|
|
||||||
|
AESをかけながらNAND/SDカードを読み込みます。
|
||||||
|
AESの鍵の設定はあらかじめ行っておく必要があります。
|
||||||
|
AESの初期値の設定は、FATFS_EnableAESの引数から計算されます。
|
||||||
|
|
||||||
|
割り込み禁止状態で高速に動作する仕様になっています。
|
||||||
|
|
||||||
Arguments: block: source sector number in NAND
|
Arguments: block: source sector number in NAND
|
||||||
dest: dest address (4 bytes alignment)
|
dest: dest address (4 bytes alignment)
|
||||||
count: sectors to transfer
|
count: sectors to transfer
|
||||||
@ -272,6 +331,10 @@ err:
|
|||||||
|
|
||||||
Description: 上位層からのセクタリード/ライト要求を受ける
|
Description: 上位層からのセクタリード/ライト要求を受ける
|
||||||
|
|
||||||
|
Readに対してのみ、独自の関数を使用するドライバのIO関数です。
|
||||||
|
AESの有無の判定は断片化時に未検証です。
|
||||||
|
(間に論理領域の読み込みが挟まる可能性があるかも)
|
||||||
|
|
||||||
Arguments: driveno : ドライブ番号
|
Arguments: driveno : ドライブ番号
|
||||||
block : 開始ブロック番号
|
block : 開始ブロック番号
|
||||||
buffer :
|
buffer :
|
||||||
@ -307,6 +370,8 @@ static BOOL nandRtfsIoFirm( int driveno, u32 block, void* buffer, u16 count, BOO
|
|||||||
|
|
||||||
Description: 上位層からのセクタリード/ライト要求を受ける
|
Description: 上位層からのセクタリード/ライト要求を受ける
|
||||||
|
|
||||||
|
Readに対してのみ、独自の関数を使用するドライバのIO関数です。
|
||||||
|
|
||||||
Arguments: driveno : ドライブ番号
|
Arguments: driveno : ドライブ番号
|
||||||
block : 開始ブロック番号
|
block : 開始ブロック番号
|
||||||
buffer :
|
buffer :
|
||||||
@ -342,6 +407,8 @@ static BOOL sdmcRtfsIoFirm( int driveno, u32 block, void* buffer, u16 count, BOO
|
|||||||
|
|
||||||
Description: sdmcドライバをドライブに割り当てる
|
Description: sdmcドライバをドライブに割り当てる
|
||||||
|
|
||||||
|
独自のIO関数を使用するように初期化します。
|
||||||
|
|
||||||
Arguments: driveno : ドライブ番号
|
Arguments: driveno : ドライブ番号
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
@ -395,6 +462,8 @@ static BOOL nandRtfsAttachFirm( int driveno, int partition_no)
|
|||||||
|
|
||||||
Description: sdmcドライバをドライブに割り当てる
|
Description: sdmcドライバをドライブに割り当てる
|
||||||
|
|
||||||
|
独自のIO関数を使用するように初期化します。
|
||||||
|
|
||||||
Arguments: driveno : ドライブ番号
|
Arguments: driveno : ドライブ番号
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
@ -426,7 +495,14 @@ static BOOL sdmcRtfsAttachFirm( int driveno)
|
|||||||
|
|
||||||
Description: init file system
|
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
|
Returns: None
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
@ -452,9 +528,15 @@ BOOL FATFS_InitFIRM( void* nandContext )
|
|||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: FATFS_MountDriveFirm
|
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
|
Returns: None
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -22,6 +22,25 @@
|
|||||||
#include <rtfs.h>
|
#include <rtfs.h>
|
||||||
#include <devices/sdif_reg.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
|
#define PXI_FIFO_TAG_DATA PXI_FIFO_TAG_USER_0
|
||||||
|
|
||||||
static ROM_Header* const rh= (ROM_Header*)(HW_MAIN_MEM_SYSTEM_END - 0x2000);
|
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
|
Name: FATFS_OpenRecentMenu
|
||||||
|
|
||||||
Description: open recent menu file
|
Description: open recent menu file
|
||||||
|
システムメニューのファイルを特定し、オープンし、ファイルIDを
|
||||||
|
menu_fdにセットします。
|
||||||
|
最終的には、固定のタイトルメタデータを読み込み、eTicketの処理
|
||||||
|
をして、システムメニューのファイルを特定することになる予定。
|
||||||
|
|
||||||
Arguments: driveno drive number ('A' is 0)
|
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
|
Description: open specified menu file
|
||||||
|
|
||||||
|
任意のファイルをオープンし、ファイルIDをmenu_fdにセットします。
|
||||||
|
|
||||||
Arguments: menufile target filename
|
Arguments: menufile target filename
|
||||||
|
|
||||||
Returns: None
|
Returns: None
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
BOOL FATFS_OpenSpecifiedMenu( const char* menufile )
|
BOOL FATFS_OpenSpecifiedSrl( const char* menufile )
|
||||||
{
|
{
|
||||||
menu_fd = po_open((u8*)menufile, PO_BINARY, 0);
|
menu_fd = po_open((u8*)menufile, PO_BINARY, 0);
|
||||||
if (menu_fd < 0)
|
if (menu_fd < 0)
|
||||||
@ -74,13 +99,36 @@ BOOL FATFS_OpenSpecifiedMenu( const char* menufile )
|
|||||||
#define HEADER_SIZE 0x1000
|
#define HEADER_SIZE 0x1000
|
||||||
#define AUTH_SIZE ROM_HEADER_SIGN_TARGET_SIZE
|
#define AUTH_SIZE ROM_HEADER_SIGN_TARGET_SIZE
|
||||||
|
|
||||||
#ifndef SDK_FINALROM
|
/*---------------------------------------------------------------------------*
|
||||||
#define PROFILE_PXI_SEND 1000000000
|
Name: FATFS_LoadBuffer
|
||||||
#define PROFILE_PXI_RECV 2000000000
|
|
||||||
extern u32 profile[];
|
|
||||||
extern u32 pf_cnt;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
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)
|
static BOOL FATFS_LoadBuffer(u32 offset, u32 size)
|
||||||
{
|
{
|
||||||
u8* base = (u8*)HW_FIRM_LOAD_BUFFER_BASE;
|
u8* base = (u8*)HW_FIRM_LOAD_BUFFER_BASE;
|
||||||
@ -91,7 +139,7 @@ static BOOL FATFS_LoadBuffer(u32 offset, u32 size)
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// x2: after Seek
|
// x2: after Seek
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#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
|
while (MI_GetWramBankMaster_B(count) != MI_WRAM_ARM7) // waiting to be master
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// x3...: after to wait ARM9
|
// x3...: after to wait ARM9
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
@ -112,7 +160,7 @@ OS_TPrintf("%s: dest=%X, unit=%X\n", __func__, dest, unit);
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// x4...: before PXI
|
// x4...: before PXI
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_PIRIOD; // checkpoint
|
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
|
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
|
Arguments: None
|
||||||
|
|
||||||
@ -141,7 +198,7 @@ BOOL FATFS_LoadHeader( void )
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 10: before PXI
|
// 10: before PXI
|
||||||
pf_cnt = 10;
|
pf_cnt = 10;
|
||||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_HEADER; // checkpoint
|
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 );
|
PXI_NotifyID( FIRM_PXI_ID_LOAD_HEADER );
|
||||||
FATFS_DisableAES();
|
FATFS_DisableAES();
|
||||||
if (!FATFS_LoadBuffer(0, AUTH_SIZE) ||
|
if (!FATFS_LoadBuffer(0, AUTH_SIZE) ||
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 12: after to load half
|
// 12: after to load half
|
||||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||||
#endif
|
#endif
|
||||||
!FATFS_LoadBuffer(AUTH_SIZE, HEADER_SIZE - AUTH_SIZE) ||
|
!FATFS_LoadBuffer(AUTH_SIZE, HEADER_SIZE - AUTH_SIZE) ||
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 1x: after to load remain
|
// 1x: after to load remain
|
||||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||||
#endif
|
#endif
|
||||||
@ -164,7 +221,7 @@ BOOL FATFS_LoadHeader( void )
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 1x: after PXI
|
// 1x: after PXI
|
||||||
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_HEADER; // checkpoint
|
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_HEADER; // checkpoint
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
@ -195,6 +252,9 @@ BOOL FATFS_LoadHeader( void )
|
|||||||
|
|
||||||
Description: get counter
|
Description: get counter
|
||||||
|
|
||||||
|
offsetに対応したAESのカウンタ値を計算します。
|
||||||
|
makerom.TWL内のコードに依存します。
|
||||||
|
|
||||||
Arguments: offset offset from head of ROM_Header
|
Arguments: offset offset from head of ROM_Header
|
||||||
|
|
||||||
Returns: counter
|
Returns: counter
|
||||||
@ -213,6 +273,17 @@ static AESCounter* FATFSi_GetCounter( u32 offset )
|
|||||||
|
|
||||||
Description: setup whiere to use AES
|
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
|
Arguments: offset offset of region from head of ROM_Header
|
||||||
size size of region
|
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
|
Arguments: None
|
||||||
|
|
||||||
Returns: TRUE if success
|
Returns: TRUE if success
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
BOOL FATFS_LoadMenu( void )
|
BOOL FATFS_LoadStatic( void )
|
||||||
{
|
{
|
||||||
// load ARM9 static region without AES
|
// load ARM9 static region without AES
|
||||||
if ( rh->s.main_size > 0 )
|
if ( rh->s.main_size > 0 )
|
||||||
{
|
{
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 30: before PXI
|
// 30: before PXI
|
||||||
pf_cnt = 30;
|
pf_cnt = 30;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
@ -269,7 +348,7 @@ BOOL FATFS_LoadMenu( void )
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 3x: after PXI
|
// 3x: after PXI
|
||||||
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM9_STATIC; // checkpoint
|
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM9_STATIC; // checkpoint
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
@ -278,7 +357,7 @@ BOOL FATFS_LoadMenu( void )
|
|||||||
// load ARM7 static region without AES
|
// load ARM7 static region without AES
|
||||||
if ( rh->s.sub_size > 0 )
|
if ( rh->s.sub_size > 0 )
|
||||||
{
|
{
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 50: before PXI
|
// 50: before PXI
|
||||||
pf_cnt = 50;
|
pf_cnt = 50;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
@ -291,7 +370,7 @@ BOOL FATFS_LoadMenu( void )
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 5x: after PXI
|
// 5x: after PXI
|
||||||
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM7_STATIC; // checkpoint
|
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM7_STATIC; // checkpoint
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
@ -300,7 +379,7 @@ BOOL FATFS_LoadMenu( void )
|
|||||||
// load ARM9 extended static region with AES
|
// load ARM9 extended static region with AES
|
||||||
if ( rh->s.main_ltd_size > 0 )
|
if ( rh->s.main_ltd_size > 0 )
|
||||||
{
|
{
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 70: before PXI
|
// 70: before PXI
|
||||||
pf_cnt = 70;
|
pf_cnt = 70;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
@ -313,7 +392,7 @@ BOOL FATFS_LoadMenu( void )
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 7x: after PXI
|
// 7x: after PXI
|
||||||
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC; // checkpoint
|
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC; // checkpoint
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
@ -322,7 +401,7 @@ BOOL FATFS_LoadMenu( void )
|
|||||||
// load ARM7 extended static region with AES
|
// load ARM7 extended static region with AES
|
||||||
if ( rh->s.sub_ltd_size > 0 )
|
if ( rh->s.sub_ltd_size > 0 )
|
||||||
{
|
{
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 90: before PXI
|
// 90: before PXI
|
||||||
pf_cnt = 90;
|
pf_cnt = 90;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
@ -335,7 +414,7 @@ BOOL FATFS_LoadMenu( void )
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 9x: after PXI
|
// 9x: after PXI
|
||||||
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC; // checkpoint
|
profile[pf_cnt++] = (u32)PROFILE_PXI_RECV | FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC; // checkpoint
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
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
|
Arguments: None
|
||||||
|
|
||||||
Returns: 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 );
|
OSi_Boot( rh->s.sub_entry_address, (MIHeader_WramRegs*)rh->s.main_wram_config_data );
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,25 @@
|
|||||||
#include <firm.h>
|
#include <firm.h>
|
||||||
#include <firm/format/format_rom.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
|
#define PXI_FIFO_TAG_DATA PXI_FIFO_TAG_USER_0
|
||||||
|
|
||||||
static ROM_Header* const rh = (ROM_Header*)HW_TWL_ROM_HEADER_BUF;
|
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
|
SHA1
|
||||||
|
ほぼMATHライブラリやDGTライブラリと同じだが、システムコールを使っている
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct SHA1_CTX // 実際には、サイズが同じなら中身は何でも良い
|
typedef struct SHA1_CTX // 実際には、サイズが同じなら中身は何でも良い
|
||||||
@ -77,6 +97,7 @@ static inline void SHA1_Calc(u8* md, const void* data, u32 len)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
HMAC (SHA1)
|
HMAC (SHA1)
|
||||||
|
ほぼMATHライブラリやDGTライブラリと同じだが、システムコールを使っている
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8)
|
#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,
|
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 )
|
static BOOL CheckRomCertificate( int* pool, const RomCertificate *pCert, const void* pCAPubKey, u32 gameCode )
|
||||||
{
|
{
|
||||||
u8 digest[DIGEST_SIZE_SHA1];
|
u8 digest[DIGEST_SIZE_SHA1];
|
||||||
@ -219,13 +255,38 @@ static BOOL CheckRomCertificate( int* pool, const RomCertificate *pCert, const v
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef SDK_FINALROM
|
/*---------------------------------------------------------------------------*
|
||||||
#define PROFILE_PXI_SEND 1000000000
|
Name: MI_LoadBuffer
|
||||||
#define PROFILE_PXI_RECV 2000000000
|
|
||||||
extern u32 profile[];
|
|
||||||
extern u32 pf_cnt;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
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)
|
static BOOL MI_LoadBuffer(u8* dest, u32 size, SHA1_CTX *ctx)
|
||||||
{
|
{
|
||||||
u8* base = (u8*)HW_FIRM_LOAD_BUFFER_BASE;
|
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;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// x2...: after PXI
|
// x2...: after PXI
|
||||||
profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_PIRIOD;
|
profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_PIRIOD;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
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;
|
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])
|
static /*inline*/ BOOL MI_LoadModule(void* dest, u32 size, const u8 digest[DIGEST_SIZE_SHA1])
|
||||||
{
|
{
|
||||||
HMAC_CTX ctx;
|
HMAC_CTX ctx;
|
||||||
@ -284,7 +362,7 @@ static /*inline*/ BOOL MI_LoadModule(void* dest, u32 size, const u8 digest[DIGES
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
HMAC_GetHash(&ctx, md);
|
HMAC_GetHash(&ctx, md);
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// xx: after SHA1
|
// xx: after SHA1
|
||||||
profile[pf_cnt++] = (u32)20202020; // checkpoint
|
profile[pf_cnt++] = (u32)20202020; // checkpoint
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
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
|
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
|
Arguments: pool pointer to the pool info for SVC_DecryptoSign
|
||||||
rsa_key key address
|
rsa_key key address
|
||||||
|
|
||||||
@ -320,12 +406,12 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key )
|
|||||||
|
|
||||||
SHA1_Init(&ctx);
|
SHA1_Init(&ctx);
|
||||||
|
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
pf_cnt = 10;
|
pf_cnt = 10;
|
||||||
#endif
|
#endif
|
||||||
// load header (hash target)
|
// load header (hash target)
|
||||||
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_HEADER ||
|
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_HEADER ||
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 10: after PXI
|
// 10: after PXI
|
||||||
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_HEADER), FALSE) ||
|
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_HEADER), FALSE) ||
|
||||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), 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;
|
return FALSE;
|
||||||
}
|
}
|
||||||
SHA1_GetHash(&ctx, md);
|
SHA1_GetHash(&ctx, md);
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 1x: after HMAC
|
// 1x: after HMAC
|
||||||
profile[pf_cnt++] = (u32)2020202020; // checkpoint
|
profile[pf_cnt++] = (u32)2020202020; // checkpoint
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
@ -365,7 +451,7 @@ BOOL MI_LoadHeader( int* pool, const void* rsa_key )
|
|||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 1x: after RSA, before PXI
|
// 1x: after RSA, before PXI
|
||||||
profile[pf_cnt++] = (u32)128128128; // checkpoint
|
profile[pf_cnt++] = (u32)128128128; // checkpoint
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
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
|
Arguments: None
|
||||||
|
|
||||||
Returns: TRUE if success
|
Returns: TRUE if success
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
BOOL MI_LoadMenu( void )
|
BOOL MI_LoadStatic( void )
|
||||||
{
|
{
|
||||||
// load ARM9 static region
|
// load ARM9 static region
|
||||||
if ( rh->s.main_size > 0 )
|
if ( rh->s.main_size > 0 )
|
||||||
{
|
{
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 30: before PXI
|
// 30: before PXI
|
||||||
pf_cnt = 30;
|
pf_cnt = 30;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM9_STATIC ||
|
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM9_STATIC ||
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 31: after PXI
|
// 31: after PXI
|
||||||
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM9_STATIC), FALSE) ||
|
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM9_STATIC), FALSE) ||
|
||||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||||
@ -413,7 +507,7 @@ BOOL MI_LoadMenu( void )
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 3x: after PXI
|
// 3x: after PXI
|
||||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM9_STATIC; // checkpoint
|
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM9_STATIC; // checkpoint
|
||||||
#endif
|
#endif
|
||||||
@ -423,13 +517,13 @@ BOOL MI_LoadMenu( void )
|
|||||||
// load ARM7 static region
|
// load ARM7 static region
|
||||||
if ( rh->s.sub_size > 0 )
|
if ( rh->s.sub_size > 0 )
|
||||||
{
|
{
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 50: before PXI
|
// 50: before PXI
|
||||||
pf_cnt = 50;
|
pf_cnt = 50;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM7_STATIC ||
|
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM7_STATIC ||
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 51: after PXI
|
// 51: after PXI
|
||||||
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM7_STATIC), FALSE) ||
|
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM7_STATIC), FALSE) ||
|
||||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||||
@ -438,7 +532,7 @@ BOOL MI_LoadMenu( void )
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 5x: after PXI
|
// 5x: after PXI
|
||||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM7_STATIC; // checkpoint
|
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM7_STATIC; // checkpoint
|
||||||
#endif
|
#endif
|
||||||
@ -448,13 +542,13 @@ BOOL MI_LoadMenu( void )
|
|||||||
// load ARM9 extended static region
|
// load ARM9 extended static region
|
||||||
if ( rh->s.main_ltd_size > 0 )
|
if ( rh->s.main_ltd_size > 0 )
|
||||||
{
|
{
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 70: before PXI
|
// 70: before PXI
|
||||||
pf_cnt = 70;
|
pf_cnt = 70;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC ||
|
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC ||
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 71: after PXI
|
// 71: after PXI
|
||||||
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC), FALSE) ||
|
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC), FALSE) ||
|
||||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||||
@ -463,7 +557,7 @@ BOOL MI_LoadMenu( void )
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 7x: after PXI
|
// 7x: after PXI
|
||||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC; // checkpoint
|
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC; // checkpoint
|
||||||
#endif
|
#endif
|
||||||
@ -472,13 +566,13 @@ BOOL MI_LoadMenu( void )
|
|||||||
// load ARM7 extended static region
|
// load ARM7 extended static region
|
||||||
if ( rh->s.sub_ltd_size > 0 )
|
if ( rh->s.sub_ltd_size > 0 )
|
||||||
{
|
{
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 90: before PXI
|
// 90: before PXI
|
||||||
pf_cnt = 90;
|
pf_cnt = 90;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC ||
|
if ( PXI_RecvID() != FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC ||
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 91: after PXI
|
// 91: after PXI
|
||||||
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC), FALSE) ||
|
((profile[pf_cnt++] = PROFILE_PXI_RECV | FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC), FALSE) ||
|
||||||
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
((profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick())), FALSE) ||
|
||||||
@ -487,7 +581,7 @@ BOOL MI_LoadMenu( void )
|
|||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 9x: before PXI
|
// 9x: before PXI
|
||||||
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC; // checkpoint
|
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC; // checkpoint
|
||||||
#endif
|
#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
|
Arguments: None
|
||||||
|
|
||||||
Returns: 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 );
|
OSi_Boot( rh->s.main_entry_address, (MIHeader_WramRegs*)rh->s.main_wram_config_data );
|
||||||
}
|
}
|
||||||
|
|||||||
@ -154,16 +154,16 @@ void TwlSpMain( void )
|
|||||||
#endif
|
#endif
|
||||||
OS_SetDebugLED(++step);
|
OS_SetDebugLED(++step);
|
||||||
|
|
||||||
if ( FATFS_LoadHeader() && FATFS_LoadMenu() )
|
if ( FATFS_LoadHeader() && FATFS_LoadStatic() )
|
||||||
{
|
{
|
||||||
#ifndef SDK_FINALROM
|
#ifndef SDK_FINALROM
|
||||||
// 127: before BootMenu
|
// 127: before Boot
|
||||||
pf_cnt = PRFILE_MAX-1;
|
pf_cnt = PRFILE_MAX-1;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
OS_SetDebugLED(++step);
|
OS_SetDebugLED(++step);
|
||||||
|
|
||||||
FATFS_BootMenu();
|
FATFS_Boot();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,9 +25,17 @@ static u8 acHeap[RSA_HEAP_SIZE] __attribute__ ((aligned (32)));
|
|||||||
static int acPool[3];
|
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
|
#define PRFILE_MAX 128
|
||||||
u32 profile[PRFILE_MAX];
|
u32 profile[PRFILE_MAX];
|
||||||
u32 pf_cnt = 0;
|
u32 pf_cnt = 0;
|
||||||
@ -89,13 +97,13 @@ void TwlMain( void )
|
|||||||
{
|
{
|
||||||
PreInit();
|
PreInit();
|
||||||
|
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
// 0: before PXI
|
// 0: before PXI
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
OS_InitFIRM();
|
OS_InitFIRM();
|
||||||
#ifndef SDK_FINALROM
|
#ifdef PROFILE_ENABLE
|
||||||
OS_InitTick();
|
OS_InitTick();
|
||||||
// 1: after PXI
|
// 1: after PXI
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
@ -104,15 +112,15 @@ void TwlMain( void )
|
|||||||
SVC_InitSignHeap( acPool, acHeap, sizeof(acHeap) );
|
SVC_InitSignHeap( acPool, acHeap, sizeof(acHeap) );
|
||||||
|
|
||||||
// load menu
|
// 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
|
#ifdef PROFILE_ENABLE
|
||||||
// 127: before BootMenu
|
// 127: before Boot
|
||||||
pf_cnt = PRFILE_MAX-1;
|
pf_cnt = PRFILE_MAX-1;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
MI_BootMenu();
|
MI_Boot();
|
||||||
}
|
}
|
||||||
|
|
||||||
EraseAll();
|
EraseAll();
|
||||||
|
|||||||
@ -148,19 +148,19 @@ void TwlSpMain( void )
|
|||||||
switch ( PAD_Read() & PAD_KEYPORT_MASK )
|
switch ( PAD_Read() & PAD_KEYPORT_MASK )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
result = FATFS_OpenSpecifiedMenu( MENU_FILE );
|
result = FATFS_OpenSpecifiedSrl( MENU_FILE );
|
||||||
break;
|
break;
|
||||||
case PAD_BUTTON_A:
|
case PAD_BUTTON_A:
|
||||||
result = FATFS_OpenSpecifiedMenu( MENU_FILE_A );
|
result = FATFS_OpenSpecifiedSrl( MENU_FILE_A );
|
||||||
break;
|
break;
|
||||||
case PAD_BUTTON_B:
|
case PAD_BUTTON_B:
|
||||||
result = FATFS_OpenSpecifiedMenu( MENU_FILE_B );
|
result = FATFS_OpenSpecifiedSrl( MENU_FILE_B );
|
||||||
break;
|
break;
|
||||||
case PAD_BUTTON_L:
|
case PAD_BUTTON_L:
|
||||||
result = FATFS_OpenSpecifiedMenu( MENU_FILE_L );
|
result = FATFS_OpenSpecifiedSrl( MENU_FILE_L );
|
||||||
break;
|
break;
|
||||||
case PAD_BUTTON_R:
|
case PAD_BUTTON_R:
|
||||||
result = FATFS_OpenSpecifiedMenu( MENU_FILE_R );
|
result = FATFS_OpenSpecifiedSrl( MENU_FILE_R );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
OS_SetDebugLED( (u8)(PAD_Read() & PAD_KEYPORT_MASK) );
|
OS_SetDebugLED( (u8)(PAD_Read() & PAD_KEYPORT_MASK) );
|
||||||
@ -176,16 +176,16 @@ void TwlSpMain( void )
|
|||||||
#endif
|
#endif
|
||||||
OS_SetDebugLED(++step);
|
OS_SetDebugLED(++step);
|
||||||
|
|
||||||
if ( FATFS_LoadHeader() && FATFS_LoadMenu() )
|
if ( FATFS_LoadHeader() && FATFS_LoadStatic() )
|
||||||
{
|
{
|
||||||
#ifndef SDK_FINALROM
|
#ifndef SDK_FINALROM
|
||||||
// 127: before BootMenu
|
// 127: before Boot
|
||||||
pf_cnt = PRFILE_MAX-1;
|
pf_cnt = PRFILE_MAX-1;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
OS_SetDebugLED(++step);
|
OS_SetDebugLED(++step);
|
||||||
|
|
||||||
FATFS_BootMenu();
|
FATFS_Boot();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -114,15 +114,15 @@ void TwlMain( void )
|
|||||||
SVC_InitSignHeap( acPool, acHeap, sizeof(acHeap) );
|
SVC_InitSignHeap( acPool, acHeap, sizeof(acHeap) );
|
||||||
|
|
||||||
// load menu
|
// 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
|
#ifndef SDK_FINALROM
|
||||||
// 127: before BootMenu
|
// 127: before Boot
|
||||||
pf_cnt = PRFILE_MAX-1;
|
pf_cnt = PRFILE_MAX-1;
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
MI_BootMenu();
|
MI_Boot();
|
||||||
}
|
}
|
||||||
|
|
||||||
EraseAll();
|
EraseAll();
|
||||||
|
|||||||
@ -36,7 +36,7 @@ extern "C" {
|
|||||||
BOOL FATFS_OpenRecentMenu( int driveno );
|
BOOL FATFS_OpenRecentMenu( int driveno );
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: FATFS_OpenSpecifiedMenu
|
Name: FATFS_OpenSpecifiedSrl
|
||||||
|
|
||||||
Description: open specified menu file
|
Description: open specified menu file
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ BOOL FATFS_OpenRecentMenu( int driveno );
|
|||||||
|
|
||||||
Returns: None
|
Returns: None
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
BOOL FATFS_OpenSpecifiedMenu( const char* menufile );
|
BOOL FATFS_OpenSpecifiedSrl( const char* menufile );
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: FATFS_LoadHeader
|
Name: FATFS_LoadHeader
|
||||||
@ -58,26 +58,26 @@ BOOL FATFS_OpenSpecifiedMenu( const char* menufile );
|
|||||||
BOOL FATFS_LoadHeader( void );
|
BOOL FATFS_LoadHeader( void );
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: FATFS_LoadMenu
|
Name: FATFS_LoadStatic
|
||||||
|
|
||||||
Description: load menu binary
|
Description: load static binary
|
||||||
|
|
||||||
Arguments: None
|
Arguments: None
|
||||||
|
|
||||||
Returns: TRUE if success
|
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
|
Arguments: None
|
||||||
|
|
||||||
Returns: None
|
Returns: None
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void FATFS_BootMenu( void );
|
void FATFS_Boot( void );
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@ -37,26 +37,26 @@ extern "C" {
|
|||||||
BOOL MI_LoadHeader( int* pool, const void* rsa_key );
|
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
|
Arguments: None
|
||||||
|
|
||||||
Returns: TRUE if success
|
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
|
Arguments: None
|
||||||
|
|
||||||
Returns: None
|
Returns: None
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void MI_BootMenu( void );
|
void MI_Boot( void );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user