mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
マウント情報をWRAMに隠蔽するための変更
・ARM7側からWRAMにマウント情報を格納するため、mountInfo関連を大手術 ・ビルドの通っていないアプリが使っているlcfテンプレートを変更 ・ランチャーとSDKのFSがランチャーバージョンの格納および取得に対応するまで、マウント情報まわりが正常に機能せず git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@895 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
dc1dc006ab
commit
81e66f51cb
@ -355,7 +355,8 @@ SECTIONS
|
|||||||
|
|
||||||
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
|
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
|
||||||
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
|
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
|
||||||
SDK_AUTOLOAD_WRAM_BSS_END = SDK_AUTOLOAD.WRAM.BSS_END;
|
SDK_MOUNT_INFO_TABLE = SDK_AUTOLOAD.WRAM.BSS_END;
|
||||||
|
SDK_AUTOLOAD_WRAM_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400;
|
||||||
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
|
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
|
||||||
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
|
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
|
||||||
|
|
||||||
@ -548,8 +549,8 @@ SECTIONS
|
|||||||
} > <PROPERTY.OVERLAYTABLE>F
|
} > <PROPERTY.OVERLAYTABLE>F
|
||||||
|
|
||||||
############################ OTHERS #################################
|
############################ OTHERS #################################
|
||||||
SDK_SEA_KEY_STORE = SDK_AUTOLOAD.WRAM.BSS_END;
|
SDK_SEA_KEY_STORE = SDK_AUTOLOAD_WRAM_BSS_END;
|
||||||
SDK_WRAM_ARENA_LO = SDK_AUTOLOAD.WRAM.BSS_END + 0x40;
|
SDK_WRAM_ARENA_LO = SDK_AUTOLOAD_WRAM_BSS_END + 0x40;
|
||||||
|
|
||||||
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
|
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
|
||||||
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
|
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
|
||||||
@ -557,7 +558,7 @@ SECTIONS
|
|||||||
|
|
||||||
.check.WORKRAM:
|
.check.WORKRAM:
|
||||||
{
|
{
|
||||||
. = . + SDK_AUTOLOAD.WRAM.BSS_END - SDK_AUTOLOAD.WRAM.START + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
|
. = . + SDK_AUTOLOAD_WRAM_BSS_END - SDK_AUTOLOAD.WRAM.START + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
|
||||||
|
|
||||||
} > check.WORKRAM
|
} > check.WORKRAM
|
||||||
|
|
||||||
@ -878,7 +879,7 @@ SECTIONS
|
|||||||
{
|
{
|
||||||
### TWL limited extended static module information
|
### TWL limited extended static module information
|
||||||
WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address
|
WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address
|
||||||
WRITEW 0; # padding
|
WRITEW SDK_MOUNT_INFO_TABLE; # address of the FS mount information table
|
||||||
WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module
|
WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module
|
||||||
WRITEW 0; # padding
|
WRITEW 0; # padding
|
||||||
|
|
||||||
|
|||||||
@ -153,9 +153,12 @@ TwlSpMain(void)
|
|||||||
(void)OS_EnableIrq();
|
(void)OS_EnableIrq();
|
||||||
(void)OS_EnableInterrupts();
|
(void)OS_EnableInterrupts();
|
||||||
|
|
||||||
|
// ランチャーのマウント情報登録
|
||||||
|
SYSMi_SetLauncherMountInfo();
|
||||||
|
|
||||||
// PXIコールバックの設定
|
// PXIコールバックの設定
|
||||||
SYSM_InitPXI(THREAD_PRIO_SYSMMCU);
|
SYSM_InitPXI(THREAD_PRIO_SYSMMCU);
|
||||||
|
|
||||||
// ファイルシステム初期化
|
// ファイルシステム初期化
|
||||||
FS_Init(FS_DMA_NOT_USE);
|
FS_Init(FS_DMA_NOT_USE);
|
||||||
FS_CreateReadServerThread(THREAD_PRIO_FS);
|
FS_CreateReadServerThread(THREAD_PRIO_FS);
|
||||||
|
|||||||
@ -40,6 +40,8 @@ TARGET_LIB = libboot_sp$(TWL_LIBSUFFIX).a
|
|||||||
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||||
include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot
|
include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot
|
||||||
|
|
||||||
|
LINCLUDES += $(SYSMENU_ROOT)/build/libraries_sysmenu/sysmenu/common/include
|
||||||
|
|
||||||
INSTALL_TARGETS = $(TARGETS)
|
INSTALL_TARGETS = $(TARGETS)
|
||||||
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
||||||
|
|
||||||
|
|||||||
@ -25,6 +25,7 @@
|
|||||||
#include <firm/format/from_brom.h>
|
#include <firm/format/from_brom.h>
|
||||||
#include <firm/aes/ARM7/aes_init.h>
|
#include <firm/aes/ARM7/aes_init.h>
|
||||||
#include "reboot.h"
|
#include "reboot.h"
|
||||||
|
#include "internal_api.h"
|
||||||
|
|
||||||
|
|
||||||
// define data-------------------------------------------------------
|
// define data-------------------------------------------------------
|
||||||
@ -32,9 +33,9 @@
|
|||||||
#define reg_MI_MC_SWP (*(REGType8v *) ( REG_MC1_ADDR + 1 ) )
|
#define reg_MI_MC_SWP (*(REGType8v *) ( REG_MC1_ADDR + 1 ) )
|
||||||
|
|
||||||
#ifdef ISDBG_MB_CHILD_
|
#ifdef ISDBG_MB_CHILD_
|
||||||
#define PRE_CLEAR_NUM_MAX (7*2)
|
#define PRE_CLEAR_NUM_MAX (9*2)
|
||||||
#else
|
#else
|
||||||
#define PRE_CLEAR_NUM_MAX (5*2)
|
#define PRE_CLEAR_NUM_MAX (7*2)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define COPY_NUM_MAX (4*3)
|
#define COPY_NUM_MAX (4*3)
|
||||||
@ -95,6 +96,9 @@ BOOL BOOT_WaitStart( void )
|
|||||||
// ブートアプリのROMヘッダのaccessKeyControl情報を見て判定
|
// ブートアプリのROMヘッダのaccessKeyControl情報を見て判定
|
||||||
// 引渡しは、IRQスタック領域を使うので、割り込みを禁止してからセットする。
|
// 引渡しは、IRQスタック領域を使うので、割り込みを禁止してからセットする。
|
||||||
|
|
||||||
|
|
||||||
|
// マウント情報の登録
|
||||||
|
SYSMi_SetBootAppMountInfo( &SYSMi_GetWork2()->bootTitleProperty );
|
||||||
|
|
||||||
BOOTi_ClearREG_RAM(); // ARM7側のメモリ&レジスタクリア。
|
BOOTi_ClearREG_RAM(); // ARM7側のメモリ&レジスタクリア。
|
||||||
reg_MI_MBK9 = 0; // 全WRAMのロック解除
|
reg_MI_MBK9 = 0; // 全WRAMのロック解除
|
||||||
@ -112,18 +116,19 @@ BOOL BOOT_WaitStart( void )
|
|||||||
// メモリリストの設定
|
// メモリリストの設定
|
||||||
// [TODO:] ショップアプリで鍵を残す場合、NANDファーム引数の領域(WRAMにある)を消さないように注意。
|
// [TODO:] ショップアプリで鍵を残す場合、NANDファーム引数の領域(WRAMにある)を消さないように注意。
|
||||||
// WRAMリマップ後の消し漏れやバッファオーバランの懸念回避のため不要な鍵はpre clearで消す。
|
// WRAMリマップ後の消し漏れやバッファオーバランの懸念回避のため不要な鍵はpre clearで消す。
|
||||||
// [TODO:] pre clearにARM9/7共用WRAMの32KBも入れる。
|
// [TODO:] DSPの使っているWRAMをどこからどこまで消すか?
|
||||||
static u32 mem_list[PRE_CLEAR_NUM_MAX + 1 + COPY_NUM_MAX + 2 + POST_CLEAR_NUM_MAX + 1] =
|
static u32 mem_list[PRE_CLEAR_NUM_MAX + 1 + COPY_NUM_MAX + 2 + POST_CLEAR_NUM_MAX + 1] =
|
||||||
{
|
{
|
||||||
// pre clear
|
// pre clear
|
||||||
SYSM_OWN_ARM7_WRAM_ADDR, NULL, // SYSM_OWN_ARM7_WRAM_ADDR(SDK_AUTOLOAD_WRAM_START)はリンカから与えられる
|
SYSM_OWN_ARM7_WRAM_ADDR, NULL, // SYSM_OWN_ARM7_WRAM_ADDR(SDK_AUTOLOAD_WRAM_START)はリンカから与えられるので定数でない
|
||||||
|
NULL, NULL, // 定数でないのであとで設定
|
||||||
SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM7_MMEM_ADDR_END - SYSM_OWN_ARM7_MMEM_ADDR,
|
SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM7_MMEM_ADDR_END - SYSM_OWN_ARM7_MMEM_ADDR,
|
||||||
SYSM_OWN_ARM9_MMEM_ADDR, SYSM_OWN_ARM9_MMEM_ADDR_END - SYSM_OWN_ARM9_MMEM_ADDR,
|
SYSM_OWN_ARM9_MMEM_ADDR, SYSM_OWN_ARM9_MMEM_ADDR_END - SYSM_OWN_ARM9_MMEM_ADDR,
|
||||||
#ifdef ISDBG_MB_CHILD_
|
#ifdef ISDBG_MB_CHILD_
|
||||||
HW_PRV_WRAM_END - 0x600, (HW_PRV_WRAM_END - HW_PRV_WRAM_SYSRV_SIZE) - (HW_PRV_WRAM_END - 0x600),
|
HW_PRV_WRAM_END - 0x600, (HW_PRV_WRAM_END - HW_PRV_WRAM_SYSRV_SIZE) - (HW_PRV_WRAM_END - 0x600),
|
||||||
HW_PRV_WRAM_END - 0x600 + 0x20, HW_PRV_WRAM_END - (HW_PRV_WRAM_END - 0x600 + 0x20),
|
HW_PRV_WRAM_END - 0x600 + 0x20, HW_PRV_WRAM_END - (HW_PRV_WRAM_END - 0x600 + 0x20),
|
||||||
#endif
|
#endif
|
||||||
HW_WRAM_LTD, HW_WRAM_LTD_END - HW_WRAM_LTD,
|
HW_WRAM_BASE, HW_WRAM_SIZE, // 共有WRAM Launcherの特殊配置なので、BASEからサイズぶん
|
||||||
HW_MAIN_MEM_SHARED, HW_RED_RESERVED - HW_MAIN_MEM_SHARED,
|
HW_MAIN_MEM_SHARED, HW_RED_RESERVED - HW_MAIN_MEM_SHARED,
|
||||||
NULL,
|
NULL,
|
||||||
// copy forward
|
// copy forward
|
||||||
@ -133,8 +138,9 @@ BOOL BOOT_WaitStart( void )
|
|||||||
// post clear
|
// post clear
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
// NANDファームから受け取った鍵領域もまとめて消している
|
mem_list[1] = (u32)th->s.sub_mount_info_ram_address - SYSM_OWN_ARM7_WRAM_ADDR;
|
||||||
mem_list[1] = SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR;
|
mem_list[2] = ((u32)th->s.sub_mount_info_ram_address + SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN);
|
||||||
|
mem_list[3] = SYSM_OWN_ARM7_WRAM_ADDR_END - ((u32)th->s.sub_mount_info_ram_address + SYSM_MOUNT_INFO_SIZE + OS_MOUNT_PATH_LEN);
|
||||||
|
|
||||||
// copy forwardリスト設定
|
// copy forwardリスト設定
|
||||||
for( l=0; l<RELOCATE_INFO_NUM ; l++ )
|
for( l=0; l<RELOCATE_INFO_NUM ; l++ )
|
||||||
|
|||||||
@ -26,7 +26,8 @@ TWL_PROC = ARM7
|
|||||||
|
|
||||||
SRCDIR = ../common/src
|
SRCDIR = ../common/src
|
||||||
SRCS = status.c \
|
SRCS = status.c \
|
||||||
pxi.c
|
pxi.c \
|
||||||
|
mountInfo.c
|
||||||
|
|
||||||
TARGET_LIB = libsysmenu_sp$(TWL_LIBSUFFIX).a
|
TARGET_LIB = libsysmenu_sp$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
|
|||||||
@ -63,77 +63,19 @@ OSMountInfo s_defaultMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = {
|
|||||||
//
|
//
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
/*
|
void SYSMi_SetBootSRLPathToWork2( TitleProperty *pBootTitle )
|
||||||
要確認
|
|
||||||
カードブート時のBootSRLPathは、"rom:"ではなく、""でいく。
|
|
||||||
"nand:" と "nand1:"のuserPermissionは"OS_MOUNT_USR_R"で良いのか?
|
|
||||||
*/
|
|
||||||
// ランチャーのマウント情報セット
|
|
||||||
void SYSMi_SetLauncherMountInfo( void )
|
|
||||||
{
|
|
||||||
NAMTitleId titleID = TITLE_ID_LAUNCHER;
|
|
||||||
|
|
||||||
// ※とりあえず自身はROMブートで。[TODO:]後で修正
|
|
||||||
// SYSMi_SetBootSRLPath( LAUNCHER_BOOTTYPE_NAND, titleID ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。
|
|
||||||
|
|
||||||
// セーブデータ有無によるマウント情報の編集
|
|
||||||
// ※このタイミングではFSは動かせないので、FSを使わない特別版で対応。
|
|
||||||
SYSMi_ModifySaveDataMountForLauncher( LAUNCHER_BOOTTYPE_NAND,
|
|
||||||
titleID,
|
|
||||||
&s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ] );
|
|
||||||
|
|
||||||
// マウント情報のセット
|
|
||||||
SYSMi_SetMountInfoCore( LAUNCHER_BOOTTYPE_NAND,
|
|
||||||
titleID,
|
|
||||||
&s_defaultMountList[0] );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// システム領域に、ブートするアプリのマウント情報を登録する
|
|
||||||
void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle )
|
|
||||||
{
|
|
||||||
// アプリがTWL対応でない場合は、何もセットせずにリターン
|
|
||||||
if( ( (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->platform_code ) == 0 ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 起動アプリのSRLパスをセット
|
|
||||||
SYSMi_SetBootSRLPath( (LauncherBootType)pBootTitle->flags.bootType,
|
|
||||||
pBootTitle->titleID );
|
|
||||||
|
|
||||||
// セーブデータ有無によるマウント情報の編集
|
|
||||||
SYSMi_ModifySaveDataMount( (LauncherBootType)pBootTitle->flags.bootType,
|
|
||||||
pBootTitle->titleID,
|
|
||||||
&s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ] );
|
|
||||||
|
|
||||||
// マウント情報のセット
|
|
||||||
SYSMi_SetMountInfoCore( (LauncherBootType)pBootTitle->flags.bootType,
|
|
||||||
pBootTitle->titleID,
|
|
||||||
&s_defaultMountList[0] );
|
|
||||||
|
|
||||||
/*
|
|
||||||
※※ 注意 ※※
|
|
||||||
MountInfoは、FSで直接参照してアクセス許可状態を判定しているため、ここにアプリ用のデータをセットすると、
|
|
||||||
その後はパーミッションの都合上FSライブラリおよびFSを使用したESやNAMライブラリが全く使用できなくなる。(今後パーミッション仕様については変更される可能性あり)
|
|
||||||
よって、内部でFSライブラリを使用する処理は、本処理の前に完了しておく必要がある。
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 起動SRLパスをシステム領域にセット
|
|
||||||
static void SYSMi_SetBootSRLPath( LauncherBootType bootType, NAMTitleId titleID )
|
|
||||||
{
|
{
|
||||||
static char path[ FS_ENTRY_LONGNAME_MAX ];
|
static char path[ FS_ENTRY_LONGNAME_MAX ];
|
||||||
|
|
||||||
switch( bootType )
|
switch( pBootTitle->flags.bootType )
|
||||||
{
|
{
|
||||||
case LAUNCHER_BOOTTYPE_NAND:
|
case LAUNCHER_BOOTTYPE_NAND:
|
||||||
if( NAM_GetTitleBootContentPathFast( path, titleID ) != NAM_OK ) {
|
if( NAM_GetTitleBootContentPathFast( path, pBootTitle->titleID ) != NAM_OK ) {
|
||||||
OS_TPrintf( "ERROR: BootContentPath Get failed.\n" );
|
OS_TPrintf( "ERROR: BootContentPath Get failed.\n" );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LAUNCHER_BOOTTYPE_TEMP:
|
case LAUNCHER_BOOTTYPE_TEMP:
|
||||||
STD_TSNPrintf( path, FS_ENTRY_LONGNAME_MAX, OS_TMP_APP_PATH, titleID );
|
STD_TSNPrintf( path, FS_ENTRY_LONGNAME_MAX, OS_TMP_APP_PATH, pBootTitle->titleID );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
path[ 0 ] = 0;
|
path[ 0 ] = 0;
|
||||||
@ -142,131 +84,9 @@ static void SYSMi_SetBootSRLPath( LauncherBootType bootType, NAMTitleId titleID
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( path[ 0 ] ) {
|
if( path[ 0 ] ) {
|
||||||
STD_CopyLStringZeroFill( (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF, path, OS_MOUNT_PATH_LEN );
|
STD_CopyLStringZeroFill( SYSMi_GetWork2()->bootContentPath, path, OS_MOUNT_PATH_LEN );
|
||||||
}else {
|
}else {
|
||||||
MI_CpuClearFast( (void *)HW_TWL_FS_BOOT_SRL_PATH_BUF, OS_MOUNT_PATH_LEN );
|
MI_CpuClearFast( SYSMi_GetWork2()->bootContentPath, OS_MOUNT_PATH_LEN );
|
||||||
}
|
}
|
||||||
OS_TPrintf( "boot SRL path : %s\n", (char *)HW_TWL_FS_BOOT_SRL_PATH_BUF ); // ※OS_Init前で呼ぶとPrintfできないので注意。
|
OS_TPrintf( "boot SRL path : %s\n", SYSMi_GetWork2()->bootContentPath ); // ※OS_Init前で呼ぶとPrintfできないので注意。
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// マウント情報をシステム領域に書き込み
|
|
||||||
static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc )
|
|
||||||
{
|
|
||||||
#pragma unused(bootType)
|
|
||||||
|
|
||||||
int i;
|
|
||||||
OSMountInfo *pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF;
|
|
||||||
|
|
||||||
MI_CpuClearFast( (void *)HW_TWL_FS_MOUNT_INFO_BUF, HW_TWL_FS_BOOT_SRL_PATH_BUF - HW_TWL_FS_MOUNT_INFO_BUF );
|
|
||||||
|
|
||||||
// ユーザーアプリの場合、"nand:", "nand2:"アーカイブを変更。
|
|
||||||
if( ( titleID & TITLEID_APP_SYS_FLAG ) == 0 ) {
|
|
||||||
pSrc[ 1 ].userPermission = 0; // "nand:"
|
|
||||||
pSrc[ 2 ].userPermission = 0; // "nand2:"
|
|
||||||
}
|
|
||||||
|
|
||||||
// セット
|
|
||||||
for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) {
|
|
||||||
if( pSrc->drive[ 0 ] ) {
|
|
||||||
MI_CpuCopyFast( pSrc, pDst, sizeof(OSMountInfo) );
|
|
||||||
pDst++;
|
|
||||||
}
|
|
||||||
pSrc++;
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
pDst = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF;
|
|
||||||
for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) {
|
|
||||||
OS_TPrintf( "mount path : %s\n", pDst->path );
|
|
||||||
pDst++;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// タイトルIDをもとにセーブデータ有無を判定して、マウント情報を編集する。
|
|
||||||
static void SYSMi_ModifySaveDataMount( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
// ※カードからブートされた場合でも、titleIDが"NANDアプリ"の場合は、セーブデータをマウントするようにしている。
|
|
||||||
|
|
||||||
// セーブデータ有無を判定して、パスをセット
|
|
||||||
if( ( ( bootType == LAUNCHER_BOOTTYPE_NAND ) && // NANDアプリがNANDからブートされた時
|
|
||||||
( titleID & TITLEID_MEDIA_NAND_FLAG ) ) ||
|
|
||||||
( ( bootType == LAUNCHER_BOOTTYPE_ROM ) && // ISデバッガ上で、NANDアプリがROM からブートされた時
|
|
||||||
( titleID & TITLEID_MEDIA_NAND_FLAG ) &&
|
|
||||||
( SYSMi_GetWork()->flags.hotsw.isOnDebugger ) )
|
|
||||||
) {
|
|
||||||
char saveFilePath[ 2 ][ FS_ENTRY_LONGNAME_MAX ];
|
|
||||||
u32 saveDataSize[ 2 ];
|
|
||||||
saveDataSize[ 0 ] = (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->private_save_data_size;
|
|
||||||
saveDataSize[ 1 ] = (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->public_save_data_size;
|
|
||||||
|
|
||||||
// セーブデータのファイルパスを取得
|
|
||||||
NAM_GetTitleSaveFilePath( saveFilePath[ 1 ], saveFilePath[ 0 ], titleID );
|
|
||||||
|
|
||||||
// "ROMヘッダのNANDセーブファイルサイズ > 0" かつ そのファイルを開ける場合のみマウント情報を登録
|
|
||||||
for( i = 0; i < 2; i++ ) {
|
|
||||||
FSFile file[1];
|
|
||||||
FS_InitFile( file );
|
|
||||||
if( saveDataSize[ i ] &&
|
|
||||||
FS_OpenFileEx( file, saveFilePath[ i ], FS_FILEMODE_R) ) {
|
|
||||||
FS_CloseFile( file );
|
|
||||||
STD_CopyLStringZeroFill( pMountTgt->path, saveFilePath[ i ], OS_MOUNT_PATH_LEN );
|
|
||||||
}else {
|
|
||||||
pMountTgt->drive[ 0 ] = 0;
|
|
||||||
}
|
|
||||||
pMountTgt++;
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
// タイトルID指定なしのカードアプリの場合は、セーブデータ無効
|
|
||||||
for( i = 0; i < 2; i++ ) {
|
|
||||||
pMountTgt->drive[ 0 ] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// タイトルIDをもとにセーブデータ有無を判定して、マウント情報を編集する。
|
|
||||||
static void SYSMi_ModifySaveDataMountForLauncher( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
// ※カードからブートされた場合でも、titleIDが"NANDアプリ"の場合は、セーブデータをマウントするようにしている。
|
|
||||||
|
|
||||||
// セーブデータ有無を判定して、パスをセット
|
|
||||||
if( ( ( bootType == LAUNCHER_BOOTTYPE_NAND ) && // NANDアプリがNANDからブートされた時
|
|
||||||
( titleID & TITLEID_MEDIA_NAND_FLAG ) ) ||
|
|
||||||
( ( bootType == LAUNCHER_BOOTTYPE_ROM ) && // ISデバッガ上で、NANDアプリがROM からブートされた時
|
|
||||||
( titleID & TITLEID_MEDIA_NAND_FLAG ) &&
|
|
||||||
( SYSMi_GetWork()->flags.hotsw.isOnDebugger ) )
|
|
||||||
) {
|
|
||||||
char saveFilePath[ 2 ][ FS_ENTRY_LONGNAME_MAX ];
|
|
||||||
u32 saveDataSize[ 2 ];
|
|
||||||
saveDataSize[ 0 ] = (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->private_save_data_size;
|
|
||||||
saveDataSize[ 1 ] = (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->public_save_data_size;
|
|
||||||
|
|
||||||
// セーブデータのファイルパスを取得
|
|
||||||
STD_TSNPrintf( saveFilePath[ 0 ], FS_ENTRY_LONGNAME_MAX,
|
|
||||||
"nand:/title/%08x/%08x/data/private.sav", (u32)( titleID >> 32 ), titleID );
|
|
||||||
STD_TSNPrintf( saveFilePath[ 1 ], FS_ENTRY_LONGNAME_MAX,
|
|
||||||
"nand:/title/%08x/%08x/data/public.sav", (u32)( titleID >> 32 ), titleID );
|
|
||||||
|
|
||||||
// "ROMヘッダのNANDセーブファイルサイズ > 0" かつ そのファイルを開ける場合のみマウント情報を登録
|
|
||||||
for( i = 0; i < 2; i++ ) {
|
|
||||||
if( saveDataSize[ i ] ) {
|
|
||||||
STD_CopyLStringZeroFill( pMountTgt->path, saveFilePath[ i ], OS_MOUNT_PATH_LEN );
|
|
||||||
}else {
|
|
||||||
pMountTgt->drive[ 0 ] = 0;
|
|
||||||
}
|
|
||||||
pMountTgt++;
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
// タイトルID指定なしのカードアプリの場合は、セーブデータ無効
|
|
||||||
for( i = 0; i < 2; i++ ) {
|
|
||||||
pMountTgt->drive[ 0 ] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@ -64,7 +64,7 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
|||||||
SYSMi_SendKeysToARM7();
|
SYSMi_SendKeysToARM7();
|
||||||
|
|
||||||
// ランチャーのマウント情報セット
|
// ランチャーのマウント情報セット
|
||||||
SYSMi_SetLauncherMountInfo();
|
//SYSMi_SetLauncherMountInfo();
|
||||||
|
|
||||||
// ARM7コンポーネント用プロテクションユニット領域変更
|
// ARM7コンポーネント用プロテクションユニット領域変更
|
||||||
OS_SetProtectionRegion( 2, SYSM_OWN_ARM7_MMEM_ADDR, 512KB );
|
OS_SetProtectionRegion( 2, SYSM_OWN_ARM7_MMEM_ADDR, 512KB );
|
||||||
|
|||||||
@ -990,7 +990,9 @@ AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// マウント情報の登録
|
// マウント情報の登録
|
||||||
SYSMi_SetBootAppMountInfo( pBootTitle );
|
//SYSMi_SetBootAppMountInfo( pBootTitle );
|
||||||
|
SYSMi_GetWork2()->bootTitleProperty = *pBootTitle;
|
||||||
|
SYSMi_SetBootSRLPathToWork2( pBootTitle );
|
||||||
|
|
||||||
// HW_WM_BOOT_BUFへのブート情報セット
|
// HW_WM_BOOT_BUFへのブート情報セット
|
||||||
( (OSBootInfo *)OS_GetBootInfo() )->boot_type = s_launcherToOSBootType[ pBootTitle->flags.bootType ];
|
( (OSBootInfo *)OS_GetBootInfo() )->boot_type = s_launcherToOSBootType[ pBootTitle->flags.bootType ];
|
||||||
|
|||||||
@ -33,18 +33,26 @@ extern "C" {
|
|||||||
#define OS_PutString( ... ) ((void)0)
|
#define OS_PutString( ... ) ((void)0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SDK_ARM9
|
|
||||||
//-------------------------------------------------------
|
//-------------------------------------------------------
|
||||||
// マウント情報セット
|
// マウント情報セット
|
||||||
//-------------------------------------------------------
|
//-------------------------------------------------------
|
||||||
|
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
|
||||||
|
// BootSRLPath受け渡し用
|
||||||
|
void SYSMi_SetBootSRLPathToWork2( TitleProperty *pBootTitle );
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
// ランチャー用
|
// ランチャー用
|
||||||
void SYSMi_SetLauncherMountInfo( void );
|
void SYSMi_SetLauncherMountInfo( void );
|
||||||
|
|
||||||
// 起動アプリ用
|
// 起動アプリ用
|
||||||
void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle );
|
void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SDK_ARM9
|
||||||
//-------------------------------------------------------
|
//-------------------------------------------------------
|
||||||
// デバイス
|
// デバイス
|
||||||
//-------------------------------------------------------
|
//-------------------------------------------------------
|
||||||
|
|||||||
295
build/libraries_sysmenu/sysmenu/common/src/mountInfo.c
Normal file
295
build/libraries_sysmenu/sysmenu/common/src/mountInfo.c
Normal file
@ -0,0 +1,295 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: TwlIPL
|
||||||
|
File: SYSM_lib.c
|
||||||
|
|
||||||
|
Copyright 2007 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 <twl.h>
|
||||||
|
#include <twl/nam.h>
|
||||||
|
#include <sysmenu.h>
|
||||||
|
#include "internal_api.h"
|
||||||
|
|
||||||
|
// define data-----------------------------------------------------------------
|
||||||
|
#define DEFAULT_MOUNT_LIST_NUM 9
|
||||||
|
#define NAND_MOUNT_INDEX 0
|
||||||
|
#define NAND2_MOUNT_INDEX 1
|
||||||
|
#define CONTENT_MOUNT_INDEX 2
|
||||||
|
#define SHARED1_MOUNT_INDEX 3
|
||||||
|
#define PRV_SAVE_DATA_MOUNT_INDEX 6 // プライベートセーブデータの s_defaultMountInfo リストインデックス
|
||||||
|
#define PUB_SAVE_DATA_MOUNT_INDEX 7 // パブリック セーブデータの s_defaultMountInfo リストインデックス
|
||||||
|
|
||||||
|
#define TITLEID_APP_SYS_FLAG_SHIFT ( 32 + 0 )
|
||||||
|
#define TITLEID_NOT_LAUNCH_FLAG_SHIFT ( 32 + 1 )
|
||||||
|
#define TITLEID_MEDIA_NAND_FLAG_SHIFT ( 32 + 2 )
|
||||||
|
#define TITLEID_APP_SYS_FLAG ( 1ULL << TITLEID_APP_SYS_FLAG_SHIFT )
|
||||||
|
#define TITLEID_NOT_LAUNCH_FLAG ( 1ULL << TITLEID_NOT_LAUNCH_FLAG_SHIFT )
|
||||||
|
#define TITLEID_MEDIA_NAND_FLAG ( 1ULL << TITLEID_MEDIA_NAND_FLAG_SHIFT )
|
||||||
|
|
||||||
|
// extern data-----------------------------------------------------------------
|
||||||
|
// function's prototype--------------------------------------------------------
|
||||||
|
static void SYSMi_SetBootSRLPath( LauncherBootType bootType, NAMTitleId titleID );
|
||||||
|
static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc );
|
||||||
|
static void SYSMi_ModifySaveDataMount( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt );
|
||||||
|
static void SYSMi_ModifySaveDataMountForLauncher( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt );
|
||||||
|
|
||||||
|
// global variable-------------------------------------------------------------
|
||||||
|
// static variable-------------------------------------------------------------
|
||||||
|
// const data------------------------------------------------------------------
|
||||||
|
|
||||||
|
// デフォルトマウント情報リスト
|
||||||
|
OSMountInfo s_defaultMountList[ DEFAULT_MOUNT_LIST_NUM ] ATTRIBUTE_ALIGN(4) = {
|
||||||
|
// drive device target pertitionIdx resource userPermission rsvA B archive path
|
||||||
|
{ 'A', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "nand", "/" }, // ユーザーアプリはこのアーカイブではR/W不可
|
||||||
|
{ 'B', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "nand2", "/" }, // ユーザーアプリはこのアーカイブではR/W不可
|
||||||
|
{ 'C', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R), 0, 0, "content", NULL }, // Write不可
|
||||||
|
{ 'D', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R), 0, 0, "shared1", "nand:/shared1" }, // Write不可
|
||||||
|
{ 'E', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "shared2", "nand:/shared2" },
|
||||||
|
{ 'F', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_DIR, 1, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "photo", "nand2:/photo" },
|
||||||
|
{ 'G', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPrv", NULL }, // NANDにセーブデータがないアプリの場合は、マウントされない。
|
||||||
|
{ 'H', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_FILE, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "dataPub", NULL }, // NANDにセーブデータがないアプリの場合は、マウントされない。
|
||||||
|
{ 'I', OS_MOUNT_DEVICE_SD, OS_MOUNT_TGT_ROOT, 0, OS_MOUNT_RSC_MMEM, (OS_MOUNT_USR_R|OS_MOUNT_USR_W), 0, 0, "sdmc", "/" },
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
//
|
||||||
|
// マウント情報セット
|
||||||
|
//
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
/*
|
||||||
|
要確認
|
||||||
|
カードブート時のBootSRLPathは、"rom:"ではなく、""でいく。
|
||||||
|
"nand:" と "nand1:"のuserPermissionは"OS_MOUNT_USR_R"で良いのか?
|
||||||
|
*/
|
||||||
|
// ランチャーのマウント情報セット
|
||||||
|
void SYSMi_SetLauncherMountInfo( void )
|
||||||
|
{
|
||||||
|
NAMTitleId titleID = TITLE_ID_LAUNCHER;
|
||||||
|
|
||||||
|
// ※とりあえず自身はROMブートで。[TODO:]後で修正
|
||||||
|
// SYSMi_SetBootSRLPath( LAUNCHER_BOOTTYPE_NAND, titleID ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。
|
||||||
|
|
||||||
|
// セーブデータ有無によるマウント情報の編集
|
||||||
|
// ※このタイミングではFSは動かせないので、FSを使わない特別版で対応。
|
||||||
|
SYSMi_ModifySaveDataMountForLauncher( LAUNCHER_BOOTTYPE_NAND,
|
||||||
|
titleID,
|
||||||
|
&s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ] );
|
||||||
|
|
||||||
|
// マウント情報のセット
|
||||||
|
SYSMi_SetMountInfoCore( LAUNCHER_BOOTTYPE_NAND,
|
||||||
|
titleID,
|
||||||
|
&s_defaultMountList[0] );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// システム領域に、ブートするアプリのマウント情報を登録する
|
||||||
|
void SYSMi_SetBootAppMountInfo( TitleProperty *pBootTitle )
|
||||||
|
{
|
||||||
|
// アプリがTWL対応でない場合は、何もセットせずにリターン
|
||||||
|
if( ( (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->platform_code ) == 0 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 起動アプリのSRLパスをセット
|
||||||
|
// SYSMi_SetBootSRLPath( (LauncherBootType)pBootTitle->flags.bootType,
|
||||||
|
// pBootTitle->titleID );
|
||||||
|
|
||||||
|
STD_CopyLStringZeroFill( (char *)((u32)((( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->sub_mount_info_ram_address) + SYSM_MOUNT_INFO_SIZE),
|
||||||
|
SYSMi_GetWork2()->bootContentPath, OS_MOUNT_PATH_LEN );
|
||||||
|
|
||||||
|
// セーブデータ有無によるマウント情報の編集
|
||||||
|
// ※ARM7ではNAMは動かせないので、NAMを使わないバージョンで対応。
|
||||||
|
SYSMi_ModifySaveDataMountForLauncher( LAUNCHER_BOOTTYPE_NAND,
|
||||||
|
pBootTitle->titleID,
|
||||||
|
&s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ] );
|
||||||
|
/*
|
||||||
|
// セーブデータ有無によるマウント情報の編集
|
||||||
|
SYSMi_ModifySaveDataMount( (LauncherBootType)pBootTitle->flags.bootType,
|
||||||
|
pBootTitle->titleID,
|
||||||
|
&s_defaultMountList[ PRV_SAVE_DATA_MOUNT_INDEX ] );
|
||||||
|
*/
|
||||||
|
// マウント情報のセット
|
||||||
|
SYSMi_SetMountInfoCore( (LauncherBootType)pBootTitle->flags.bootType,
|
||||||
|
pBootTitle->titleID,
|
||||||
|
&s_defaultMountList[0] );
|
||||||
|
|
||||||
|
/*
|
||||||
|
※※ 注意 ※※
|
||||||
|
MountInfoは、FSで直接参照してアクセス許可状態を判定しているため、ここにアプリ用のデータをセットすると、
|
||||||
|
その後はパーミッションの都合上FSライブラリおよびFSを使用したESやNAMライブラリが全く使用できなくなる。(今後パーミッション仕様については変更される可能性あり)
|
||||||
|
よって、内部でFSライブラリを使用する処理は、本処理の前に完了しておく必要がある。
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// 起動SRLパスをシステム領域にセット
|
||||||
|
static void SYSMi_SetBootSRLPath( LauncherBootType bootType, NAMTitleId titleID )
|
||||||
|
{
|
||||||
|
static char path[ FS_ENTRY_LONGNAME_MAX ];
|
||||||
|
ROM_Header_Short *header = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
|
||||||
|
|
||||||
|
switch( bootType )
|
||||||
|
{
|
||||||
|
case LAUNCHER_BOOTTYPE_NAND:
|
||||||
|
if( NAM_GetTitleBootContentPathFast( path, titleID ) != NAM_OK ) {
|
||||||
|
OS_TPrintf( "ERROR: BootContentPath Get failed.\n" );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LAUNCHER_BOOTTYPE_TEMP:
|
||||||
|
STD_TSNPrintf( path, FS_ENTRY_LONGNAME_MAX, OS_TMP_APP_PATH, titleID );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
path[ 0 ] = 0;
|
||||||
|
// STD_StrCpy( path, (const char*)"rom:" ); // ※SDK2623では、BootSRLPathを"rom:"としたらFSi_InitRomArchiveでNANDアプリ扱いされてアクセス例外で落ちる。
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( path[ 0 ] ) {
|
||||||
|
STD_CopyLStringZeroFill( (char *)((u32)header->sub_mount_info_ram_address + SYSMi_MOUNT_INFO_SIZE), path, OS_MOUNT_PATH_LEN );
|
||||||
|
}else {
|
||||||
|
MI_CpuClearFast( (char *)((u32)header->sub_mount_info_ram_address + SYSMi_MOUNT_INFO_SIZE), OS_MOUNT_PATH_LEN );
|
||||||
|
}
|
||||||
|
OS_TPrintf( "boot SRL path : %s\n", (char *)((u32)header->sub_mount_info_ram_address + SYSMi_MOUNT_INFO_SIZE) ); // ※OS_Init前で呼ぶとPrintfできないので注意。
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// マウント情報をシステム領域に書き込み
|
||||||
|
static void SYSMi_SetMountInfoCore( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pSrc )
|
||||||
|
{
|
||||||
|
#pragma unused(bootType)
|
||||||
|
|
||||||
|
int i;
|
||||||
|
ROM_Header_Short *header = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
|
||||||
|
OSMountInfo *pDst = (OSMountInfo *)header->sub_mount_info_ram_address;
|
||||||
|
char contentpath[ FS_ENTRY_LONGNAME_MAX ];
|
||||||
|
|
||||||
|
// タイトルIDからcontentのファイルパスをセット
|
||||||
|
STD_TSNPrintf( contentpath, FS_ENTRY_LONGNAME_MAX,
|
||||||
|
"nand:/title/%08x/%08x/content", (u32)( titleID >> 32 ), titleID );
|
||||||
|
STD_CopyLStringZeroFill( pSrc[CONTENT_MOUNT_INDEX].path, contentpath, OS_MOUNT_PATH_LEN );
|
||||||
|
|
||||||
|
MI_CpuClearFast( (void *)pDst, SYSM_MOUNT_INFO_SIZE );
|
||||||
|
|
||||||
|
// セキュアアプリでない場合、"nand:", "nand2:"アーカイブを変更。
|
||||||
|
if( ( titleID & TITLE_ID_HI_SECURE_FLAG_MASK ) == 0 ) {
|
||||||
|
pSrc[ NAND_MOUNT_INDEX ].userPermission = 0; // "nand:"
|
||||||
|
pSrc[ NAND2_MOUNT_INDEX ].userPermission = 0; // "nand2:"
|
||||||
|
}
|
||||||
|
|
||||||
|
// セット
|
||||||
|
for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) {
|
||||||
|
if( pSrc->drive[ 0 ] ) {
|
||||||
|
MI_CpuCopyFast( pSrc, pDst, sizeof(OSMountInfo) );
|
||||||
|
pDst++;
|
||||||
|
}
|
||||||
|
pSrc++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
pDst = (OSMountInfo *)pDst;
|
||||||
|
for( i = 0; i < DEFAULT_MOUNT_LIST_NUM; i++ ) {
|
||||||
|
OS_TPrintf( "mount path : %s\n", pDst->path );
|
||||||
|
pDst++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// タイトルIDをもとにセーブデータ有無を判定して、マウント情報を編集する。
|
||||||
|
static void SYSMi_ModifySaveDataMount( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt )
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
// ※カードからブートされた場合でも、titleIDが"NANDアプリ"の場合は、セーブデータをマウントするようにしている。
|
||||||
|
|
||||||
|
// セーブデータ有無を判定して、パスをセット
|
||||||
|
if( ( ( bootType == LAUNCHER_BOOTTYPE_NAND ) && // NANDアプリがNANDからブートされた時
|
||||||
|
( titleID & TITLEID_MEDIA_NAND_FLAG ) ) ||
|
||||||
|
( ( bootType == LAUNCHER_BOOTTYPE_ROM ) && // ISデバッガ上で、NANDアプリがROM からブートされた時
|
||||||
|
( titleID & TITLEID_MEDIA_NAND_FLAG ) &&
|
||||||
|
( SYSMi_GetWork()->flags.hotsw.isOnDebugger ) )
|
||||||
|
) {
|
||||||
|
char saveFilePath[ 2 ][ FS_ENTRY_LONGNAME_MAX ];
|
||||||
|
u32 saveDataSize[ 2 ];
|
||||||
|
saveDataSize[ 0 ] = (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->private_save_data_size;
|
||||||
|
saveDataSize[ 1 ] = (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->public_save_data_size;
|
||||||
|
|
||||||
|
// セーブデータのファイルパスを取得
|
||||||
|
NAM_GetTitleSaveFilePath( saveFilePath[ 1 ], saveFilePath[ 0 ], titleID );
|
||||||
|
|
||||||
|
// "ROMヘッダのNANDセーブファイルサイズ > 0" かつ そのファイルを開ける場合のみマウント情報を登録
|
||||||
|
for( i = 0; i < 2; i++ ) {
|
||||||
|
FSFile file[1];
|
||||||
|
FS_InitFile( file );
|
||||||
|
if( saveDataSize[ i ] &&
|
||||||
|
FS_OpenFileEx( file, saveFilePath[ i ], FS_FILEMODE_R) ) {
|
||||||
|
FS_CloseFile( file );
|
||||||
|
STD_CopyLStringZeroFill( pMountTgt->path, saveFilePath[ i ], OS_MOUNT_PATH_LEN );
|
||||||
|
}else {
|
||||||
|
pMountTgt->drive[ 0 ] = 0;
|
||||||
|
}
|
||||||
|
pMountTgt++;
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
// タイトルID指定なしのカードアプリの場合は、セーブデータ無効
|
||||||
|
for( i = 0; i < 2; i++ ) {
|
||||||
|
pMountTgt->drive[ 0 ] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// タイトルIDをもとにセーブデータ有無を判定して、マウント情報を編集する。
|
||||||
|
static void SYSMi_ModifySaveDataMountForLauncher( LauncherBootType bootType, NAMTitleId titleID, OSMountInfo *pMountTgt )
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
// ※カードからブートされた場合でも、titleIDが"NANDアプリ"の場合は、セーブデータをマウントするようにしている。
|
||||||
|
|
||||||
|
// セーブデータ有無を判定して、パスをセット
|
||||||
|
if( ( ( bootType == LAUNCHER_BOOTTYPE_NAND ) && // NANDアプリがNANDからブートされた時
|
||||||
|
( titleID & TITLEID_MEDIA_NAND_FLAG ) ) ||
|
||||||
|
( ( bootType == LAUNCHER_BOOTTYPE_ROM ) && // ISデバッガ上で、NANDアプリがROM からブートされた時
|
||||||
|
( titleID & TITLEID_MEDIA_NAND_FLAG ) &&
|
||||||
|
( SYSMi_GetWork()->flags.hotsw.isOnDebugger ) )
|
||||||
|
) {
|
||||||
|
char saveFilePath[ 2 ][ FS_ENTRY_LONGNAME_MAX ];
|
||||||
|
u32 saveDataSize[ 2 ];
|
||||||
|
saveDataSize[ 0 ] = (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->private_save_data_size;
|
||||||
|
saveDataSize[ 1 ] = (( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->public_save_data_size;
|
||||||
|
|
||||||
|
// セーブデータのファイルパスを取得
|
||||||
|
STD_TSNPrintf( saveFilePath[ 0 ], FS_ENTRY_LONGNAME_MAX,
|
||||||
|
"nand:/title/%08x/%08x/data/private.sav", (u32)( titleID >> 32 ), titleID );
|
||||||
|
STD_TSNPrintf( saveFilePath[ 1 ], FS_ENTRY_LONGNAME_MAX,
|
||||||
|
"nand:/title/%08x/%08x/data/public.sav", (u32)( titleID >> 32 ), titleID );
|
||||||
|
|
||||||
|
// "ROMヘッダのNANDセーブファイルサイズ > 0" かつ そのファイルを開ける場合のみマウント情報を登録
|
||||||
|
for( i = 0; i < 2; i++ ) {
|
||||||
|
if( saveDataSize[ i ] ) {
|
||||||
|
STD_CopyLStringZeroFill( pMountTgt->path, saveFilePath[ i ], OS_MOUNT_PATH_LEN );
|
||||||
|
}else {
|
||||||
|
pMountTgt->drive[ 0 ] = 0;
|
||||||
|
}
|
||||||
|
pMountTgt++;
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
// タイトルID指定なしのカードアプリの場合は、セーブデータ無効
|
||||||
|
for( i = 0; i < 2; i++ ) {
|
||||||
|
pMountTgt->drive[ 0 ] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -355,7 +355,8 @@ SECTIONS
|
|||||||
|
|
||||||
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
|
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
|
||||||
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
|
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
|
||||||
SDK_AUTOLOAD_WRAM_BSS_END = SDK_AUTOLOAD.WRAM.BSS_END;
|
SDK_MOUNT_INFO_TABLE = SDK_AUTOLOAD.WRAM.BSS_END;
|
||||||
|
SDK_AUTOLOAD_WRAM_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400;
|
||||||
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
|
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
|
||||||
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
|
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
|
||||||
|
|
||||||
@ -548,8 +549,8 @@ SECTIONS
|
|||||||
} > <PROPERTY.OVERLAYTABLE>F
|
} > <PROPERTY.OVERLAYTABLE>F
|
||||||
|
|
||||||
############################ OTHERS #################################
|
############################ OTHERS #################################
|
||||||
SDK_SEA_KEY_STORE = SDK_AUTOLOAD.WRAM.BSS_END;
|
SDK_SEA_KEY_STORE = SDK_AUTOLOAD_WRAM_BSS_END;
|
||||||
SDK_WRAM_ARENA_LO = SDK_AUTOLOAD.WRAM.BSS_END + 0x40;
|
SDK_WRAM_ARENA_LO = SDK_AUTOLOAD_WRAM_BSS_END + 0x40;
|
||||||
|
|
||||||
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
|
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
|
||||||
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
|
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
|
||||||
@ -557,7 +558,7 @@ SECTIONS
|
|||||||
|
|
||||||
.check.WORKRAM:
|
.check.WORKRAM:
|
||||||
{
|
{
|
||||||
. = . + SDK_AUTOLOAD.WRAM.BSS_END - SDK_AUTOLOAD.WRAM.START + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
|
. = . + SDK_AUTOLOAD_WRAM_BSS_END - SDK_AUTOLOAD.WRAM.START + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
|
||||||
|
|
||||||
} > check.WORKRAM
|
} > check.WORKRAM
|
||||||
|
|
||||||
|
|||||||
@ -231,7 +231,8 @@ SECTIONS
|
|||||||
|
|
||||||
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
|
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
|
||||||
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
|
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
|
||||||
SDK_AUTOLOAD_WRAM_BSS_END = SDK_AUTOLOAD.WRAM.BSS_END;
|
SDK_MOUNT_INFO_TABLE = SDK_AUTOLOAD.WRAM.BSS_END;
|
||||||
|
SDK_AUTOLOAD_WRAM_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400;
|
||||||
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
|
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
|
||||||
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
|
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
|
||||||
|
|
||||||
@ -304,7 +305,7 @@ SECTIONS
|
|||||||
} > <PROPERTY.OVERLAYTABLE>F
|
} > <PROPERTY.OVERLAYTABLE>F
|
||||||
|
|
||||||
############################ OTHERS #################################
|
############################ OTHERS #################################
|
||||||
SDK_WRAM_ARENA_LO = SDK_AUTOLOAD.WRAM.BSS_END;
|
SDK_WRAM_ARENA_LO = SDK_AUTOLOAD_WRAM_BSS_END;
|
||||||
|
|
||||||
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
|
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
|
||||||
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
|
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
|
||||||
|
|||||||
@ -46,6 +46,8 @@ extern "C" {
|
|||||||
| PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_R )
|
| PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_R )
|
||||||
// 量産工程で使用する初回起動設定をキャンセルしてカードブートするショートカットキー
|
// 量産工程で使用する初回起動設定をキャンセルしてカードブートするショートカットキー
|
||||||
|
|
||||||
|
#define SYSM_MOUNT_INFO_SIZE (0x400 - OS_MOUNT_PATH_LEN)
|
||||||
|
|
||||||
typedef enum PlatformCode {
|
typedef enum PlatformCode {
|
||||||
PLATFORM_NTR = 0,
|
PLATFORM_NTR = 0,
|
||||||
PLATFORM_TWL = 1
|
PLATFORM_TWL = 1
|
||||||
|
|||||||
@ -127,6 +127,8 @@ typedef struct SYSM_work {
|
|||||||
|
|
||||||
typedef struct SYSM_work2 {
|
typedef struct SYSM_work2 {
|
||||||
SVCHMACSHA1Context hmac_sha1_context;
|
SVCHMACSHA1Context hmac_sha1_context;
|
||||||
|
TitleProperty bootTitleProperty;
|
||||||
|
char bootContentPath[ FS_ENTRY_LONGNAME_MAX ];
|
||||||
}SYSM_work2;
|
}SYSM_work2;
|
||||||
|
|
||||||
// NTRにおける仕様を継承する必要のあるワーク
|
// NTRにおける仕様を継承する必要のあるワーク
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user