diff --git a/build/systemMenu_tools/NandFirmWriter/ARM7.TWL/Makefile b/build/systemMenu_tools/NandFirmWriter/ARM7.TWL/Makefile index 8cf5fe8f..8751d9a9 100644 --- a/build/systemMenu_tools/NandFirmWriter/ARM7.TWL/Makefile +++ b/build/systemMenu_tools/NandFirmWriter/ARM7.TWL/Makefile @@ -1,9 +1,9 @@ #! make -f #---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL +# Project: TwlSDK - components - racoon.TWL # File: Makefile # -# Copyright 2008 Nintendo. All rights reserved. +# Copyright 2007-2008 Nintendo. All rights reserved. # # These coded instructions, statements, and computer programs contain # proprietary information of Nintendo of America Inc. and/or Nintendo @@ -11,35 +11,31 @@ # 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:: 2008-08-15#$ -# $Rev: 2167 $ -# $Author: yosiokat $ +# $Date:: 2008-09-18#$ +# $Rev: 8573 $ +# $Author: okubata_ryoma $ #---------------------------------------------------------------------------- -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -##override TWL_PLATFORM = TS -TWL_NO_STD_PCHDR = True -override TARGET_CODEGEN = ARM +override TARGET_PLATFORM = TWL +override TWL_PROC = ARM7 +override TWL_ARCHGEN = LIMITED +TWL_NO_STD_PCHDR = True +TWL_CODEGEN ?= ALL -ifndef TWLSDK_NOCRYPTO #---------------------------------------------------------------------------- -SRCS = crt0.SCFG_NOLOCK.c \ - main.c \ - kami_pxi.c \ - formatter.c \ - mcu_firm.c +SRCDIR += ./src ../../common/ARM7/src -TARGET_NAME = armadillo +SRCS = main.c initScfg.c kami_pxi.c formatter.c mcu_firm.c -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = $(TARGET_NAME).lsf +TARGET_NAME = racoon + +TARGET_NEF = $(TARGET_NAME).tef +LCFILE_SPEC = $(TARGET_NAME).lsf LCFILE_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).lcf.template LDRES_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).response.template -CRT0_O = crt0.SCFG_NOLOCK.o +CRT0_O = crt0.LTD.TWL.o # スタック不足防止の為、インライン展開せずにコンパイルする CCFLAGS_OPT = -O4 -inline off @@ -47,11 +43,20 @@ CCFLAGS_OPT = -O4 -inline off #---------------------------------------------------------------------------- include $(TWLSDK_ROOT)/build/buildtools/commondefs -MACRO_FLAGS += -DSDK_ARM7COMP_LTD -DSDK_SEA -DSDK_NOINIT +#MACRO_FLAGS += -DSDK_ARM7COMP_LTD + +ifeq ($(TWL_PLATFORM),BB) +MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037e0000' +else +MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' +endif MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' +LLIBRARY_DIRS += $(TWL_IPL_RED_ROOT)/lib/ARM7-TS/$(TWL_BUILD_DIR) \ + ./obj/ARM7-TS.LTD/$(TWL_BUILD_DIR) + LINCLUDES += $(ROOT)/build/libraries/spi/ARM7/include \ $(ROOT)/build/libraries/os/common/include \ $(TWL_IPL_RED_ROOT)/include \ @@ -62,20 +67,18 @@ LINCLUDES += $(ROOT)/build/libraries/spi/ARM7/include \ $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/fatfs \ $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/twl/fatfs/ARM7 -SRCDIR += ../../common/ARM7/src -LLIBRARY_DIRS += $(TWL_IPL_RED_ROOT)/lib/ARM7-TS/$(TWL_BUILD_DIR) \ - ./obj/ARM7-TS.LTD/$(TWL_BUILD_DIR) - -LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ - libsdio_sp$(TWL_LIBSUFFIX).a \ - libathdrv_sp$(TWL_LIBSUFFIX).a \ - libwpa_sp$(TWL_LIBSUFFIX).a \ - libhotsw_sp$(TWL_LIBSUFFIX).a \ - libreloc_info_sp$(TWL_LIBSUFFIX).a - -LLIBRARIES += libpm_sp.SYSMENU$(TWL_LIBSUFFIX).a -GLIBRARIES := $(filter-out libpm_sp$(TWL_LIBSUFFIX).a,$(GLIBRARIES)) +#LLIBRARIES += libwl_sp.TWL.LTD.a libsdio_hcd_twl$(TWL_LIBSUFFIX).a libsdio_busdriver$(TWL_LIBSUFFIX).a libsdio_lib$(TWL_LIBSUFFIX).a libARM7athdrv$(TWL_LIBSUFFIX).a +LLIBRARIES += libwl_sp.TWL.LTD.a +#LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ +# libcdc_sp$(TWL_LIBSUFFIX).a \ +# libtpex_sp$(TWL_LIBSUFFIX).a \ +# libmicex_sp$(TWL_LIBSUFFIX).a \ +# libsdio_hcd_twl$(TWL_LIBSUFFIX).a \ +# libsdio_busdriver$(TWL_LIBSUFFIX).a \ +# libsdio_lib$(TWL_LIBSUFFIX).a \ +# librompatch_sp$(TWL_LIBSUFFIX).a \ +# libARM7athdrv$(TWL_LIBSUFFIX).a LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) @@ -84,7 +87,4 @@ do-build: $(TARGETS) #---------------------------------------------------------------------------- include $(TWLSDK_ROOT)/build/buildtools/modulerules -#---------------------------------------------------------------------------- -endif #ifndef TWLSDK_NOCRYPTO - #===== End of Makefile ===== diff --git a/build/systemMenu_tools/NandFirmWriter/ARM7.TWL/src/main.c b/build/systemMenu_tools/NandFirmWriter/ARM7.TWL/src/main.c index a1ad1689..7876201c 100644 --- a/build/systemMenu_tools/NandFirmWriter/ARM7.TWL/src/main.c +++ b/build/systemMenu_tools/NandFirmWriter/ARM7.TWL/src/main.c @@ -1,8 +1,8 @@ /*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL + Project: TwlSDK - components - mongoose.TWL File: main.c - Copyright 2008 Nintendo. All rights reserved. + Copyright 2007-2009 Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo @@ -10,84 +10,120 @@ 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:: 2008-08-18#$ - $Rev: 2182 $ - $Author: kamikawa $ + $Date:: 2009-06-11#$ + $Rev: 10743 $ + $Author: okajima_manabu $ *---------------------------------------------------------------------------*/ #include #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#ifndef SDK_ARM7COMP_WO_WIRELESS +#include +#include +#endif // SDK_ARM7COMP_WO_WIRELESS +#ifndef SDK_ARM7COMP_WO_CAMERA +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include #include "nvram_sp.h" #include "kami_pxi.h" -#include +#ifdef SDK_SEA +#include +#endif // ifdef SDK_SEA /*---------------------------------------------------------------------------* 定数定義 *---------------------------------------------------------------------------*/ -/* 各スレッド優先度 */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // 暫定 -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_NWM_COMMAND 9 -#define THREAD_PRIO_NWM_WPA 10 -#define THREAD_PRIO_HOTSW 11 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 +#ifndef SDK_ARM7COMP_WO_WIRELESS +#define WM_WL_HEAP_SIZE 0x2100 +#define ATH_DRV_HEAP_SIZE 0x5800 +#define WPA_HEAP_SIZE 0x1C00 +#endif // SDK_ARM7COMP_WO_WIRELESS + +#define MEM_TYPE_WRAM 0 +#define MEM_TYPE_MAIN 1 + +/* Priorities of each threads */ +#define THREAD_PRIO_MCU 1 //4 /* ハードウェアリセット時に他のスレッドに優先して動く必要アリ */ +#define THREAD_PRIO_SPI 2 +#define THREAD_PRIO_SND 6 +#define THREAD_PRIO_FATFS 8 +#define THREAD_PRIO_AES 12 +#define THREAD_PRIO_SEA 12 +#define THREAD_PRIO_RTC 12 +#define THREAD_PRIO_SNDEX 14 +#define THREAD_PRIO_FS 15 /* OS_THREAD_LAUNCHER_PRIORITY 16 */ -/* ROM 内登録エリアの拡張言語コード */ -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 +#ifndef SDK_ARM7COMP_WO_WIRELESS +#define NWM_DMANO NWMSP_DMA_7 +#define THREAD_PRIO_NWM_COMMAND 9 +#define THREAD_PRIO_NWM_EVENT 7 +#define THREAD_PRIO_NWM_SDIO 8 +#define THREAD_PRIO_NWM_WPA 10 +#endif // SDK_ARM7COMP_WO_WIRELESS -/* 使用 DMA 番号 */ -#define DMA_NO_FATFS FATFS_DMA_4 // = 0 -#define DMA_NO_NWM 3 - -/* カードチャタリングカウンタ */ -#define CHATTERING_COUNTER 0x1988 // 100ms分 (0x1988 * 15.3us = 100000us) +// ROM 内登録エリアの拡張言語コード +#define ROMHEADER_FOR_CHINA_BIT 0x80 +#define ROMHEADER_FOR_KOREA_BIT 0x40 +#include +// エラーメッセージ用の文字列(コードサイズ削減のために用意、MAIN に配置するために const にしない) +static char strARM7[] ="ARM7:"; +static char strMemMAIN[] ="MAIN"; +static char strMemWRAM[] ="WRAM"; +static char strFailedCreateHeap[] ="%sFailedToCreateHeap.(%s)\n"; +static char strHeapSizeIs[] ="%s_HeapSize=%d (Margin:%d)\n"; +static char strInsufficientHeapSize[] ="%sInsufficientHeapSize. (0x%x < 0x%x)\n"; +#include +#include +static char strWramBeforeAdd[] ="WRAM(BeforeAddToHeap)"; +static char strMainBeforeAdd[] ="MAIN(BeforeAddToHeap)"; +#include /*---------------------------------------------------------------------------* 内部関数定義 *---------------------------------------------------------------------------*/ static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(void); -static void InitializeFatfs(void); -static void InitializeNwm(OSHeapHandle hh); -static void InitializeCardPower(void); -static void InitializeCdc(void); - +static OSHeapHandle InitializeAllocateSystem(u8 memType); +static OSHeapHandle InitializeAllocateSystemCore(u8 memType); +#ifdef SDK_TWLHYB +static OSHeapHandle InitializeAllocateSystemCoreEx(u8 memType); +#endif +static void DummyThread(void* arg); static void ReadUserInfo(void); #ifdef NVRAM_CONFIG_DATA_EX_VERSION static BOOL IsValidConfigEx(void); static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); +static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp); #else -static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); +static s32 CheckCorrectNCD(NVRAMConfig *ncdsp); #endif static void VBlankIntr(void); +static void InitializeFatfs(void); +#ifndef SDK_ARM7COMP_WO_WIRELESS +static void InitializeNwm(OSHeapHandle drvHeapHandle, OSHeapHandle wpaHeapHandle); +#endif // SDK_ARM7COMP_WO_WIRELESS +/*---------------------------------------------------------------------------* + 外部シンボル参照 + *---------------------------------------------------------------------------*/ +#ifdef SDK_TWLHYB +extern void SDK_LTDAUTOLOAD_LTDWRAM_BSS_END(void); +extern void SDK_LTDAUTOLOAD_LTDMAIN_BSS_END(void); +#endif /*---------------------------------------------------------------------------* Name: TwlSpMain @@ -98,64 +134,143 @@ static void VBlankIntr(void); void TwlSpMain(void) { - OSHeapHandle heapHandle; + OSHeapHandle wramHeapHandle; +#ifdef SDK_TWLLTD +#ifndef SDK_ARM7_ONLY_WRAM + OSHeapHandle mainHeapHandle; +#endif +#else + OSHeapHandle mainHeapHandle; +#endif - /* OS 初期化 */ + +#ifndef SDK_ARM7COMP_WO_WIRELESS +#ifdef SDK_WIRELESS_IN_VRAM + WVR_ShelterExtWram(); +#endif +#endif + + // OS 初期化 OS_Init(); PrintDebugInfo(); - /* NVRAM からユーザー情報読み出し */ + // NVRAM からユーザー情報読み出し ReadUserInfo(); - /* ヒープ領域設定 */ - heapHandle = InitializeAllocateSystem(); + // ヒープ領域設定 + wramHeapHandle = InitializeAllocateSystem(MEM_TYPE_WRAM); +#ifdef SDK_TWLLTD +#ifndef SDK_ARM7_ONLY_WRAM + mainHeapHandle = InitializeAllocateSystem(MEM_TYPE_MAIN); +#endif +#else + mainHeapHandle = InitializeAllocateSystem(MEM_TYPE_MAIN); +#endif - /* ボタン入力サーチ初期化 */ + // ボタン入力サーチ初期化 (void)PAD_InitXYButton(); - /* 割込み許可 */ + // 割り込み許可 (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); (void)OS_EnableIrqMask(OS_IE_V_BLANK); (void)GX_VBlankIntr(TRUE); (void)OS_EnableIrq(); (void)OS_EnableInterrupts(); -#ifndef NAND_INITIALIZER_LIMITED_MODE - KamiPxiInit(); -#endif + KamiPxiInit(); + + // ファイルシステム初期化 + FS_Init(FS_DMA_NOT_USE); + FS_CreateReadServerThread(THREAD_PRIO_FS); - /* 各ライブラリ初期化 */ - AES_Init(THREAD_PRIO_AES); // AES - SEA_Init(THREAD_PRIO_SEA); // SEA - FS_Init(FS_DMA_NOT_USE); // FS for CARD - FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD - InitializeFatfs(); // FAT-FS - InitializeNwm(heapHandle); // TWL 無線 - MCU_InitIrq(THREAD_PRIO_MCU); // マイコン - - if (OSi_IsCodecTwlMode() == TRUE) + if (OS_IsRunOnTwl() == TRUE) { - InitializeCdc(); // CODEC - CAMERA_Init(); // カメラ + InitializeFatfs(); // FATFS 初期化 +#ifndef SDK_ARM7COMP_WO_WIRELESS +#ifndef SDK_SEA // !暫定処置! + // NWM 初期化 +#ifdef SDK_TWLLTD +#ifdef SDK_ARM7_ONLY_WRAM + InitializeNwm(wramHeapHandle, wramHeapHandle); // tarsier コンポーネントでは、ヒープは全て WRAM +#else + InitializeNwm(mainHeapHandle, mainHeapHandle); // LIMITED モードでは 無線のヒープを MAIN から確保 +#endif +#else + InitializeNwm(wramHeapHandle, mainHeapHandle); // HYBRID モードでは 無線のヒープを WRAM から確保 +#endif +#endif // ifndef SDK_SEA +#endif // SDK_ARM7COMP_WO_WIRELESS + AES_Init(AES_DMA_5, AES_DMA_6, THREAD_PRIO_AES); // AES 初期化 +#ifdef SDK_SEA + SEA_Init(THREAD_PRIO_SEA); +#endif // ifdef SDK_SEA + MCU_InitIrq(THREAD_PRIO_MCU); // MCU 初期化 + + CDC_InitLib(); // CODECライブラリ初期化 } - SND_Init(THREAD_PRIO_SND); // サウンド - SNDEX_Init(THREAD_PRIO_SNDEX); // サウンド拡張 - RTC_Init(THREAD_PRIO_RTC); // RTC - WVR_Begin(heapHandle); // NITRO 無線 +#ifndef SDK_ARM7COMP_WO_CAMERA + if (OSi_IsCodecTwlMode() == TRUE) + { + // カメラ初期化 + CAMERA_Init(); + /* CODEC が TWL モードでないとシャッター音を強制的に鳴らす + 機能が使用できません。この為、CODEC が TWL モードの場合 + にのみカメラライブラリを使用可能な状態にします。 */ + } +#endif + + // サウンド初期化 + SND_Init(THREAD_PRIO_SND); + if (OS_IsRunOnTwl() == TRUE) + { + SNDEX_Init(THREAD_PRIO_SNDEX); + } + + // RTC 初期化 + RTC_Init(THREAD_PRIO_RTC); + + // 旧無線初期化 +#ifndef SDK_ARM7COMP_WO_WIRELESS + +#ifndef SDK_WIRELESS_IN_VRAM + +#ifndef SDK_SEA // !暫定処置! + WVR_Begin(wramHeapHandle); +#endif // ifdef SDK_SEA + +#else /* SDK_WIRELESS_IN_VRAM */ + WVR_Init(wramHeapHandle); +#endif + +#endif // SDK_ARM7COMP_WO_WIRELESS + + // SPI 初期化 SPI_Init(THREAD_PRIO_SPI); - InitializeCardPower(); // カード電源ON(検査プログラム用) while (TRUE) { OS_Halt(); - - /* ソフトウェアリセット要求は監視しない */ - /* AGB カートリッジの挿抜チェックは行わない */ - /* DS カードの挿抜チェックは行わない */ + + //---- check reset + if (OS_IsResetOccurred()) + { + //VIB_STOP + CTRDG_VibPulseEdgeUpdate(NULL); + + OS_ResetSystem(); + } + + //---- check pull out cartridge + CTRDG_CheckPullOut_Polling(); + +#ifndef SDK_SMALL_BUILD + //---- check pull out card + CARD_CheckPullOut_Polling(); +#endif } } - +#include /*---------------------------------------------------------------------------* Name: PrintDebugInfo Description: ARM7 コンポーネントの情報をデバッグ出力する。 @@ -165,66 +280,47 @@ TwlSpMain(void) static void PrintDebugInfo(void) { - OS_TPrintf("ARM7: This component is running on TWL.\n"); - OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: メモリ割当てシステムを初期化する。 - Arguments: None. - Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 - *---------------------------------------------------------------------------*/ -static OSHeapHandle -InitializeAllocateSystem(void) -{ - OSHeapHandle hh; - void* subLo = (void*)OS_GetWramSubArenaLo(); - void* subHi = (void*)OS_GetWramSubArenaHi(); - void* privLo = (void*)OS_GetWramSubPrivArenaLo(); - void* privHi = (void*)OS_GetWramSubPrivArenaHi(); - - if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) - { - /* SUB アリーナを SUBPRIV アリーナに吸収 */ - OS_SetWramSubArenaHi(subLo); - OS_SetWramSubPrivArenaLo(subLo); - privLo = subLo; - } - - /* アリーナを 0 クリア */ - MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); - - /* ヒープ作成初期化 */ - privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); - if (hh < 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - - /* カレントヒープに設定 */ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - /* ヒープサイズの確認 */ - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if (heapSize <= 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - OS_TPrintf("ARM7: heap size [%d]\n", heapSize); - } - - return hh; + if(OS_IsRunOnTwl()) + { + OS_TPrintf("%s TWL\n",strARM7); + } + else + { + OS_TPrintf("%s NITRO\n",strARM7); + } +#ifdef SDK_SEA +#ifdef SDK_TWLLTD + OS_TPrintf("%s armadillo.TWL\n",strARM7); +#else /* ifdef SDK_TWLLTD */ +#error invalid parameter combination +#endif /* ifdef SDK_TWLLTD else */ +#else /* ifdef SDK_SEA */ +#ifdef SDK_TWLLTD +#ifdef SDK_ARM7_ONLY_WRAM + OS_TPrintf("%s tarsier.TWL\n",strARM7); +#else +#if defined(SDK_ARM7COMP_WO_WIRELESS) && defined(SDK_ARM7COMP_WO_CAMERA) + OS_TPrintf("%s ferret.TWL\n", strARM7); +#else + OS_TPrintf("%s racoon.TWL\n",strARM7); +#endif +#endif +#else /* ifdef SDK_TWLLTD */ +#ifdef SDK_WIRELESS_IN_VRAM + OS_TPrintf("%s ichneumon.TWL\n",strARM7); +#else /* ifdef SDK_WIRELESS_IN_VRAM */ + OS_TPrintf("%s mongoose.TWL\n",strARM7); +#endif /* ifdef SDK_WIRELESS_IN_VRAM else */ +#endif /* ifdef SDK_TWLLTD else */ +#endif /* ifdef SDK_SEA else */ } +#include +#include /*---------------------------------------------------------------------------* Name: InitializeFatfs - Description: FATFSライブラリを初期化する。 + Description: FATFSライブラリを初期化する。FATFS初期化関数内でスレッド休止 + する為、休止中動作するダミーのスレッドを立てる。 Arguments: None. Returns: None. *---------------------------------------------------------------------------*/ @@ -237,81 +333,410 @@ InitializeFatfs(void) // do nothing } } +#include +#ifndef SDK_ARM7COMP_WO_WIRELESS +#include /*---------------------------------------------------------------------------* Name: InitializeNwm Description: NWMライブラリを初期化する。 - Arguments: hh - 利用可能なヒープのハンドルを指定。 + Arguments: None. Returns: None. *---------------------------------------------------------------------------*/ static void -InitializeNwm(OSHeapHandle hh) +InitializeNwm(OSHeapHandle drvHeapHandle, OSHeapHandle wpaHeapHandle) { - NwmspInit nwmInit; + NwmspInit nwmInit; - /* [TODO] 確保しているヒープ領域が新無線一式が必要としているメモリ量以上かのチェックが必要 */ + nwmInit.dmaNo = NWM_DMANO; + nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; + nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; + nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; - nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; - nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; - nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; +#ifdef SDK_TWLLTD +#ifdef SDK_ARM7_ONLY_WRAM + nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; /* [TODO] */ +#else + nwmInit.drvHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ +#endif +#else + nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; /* [TODO] */ +#endif + nwmInit.drvHeap.handle = drvHeapHandle; - nwmInit.dmaNo = DMA_NO_NWM; - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.drvHeap.handle = hh; - - nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; - nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.wpaHeap.handle = hh; + nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; +#ifdef SDK_TWLLTD +#ifdef SDK_ARM7_ONLY_WRAM + nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; /* [TODO] */ +#else + nwmInit.wpaHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ +#endif +#else + nwmInit.wpaHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ +#endif + nwmInit.wpaHeap.handle = wpaHeapHandle; NWMSP_Init(&nwmInit); -} +} +#include +#endif // SDK_ARM7COMP_WO_WIRELESS + +#include /*---------------------------------------------------------------------------* - Name: InitializeCardPower - Description: カード電源をONする。 - Arguments: None. + Name: DummyThread + Description: FATFSライブラリ、CDCライブラリを初期化する際に立てるダミーの + スレッド。 + Arguments: arg - 使用しない。 Returns: None. *---------------------------------------------------------------------------*/ static void -InitializeCardPower(void) +DummyThread(void* arg) { - // チャッタリングカウンタの値を設定 - reg_MI_MC1 = (u32)((reg_MI_MC1 & ~REG_MI_MC1_CC_MASK) | - (CHATTERING_COUNTER << REG_MI_MC1_CC_SHIFT)); +#pragma unused(arg) + while (TRUE) + { + } +} +#include - // チャタリングカウンタ分待つことによりCDETが0になる - OS_SpinWait( OS_MSEC_TO_CPUCYC(200) ); +/*---------------------------------------------------------------------------* + Name: InitializeAllocateSystem + Description: メモリ割当てシステムを初期化する。 + Arguments: None. + Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 + *---------------------------------------------------------------------------*/ +static OSHeapHandle InitializeAllocateSystem(u8 memType) +{ - // カードスロット1電源ON - HOTSWi_TurnCardPowerOn(1); + OSHeapHandle hh; + +#ifdef SDK_TWLHYB + if( OS_IsRunOnTwl() == TRUE) + { + hh = InitializeAllocateSystemCoreEx(memType); /* Hybrid を TWL で動作させる */ + } + else +#endif + { + hh = InitializeAllocateSystemCore(memType); /* Hybrid を DS で動作させる or Limited */ + } + + return hh; } /*---------------------------------------------------------------------------* - Name: InitializeCdc - Description: CDCライブラリを初期化する。 + Name: InitializeAllocateSystemCore + Description: メモリ割当てシステムを初期化する。 + Hybrid を DS で動作させた場合、Limited を TWL で動作させた場合に動作 Arguments: None. - Returns: None. + Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 *---------------------------------------------------------------------------*/ -static void -InitializeCdc(void) +static OSHeapHandle InitializeAllocateSystemCore(u8 memType) { - u32 spiLockId; + OSHeapHandle hh; - spiLockId = (u32)OS_GetLockID(); - if (spiLockId == OS_LOCK_ID_ERROR) - { - OS_Warning("OS_GetLockID failed.\n"); - } + /* MAIN */ + if(memType == MEM_TYPE_MAIN) + { + { + void* lo = (void*)OS_GetSubPrivArenaLo(); + void* hi = (void*)OS_GetSubPrivArenaHi(); - /* CODEC 初期化 */ - SPI_Lock(spiLockId); - CDC_Init(); - SPI_Unlock(spiLockId); + // アリーナを 0 クリア + MI_CpuClear8(lo, (u32)hi - (u32)lo); + + // メモリ割り当て初期化 + lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1); + // アリーナ下位アドレスを設定 + OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo); + + // ヒープ作成 + hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, lo, hi); + + if (hh < 0) + { + OS_Panic(strFailedCreateHeap, strARM7, strMemMAIN); + } + } + // カレントヒープに設定 + (void)OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh); + // ヒープサイズの確認 + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); + + if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ + { + OS_Panic(strFailedCreateHeap, strARM7, strMemMAIN); + } + + #ifdef SDK_TWLLTD +#ifndef SDK_ARM7COMP_WO_WIRELESS + { + if ((ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE) > heapSize) + { + OS_Panic(strInsufficientHeapSize, strARM7, heapSize, ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE); + } + } + OS_TPrintf(strHeapSizeIs, strMemMAIN, heapSize, heapSize - (ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE) ); +#else + OS_TPrintf(strHeapSizeIs, strMemMAIN, heapSize, heapSize); +#endif + #else + OS_TPrintf(strHeapSizeIs, strMemMAIN, heapSize, heapSize); + #endif + } + } + + /* WRAM */ + if( memType == MEM_TYPE_WRAM) + { + { + void* lo = (void*)OS_GetWramSubPrivArenaLo(); + void* hi = (void*)OS_GetWramSubPrivArenaHi(); + + // アリーナを 0 クリア + MI_CpuClear8(lo, (u32)hi - (u32)lo); + + // メモリ割り当て初期化 + lo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, lo, hi, 1); + // アリーナ下位アドレスを設定 + OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, lo); + + // ヒープ作成 + hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, lo, hi); + + if (hh < 0) + { + OS_Panic(strFailedCreateHeap, strARM7, strMemWRAM); + } + } + + // カレントヒープに設定 + (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); + + // ヒープサイズの確認 + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); + + if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ + { + OS_Panic(strFailedCreateHeap, strARM7, strMemWRAM); + } + +#ifndef SDK_ARM7COMP_WO_WIRELESS + if (WM_WL_HEAP_SIZE > heapSize) + { + OS_Panic(strInsufficientHeapSize, strARM7, heapSize, WM_WL_HEAP_SIZE); + } + OS_TPrintf(strHeapSizeIs, strMemWRAM, heapSize, (heapSize-WM_WL_HEAP_SIZE)); +#else + OS_TPrintf(strHeapSizeIs, strMemWRAM, heapSize, heapSize); +#endif + } + } + return hh; } -//#ifdef WM_PRECALC_ALLOWEDCHANNEL -//extern u16 WMSP_GetAllowedChannel(u16 bitField); -//#endif +#ifdef SDK_TWLHYB +#include +/*---------------------------------------------------------------------------* + Name: InitializeAllocateSystemCoreEx + Description: メモリ割当てシステムを初期化する。 + Hybrid を TWL で動作させた場合に動作 + Arguments: None. + Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 + *---------------------------------------------------------------------------*/ +static OSHeapHandle InitializeAllocateSystemCoreEx(u8 memType) +{ + OSHeapHandle hh; + + if(memType == MEM_TYPE_MAIN) + { + { + void* basicLo = (void*)OS_GetSubPrivArenaLo(); + void* basicHi = (void*)OS_GetSubPrivArenaHi(); + void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDMAIN_BSS_END, 32); + void* extraHi = (void*)MATH_ROUNDDOWN(HW_MAIN_MEM_SUB, 32); + +// メモリ節約のためにコメントアウト +/* +#if SDK_DEBUG + // debug information + OS_TPrintf("ARM7: MAIN arena basicLo = %p\n", basicLo); + OS_TPrintf("ARM7: MAIN arena basicHi = %p\n", basicHi); + OS_TPrintf("ARM7: MAIN arena extraLo = %p\n", extraLo); + OS_TPrintf("ARM7: MAIN arena extraHi = %p\n", extraHi); +#endif +*/ + // アリーナを 0 クリア + MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); + MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); + + // メモリ割り当て初期化 + if ((u32)basicLo < (u32)extraLo) + { + basicLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, basicLo, extraHi, 1); + // アリーナ下位アドレスを設定 + OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, basicLo); + } + else + { + extraLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, extraLo, basicHi, 1); + } + + // ヒープ作成 + hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, basicLo, basicHi); + + if (hh < 0) + { + OS_Panic(strFailedCreateHeap, strARM7, strMemMAIN); + } + + // ヒープサイズの確認 + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); + + if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ + { + OS_Panic(strFailedCreateHeap, strARM7, strMemMAIN); + } + + OS_TPrintf(strHeapSizeIs, strMainBeforeAdd, heapSize, heapSize); + } + + // ヒープに拡張ブロックを追加 + OS_AddToHeap(OS_ARENA_MAIN_SUBPRIV, hh, extraLo, extraHi); + } + // カレントヒープに設定 + (void)OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh); + // ヒープサイズの確認 + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); + + if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ + { + OS_Panic(strFailedCreateHeap, strARM7, strMemMAIN); + } + +#ifndef SDK_ARM7COMP_WO_WIRELESS + if ((WPA_HEAP_SIZE) > heapSize) + { + OS_Panic(strInsufficientHeapSize, strARM7, heapSize, WPA_HEAP_SIZE); + } + OS_TPrintf(strHeapSizeIs, strMemMAIN, heapSize, (heapSize-WPA_HEAP_SIZE)); +#else + OS_TPrintf(strHeapSizeIs, strMemMAIN, heapSize, heapSize); +#endif + } + } + + if(memType == MEM_TYPE_WRAM) + { + { + void* basicLo = (void*)OS_GetWramSubPrivArenaLo(); + void* basicHi = (void*)OS_GetWramSubPrivArenaHi(); + void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDWRAM_BSS_END, 32); + void* extraHi = (void*)MATH_ROUNDDOWN(HW_WRAM_A_HYB_END, 32); + +// メモリ節約のためにコメントアウト +/* +#if SDK_DEBUG + // debug information + OS_TPrintf("ARM7: WRAM arena basicLo = %p\n", basicLo); + OS_TPrintf("ARM7: WRAM arena basicHi = %p\n", basicHi); + OS_TPrintf("ARM7: WRAM arena extraLo = %p\n", extraLo); + OS_TPrintf("ARM7: WRAM arena extraHi = %p\n", extraHi); +#endif +*/ + // アリーナを 0 クリア + MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); + MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); + + // メモリ割り当て初期化 + if ((u32)basicLo < (u32)extraLo) + { + basicLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, basicLo, extraHi, 1); + // アリーナ下位アドレスを設定 + OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, basicLo); + } + else + { + extraLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, extraLo, basicHi, 1); + } + + // ヒープ作成 + hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, basicLo, basicHi); + + if (hh < 0) + { + OS_Panic(strFailedCreateHeap, strARM7, strMemWRAM); + } + + // ヒープサイズの確認 + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); + + if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ + { + OS_Panic(strFailedCreateHeap, strARM7, strMemWRAM); + } + + if (WM_WL_HEAP_SIZE > heapSize) + { + OS_Panic(strInsufficientHeapSize, strARM7, heapSize, WM_WL_HEAP_SIZE); + } + OS_TPrintf(strHeapSizeIs, strWramBeforeAdd, heapSize, (heapSize - WM_WL_HEAP_SIZE) ); + } + + // ヒープに拡張ブロックを追加 + OS_AddToHeap(OS_ARENA_WRAM_SUBPRIV, hh, extraLo, extraHi); + } + + // カレントヒープに設定 + (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); + + // ヒープサイズの確認 + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); + + if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ + { + OS_Panic(strFailedCreateHeap, strARM7, strMemWRAM); + } + +#ifndef SDK_ARM7COMP_WO_WIRELESS + if (ATH_DRV_HEAP_SIZE + WM_WL_HEAP_SIZE > heapSize) + { + OS_Panic(strInsufficientHeapSize, strARM7, heapSize, WM_WL_HEAP_SIZE + ATH_DRV_HEAP_SIZE ); + } + OS_TPrintf(strHeapSizeIs, strMemWRAM, heapSize, heapSize - (WM_WL_HEAP_SIZE + ATH_DRV_HEAP_SIZE) ); +#else + OS_TPrintf(strHeapSizeIs, strMemWRAM, heapSize, (heapSize - WM_WL_HEAP_SIZE) ); +#endif + } + } + + return hh; +} +#include +#endif + +#ifdef WM_PRECALC_ALLOWEDCHANNEL +extern u16 WMSP_GetAllowedChannel(u16 bitField); +#endif /*---------------------------------------------------------------------------* Name: ReadUserInfo @@ -405,7 +830,7 @@ static void ReadUserInfo(void) // 共有領域に展開 MI_CpuCopy8(wMac, p, 6); } -/* + #ifdef WM_PRECALC_ALLOWEDCHANNEL // 使用可能チャンネルから使用許可チャンネルを計算 { @@ -422,7 +847,6 @@ static void ReadUserInfo(void) *((u16 *)p) = allowedChannel; } #endif -*/ } #ifdef NVRAM_CONFIG_DATA_EX_VERSION @@ -642,7 +1066,7 @@ static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) Returns: None. *---------------------------------------------------------------------------*/ extern BOOL PMi_Initialized; -extern void PM_SelfBlinkProc(void); +void PM_SelfBlinkProc(void); static void VBlankIntr(void) diff --git a/build/systemMenu_tools/NandFirmWriter/ARM9.TWL/Makefile b/build/systemMenu_tools/NandFirmWriter/ARM9.TWL/Makefile index 9e564e17..f7e1fa3e 100644 --- a/build/systemMenu_tools/NandFirmWriter/ARM9.TWL/Makefile +++ b/build/systemMenu_tools/NandFirmWriter/ARM9.TWL/Makefile @@ -19,7 +19,7 @@ #---------------------------------------------------------------------------- SYSM_DISABLE_DEBUG = FALSE -TARGET_FIRM = SYSTEMMENU +#TARGET_FIRM = SYSTEMMENU TARGET_PLATFORM = TWL TWL_ARCHGEN = LIMITED @@ -32,7 +32,7 @@ TARGET_BIN = NandFirmWriter.srl LCFILE_SPEC = ARM9-TS.lsf ROM_SPEC = main.rsf -MAKEROM_ARM7_BASE = ../ARM7.TWL/bin/$(TWL_BUILDTYPE_ARM7)/armadillo +MAKEROM_ARM7_BASE = ../ARM7.TWL/bin/$(TWL_BUILDTYPE_ARM7)/racoon MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) SRCS = main.c \ @@ -71,7 +71,7 @@ SDK_APPEND_LIBS = \ LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe +MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.exe #LDIRT_CLEAN = #INSTALL_TARGETS = diff --git a/build/systemMenu_tools/NandFirmWriter/ARM9.TWL/main.rsf b/build/systemMenu_tools/NandFirmWriter/ARM9.TWL/main.rsf index aa90c945..f3ebab35 100644 --- a/build/systemMenu_tools/NandFirmWriter/ARM9.TWL/main.rsf +++ b/build/systemMenu_tools/NandFirmWriter/ARM9.TWL/main.rsf @@ -123,22 +123,22 @@ Property # # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] # - CommonClientKey TRUE + #CommonClientKey TRUE # # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] # - HwAESSlotB TRUE + #HwAESSlotB TRUE # # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] # - HwAESSlotC TRUE + #HwAESSlotC TRUE # # SDCardAccess: sd card access control [TRUE/FALSE] # - SDCardAccess TRUE + SDCardAccess Read # # NANDAccess: NAND access control [TRUE/FALSE] @@ -176,7 +176,7 @@ AppendProperty # # Application type : [USER/SYSTEM] # don't have to edit - AppType System + #AppType System # # launch title on the launcher : [TRUE/FALSE] @@ -191,7 +191,7 @@ AppendProperty # # Secure title : [TRUE/FALSE] # don't have to edit - Secure TRUE + #Secure TRUE # # Boot allowed Media: [GameCard/NAND]