From bbb6bc01a765f5078856c2fbd37fca867f32e2c7 Mon Sep 17 00:00:00 2001 From: yutaka Date: Mon, 24 Mar 2008 11:47:19 +0000 Subject: [PATCH] =?UTF-8?q?menu=5Flauncher/sdmc=5Flauncher=E3=81=AE?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=E3=83=BBNAND=E3=82=B3=E3=83=B3=E3=83=86?= =?UTF-8?q?=E3=82=AD=E3=82=B9=E3=83=88=E3=82=92=E3=83=95=E3=82=A1=E3=83=BC?= =?UTF-8?q?=E3=83=A0=E3=81=A7=E5=85=B1=E6=9C=89=E3=83=A1=E3=83=A2=E3=83=AA?= =?UTF-8?q?=E3=81=AB=E3=82=B3=E3=83=94=E3=83=BC=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F=20=E3=83=BBFATFS=E3=81=AE?= =?UTF-8?q?=E8=A8=B1=E5=8F=AF=E3=82=A2=E3=83=BC=E3=82=AB=E3=82=A4=E3=83=96?= =?UTF-8?q?=E3=83=AA=E3=82=B9=E3=83=88=E3=81=AE=E5=A0=B4=E6=89=80=E3=82=92?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=9F=20=E3=83=BBFS=E3=81=AE=E3=81=86=E3=81=A1?= =?UTF-8?q?=E3=80=81sdmc=5Flauncher=E3=81=A7=E3=81=AE=E3=81=BF=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E3=81=99=E3=82=8B=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92?= =?UTF-8?q?=E5=88=86=E9=9B=A2=E3=81=97=E3=81=9F=20=E3=83=BB=E5=85=B1?= =?UTF-8?q?=E6=9C=89=E3=83=A1=E3=83=A2=E3=83=AA=E3=81=AEFS=E7=94=A8?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=83=95=E3=82=A1=E3=82=92=E3=81=84=E3=82=8D?= =?UTF-8?q?=E3=81=84=E3=82=8D=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=9F(rollback)=20=E3=83=BB=E5=88=A9=E7=94=A8?= =?UTF-8?q?=E5=BE=8C=E3=81=AE=E5=85=B1=E6=9C=89=E3=83=A1=E3=83=A2=E3=83=AA?= =?UTF-8?q?=E3=81=AEFS=E7=94=A8=E3=83=90=E3=83=83=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=92=E6=B6=88=E3=81=99=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=81=9F=20=E3=83=BB=E3=82=A2=E3=83=89=E3=83=AC=E3=82=B9?= =?UTF-8?q?=E3=81=AE=E5=A4=89=E3=82=8F=E3=82=89=E3=81=AA=E3=81=84=E3=83=9D?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=BF=E3=81=ABconst=E3=82=92=E4=BB=98?= =?UTF-8?q?=E3=81=91=E3=81=9F(void=20*const=E3=81=AE=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@931 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/gcdfirm/sdmc-launcher/ARM9/main.c | 2 +- build/libraries/fatfs/ARM9/src/fatfs_firm.c | 2 + build/libraries/fs/ARM7/Makefile | 2 +- build/libraries/fs/ARM7/src/fs_firm.c | 64 ++--------------- build/libraries/fs/ARM7/src/fs_firm_ex.c | 76 +++++++++++++++++++++ build/libraries/fs/ARM9/src/fs_firm.c | 8 +-- build/libraries/os/common/os_boot.c | 32 +++++++-- build/nandfirm/menu-launcher/ARM7/main.c | 3 - build/nandfirm/sdmc-launcher/ARM9/main.c | 10 +-- include/firm/fs.h | 1 + include/firm/fs/ARM7/fs_firm.h | 11 --- include/firm/fs/ARM7/fs_firm_ex.h | 42 ++++++++++++ include/firm/fs/ARM9/fs_firm.h | 4 +- include/firm/hw/ARM7/mmap_firm.h | 2 +- include/firm/hw/common/mmap_firm.h | 10 +-- 15 files changed, 171 insertions(+), 98 deletions(-) create mode 100644 build/libraries/fs/ARM7/src/fs_firm_ex.c create mode 100644 include/firm/fs/ARM7/fs_firm_ex.h diff --git a/build/gcdfirm/sdmc-launcher/ARM9/main.c b/build/gcdfirm/sdmc-launcher/ARM9/main.c index 9d16e6ca..4edb09fa 100644 --- a/build/gcdfirm/sdmc-launcher/ARM9/main.c +++ b/build/gcdfirm/sdmc-launcher/ARM9/main.c @@ -260,7 +260,7 @@ void TwlMain( void ) // 3: after PostInit PUSH_PROFILE(); - STD_CopyString((char*)HW_FIRM_TEMP_SRL_PATH_BUF, MENU_FILE); + STD_CopyString((char*)HW_TWL_FS_BOOT_SRL_PATH_BUF, MENU_FILE); // 4: after STD_CopyString PUSH_PROFILE(); diff --git a/build/libraries/fatfs/ARM9/src/fatfs_firm.c b/build/libraries/fatfs/ARM9/src/fatfs_firm.c index 71fca82f..1c3d776f 100644 --- a/build/libraries/fatfs/ARM9/src/fatfs_firm.c +++ b/build/libraries/fatfs/ARM9/src/fatfs_firm.c @@ -21,7 +21,9 @@ void FATFS_InitFIRM( void ) { MI_CpuClearFast( (void*)HW_FIRM_FATFS_COMMAND_BUFFER, HW_FIRM_FATFS_COMMAND_BUFFER_SIZE ); + MI_CpuClearFast( (void*)HW_FIRM_FATFS_ARCHNAME_LIST, HW_FIRM_FATFS_ARCHNAME_LIST_SIZE ); FATFSiCommandBuffer = (void*)HW_FIRM_FATFS_COMMAND_BUFFER; + FATFSiArcnameList = (void*)HW_FIRM_FATFS_ARCHNAME_LIST; FATFS_Init(); } diff --git a/build/libraries/fs/ARM7/Makefile b/build/libraries/fs/ARM7/Makefile index a4bec5b3..20d58305 100644 --- a/build/libraries/fs/ARM7/Makefile +++ b/build/libraries/fs/ARM7/Makefile @@ -32,7 +32,7 @@ LINCLUDES = \ $(ROOT)/build/libraries/fatfs/ARM7.TWL/include \ $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/twl/fatfs/ARM7 -SRCS = fs_firm.c fs_loader.c +SRCS = fs_firm.c fs_firm_ex.c fs_loader.c TARGET_LIB = libfs_sp$(FIRM_LIBSUFFIX).a diff --git a/build/libraries/fs/ARM7/src/fs_firm.c b/build/libraries/fs/ARM7/src/fs_firm.c index 57d0e01b..f982d468 100644 --- a/build/libraries/fs/ARM7/src/fs_firm.c +++ b/build/libraries/fs/ARM7/src/fs_firm.c @@ -114,62 +114,8 @@ void FS_InitMountInfo( BOOL nand, BOOL sdmc ) *(u32*)dest = 0; } *(u8*)HW_TWL_RED_LAUNCHER_VER = 1; - STD_CopyString( "nand:/sys/HWINFO_S.dat", (void*)HW_FIRM_BOOT_SRL_PATH_BUF ); // dummy for firm -} - -/*---------------------------------------------------------------------------* - Name: FS_SetMountInfoForSrl - - Description: set mount info for srl file - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void FS_SetMountInfoForSrl( void ) -{ - const OSMountInfo defaultMountList[] 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, 0, 0, 0, "nand", "/" }, // ユーザーアプリはこのアーカイブではR/W不可 - { 'B', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, 0, 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", "/" }, - }; -#define NAND_MOUNT_INDEX 0 -#define NAND2_MOUNT_INDEX 1 -#define CONTENT_MOUNT_INDEX 2 - const ROM_Header_Short* const rhs = HW_TWL_ROM_HEADER_BUF; - OSMountInfo* const dest = (OSMountInfo*)HW_FIRM_MOUNT_INFO_BUF; - - MI_CpuCopy8(defaultMountList, dest, sizeof(defaultMountList)); - // nandアプリならパスを追加 - if ( *(char*)HW_FIRM_BOOT_SRL_PATH_BUF ) - { - const char* lastpath = STD_SearchCharReverse( (char*)HW_FIRM_BOOT_SRL_PATH_BUF, '/' ); - if (lastpath && *(char*)(lastpath-1) != ':') - { - u32 len = (u32)(lastpath - (char*)HW_FIRM_BOOT_SRL_PATH_BUF); - if (len > OS_MOUNT_PATH_LEN) - { - len = OS_MOUNT_PATH_LEN; - } - MI_CpuCopy8((char*)HW_FIRM_BOOT_SRL_PATH_BUF, dest[CONTENT_MOUNT_INDEX].path, len); - if (len != OS_MOUNT_PATH_LEN) - { - ((char*)HW_FIRM_BOOT_SRL_PATH_BUF)[len] = 0; - } - } - } - // secureアプリならアクセス許可 - if ( rhs->titleID_Hi & TITLE_ID_HI_SECURE_FLAG_MASK ) - { - dest[NAND_MOUNT_INDEX].userPermission = dest[NAND2_MOUNT_INDEX].userPermission = (OS_MOUNT_USR_R|OS_MOUNT_USR_W); - } + *(char*)HW_FIRM_BOOT_SRL_PATH_BUF = 0; +// MI_CpuCopy8("nand:/nandfirm/menu_launcher.srl", (char*)HW_FIRM_BOOT_SRL_PATH_BUF, 0x40); } /*---------------------------------------------------------------------------* @@ -183,8 +129,8 @@ void FS_SetMountInfoForSrl( void ) *---------------------------------------------------------------------------*/ int FS_OpenSrl( void ) { - u16 fatpath[HW_FIRM_BOOT_SRL_PATH_BUF_SIZE]; - MI_CpuCopyFast((void*)HW_FIRM_TEMP_SRL_PATH_BUF, (void*)HW_FIRM_BOOT_SRL_PATH_BUF, HW_FIRM_BOOT_SRL_PATH_BUF_SIZE); - ConvertPath(fatpath, (void*)HW_FIRM_BOOT_SRL_PATH_BUF, HW_FIRM_BOOT_SRL_PATH_BUF_SIZE); +#define BOOT_SRL_PATH_BUF_SIZE (HW_TWL_ROM_HEADER_BUF - HW_TWL_FS_BOOT_SRL_PATH_BUF) + u16 fatpath[BOOT_SRL_PATH_BUF_SIZE]; + ConvertPath(fatpath, (void*)HW_TWL_FS_BOOT_SRL_PATH_BUF, BOOT_SRL_PATH_BUF_SIZE); return FATFSi_rtfs_po_open((u8*)fatpath, 0, 0); } diff --git a/build/libraries/fs/ARM7/src/fs_firm_ex.c b/build/libraries/fs/ARM7/src/fs_firm_ex.c new file mode 100644 index 00000000..6493fdcc --- /dev/null +++ b/build/libraries/fs/ARM7/src/fs_firm_ex.c @@ -0,0 +1,76 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - libraries - fs + File: fs_firm_ex.c + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + +#include + +#if 0 + すべて確実ではないコード + 本来ならメインメモリ辺りにデータを置き、REBOOT内部でコピーする必要がある +#endif + +/*---------------------------------------------------------------------------* + Name: FS_SetMountInfoForSrl + + Description: set mount info for srl file + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void FS_SetMountInfoForSrl( void ) +{ + const OSMountInfo defaultMountList[] 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, 0, 0, 0, "nand", "/" }, // ユーザーアプリはこのアーカイブではR/W不可 + { 'B', OS_MOUNT_DEVICE_NAND, OS_MOUNT_TGT_ROOT, 1, OS_MOUNT_RSC_WRAM, 0, 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", "/" }, + }; +#define NAND_MOUNT_INDEX 0 +#define NAND2_MOUNT_INDEX 1 +#define CONTENT_MOUNT_INDEX 2 + const ROM_Header_Short* const rhs = HW_TWL_ROM_HEADER_BUF; + const char* const srl = HW_TWL_FS_BOOT_SRL_PATH_BUF; + OSMountInfo* dest = (OSMountInfo *)HW_TWL_FS_MOUNT_INFO_BUF; + + MI_CpuCopy8(defaultMountList, dest, sizeof(defaultMountList)); + // nandアプリならパスを追加 + if ( *srl ) + { + const char* lastpath = STD_SearchCharReverse( srl, '/' ); + u32 len = (u32)(lastpath - srl); + if (len > OS_MOUNT_PATH_LEN) + { + len = OS_MOUNT_PATH_LEN; + } + MI_CpuCopy8(srl, dest[CONTENT_MOUNT_INDEX].path, len); + if (len != OS_MOUNT_PATH_LEN) + { + dest[CONTENT_MOUNT_INDEX].path[len] = 0; + } + } + // secureアプリならアクセス許可 + if ( rhs->titleID_Hi & TITLE_ID_HI_SECURE_FLAG_MASK ) + { + dest[NAND_MOUNT_INDEX].userPermission = dest[NAND2_MOUNT_INDEX].userPermission = (OS_MOUNT_USR_R|OS_MOUNT_USR_W); + } +} diff --git a/build/libraries/fs/ARM9/src/fs_firm.c b/build/libraries/fs/ARM9/src/fs_firm.c index 5fb6021f..414d24ea 100644 --- a/build/libraries/fs/ARM9/src/fs_firm.c +++ b/build/libraries/fs/ARM9/src/fs_firm.c @@ -175,7 +175,7 @@ BOOL FS_GetTitleBootContentPathFast(char* buf, OSTitleId titleId) /*---------------------------------------------------------------------------* Name: FS_ResolveSrl - Description: resolve srl filename and store to HW_FIRM_TEMP_SRL_PATH_BUF + Description: resolve srl filename and store to HW_TWL_FS_BOOT_SRL_PATH_BUF Arguments: titleId title id for srl file @@ -184,7 +184,7 @@ BOOL FS_GetTitleBootContentPathFast(char* buf, OSTitleId titleId) BOOL FS_ResolveSrl( OSTitleId titleId ) { if ( ES_ERR_OK != ES_InitLib() || - ES_ERR_OK != ES_GetContentPath(titleId, CONTENT_INDEX_BOOT, (char*)HW_FIRM_TEMP_SRL_PATH_BUF) || + ES_ERR_OK != ES_GetContentPath(titleId, CONTENT_INDEX_BOOT, (char*)HW_TWL_FS_BOOT_SRL_PATH_BUF) || ES_ERR_OK != ES_CloseLib() ) { return FALSE; @@ -195,7 +195,7 @@ BOOL FS_ResolveSrl( OSTitleId titleId ) /*---------------------------------------------------------------------------* Name: FS_ResolveSrlUnsecured - Description: resolve srl filename and store to HW_FIRM_TEMP_SRL_PATH_BUF + Description: resolve srl filename and store to HW_TWL_FS_BOOT_SRL_PATH_BUF without almost security check Arguments: titleId title id for srl file @@ -204,7 +204,7 @@ BOOL FS_ResolveSrl( OSTitleId titleId ) *---------------------------------------------------------------------------*/ BOOL FS_ResolveSrlUnsecured( OSTitleId titleId ) { - if ( !FS_GetTitleBootContentPathFast((char*)HW_FIRM_TEMP_SRL_PATH_BUF, titleId) ) + if ( !FS_GetTitleBootContentPathFast((char*)HW_TWL_FS_BOOT_SRL_PATH_BUF, titleId) ) { return FALSE; } diff --git a/build/libraries/os/common/os_boot.c b/build/libraries/os/common/os_boot.c index 279c0117..64ed03cf 100644 --- a/build/libraries/os/common/os_boot.c +++ b/build/libraries/os/common/os_boot.c @@ -16,6 +16,7 @@ *---------------------------------------------------------------------------*/ #include +#include #include "reboot.h" extern void SDK_STATIC_START(void); // static and bss start address @@ -34,15 +35,15 @@ void OS_BootWithRomHeaderFromFIRM( ROM_Header* rom_header ) { #ifdef SDK_ARM9 void *entry = rom_header->s.main_entry_address; - void *code_buf = (void*)OS_BOOT_CODE_BUF; // 0x023fee00 - void *stack_top = (void*)OS_BOOT_STACK_TOP; // (HW_DTCM_END - HW_DTCM_SYSRV_SIZE - HW_SVC_STACK_SIZE) + void *const code_buf = (void*)OS_BOOT_CODE_BUF; // 0x023fee00 + void *const stack_top = (void*)OS_BOOT_STACK_TOP; // (HW_DTCM_END - HW_DTCM_SYSRV_SIZE - HW_SVC_STACK_SIZE) #else void *entry = rom_header->s.sub_entry_address; - void *code_buf = (void*)OS_BOOT_CODE_BUF; // 0x03fff600 - void *stack_top = (void*)OS_BOOT_STACK_TOP; // (HW_WRAM_AREA_END - HW_PRV_WRAM_SYSRV_SIZE - HW_SVC_STACK_SIZE) + void *const code_buf = (void*)OS_BOOT_CODE_BUF; // 0x03fff600 + void *const stack_top = (void*)OS_BOOT_STACK_TOP; // (HW_WRAM_AREA_END - HW_PRV_WRAM_SYSRV_SIZE - HW_SVC_STACK_SIZE) #endif - void *wram_reg = rom_header->s.main_wram_config_data; - REBOOTTarget target = REBOOT_TARGET_TWL_SECURE; + void *const wram_reg = rom_header->s.main_wram_config_data; + REBOOTTarget target = rom_header->s.titleID_Hi & TITLE_ID_HI_SECURE_FLAG_MASK ? REBOOT_TARGET_TWL_SECURE : (rom_header->s.titleID_Hi & TITLE_ID_HI_APP_TYPE_MASK ? REBOOT_TARGET_TWL_SYSTEM : REBOOT_TARGET_TWL_APP); BOOL scfg = TRUE; // no touch BOOL jtag = FALSE; // no touch static u32 mem_list[32]; @@ -80,10 +81,25 @@ void OS_BootWithRomHeaderFromFIRM( ROM_Header* rom_header ) #endif // SDK_ARM7 mem_list[i++] = NULL; // copy forward +#ifdef SDK_ARM7 + if ( *(char*)HW_TWL_FS_MOUNT_INFO_BUF ) + { + mem_list[i++] = HW_TWL_FS_MOUNT_INFO_BUF; + mem_list[i++] = (u32)rom_header->s.sub_mount_info_ram_address; + mem_list[i++] = HW_TWL_ROM_HEADER_BUF - HW_TWL_FS_MOUNT_INFO_BUF; + } +#endif mem_list[i++] = NULL; // copy backward mem_list[i++] = NULL; // post clear +#ifdef SDK_ARM7 + if ( *(char*)HW_TWL_FS_MOUNT_INFO_BUF ) + { + mem_list[i++] = HW_TWL_FS_MOUNT_INFO_BUF; + mem_list[i++] = HW_TWL_ROM_HEADER_BUF - HW_TWL_FS_MOUNT_INFO_BUF; + } +#endif mem_list[i++] = NULL; SDK_ASSERT(i <= sizeof(mem_list)/sizeof(mem_list[0])); #ifdef FIRM_USE_TWLSDK_KEYS @@ -128,6 +144,10 @@ BOOL OSi_FromBromToMenu( void ) result = FALSE; } } +#if SDK_ARM7 + // copy nand context + MI_CpuCopyFast( &fromBromBuf->SDNandContext, (void*)HW_SD_NAND_CONTEXT_BUF, sizeof(SDPortContextData) ); +#endif // clear out of OSFromFirmBuf area MI_CpuClearFast( fromBromBuf->header.max, sizeof(fromBromBuf->header.max) ); return result; diff --git a/build/nandfirm/menu-launcher/ARM7/main.c b/build/nandfirm/menu-launcher/ARM7/main.c index 90ecfc8b..f9ebb98d 100644 --- a/build/nandfirm/menu-launcher/ARM7/main.c +++ b/build/nandfirm/menu-launcher/ARM7/main.c @@ -65,8 +65,6 @@ static char* debugPtr = (char*)PRINT_MEMORY_ADDR; #define DMA_FATFS_1 0 #define DMA_FATFS_2 1 -extern void* SDNandContext; /* NAND初期化パラメータ */ - static ROM_Header* const rh= (ROM_Header*)HW_TWL_ROM_HEADER_BUF; static OSThread idleThread; @@ -220,7 +218,6 @@ void TwlSpMain( void ) // PM_BackLightOn( FALSE ); - SDNandContext = &OSi_GetFromFirmAddr()->SDNandContext; if ( !FATFS_Init( DMA_FATFS_1, DMA_FATFS_2, THREAD_PRIO_FATFS ) ) { OS_TPrintf("Failed to call FATFS_Init().\n"); diff --git a/build/nandfirm/sdmc-launcher/ARM9/main.c b/build/nandfirm/sdmc-launcher/ARM9/main.c index 5eee2385..cb80e266 100644 --- a/build/nandfirm/sdmc-launcher/ARM9/main.c +++ b/build/nandfirm/sdmc-launcher/ARM9/main.c @@ -265,19 +265,19 @@ void TwlMain( void ) switch ( PAD_Read() & PAD_KEYPORT_MASK ) { case 0: - STD_CopyString((char*)HW_FIRM_TEMP_SRL_PATH_BUF, MENU_FILE); + STD_CopyString((char*)HW_TWL_FS_BOOT_SRL_PATH_BUF, MENU_FILE); break; case PAD_BUTTON_A: - STD_CopyString((char*)HW_FIRM_TEMP_SRL_PATH_BUF, MENU_FILE_A); + STD_CopyString((char*)HW_TWL_FS_BOOT_SRL_PATH_BUF, MENU_FILE_A); break; case PAD_BUTTON_B: - STD_CopyString((char*)HW_FIRM_TEMP_SRL_PATH_BUF, MENU_FILE_B); + STD_CopyString((char*)HW_TWL_FS_BOOT_SRL_PATH_BUF, MENU_FILE_B); break; case PAD_BUTTON_L: - STD_CopyString((char*)HW_FIRM_TEMP_SRL_PATH_BUF, MENU_FILE_L); + STD_CopyString((char*)HW_TWL_FS_BOOT_SRL_PATH_BUF, MENU_FILE_L); break; case PAD_BUTTON_R: - STD_CopyString((char*)HW_FIRM_TEMP_SRL_PATH_BUF, MENU_FILE_R); + STD_CopyString((char*)HW_TWL_FS_BOOT_SRL_PATH_BUF, MENU_FILE_R); break; default: OS_TPrintf("Unknown pad pattern (%X).\n", PAD_Read() & PAD_KEYPORT_MASK); diff --git a/include/firm/fs.h b/include/firm/fs.h index ccdaca37..38abac56 100644 --- a/include/firm/fs.h +++ b/include/firm/fs.h @@ -20,6 +20,7 @@ #ifdef SDK_ARM7 #include +#include #include #else #include diff --git a/include/firm/fs/ARM7/fs_firm.h b/include/firm/fs/ARM7/fs_firm.h index 9ab0388d..f28ad873 100644 --- a/include/firm/fs/ARM7/fs_firm.h +++ b/include/firm/fs/ARM7/fs_firm.h @@ -34,17 +34,6 @@ extern "C" { *---------------------------------------------------------------------------*/ void FS_InitMountInfo( BOOL nand, BOOL sdmc ); -/*---------------------------------------------------------------------------* - Name: FS_SetMountInfoForSrl - - Description: set mount info for srl file - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void FS_SetMountInfoForSrl( void ); - /*---------------------------------------------------------------------------* Name: FS_OpenSrl diff --git a/include/firm/fs/ARM7/fs_firm_ex.h b/include/firm/fs/ARM7/fs_firm_ex.h new file mode 100644 index 00000000..4b99e92f --- /dev/null +++ b/include/firm/fs/ARM7/fs_firm_ex.h @@ -0,0 +1,42 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - include - fs + File: fs_firm_ex.h + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: 2007-09-06$ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + +#ifndef FIRM_FS_FS_FIRM_EX_H_ +#define FIRM_FS_FS_FIRM_EX_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/*---------------------------------------------------------------------------* + Name: FS_SetMountInfoForSrl + + Description: set mount info for srl file + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void FS_SetMountInfoForSrl( void ); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + + +/* FIRM_FS_FS_FIRM_EX_H_ */ +#endif diff --git a/include/firm/fs/ARM9/fs_firm.h b/include/firm/fs/ARM9/fs_firm.h index 091ea8b6..21e772b0 100644 --- a/include/firm/fs/ARM9/fs_firm.h +++ b/include/firm/fs/ARM9/fs_firm.h @@ -54,7 +54,7 @@ BOOL FS_GetTitleBootContentPathFast(char* buf, OSTitleId titleId); /*---------------------------------------------------------------------------* Name: FS_ResolveSrl - Description: resolve srl filename and store to HW_FIRM_TEMP_SRL_PATH_BUF + Description: resolve srl filename and store to HW_TWL_FS_BOOT_SRL_PATH_BUF Arguments: titleId title id for srl file @@ -65,7 +65,7 @@ BOOL FS_ResolveSrl( OSTitleId titleId ); /*---------------------------------------------------------------------------* Name: FS_ResolveSrlUnsecured - Description: resolve srl filename and store to HW_FIRM_TEMP_SRL_PATH_BUF + Description: resolve srl filename and store to HW_TWL_FS_BOOT_SRL_PATH_BUF without almost security check Arguments: titleId title id for srl file diff --git a/include/firm/hw/ARM7/mmap_firm.h b/include/firm/hw/ARM7/mmap_firm.h index ebd6edd3..b26140d1 100644 --- a/include/firm/hw/ARM7/mmap_firm.h +++ b/include/firm/hw/ARM7/mmap_firm.h @@ -50,7 +50,7 @@ extern "C" { extern void SDK_MOUNT_INFO_TABLE(void); #define HW_FIRM_MOUNT_INFO_BUF (u32)SDK_MOUNT_INFO_TABLE #define HW_FIRM_MOUNT_INFO_BUF_END (HW_FIRM_MOUNT_INFO_BUF + HW_FIRM_MOUNT_INFO_BUF_SIZE) -#define HW_FIRM_MOUNT_INFO_BUF_SIZE (0x400 - OS_MOUNT_PATH_LEN) +#define HW_FIRM_MOUNT_INFO_BUF_SIZE 0x3C0 //------------------------------------- FIRM_BOOT_SRL_PATH_BUF #define HW_FIRM_BOOT_SRL_PATH_BUF HW_FIRM_MOUNT_INFO_BUF_END diff --git a/include/firm/hw/common/mmap_firm.h b/include/firm/hw/common/mmap_firm.h index d2847fa5..0e31e55c 100644 --- a/include/firm/hw/common/mmap_firm.h +++ b/include/firm/hw/common/mmap_firm.h @@ -32,16 +32,16 @@ extern "C" { #define HW_FIRM_LOAD_BUFFER_END (HW_FIRM_LOAD_BUFFER_BASE + HW_FIRM_LOAD_BUFFER_SIZE) //------------------------------------- FS/FATFS -#define HW_FIRM_TEMP_SRL_PATH_BUF (HW_FIRM_TEMP_SRL_PATH_BUF_END - HW_FIRM_TEMP_SRL_PATH_BUF_SIZE) // 0x2ff76fc -#define HW_FIRM_TEMP_SRL_PATH_BUF_SIZE FS_ENTRY_LONGNAME_MAX -#define HW_FIRM_TEMP_SRL_PATH_BUF_END HW_FIRM_FATFS_COMMAND_BUFFER // 0x02ff7800 +#define HW_FIRM_FATFS_ARCHNAME_LIST (HW_FIRM_FATFS_ARCHNAME_LIST_END - HW_FIRM_FATFS_ARCHNAME_LIST_SIZE) +#define HW_FIRM_FATFS_ARCHNAME_LIST_SIZE MATH_ROUNDUP(OS_MOUNT_ARCHIVE_NAME_LEN * OS_MOUNT_INFO_MAX + 1, 32) // 0xC0 +#define HW_FIRM_FATFS_ARCHNAME_LIST_END HW_FIRM_FATFS_COMMAND_BUFFER // 0x02ff6000 #define HW_FIRM_FATFS_COMMAND_BUFFER (HW_FIRM_FATFS_COMMAND_BUFFER_END - HW_FIRM_FATFS_COMMAND_BUFFER_SIZE) #define HW_FIRM_FATFS_COMMAND_BUFFER_SIZE FATFS_COMMAND_BUFFER_MAX // 0x800 -#define HW_FIRM_FATFS_COMMAND_BUFFER_END HW_FIRM_FS_TEMP_BUFFER // 0x02ff8000 +#define HW_FIRM_FATFS_COMMAND_BUFFER_END HW_FIRM_FS_TEMP_BUFFER // 0x02ff6800 #define HW_FIRM_FS_TEMP_BUFFER (HW_FIRM_FS_TEMP_BUFFER_END - HW_FIRM_FS_TEMP_BUFFER_SIZE) -#define HW_FIRM_FS_TEMP_BUFFER_SIZE FS_TEMPORARY_BUFFER_MAX // 0x4000 +#define HW_FIRM_FS_TEMP_BUFFER_SIZE FS_TEMPORARY_BUFFER_MAX // 0x5800 #define HW_FIRM_FS_TEMP_BUFFER_END HW_TWL_MAIN_MEM_SHARED // 0x02ffc000 #ifdef __cplusplus