mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
TWLカードスロットAをSDKとHOTSWで共用しても動作するように対応。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@705 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
9fb7b1a518
commit
5305afd6e0
@ -103,9 +103,7 @@ extern "C" {
|
||||
+ ((param) & LATENCY1_MASK) \
|
||||
)
|
||||
|
||||
//#define USE_SLOT_A
|
||||
|
||||
#ifdef USE_SLOT_A
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
// Slot A
|
||||
#define SLOT_STATUS_MODE_SELECT_MSK 0x0c
|
||||
#define SLOT_STATUS_CDET_MSK 0x01
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
File:
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <twl.h>
|
||||
#include <sysmenu.h>
|
||||
#include <customNDma.h>
|
||||
|
||||
|
||||
@ -40,7 +41,11 @@ void HOTSW_NDmaCopy_Card(u32 ndmaNo, const void *src, void *dest, u32 size)
|
||||
//---- decide control register
|
||||
contData = NDMA_BLOCK_WORD_COUNT_1 | MI_NDMA_ENABLE;
|
||||
contData |= (MI_NDMA_SRC_FIX | MI_NDMA_DEST_INC | MI_NDMA_DEST_RELOAD_DISABLE);
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
contData |= MI_NDMA_TIMING_CARD_A;
|
||||
#else
|
||||
contData |= MI_NDMA_TIMING_CARD_B;
|
||||
#endif
|
||||
|
||||
//---- set interrupt enable
|
||||
contData |= MI_NDMA_IF_ENABLE;
|
||||
|
||||
@ -73,6 +73,7 @@ CardThreadData;
|
||||
// Function prototype -------------------------------------------------------
|
||||
static BOOL IsSwap(void);
|
||||
static u32 GetMcSlotShift(void);
|
||||
static u32 GetMcSlotMask(void);
|
||||
static void SetMcSlotMode(u32 mode);
|
||||
static BOOL CmpMcSlotMode(u32 mode);
|
||||
|
||||
@ -237,9 +238,9 @@ void HOTSW_Init(void)
|
||||
}
|
||||
else{
|
||||
// OS_PutString("No Card...\n");
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
|
||||
#endif
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -271,10 +272,10 @@ static HotSwState LoadCardData(void)
|
||||
}
|
||||
|
||||
// カードのロック
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
LockExCard(s_cbData.lockID);
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
CARD_LockRom(s_cbData.lockID);
|
||||
#else
|
||||
OS_LockCard(s_cbData.lockID);
|
||||
LockExCard(s_cbData.lockID);
|
||||
#endif
|
||||
|
||||
// カード電源リセット
|
||||
@ -436,10 +437,10 @@ static HotSwState LoadCardData(void)
|
||||
}
|
||||
|
||||
// カードのロック開放
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
UnlockExCard(s_cbData.lockID);
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
CARD_UnlockRom(s_cbData.lockID);
|
||||
#else
|
||||
OS_UnlockCard(s_cbData.lockID);
|
||||
UnlockExCard(s_cbData.lockID);
|
||||
#endif
|
||||
|
||||
// カードロックIDの開放
|
||||
@ -471,7 +472,7 @@ static HotSwState LoadStaticModule(void)
|
||||
{
|
||||
HotSwState retval = HOTSW_SUCCESS;
|
||||
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
// バナーリード
|
||||
if( s_cbData.pBootSegBuf->rh.s.banner_offset ) {
|
||||
// OS_TPrintf(" - Banner Loading...\n");
|
||||
@ -493,7 +494,7 @@ static HotSwState LoadStaticModule(void)
|
||||
SYSMi_GetWork()->flags.common.isExistCard = TRUE;
|
||||
}
|
||||
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
s_cbData.arm9Stc = (u32)s_cbData.pBootSegBuf->rh.s.main_ram_address;
|
||||
// 配置先と再配置情報を取得 & Arm9の常駐モジュール残りを指定先に転送
|
||||
@ -781,7 +782,7 @@ static HotSwState ReadRomEmulationData(void)
|
||||
*
|
||||
* ノーマルモード時のカードIDを読み込む関数
|
||||
* ----------------------------------------------------------------- */
|
||||
HotSwState ReadIDNormal(void)
|
||||
static HotSwState ReadIDNormal(void)
|
||||
{
|
||||
// カード割り込みによるDMAコピー
|
||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &s_cbData.id_nml, sizeof(s_cbData.id_nml) );
|
||||
@ -876,7 +877,11 @@ static void DecryptObjectFile(void)
|
||||
* ----------------------------------------------------------------- */
|
||||
BOOL HOTSW_IsCardExist(void)
|
||||
{
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
u32 mask = (u32)(REG_MI_MC_SL1_CDET_MASK << GetMcSlotShift());
|
||||
#else
|
||||
u32 mask = (u32)(REG_MI_MC_SL2_CDET_MASK >> GetMcSlotShift());
|
||||
#endif
|
||||
|
||||
if( !(reg_MI_MC1 & mask) ){
|
||||
return TRUE;
|
||||
@ -912,6 +917,19 @@ static u32 GetMcSlotShift(void)
|
||||
{
|
||||
return (u32)(IsSwap() * REG_MI_MC_SL2_CDET_SHIFT);
|
||||
}
|
||||
/* -----------------------------------------------------------------
|
||||
* GetMcSlotMask関数
|
||||
*
|
||||
* カードスロットのシフトビット数の取得
|
||||
* ----------------------------------------------------------------- */
|
||||
static u32 GetMcSlotMask(void)
|
||||
{
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
return (u32)(REG_MI_MC_SL1_MODE_MASK << GetMcSlotShift());
|
||||
#else
|
||||
return (u32)(REG_MI_MC_SL2_MODE_MASK >> GetMcSlotShift());
|
||||
#endif
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* SetMcSlotMode関数
|
||||
@ -920,9 +938,11 @@ static u32 GetMcSlotShift(void)
|
||||
* ----------------------------------------------------------------- */
|
||||
static void SetMcSlotMode(u32 mode)
|
||||
{
|
||||
u32 mask = (u32)(REG_MI_MC_SL2_MODE_MASK >> GetMcSlotShift());
|
||||
|
||||
reg_MI_MC1 = (u32)((reg_MI_MC1 & ~mask) | (mode >> GetMcSlotShift()));
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
reg_MI_MC1 = (u32)((reg_MI_MC1 & ~GetMcSlotMask()) | (mode << GetMcSlotShift()));
|
||||
#else
|
||||
reg_MI_MC1 = (u32)((reg_MI_MC1 & ~GetMcSlotMask()) | (mode >> GetMcSlotShift()));
|
||||
#endif
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
@ -932,9 +952,11 @@ static void SetMcSlotMode(u32 mode)
|
||||
* ----------------------------------------------------------------- */
|
||||
static BOOL CmpMcSlotMode(u32 mode)
|
||||
{
|
||||
u32 mask = (u32)(REG_MI_MC_SL2_MODE_MASK >> GetMcSlotShift());
|
||||
|
||||
if((reg_MI_MC1 & mask) == (mode >> GetMcSlotShift())){
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
if((reg_MI_MC1 & GetMcSlotMask()) == (mode << GetMcSlotShift())){
|
||||
#else
|
||||
if((reg_MI_MC1 & GetMcSlotMask()) == (mode >> GetMcSlotShift())){
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
else{
|
||||
@ -1039,9 +1061,9 @@ static void McThread(void *arg)
|
||||
while(1){
|
||||
// 活線挿抜抑制フラグが立っていたら処理しない
|
||||
if( !SYSMi_GetWork()->flags.common.isEnableHotSW ) {
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
|
||||
#endif
|
||||
//#endif
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1107,10 +1129,10 @@ static void McThread(void *arg)
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
OS_TPrintf("ng... retval : %d\n", retval);
|
||||
// カードロックの開放
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
UnlockExCard(s_cbData.lockID);
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
CARD_UnlockRom(s_cbData.lockID);
|
||||
#else
|
||||
OS_UnlockCard(s_cbData.lockID);
|
||||
UnlockExCard(s_cbData.lockID);
|
||||
#endif
|
||||
// カードロックIDの開放
|
||||
OS_ReleaseLockID( s_cbData.lockID );
|
||||
@ -1140,9 +1162,9 @@ static void McThread(void *arg)
|
||||
isPulledOut = TRUE;
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
|
||||
#endif
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -1161,7 +1183,7 @@ static void InterruptCallbackCard(void)
|
||||
|
||||
OS_TPrintf("○ - idx_pulledOut : %d\n", s_ctData.idx_pulledOut);
|
||||
|
||||
#ifdef USE_SLOT_A
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
OS_SetIrqCheckFlagEx(OS_IE_CARD_A_IREQ);
|
||||
#else
|
||||
OS_SetIrqCheckFlagEx(OS_IE_CARD_B_IREQ);
|
||||
@ -1186,7 +1208,7 @@ static void InterruptCallbackCardDet(void)
|
||||
|
||||
OS_TPrintf("● - idx_insert : %d\n", s_ctData.idx_insert);
|
||||
|
||||
#ifdef USE_SLOT_A
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
OS_SetIrqCheckFlagEx(OS_IE_CARD_A_DET);
|
||||
#else
|
||||
OS_SetIrqCheckFlagEx(OS_IE_CARD_B_DET);
|
||||
@ -1203,7 +1225,7 @@ static void InterruptCallbackCardData(void)
|
||||
// データ転送終了待ちまで寝ていたのを起こす
|
||||
OS_WakeupThreadDirect(&s_ctData.thread);
|
||||
|
||||
#ifdef USE_SLOT_A
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
OS_SetIrqCheckFlagEx(OS_IE_CARD_A_DATA);
|
||||
#else
|
||||
OS_SetIrqCheckFlagEx(OS_IE_CARD_B_DATA);
|
||||
@ -1306,7 +1328,7 @@ static void SetInterruptCallbackEx( OSIrqMask intr_bit, void *func )
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void SetInterrupt(void)
|
||||
{
|
||||
#ifdef USE_SLOT_A
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
SetInterruptCallback( OS_IE_CARD_A_IREQ , InterruptCallbackCard );
|
||||
SetInterruptCallback( OS_IE_CARD_A_DET , InterruptCallbackCardDet );
|
||||
SetInterruptCallback( OS_IE_CARD_A_DATA , InterruptCallbackCardData );
|
||||
|
||||
@ -119,12 +119,12 @@ TitleProperty *SYSM_ReadParameters( void )
|
||||
while( !SYSMi_GetWork()->flags.common.isARM9Start ) {
|
||||
SVC_WaitByLoop( 0x1000 );
|
||||
}
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
// ARM7のカードチェック完了を待つ
|
||||
while( !SYSMi_GetWork()->flags.common.is1stCardChecked ) {
|
||||
SVC_WaitByLoop( 0x1000 );
|
||||
}
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
//-----------------------------------------------------
|
||||
// リセットパラメータの判定(リセットパラメータが有効かどうかは、ARM7でやってくれている)
|
||||
@ -209,8 +209,8 @@ static TitleProperty *SYSMi_CheckShortcutBoot( void )
|
||||
if( ( SYSMi_GetWork()->flags.common.isOnDebugger && // ISデバッガが有効かつJTAGがまだ有効でない時
|
||||
!( *(u8 *)( HW_SYS_CONF_BUF + HWi_WSYS09_OFFSET ) & HWi_WSYS09_JTAG_CPUJE_MASK ) ) ||
|
||||
SYSM_IsInspectCard() ||
|
||||
( ( PAD_Read() & PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) ==
|
||||
PAD_PRODUCTION_SHORTCUT_CARD_BOOT )
|
||||
( ( PAD_Read() & SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) ==
|
||||
SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT )
|
||||
) {
|
||||
s_bootTitle.flags.isAppRelocate = TRUE;
|
||||
s_bootTitle.flags.isAppLoadCompleted = TRUE;
|
||||
|
||||
@ -1,9 +1,21 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlSDK
|
||||
File: Card.h
|
||||
Project: TwlIPL
|
||||
File: hotsw.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 __MY_CARD_H__
|
||||
#define __MY_CARD_H__
|
||||
#ifndef __SYSMENU_HOTSW_COMMON_HOTSW_H__
|
||||
#define __SYSMENU_HOTSW_COMMON_HOTSW_H__
|
||||
|
||||
#include <twl.h>
|
||||
|
||||
@ -40,4 +52,4 @@ SDK_INLINE void* HOTSW_GetRomEmulationBuffer(void)
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif // __MY_CARD_H__
|
||||
#endif // __SYSMENU_HOTSW_COMMON_HOTSW_H__
|
||||
|
||||
@ -30,9 +30,9 @@ extern "C" {
|
||||
|
||||
// SystemMenu自身のマップ情報定義
|
||||
#define SYSM_OWN_ARM9_MMEM_ADDR 0x02800000
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
#define SYSM_OWN_ARM9_MMEM_ADDR_END 0x02e73000
|
||||
#else
|
||||
#if 0
|
||||
#define SYSM_OWN_ARM9_MMEM_ADDR_END 0x02e76000
|
||||
#endif
|
||||
#define SYSM_OWN_ARM9_MMEM_CODE_ADDR (SYSM_OWN_ARM9_MMEM_ADDR + SYSM_DMA_BUFOVER_BARRIER_SIZE)
|
||||
@ -55,11 +55,11 @@ extern u32 SDK_AUTOLOAD_WRAM_START[];
|
||||
// カードアプリ格納バッファ
|
||||
#define SYSM_CARD_ROM_HEADER_SIZE 0x1000
|
||||
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
#define SYSM_CARD_BANNER_BUF ( SYSM_OWN_ARM9_MMEM_ADDR_END )
|
||||
#define SYSM_CARD_BANNER_BUF_END ( SYSM_CARD_BANNER_BUF + 0x3000 )
|
||||
#define SYSM_CARD_ROM_HEADER_BUF ( SYSM_CARD_BANNER_BUF_END )
|
||||
#else
|
||||
#if 0
|
||||
#define SYSM_CARD_ROM_HEADER_BUF ( SYSM_OWN_ARM9_MMEM_ADDR_END )
|
||||
#endif
|
||||
#define SYSM_CARD_ROM_HEADER_BUF_END ( SYSM_CARD_ROM_HEADER_BUF + SYSM_CARD_ROM_HEADER_SIZE )
|
||||
|
||||
@ -40,7 +40,7 @@ extern "C" {
|
||||
|
||||
#define TITLE_ID_MACHINE_SETTINGS 0x000300055445534d // 本体設定のタイトルID
|
||||
|
||||
#define PAD_PRODUCTION_SHORTCUT_CARD_BOOT ( PAD_BUTTON_A | PAD_BUTTON_B \
|
||||
#define SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ( PAD_BUTTON_A | PAD_BUTTON_B \
|
||||
| PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_R )
|
||||
// 量産工程で使用する初回起動設定をキャンセルしてカードブートするショートカットキー
|
||||
|
||||
|
||||
@ -52,7 +52,7 @@ typedef struct TitleID_HiLo {
|
||||
|
||||
// ISデバッガROMエミュレーション情報
|
||||
typedef struct SYSMRomEmuInfo {
|
||||
// マジックコード(ISD_ROM_EMULATION_INFO_MAGIC_CODEの固定値)
|
||||
// マジックコード(SYSM_ROMEMU_INFO_MAGIC_CODEの固定値)
|
||||
u32 magic_code;
|
||||
// フラグ類
|
||||
u32 isEnableSlot1 : 1;
|
||||
@ -99,10 +99,10 @@ typedef struct SYSM_work {
|
||||
vu32 isEnableHotSW :1; // 活線挿抜有効?
|
||||
vu32 isBusyHotSW :1; // 活線挿抜処理中?
|
||||
vu32 isCardLoadCompleted :1; // カードからデータロード完了?
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
vu32 isValidCardBanner :1;
|
||||
vu32 is1stCardChecked :1;
|
||||
#endif
|
||||
//#endif
|
||||
vu32 :0;
|
||||
}common;
|
||||
struct {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user