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:
nakasima 2008-02-20 09:32:53 +00:00
parent 9fb7b1a518
commit 5305afd6e0
8 changed files with 85 additions and 48 deletions

View File

@ -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

View File

@ -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;

View File

@ -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 );

View File

@ -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;

View File

@ -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__

View File

@ -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 )

View File

@ -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 )
// 量産工程で使用する初回起動設定をキャンセルしてカードブートするショートカットキー

View File

@ -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 {