mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
NANDへの書き込み中は デバッガによる強制中断を実行できなくする処理をいれました。(SystemUpdater 及び NandInitializer)
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1587 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
fd9efd87fc
commit
bcffbd74dc
@ -93,14 +93,17 @@ SRCS = main.c \
|
|||||||
process_fade.c \
|
process_fade.c \
|
||||||
process_font.c \
|
process_font.c \
|
||||||
sd_event.c \
|
sd_event.c \
|
||||||
hwi.c
|
hwi.c \
|
||||||
|
debugger_hw_reset_control.c
|
||||||
|
|
||||||
LINCLUDES = ../../NandInitializerRed/common/include \
|
LINCLUDES = ../../NandInitializerRed/common/include \
|
||||||
../../NandInitializerRed/ARM9.TWL/include \
|
../../NandInitializerRed/ARM9.TWL/include \
|
||||||
$(ROOT)/build/libraries/lcfg/ARM9.TWL/include
|
$(ROOT)/build/libraries/lcfg/ARM9.TWL/include \
|
||||||
|
../../common/ARM9/include
|
||||||
|
|
||||||
SRCDIR = ../../NandInitializerRed/ARM9.TWL/src \
|
SRCDIR = ../../NandInitializerRed/ARM9.TWL/src \
|
||||||
../../HWInfoWriter/ARM9/src
|
../../HWInfoWriter/ARM9/src \
|
||||||
|
../../common/ARM9/src
|
||||||
|
|
||||||
#LCFILE = # using default
|
#LCFILE = # using default
|
||||||
|
|
||||||
|
|||||||
@ -76,14 +76,17 @@ SRCS = main.c \
|
|||||||
process_font.c \
|
process_font.c \
|
||||||
process_wireless_setting.c \
|
process_wireless_setting.c \
|
||||||
sd_event.c \
|
sd_event.c \
|
||||||
hwi.c
|
hwi.c \
|
||||||
|
debugger_hw_reset_control.c
|
||||||
|
|
||||||
LINCLUDES = ../../NandInitializerRed/common/include \
|
LINCLUDES = ../../NandInitializerRed/common/include \
|
||||||
../../NandInitializerRed/ARM9.TWL/include \
|
../../NandInitializerRed/ARM9.TWL/include \
|
||||||
$(ROOT)/build/libraries/lcfg/ARM9.TWL/include
|
$(ROOT)/build/libraries/lcfg/ARM9.TWL/include \
|
||||||
|
../../common/ARM9/include
|
||||||
|
|
||||||
SRCDIR = ../../NandInitializerRed/ARM9.TWL/src \
|
SRCDIR = ../../NandInitializerRed/ARM9.TWL/src \
|
||||||
../../HWInfoWriter/ARM9/src
|
../../HWInfoWriter/ARM9/src \
|
||||||
|
../../common/ARM9/src
|
||||||
|
|
||||||
#LCFILE = # using default
|
#LCFILE = # using default
|
||||||
|
|
||||||
|
|||||||
@ -72,13 +72,16 @@ SRCS = main.c \
|
|||||||
process_font.c \
|
process_font.c \
|
||||||
process_wireless_setting.c \
|
process_wireless_setting.c \
|
||||||
sd_event.c \
|
sd_event.c \
|
||||||
hwi.c
|
hwi.c \
|
||||||
|
debugger_hw_reset_control.c
|
||||||
|
|
||||||
LINCLUDES = ../common/include \
|
LINCLUDES = ../common/include \
|
||||||
$(ROOT)/build/libraries/lcfg/ARM9.TWL/include
|
$(ROOT)/build/libraries/lcfg/ARM9.TWL/include \
|
||||||
|
../../common/ARM9/include
|
||||||
|
|
||||||
SRCDIR = src \
|
SRCDIR = src \
|
||||||
../../HWInfoWriter/ARM9/src
|
../../HWInfoWriter/ARM9/src \
|
||||||
|
../../common/ARM9/src
|
||||||
|
|
||||||
#LCFILE = # using default
|
#LCFILE = # using default
|
||||||
|
|
||||||
|
|||||||
@ -29,6 +29,7 @@
|
|||||||
#include "process_fade.h"
|
#include "process_fade.h"
|
||||||
#include "cursor.h"
|
#include "cursor.h"
|
||||||
#include "keypad.h"
|
#include "keypad.h"
|
||||||
|
#include "debugger_hw_reset_control.h"
|
||||||
|
|
||||||
#include <sysmenu/namut.h>
|
#include <sysmenu/namut.h>
|
||||||
|
|
||||||
@ -218,8 +219,14 @@ void* FormatProcess2(void)
|
|||||||
kamiFontPrintf(24, y_pos, FONT_COLOR_BLACK, " WAIT");
|
kamiFontPrintf(24, y_pos, FONT_COLOR_BLACK, " WAIT");
|
||||||
kamiFontLoadScreenData();
|
kamiFontLoadScreenData();
|
||||||
|
|
||||||
|
// ISデバッガのハードウェアリセットを禁止する
|
||||||
|
DEBUGGER_HwResetDisable();
|
||||||
|
|
||||||
result &= NAMUT_Format();
|
result &= NAMUT_Format();
|
||||||
|
|
||||||
|
// ISデバッガのハードウェアリセットを許可する
|
||||||
|
DEBUGGER_HwResetEnable();
|
||||||
|
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
kamiFontPrintf(24, y_pos, FONT_COLOR_GREEN, " OK ");
|
kamiFontPrintf(24, y_pos, FONT_COLOR_GREEN, " OK ");
|
||||||
@ -255,29 +262,21 @@ void* FormatProcess2(void)
|
|||||||
kamiFontPrintf(24, y_pos, FONT_COLOR_BLACK, " WAIT");
|
kamiFontPrintf(24, y_pos, FONT_COLOR_BLACK, " WAIT");
|
||||||
kamiFontLoadScreenData();
|
kamiFontLoadScreenData();
|
||||||
|
|
||||||
// FATFS_UnmountDrive("F:");
|
// ISデバッガのハードウェアリセットを禁止する
|
||||||
// FATFS_UnmountDrive("G:");
|
DEBUGGER_HwResetDisable();
|
||||||
// 指定のNANDパーティション0をFドライブにマウント
|
|
||||||
// if (FATFS_MountDrive("F", FATFS_MEDIA_TYPE_NAND, 0))
|
// チェックディスク実行
|
||||||
|
if (FATFS_CheckDisk("nand:", &info, TRUE, TRUE, TRUE))
|
||||||
{
|
{
|
||||||
// ƒ`ƒFƒbƒNƒfƒBƒXƒNŽÀ<C5BD>s
|
// ƒ`ƒFƒbƒNƒfƒBƒXƒNŽÀ<C5BD>s
|
||||||
if (FATFS_CheckDisk("nand:", &info, TRUE, TRUE, TRUE))
|
if (FATFS_CheckDisk("nand2:", &info, TRUE, TRUE, TRUE))
|
||||||
{
|
{
|
||||||
// 指定のNANDパーティション1をGドライブにマウント
|
result = TRUE;
|
||||||
// if (FATFS_MountDrive("G", FATFS_MEDIA_TYPE_NAND, 1))
|
|
||||||
{
|
|
||||||
// チェックディスク実行
|
|
||||||
if (FATFS_CheckDisk("nand2:", &info, TRUE, TRUE, TRUE))
|
|
||||||
{
|
|
||||||
result = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// デフォルトマウント状態に戻しておく
|
// ISデバッガのハードウェアリセットを許可する
|
||||||
// FATFS_UnmountDrive("G:");
|
DEBUGGER_HwResetEnable();
|
||||||
// FATFS_MountDrive("G", FATFS_MEDIA_TYPE_SD, 0);
|
|
||||||
|
|
||||||
if (result == TRUE) { kamiFontPrintf(24, y_pos, FONT_COLOR_GREEN, " OK "); }
|
if (result == TRUE) { kamiFontPrintf(24, y_pos, FONT_COLOR_GREEN, " OK "); }
|
||||||
else { kamiFontPrintf(24, y_pos, FONT_COLOR_RED, " NG "); }
|
else { kamiFontPrintf(24, y_pos, FONT_COLOR_RED, " NG "); }
|
||||||
|
|||||||
@ -52,15 +52,18 @@ SRCS = main.c \
|
|||||||
kami_write_nandfirm.c \
|
kami_write_nandfirm.c \
|
||||||
hw_info.c \
|
hw_info.c \
|
||||||
keypad.c \
|
keypad.c \
|
||||||
kami_copy_file.c
|
kami_copy_file.c \
|
||||||
|
debugger_hw_reset_control.c
|
||||||
|
|
||||||
LINCLUDES = include \
|
LINCLUDES = include \
|
||||||
../common/include \
|
../common/include \
|
||||||
$(ROOT)/build/libraries/lcfg/ARM9.TWL/include \
|
$(ROOT)/build/libraries/lcfg/ARM9.TWL/include \
|
||||||
$(ROOT)/build/libraries/fs/common/include
|
$(ROOT)/build/libraries/fs/common/include \
|
||||||
|
../../common/ARM9/include
|
||||||
|
|
||||||
SRCDIR = src \
|
SRCDIR = src \
|
||||||
../../HWInfoWriter/ARM9/src
|
../../HWInfoWriter/ARM9/src \
|
||||||
|
../../common/ARM9/src
|
||||||
|
|
||||||
#LCFILE = # using default
|
#LCFILE = # using default
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,7 @@
|
|||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
#include "hwi.h"
|
#include "hwi.h"
|
||||||
#include "keypad.h"
|
#include "keypad.h"
|
||||||
|
#include "debugger_hw_reset_control.h"
|
||||||
|
|
||||||
extern const char *g_strIPLSvnRevision;
|
extern const char *g_strIPLSvnRevision;
|
||||||
extern const char *g_strSDKSvnRevision;
|
extern const char *g_strSDKSvnRevision;
|
||||||
@ -115,6 +116,9 @@ TwlMain()
|
|||||||
int i,j;
|
int i,j;
|
||||||
|
|
||||||
OS_Init();
|
OS_Init();
|
||||||
|
OS_InitThread();
|
||||||
|
OS_InitTick();
|
||||||
|
OS_InitAlarm();
|
||||||
OS_InitArena();
|
OS_InitArena();
|
||||||
PXI_Init();
|
PXI_Init();
|
||||||
OS_InitLock();
|
OS_InitLock();
|
||||||
@ -207,9 +211,13 @@ TwlMain()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Aボタン待ち
|
// Aボタン待ち
|
||||||
DrawWaitButtonA();
|
DrawWaitButtonA();
|
||||||
|
|
||||||
|
// ISデバッガのハードウェアリセットを禁止する
|
||||||
|
DEBUGGER_HwResetDisable();
|
||||||
|
|
||||||
// HWInfo関連の前準備
|
// HWInfo関連の前準備
|
||||||
switch (HWI_Init( OS_AllocFromMain, OS_FreeToMain ))
|
switch (HWI_Init( OS_AllocFromMain, OS_FreeToMain ))
|
||||||
{
|
{
|
||||||
@ -230,7 +238,7 @@ TwlMain()
|
|||||||
sIsFormatFinish = FALSE;
|
sIsFormatFinish = FALSE;
|
||||||
ExeFormatAsync(FORMAT_MODE_QUICK, FormatCallback);
|
ExeFormatAsync(FORMAT_MODE_QUICK, FormatCallback);
|
||||||
kamiFontPrintfMain( 7, 11, 8, "Now Format...");
|
kamiFontPrintfMain( 7, 11, 8, "Now Format...");
|
||||||
while(!sIsFormatFinish);
|
while(!sIsFormatFinish){};
|
||||||
if (sFormatResult)
|
if (sFormatResult)
|
||||||
{
|
{
|
||||||
kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "NAND Format Success.");
|
kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "NAND Format Success.");
|
||||||
@ -359,6 +367,9 @@ TwlMain()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ISデバッガのハードウェアリセットを許可する
|
||||||
|
DEBUGGER_HwResetEnable();
|
||||||
|
|
||||||
// 結果表示
|
// 結果表示
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -0,0 +1,63 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: TwlSDK - NandInitializer
|
||||||
|
File: debugger_hw_reset_control.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:: $
|
||||||
|
$Rev$
|
||||||
|
$Author$
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#ifndef DEBUGGER_HW_RESET_CONTROL_H_
|
||||||
|
#define DEBUGGER_HW_RESET_CONTROL_H_
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: DEBUGGER_HwResetDisable
|
||||||
|
|
||||||
|
Description: IS-TWL-DEBUGGERでのハードウェアリセットを禁止します。
|
||||||
|
この機能はデバッガディゼーブルフラグを指定したSRL
|
||||||
|
でのみ有効です。内部動作としては、5秒毎にカードアクセスを
|
||||||
|
行うスレッドを生成起動しています。IS-TWL-DEBUGGERは
|
||||||
|
カードアクセスを監視していて10秒間カードアクセスがない
|
||||||
|
場合にハードウェアリセットを許可する仕組みになっています。
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: None.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void DEBUGGER_HwResetDisable( void );
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: DEBUGGER_HwResetEnable
|
||||||
|
|
||||||
|
Description: IS-TWL-DEBUGGERでのハードウェアリセットを許可します。
|
||||||
|
この機能はデバッガディゼーブルフラグを指定したSRL
|
||||||
|
でのみ有効です。実際にハードウェアリセットが可能になるには
|
||||||
|
最大で10秒かかります。
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: None.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void DEBUGGER_HwResetEnable( void );
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* DEBUGGER_HW_RESET_CONTROL_H_ */
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
End of file
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
@ -0,0 +1,121 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: SystemUpdater
|
||||||
|
File: debugger_hw_reset_control.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 <twl.h>
|
||||||
|
#include "debugger_hw_reset_control.h"
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
型定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
内部定数定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define OS_THREAD_PRIORITY_IS_TWL_DEBUGGER_HW_RESET_CONTROL 15
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
内部変数定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
vu8 sHwResetEnable = TRUE;
|
||||||
|
OSThread sThread;
|
||||||
|
u32 sStack[1024];
|
||||||
|
s32 sLockId;
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
関数宣言
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static void CardAccessThread(void* arg);
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: CardAccessThread
|
||||||
|
|
||||||
|
Description: 5行毎にダミーのカードアクセスを行います。
|
||||||
|
|
||||||
|
Arguments: arg - 使用しない。
|
||||||
|
|
||||||
|
Returns: None.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static void CardAccessThread(void* arg)
|
||||||
|
{
|
||||||
|
#pragma unused(arg)
|
||||||
|
|
||||||
|
while (!sHwResetEnable)
|
||||||
|
{
|
||||||
|
CARD_LockRom((u16)sLockId);
|
||||||
|
(void)CARDi_ReadRomID();
|
||||||
|
CARD_UnlockRom((u16)sLockId);
|
||||||
|
|
||||||
|
// 5秒間スリープ
|
||||||
|
OS_Sleep(5000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: DEBUGGER_HwResetDisable
|
||||||
|
|
||||||
|
Description: IS-TWL-DEBUGGERでのハードウェアリセットを禁止します。
|
||||||
|
この機能はデバッガディゼーブルフラグを指定したSRL
|
||||||
|
でのみ有効です。内部動作としては、5秒毎にカードアクセスを
|
||||||
|
行うスレッドを生成起動しています。IS-TWL-DEBUGGERは
|
||||||
|
カードアクセスを監視していて10秒間カードアクセスがない
|
||||||
|
場合にハードウェアリセットを許可する仕組みになっています。
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: None.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void DEBUGGER_HwResetDisable( void )
|
||||||
|
{
|
||||||
|
if (sLockId == 0)
|
||||||
|
{
|
||||||
|
sLockId = OS_GetLockID();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sHwResetEnable)
|
||||||
|
{
|
||||||
|
sHwResetEnable = FALSE;
|
||||||
|
|
||||||
|
OS_CreateThread(&sThread, CardAccessThread, NULL,
|
||||||
|
(void*)((u32)sStack + sizeof(sStack)), sizeof(sStack),
|
||||||
|
OS_THREAD_PRIORITY_IS_TWL_DEBUGGER_HW_RESET_CONTROL);
|
||||||
|
OS_WakeupThreadDirect(&sThread);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: DEBUGGER_HwResetEnable
|
||||||
|
|
||||||
|
Description: IS-TWL-DEBUGGERでのハードウェアリセットを許可します。
|
||||||
|
この機能はデバッガディゼーブルフラグを指定したSRL
|
||||||
|
でのみ有効です。実際にハードウェアリセットが可能になるには
|
||||||
|
最大で10秒かかります。
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: None.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void DEBUGGER_HwResetEnable( void )
|
||||||
|
{
|
||||||
|
if (!sHwResetEnable)
|
||||||
|
{
|
||||||
|
sHwResetEnable = TRUE;
|
||||||
|
OS_WakeupThreadDirect(&sThread);
|
||||||
|
while (!OS_IsThreadTerminated(&sThread)){}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user