mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新:Akabane Jumpei)
・挿抜処理を行うスレッド内の処理を変更。(検証途中) ・HOTSW_LoadCardData関数/HOTSW_LoadStaticModule関数を非公開関数に変更。 ・カード状態を示すenum型を新規作成。カード読み関数の返り値に利用。 ・ git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@697 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
ef7303caaa
commit
f1befafee6
@ -18,35 +18,35 @@ extern "C" {
|
||||
|
||||
// ■ ノーマルモードのコマンド ■
|
||||
// DSカードType1のノーマルモードのBoot Segment(4Kbyte)読み込み
|
||||
void ReadBootSegNormal_DSType1(CardBootData *cbd);
|
||||
HotSwState ReadBootSegNormal_DSType1(CardBootData *cbd);
|
||||
|
||||
// DSカードType1のノーマルモードのモード変更
|
||||
void ChangeModeNormal_DSType1(CardBootData *cbd);
|
||||
HotSwState ChangeModeNormal_DSType1(CardBootData *cbd);
|
||||
|
||||
|
||||
// ■ セキュアモードのコマンド ■
|
||||
// DSカードType1のセキュアモードのID読み込み
|
||||
void ReadIDSecure_DSType1(CardBootData *cbd);
|
||||
HotSwState ReadIDSecure_DSType1(CardBootData *cbd);
|
||||
|
||||
// DSカードType1のセキュアモードのSecure Segment(16Kbyte)読み込み
|
||||
void ReadSegSecure_DSType1(CardBootData *cbd);
|
||||
HotSwState ReadSegSecure_DSType1(CardBootData *cbd);
|
||||
|
||||
// DSカードType1のセキュアモードのPNジェネレータON
|
||||
void SwitchONPNGSecure_DSType1(CardBootData *cbd);
|
||||
HotSwState SwitchONPNGSecure_DSType1(CardBootData *cbd);
|
||||
|
||||
// DSカードType1のセキュアモードのPNジェネレータOFF
|
||||
void SwitchOFFPNGSecure_DSType1(CardBootData *cbd);
|
||||
HotSwState SwitchOFFPNGSecure_DSType1(CardBootData *cbd);
|
||||
|
||||
// DSカードType1のセキュアモードのモード変更
|
||||
void ChangeModeSecure_DSType1(CardBootData *cbd);
|
||||
HotSwState ChangeModeSecure_DSType1(CardBootData *cbd);
|
||||
|
||||
|
||||
// ■ ゲームモードのコマンド ■
|
||||
// DSカードType1のゲームモードのID読み込み
|
||||
void ReadIDGame_DSType1(CardBootData *cbd);
|
||||
HotSwState ReadIDGame_DSType1(CardBootData *cbd);
|
||||
|
||||
// DSカードType1のゲームモードの指定ページ読み込み
|
||||
void ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u32 size);
|
||||
HotSwState ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u32 size);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
|
||||
@ -17,7 +17,7 @@ extern "C" {
|
||||
// ===========================================================================
|
||||
// ■ ノーマルモードのコマンド ■
|
||||
// DSカードType2のノーマルモードのBoot Segment(4Kbyte)読み込み
|
||||
void ReadBootSegNormal_DSType2(CardBootData *cbd);
|
||||
HotSwState ReadBootSegNormal_DSType2(CardBootData *cbd);
|
||||
|
||||
// DSカードType2のノーマルモードのモード変更 (Type1と同じ処理)
|
||||
#define ChangeModeNormal_DSType2 ChangeModeNormal_DSType1
|
||||
@ -25,19 +25,19 @@ void ReadBootSegNormal_DSType2(CardBootData *cbd);
|
||||
|
||||
// ■ セキュアモードのコマンド ■
|
||||
// DSカードType2のセキュアモードのID読み込み
|
||||
void ReadIDSecure_DSType2(CardBootData *cbd);
|
||||
HotSwState ReadIDSecure_DSType2(CardBootData *cbd);
|
||||
|
||||
// DSカードType2のセキュアモードのSecure Segment(16Kbyte)読み込み
|
||||
void ReadSegSecure_DSType2(CardBootData *cbd);
|
||||
HotSwState ReadSegSecure_DSType2(CardBootData *cbd);
|
||||
|
||||
// DSカードType2のセキュアモードのPNジェネレータON
|
||||
void SwitchONPNGSecure_DSType2(CardBootData *cbd);
|
||||
HotSwState SwitchONPNGSecure_DSType2(CardBootData *cbd);
|
||||
|
||||
// DSカードType2のセキュアモードのPNジェネレータOFF
|
||||
void SwitchOFFPNGSecure_DSType2(CardBootData *cbd);
|
||||
HotSwState SwitchOFFPNGSecure_DSType2(CardBootData *cbd);
|
||||
|
||||
// DSカードType2のセキュアモードのモード変更
|
||||
void ChangeModeSecure_DSType2(CardBootData *cbd);
|
||||
HotSwState ChangeModeSecure_DSType2(CardBootData *cbd);
|
||||
|
||||
|
||||
// ■ ゲームモードのコマンド ■
|
||||
@ -45,7 +45,7 @@ void ChangeModeSecure_DSType2(CardBootData *cbd);
|
||||
#define ReadIDGame_DSType2 ReadIDGame_DSType1
|
||||
|
||||
// DSカードType2のゲームモードの指定ページ読み込み
|
||||
void ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u32 size);
|
||||
HotSwState ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u32 size);
|
||||
//#define ReadPageGame_DSType2 ReadPageGame_DSType1
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@ -161,13 +161,13 @@ typedef enum CardTypeEx{
|
||||
DS_CARD_TYPE_2,
|
||||
TWL_CARD,
|
||||
ROM_EMULATION
|
||||
}CardTypeEx;
|
||||
} CardTypeEx;
|
||||
|
||||
typedef enum NormalCommandType{
|
||||
RD_ID = 0,
|
||||
RD_BSEG,
|
||||
CHG_MODE
|
||||
}NormalCommandType;
|
||||
} NormalCommandType;
|
||||
|
||||
typedef enum SecureCommandType{
|
||||
S_RD_ID = 0,
|
||||
@ -175,34 +175,44 @@ typedef enum SecureCommandType{
|
||||
S_PNG_ON,
|
||||
S_PNG_OFF,
|
||||
S_CHG_MODE
|
||||
}SecureCommandType;
|
||||
} SecureCommandType;
|
||||
|
||||
typedef enum GameCommandType{
|
||||
G_RD_ID = 0,
|
||||
G_RD_PAGE
|
||||
}GameCommandType;
|
||||
} GameCommandType;
|
||||
|
||||
typedef enum CardType{
|
||||
CARD_DS_TYPE1 = 0,
|
||||
CARD_DS_TYPE2,
|
||||
CARD_TWL
|
||||
}CardType;
|
||||
} CardType;
|
||||
|
||||
typedef enum HotSwState{
|
||||
HOTSW_SUCCESS = 0,
|
||||
HOTSW_TIME_OUT,
|
||||
HOTSW_CARD_LOCK_ERROR,
|
||||
HOTSW_CRC_CHECK_ERROR,
|
||||
HOTSW_HASH_CHECK_ERROR,
|
||||
HOTSW_ID_CHECK_ERROR,
|
||||
HOTSW_PULLED_OUT_ERROR,
|
||||
HOTSW_INSERT_COUNT_ERROR,
|
||||
HOTSW_UNEXPECTED_ERROR
|
||||
} HotSwState;
|
||||
|
||||
// union ---------------------------------------------------------------------
|
||||
typedef union
|
||||
{
|
||||
u64 dw;
|
||||
u8 b[8];
|
||||
}
|
||||
GCDCmd64;
|
||||
} GCDCmd64;
|
||||
|
||||
// ブートセグメントデータ
|
||||
typedef union BootSegmentData
|
||||
{
|
||||
ROM_Header rh;
|
||||
u32 word[BOOT_SEGMENT_SIZE / sizeof(u32)];
|
||||
}
|
||||
BootSegmentData;
|
||||
} BootSegmentData;
|
||||
|
||||
// struct -------------------------------------------------------------------
|
||||
typedef struct BLOWFISH_CTX{
|
||||
@ -246,23 +256,21 @@ typedef struct CardBootData{
|
||||
u32 *pSecureSegBuf;
|
||||
|
||||
BLOWFISH_CTX keyTable;
|
||||
}
|
||||
CardBootData;
|
||||
} CardBootData;
|
||||
|
||||
// カード起動用関数
|
||||
typedef struct CardBootFunction {
|
||||
void (*ReadBootSegment_N)(CardBootData *cbd);
|
||||
void (*ChangeMode_N)(CardBootData *cbd);
|
||||
HotSwState (*ReadBootSegment_N)(CardBootData *cbd);
|
||||
HotSwState (*ChangeMode_N)(CardBootData *cbd);
|
||||
|
||||
void (*ReadID_S)(CardBootData *cbd);
|
||||
void (*ReadSegment_S)(CardBootData *cbd);
|
||||
void (*SetPNG_S)(CardBootData *cbd);
|
||||
void (*ChangeMode_S)(CardBootData *cbd);
|
||||
HotSwState (*ReadID_S)(CardBootData *cbd);
|
||||
HotSwState (*ReadSegment_S)(CardBootData *cbd);
|
||||
HotSwState (*SetPNG_S)(CardBootData *cbd);
|
||||
HotSwState (*ChangeMode_S)(CardBootData *cbd);
|
||||
|
||||
void (*ReadID_G)(CardBootData *cbd);
|
||||
void (*ReadPage_G)(CardBootData *cbd, u32 addr, void* buf, u32 size);
|
||||
}
|
||||
CardBootFunction;
|
||||
HotSwState (*ReadID_G)(CardBootData *cbd);
|
||||
HotSwState (*ReadPage_G)(CardBootData *cbd, u32 addr, void* buf, u32 size);
|
||||
} CardBootFunction;
|
||||
|
||||
|
||||
|
||||
|
||||
@ -18,35 +18,35 @@ extern "C" {
|
||||
|
||||
// ■ ノーマルモードのコマンド ■
|
||||
// Rom EmulationのノーマルモードのBoot Segment(4Kbyte)読み込み
|
||||
void ReadBootSegNormal_ROMEMU(CardBootData *cbd);
|
||||
HotSwState ReadBootSegNormal_ROMEMU(CardBootData *cbd);
|
||||
|
||||
// Rom Emulationのノーマルモードのモード変更
|
||||
void ChangeModeNormal_ROMEMU(CardBootData *cbd);
|
||||
HotSwState ChangeModeNormal_ROMEMU(CardBootData *cbd);
|
||||
|
||||
|
||||
// ■ セキュアモードのコマンド ■
|
||||
// Rom EmulationのセキュアモードのID読み込み
|
||||
void ReadIDSecure_ROMEMU(CardBootData *cbd);
|
||||
HotSwState ReadIDSecure_ROMEMU(CardBootData *cbd);
|
||||
|
||||
// Rom EmulationのセキュアモードのSecure Segment(16Kbyte)読み込み
|
||||
void ReadSegSecure_ROMEMU(CardBootData *cbd);
|
||||
HotSwState ReadSegSecure_ROMEMU(CardBootData *cbd);
|
||||
|
||||
// Rom EmulationのセキュアモードのPNジェネレータON
|
||||
void SwitchONPNGSecure_ROMEMU(CardBootData *cbd);
|
||||
HotSwState SwitchONPNGSecure_ROMEMU(CardBootData *cbd);
|
||||
|
||||
// Rom EmulationのセキュアモードのPNジェネレータOFF
|
||||
void SwitchOFFPNGSecure_ROMEMU(CardBootData *cbd);
|
||||
HotSwState SwitchOFFPNGSecure_ROMEMU(CardBootData *cbd);
|
||||
|
||||
// Rom Emulationのセキュアモードのモード変更
|
||||
void ChangeModeSecure_ROMEMU(CardBootData *cbd);
|
||||
HotSwState ChangeModeSecure_ROMEMU(CardBootData *cbd);
|
||||
|
||||
|
||||
// ■ ゲームモードのコマンド ■
|
||||
// DSカードType1のゲームモードのID読み込み
|
||||
void ReadIDGame_ROMEMU(CardBootData *cbd);
|
||||
HotSwState ReadIDGame_ROMEMU(CardBootData *cbd);
|
||||
|
||||
// DSカードType1のゲームモードの指定ページ読み込み
|
||||
void ReadPageGame_ROMEMU(CardBootData *cbd, u32 start_addr, void* buf, u32 size);
|
||||
HotSwState ReadPageGame_ROMEMU(CardBootData *cbd, u32 start_addr, void* buf, u32 size);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
|
||||
@ -34,8 +34,12 @@ static void SetMCSCR(void);
|
||||
*
|
||||
* CT=240ns Latency1=0x1fff Latency2=0x3f Pagecount=8page
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadBootSegNormal_DSType1(CardBootData *cbd)
|
||||
HotSwState ReadBootSegNormal_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// NewDMA転送の準備
|
||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->pBootSegBuf->word, BOOT_SEGMENT_SIZE );
|
||||
|
||||
@ -51,6 +55,8 @@ void ReadBootSegNormal_DSType1(CardBootData *cbd)
|
||||
|
||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||
OS_SleepThread(NULL);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -60,11 +66,15 @@ void ReadBootSegNormal_DSType1(CardBootData *cbd)
|
||||
*
|
||||
* CT=240ns Latency1=0x18 Latency2=0 Pagecount=0page
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ChangeModeNormal_DSType1(CardBootData *cbd)
|
||||
HotSwState ChangeModeNormal_DSType1(CardBootData *cbd)
|
||||
{
|
||||
GCDCmd64 tempCnd, cnd;
|
||||
u64 vae64 = cbd->vae;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// ゼロクリア
|
||||
MI_CpuClear8(&tempCnd, sizeof(GCDCmd64));
|
||||
|
||||
@ -92,6 +102,8 @@ void ChangeModeNormal_DSType1(CardBootData *cbd)
|
||||
|
||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||
OS_SleepThread(NULL);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -162,8 +174,12 @@ static void SetSecureCommand(SecureCommandType type, CardBootData *cbd)
|
||||
*
|
||||
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=Status
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadIDSecure_DSType1(CardBootData *cbd)
|
||||
HotSwState ReadIDSecure_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// NewDMA転送の準備
|
||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_scr, sizeof(cbd->id_scr) );
|
||||
|
||||
@ -180,6 +196,8 @@ void ReadIDSecure_DSType1(CardBootData *cbd)
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -187,7 +205,7 @@ void ReadIDSecure_DSType1(CardBootData *cbd)
|
||||
*
|
||||
* Description:
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadSegSecure_DSType1(CardBootData *cbd)
|
||||
HotSwState ReadSegSecure_DSType1(CardBootData *cbd)
|
||||
{
|
||||
u32 i,j=0;
|
||||
u64 segNum = 4;
|
||||
@ -195,6 +213,10 @@ void ReadSegSecure_DSType1(CardBootData *cbd)
|
||||
GCDCmd64 cndLE, cndBE;
|
||||
|
||||
for(i=0; i<4; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// NewDMA転送の準備
|
||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, (cbd->pSecureSegBuf + ONE_SEGMENT_WORD_SIZE*i), ONE_SEGMENT_SIZE );
|
||||
|
||||
@ -236,6 +258,8 @@ void ReadSegSecure_DSType1(CardBootData *cbd)
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
}
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -243,8 +267,12 @@ void ReadSegSecure_DSType1(CardBootData *cbd)
|
||||
*
|
||||
* Description:
|
||||
*---------------------------------------------------------------------------*/
|
||||
void SwitchONPNGSecure_DSType1(CardBootData *cbd)
|
||||
HotSwState SwitchONPNGSecure_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// コマンド作成・設定
|
||||
SetSecureCommand(S_PNG_ON, cbd);
|
||||
|
||||
@ -257,6 +285,8 @@ void SwitchONPNGSecure_DSType1(CardBootData *cbd)
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -264,8 +294,12 @@ void SwitchONPNGSecure_DSType1(CardBootData *cbd)
|
||||
*
|
||||
* Description:
|
||||
*---------------------------------------------------------------------------*/
|
||||
void SwitchOFFPNGSecure_DSType1(CardBootData *cbd)
|
||||
HotSwState SwitchOFFPNGSecure_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// コマンド作成・設定
|
||||
SetSecureCommand(S_PNG_OFF, cbd);
|
||||
|
||||
@ -278,6 +312,8 @@ void SwitchOFFPNGSecure_DSType1(CardBootData *cbd)
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -287,8 +323,12 @@ void SwitchOFFPNGSecure_DSType1(CardBootData *cbd)
|
||||
*
|
||||
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ChangeModeSecure_DSType1(CardBootData *cbd)
|
||||
HotSwState ChangeModeSecure_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// コマンド作成・設定
|
||||
SetSecureCommand(S_CHG_MODE, cbd);
|
||||
|
||||
@ -301,6 +341,8 @@ void ChangeModeSecure_DSType1(CardBootData *cbd)
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -312,8 +354,12 @@ void ChangeModeSecure_DSType1(CardBootData *cbd)
|
||||
*
|
||||
* Description: ゲームモードでIDを読み込む
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadIDGame_DSType1(CardBootData *cbd)
|
||||
HotSwState ReadIDGame_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// NewDMA転送の準備
|
||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_gam, sizeof(cbd->id_gam) );
|
||||
|
||||
@ -327,6 +373,8 @@ void ReadIDGame_DSType1(CardBootData *cbd)
|
||||
|
||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||
OS_SleepThread(NULL);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -334,7 +382,7 @@ void ReadIDGame_DSType1(CardBootData *cbd)
|
||||
|
||||
Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||
HotSwState ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||
{
|
||||
u32 loop, counter=0;
|
||||
u64 i, page;
|
||||
@ -348,6 +396,10 @@ void ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u32 size
|
||||
// OS_TPrintf("Read Game Segment Page Count : %d size : %x\n", loop, size);
|
||||
|
||||
for(i=0; i<loop; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// ゼロクリア
|
||||
MI_CpuClear8(&cndLE, sizeof(GCDCmd64));
|
||||
|
||||
@ -379,4 +431,6 @@ void ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u32 size
|
||||
*((u32 *)buf + counter++) = reg_HOTSW_MCD1;
|
||||
}
|
||||
}
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
@ -39,7 +39,7 @@ static void SetMCSCR(void);
|
||||
*
|
||||
* CT=240ns Latency1=0x1fff Latency2=0x3f Pagecount=8page
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadBootSegNormal_DSType2(CardBootData *cbd)
|
||||
HotSwState ReadBootSegNormal_DSType2(CardBootData *cbd)
|
||||
{
|
||||
u32 i = 0;
|
||||
u32 loop = ONE_SEGMENT_PAGE_NUM;
|
||||
@ -48,6 +48,10 @@ void ReadBootSegNormal_DSType2(CardBootData *cbd)
|
||||
GCDCmd64 cndLE, cndBE;
|
||||
|
||||
for(i=0; i<ONE_SEGMENT_PAGE_NUM; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// NewDMA転送の準備
|
||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, cbd->pBootSegBuf->word + (u32)(PAGE_WORD_SIZE*i), PAGE_SIZE );
|
||||
|
||||
@ -80,6 +84,8 @@ void ReadBootSegNormal_DSType2(CardBootData *cbd)
|
||||
|
||||
page++;
|
||||
}
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -159,10 +165,16 @@ static void SetSecureCommand(SecureCommandType type, CardBootData *cbd)
|
||||
*
|
||||
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=Status
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadIDSecure_DSType2(CardBootData *cbd)
|
||||
HotSwState ReadIDSecure_DSType2(CardBootData *cbd)
|
||||
{
|
||||
u32 scrambleMask;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// スクランブルの設定
|
||||
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
|
||||
// NewDMA転送の準備
|
||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_scr, sizeof(cbd->id_scr) );
|
||||
@ -188,6 +200,8 @@ void ReadIDSecure_DSType2(CardBootData *cbd)
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -197,7 +211,7 @@ void ReadIDSecure_DSType2(CardBootData *cbd)
|
||||
*
|
||||
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=1page
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadSegSecure_DSType2(CardBootData *cbd)
|
||||
HotSwState ReadSegSecure_DSType2(CardBootData *cbd)
|
||||
{
|
||||
u32 i,j=0,k;
|
||||
u64 segNum = 4;
|
||||
@ -208,6 +222,10 @@ void ReadSegSecure_DSType2(CardBootData *cbd)
|
||||
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
|
||||
for(i=0; i<SECURE_SEGMENT_NUM; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// ゼロクリア
|
||||
MI_CpuClear8(&cndLE, sizeof(GCDCmd64));
|
||||
|
||||
@ -263,6 +281,8 @@ void ReadSegSecure_DSType2(CardBootData *cbd)
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
}
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -272,10 +292,16 @@ void ReadSegSecure_DSType2(CardBootData *cbd)
|
||||
*
|
||||
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page
|
||||
*---------------------------------------------------------------------------*/
|
||||
void SwitchONPNGSecure_DSType2(CardBootData *cbd)
|
||||
HotSwState SwitchONPNGSecure_DSType2(CardBootData *cbd)
|
||||
{
|
||||
u32 scrambleMask;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// スクランブルの設定
|
||||
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
|
||||
// コマンド作成・設定
|
||||
SetSecureCommand(S_PNG_ON, cbd);
|
||||
@ -298,6 +324,8 @@ void SwitchONPNGSecure_DSType2(CardBootData *cbd)
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -307,10 +335,16 @@ void SwitchONPNGSecure_DSType2(CardBootData *cbd)
|
||||
*
|
||||
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page
|
||||
*---------------------------------------------------------------------------*/
|
||||
void SwitchOFFPNGSecure_DSType2(CardBootData *cbd)
|
||||
HotSwState SwitchOFFPNGSecure_DSType2(CardBootData *cbd)
|
||||
{
|
||||
u32 scrambleMask;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// スクランブルの設定
|
||||
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
|
||||
// コマンド作成・設定
|
||||
SetSecureCommand(S_PNG_OFF, cbd);
|
||||
@ -333,6 +367,8 @@ void SwitchOFFPNGSecure_DSType2(CardBootData *cbd)
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -342,10 +378,16 @@ void SwitchOFFPNGSecure_DSType2(CardBootData *cbd)
|
||||
*
|
||||
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ChangeModeSecure_DSType2(CardBootData *cbd)
|
||||
HotSwState ChangeModeSecure_DSType2(CardBootData *cbd)
|
||||
{
|
||||
u32 scrambleMask;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// スクランブルの設定
|
||||
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
|
||||
// コマンド作成・設定
|
||||
SetSecureCommand(S_CHG_MODE, cbd);
|
||||
@ -368,6 +410,8 @@ void ChangeModeSecure_DSType2(CardBootData *cbd)
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -389,7 +433,7 @@ void ChangeModeSecure_DSType2(CardBootData *cbd)
|
||||
*
|
||||
* CT=150ns Latency1=0x657 Latency2=0x1 Pagecount=1page
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||
HotSwState ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||
{
|
||||
u32 loop, counter=0;
|
||||
u64 i, page;
|
||||
@ -403,6 +447,10 @@ void ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u32 size
|
||||
// OS_TPrintf("Read Game Segment Page Count : %d size : %x\n", loop, size);
|
||||
|
||||
for(i=0; i<loop; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// NewDMA転送の準備
|
||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, (u32 *)buf + (u32)(PAGE_WORD_SIZE*i), PAGE_SIZE );
|
||||
|
||||
@ -434,4 +482,6 @@ void ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u32 size
|
||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||
OS_SleepThread(NULL);
|
||||
}
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
@ -53,20 +53,7 @@
|
||||
#define HOTSW_EXMEMCNT_SELB_SHIFT 10
|
||||
#endif
|
||||
|
||||
// enum ---------------------------------------------------------------------
|
||||
typedef enum IntrType{
|
||||
HOTSW_INSERT = 0,
|
||||
HOTSW_PULLEDOUT = 1
|
||||
}
|
||||
IntrType;
|
||||
|
||||
// struct -------------------------------------------------------------------
|
||||
typedef struct HotSwMessage{
|
||||
IntrType type;
|
||||
u32 hotswCount;
|
||||
}
|
||||
HotSwMessage;
|
||||
|
||||
// スレッド・メッセージ関係をまとめた構造体
|
||||
typedef struct CardThreadData{
|
||||
u64 stack[HOTSW_THREAD_STACK_SIZE / sizeof(u64)];
|
||||
@ -75,8 +62,8 @@ typedef struct CardThreadData{
|
||||
u32 idx_insert;
|
||||
u32 idx_pulledOut;
|
||||
|
||||
HotSwMessage hotswInsertMsg[HOTSW_INSERT_MSG_NUM];
|
||||
HotSwMessage hotswPulledOutMsg[HOTSW_PULLED_MSG_NUM];
|
||||
OSMessage hotswInsertMsg[HOTSW_INSERT_MSG_NUM];
|
||||
OSMessage hotswPulledOutMsg[HOTSW_PULLED_MSG_NUM];
|
||||
OSMessageQueue hotswQueue;
|
||||
OSMessage hotswMsgBuffer[HOTSW_MSG_BUFFER_NUM];
|
||||
}
|
||||
@ -84,7 +71,6 @@ CardThreadData;
|
||||
|
||||
// Function prototype -------------------------------------------------------
|
||||
static BOOL IsSwap(void);
|
||||
static BOOL IsCardExist(void);
|
||||
static u32 GetMcSlotShift(void);
|
||||
static void SetMcSlotMode(u32 mode);
|
||||
static BOOL CmpMcSlotMode(u32 mode);
|
||||
@ -103,10 +89,12 @@ static void McPowerOff(void);
|
||||
static void SetMCSCR(void);
|
||||
|
||||
static void GenVA_VB_VD(void);
|
||||
static void LoadTable(void);
|
||||
static void ReadRomEmulationData(void);
|
||||
static void ReadIDNormal(void);
|
||||
static void DecryptObjectFile(void);
|
||||
static HotSwState LoadTable(void);
|
||||
static HotSwState ReadRomEmulationData(void);
|
||||
static HotSwState ReadIDNormal(void);
|
||||
static HotSwState LoadStaticModule(void);
|
||||
static HotSwState LoadCardData(void);
|
||||
|
||||
static void SetHotSwState(BOOL busy);
|
||||
|
||||
@ -236,13 +224,9 @@ void HOTSW_Init(void)
|
||||
HOTSW_SetSecureSegmentBuffer((void *)SYSM_CARD_NTR_SECURE_BUF, SECURE_AREA_SIZE );
|
||||
|
||||
// カードが挿さってあったらスレッドを起動する
|
||||
if(IsCardExist()){
|
||||
if(HOTSW_IsCardExist()){
|
||||
// OS_PutString("Card Boot Start\n");
|
||||
|
||||
// 送信メッセージを作成 (活線挿抜回数を取得・カード挿し)
|
||||
s_ctData.hotswInsertMsg[s_ctData.idx_insert].hotswCount = CARDi_GetSlotResetCount();
|
||||
s_ctData.hotswInsertMsg[s_ctData.idx_insert].type = HOTSW_INSERT;
|
||||
|
||||
// メッセージ送信
|
||||
OS_SendMessage(&s_ctData.hotswQueue, (OSMessage)&s_ctData.hotswInsertMsg[s_ctData.idx_insert], OS_MESSAGE_NOBLOCK);
|
||||
|
||||
@ -258,29 +242,21 @@ void HOTSW_Init(void)
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* HOTSW_LoadCardData関数
|
||||
* LoadCardData関数
|
||||
*
|
||||
* カードからデータをロードする
|
||||
*
|
||||
* ※BootSegmentBuffer SecureSegmentBufferの設定を行ってから
|
||||
* この関数を呼んでください。
|
||||
* ----------------------------------------------------------------- */
|
||||
BOOL HOTSW_LoadCardData(void)
|
||||
static HotSwState LoadCardData(void)
|
||||
{
|
||||
OSTick start;
|
||||
s32 tempLockID;
|
||||
BOOL retval = TRUE;
|
||||
HotSwState retval = HOTSW_SUCCESS;
|
||||
|
||||
start = OS_GetTick();
|
||||
|
||||
// スロットがスワップされてたら元に戻す。
|
||||
#ifdef HOTSW_FORCE_CARD_B
|
||||
if(reg_MI_MC1 & 0x8000){
|
||||
reg_MI_MC1 = reg_MI_MC1 & 0xff;
|
||||
}
|
||||
#endif // HOTSW_FORCE_CARD_B
|
||||
|
||||
// OS_TPrintf("---------------- Card Boot Start ---------------\n");
|
||||
#ifdef SDK_ARM7
|
||||
// カード電源リセット
|
||||
McPowerOff();
|
||||
@ -301,14 +277,14 @@ BOOL HOTSW_LoadCardData(void)
|
||||
// カードのロックIDを取得
|
||||
tempLockID = OS_GetLockID();
|
||||
if(tempLockID == OS_LOCK_ID_ERROR){
|
||||
retval = FALSE;
|
||||
return HOTSW_CARD_LOCK_ERROR;
|
||||
}
|
||||
else{
|
||||
s_cbData.lockID = (u16)tempLockID;
|
||||
}
|
||||
|
||||
// ブート処理開始
|
||||
if(IsCardExist() && retval){
|
||||
if(HOTSW_IsCardExist()){
|
||||
// カードのロック
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
LockExCard(s_cbData.lockID);
|
||||
@ -317,11 +293,11 @@ BOOL HOTSW_LoadCardData(void)
|
||||
#endif
|
||||
|
||||
// カード側でKey Tableをロードする
|
||||
LoadTable();
|
||||
retval = LoadTable();
|
||||
|
||||
// ---------------------- Normal Mode ----------------------
|
||||
// カードID読み込み
|
||||
ReadIDNormal();
|
||||
retval = ReadIDNormal();
|
||||
|
||||
// カードタイプを判別をして、使う関数を切替える IDの最上位ビットが1なら3DM
|
||||
if(s_cbData.id_nml & 0x80000000){
|
||||
@ -342,10 +318,10 @@ BOOL HOTSW_LoadCardData(void)
|
||||
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM9と排他制御する
|
||||
|
||||
// Boot Segment読み込み
|
||||
s_funcTable[s_cbData.cardType].ReadBootSegment_N(&s_cbData);
|
||||
retval = s_funcTable[s_cbData.cardType].ReadBootSegment_N(&s_cbData);
|
||||
|
||||
// Romエミュレーション情報を取得
|
||||
ReadRomEmulationData();
|
||||
retval = ReadRomEmulationData();
|
||||
|
||||
// 取得したRomエミュレーション情報を比較
|
||||
s_cbData.debuggerFlg = TRUE;
|
||||
@ -372,14 +348,14 @@ BOOL HOTSW_LoadCardData(void)
|
||||
|
||||
if( ( SYSMi_GetWork()->cardHeaderCrc16_bak != s_cbData.pBootSegBuf->rh.s.header_crc16 ) ||
|
||||
( 0xcf56 != s_cbData.pBootSegBuf->rh.s.nintendo_logo_crc16 ) ){
|
||||
retval = FALSE;
|
||||
retval = HOTSW_CRC_CHECK_ERROR;
|
||||
}
|
||||
|
||||
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM9と排他制御する
|
||||
OS_ReleaseLockID( id );
|
||||
}
|
||||
|
||||
if( retval ) {
|
||||
if( retval == HOTSW_SUCCESS ) {
|
||||
// NTRカードかTWLカードか
|
||||
if(s_cbData.pBootSegBuf->rh.s.platform_code & 0x02){
|
||||
// OS_TPrintf("TWL Card.\n");
|
||||
@ -400,41 +376,49 @@ BOOL HOTSW_LoadCardData(void)
|
||||
GenVA_VB_VD();
|
||||
|
||||
// セキュアモードに移行
|
||||
s_funcTable[s_cbData.cardType].ChangeMode_N(&s_cbData);
|
||||
retval = s_funcTable[s_cbData.cardType].ChangeMode_N(&s_cbData);
|
||||
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
return retval;
|
||||
}
|
||||
|
||||
// ---------------------- Secure Mode ----------------------
|
||||
// PNG設定
|
||||
s_funcTable[s_cbData.cardType].SetPNG_S(&s_cbData);
|
||||
retval = s_funcTable[s_cbData.cardType].SetPNG_S(&s_cbData);
|
||||
|
||||
// DS側符号生成回路初期値設定 (レジスタ設定)
|
||||
SetMCSCR();
|
||||
|
||||
// ID読み込み
|
||||
s_funcTable[s_cbData.cardType].ReadID_S(&s_cbData);
|
||||
retval = s_funcTable[s_cbData.cardType].ReadID_S(&s_cbData);
|
||||
|
||||
// カードIDの比較をして、一致しなければFALSEを返す
|
||||
if(s_cbData.id_nml != s_cbData.id_scr){
|
||||
return FALSE;
|
||||
return HOTSW_ID_CHECK_ERROR;
|
||||
}
|
||||
|
||||
// Secure領域のSegment読み込み
|
||||
s_funcTable[s_cbData.cardType].ReadSegment_S(&s_cbData);
|
||||
retval = s_funcTable[s_cbData.cardType].ReadSegment_S(&s_cbData);
|
||||
|
||||
// ゲームモードに移行
|
||||
s_funcTable[s_cbData.cardType].ChangeMode_S(&s_cbData);
|
||||
retval = s_funcTable[s_cbData.cardType].ChangeMode_S(&s_cbData);
|
||||
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
return retval;
|
||||
}
|
||||
|
||||
// ---------------------- Game Mode ----------------------
|
||||
// ID読み込み
|
||||
s_funcTable[s_cbData.cardType].ReadID_G(&s_cbData);
|
||||
retval = s_funcTable[s_cbData.cardType].ReadID_G(&s_cbData);
|
||||
|
||||
// カードIDの比較をして、一致しなければFALSEを返す
|
||||
if(s_cbData.id_scr != s_cbData.id_gam){
|
||||
return FALSE;
|
||||
return HOTSW_ID_CHECK_ERROR;
|
||||
}
|
||||
|
||||
// 常駐モジュール残りを指定先に転送
|
||||
HOTSW_LoadStaticModule();
|
||||
|
||||
retval = LoadStaticModule();
|
||||
|
||||
// ARM9常駐モジュールの先頭2KBの暗号化領域を複合化
|
||||
DecryptObjectFile();
|
||||
}
|
||||
@ -445,11 +429,9 @@ BOOL HOTSW_LoadCardData(void)
|
||||
#else
|
||||
OS_UnlockCard(s_cbData.lockID);
|
||||
#endif
|
||||
// OS_TPrintf("-----------------------------------------------\n");
|
||||
}
|
||||
else{
|
||||
// OS_TPrintf("Card Not Found\n");
|
||||
retval = FALSE;
|
||||
retval = HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// カードロックIDの開放
|
||||
@ -471,25 +453,32 @@ void* HOTSW_GetRomEmulationBuffer(void)
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* HOTSW_LoadStaticModule関数
|
||||
* LoadStaticModule関数
|
||||
*
|
||||
* ARM7,9の常駐モジュールを展開する関数
|
||||
*
|
||||
* 注:一度カードブートしてゲームモードになってから呼び出してください
|
||||
* ----------------------------------------------------------------- */
|
||||
void HOTSW_LoadStaticModule(void)
|
||||
static HotSwState LoadStaticModule(void)
|
||||
{
|
||||
HotSwState retval = HOTSW_SUCCESS;
|
||||
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
// バナーリード
|
||||
if( s_cbData.pBootSegBuf->rh.s.banner_offset ) {
|
||||
// OS_TPrintf(" - Banner Loading...\n");
|
||||
s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
|
||||
retval = s_funcTable[s_cbData.cardType].ReadPage_G(
|
||||
&s_cbData,
|
||||
s_cbData.pBootSegBuf->rh.s.banner_offset,
|
||||
(u32 *)SYSM_CARD_BANNER_BUF,
|
||||
sizeof(TWLBannerFile) );
|
||||
}
|
||||
|
||||
if(IsCardExist())
|
||||
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
return retval;
|
||||
}
|
||||
|
||||
if(HOTSW_IsCardExist())
|
||||
{
|
||||
SYSMi_GetWork()->flags.common.isValidCardBanner = TRUE;
|
||||
SYSMi_GetWork()->flags.common.isCardStateChanged = TRUE;
|
||||
@ -501,18 +490,26 @@ void HOTSW_LoadStaticModule(void)
|
||||
s_cbData.arm9Stc = (u32)s_cbData.pBootSegBuf->rh.s.main_ram_address;
|
||||
// 配置先と再配置情報を取得 & Arm9の常駐モジュール残りを指定先に転送
|
||||
SYSM_CheckLoadRegionAndSetRelocateInfo( ARM9_STATIC, &s_cbData.arm9Stc, s_cbData.pBootSegBuf->rh.s.main_size, &SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC] , s_cbData.twlFlg);
|
||||
s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
|
||||
s_cbData.pBootSegBuf->rh.s.main_rom_offset + SECURE_SEGMENT_SIZE,
|
||||
(u32 *)(s_cbData.arm9Stc + SECURE_SEGMENT_SIZE),
|
||||
s_cbData.pBootSegBuf->rh.s.main_size - SECURE_SEGMENT_SIZE);
|
||||
retval = s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
|
||||
s_cbData.pBootSegBuf->rh.s.main_rom_offset + SECURE_SEGMENT_SIZE,
|
||||
(u32 *)(s_cbData.arm9Stc + SECURE_SEGMENT_SIZE),
|
||||
s_cbData.pBootSegBuf->rh.s.main_size - SECURE_SEGMENT_SIZE);
|
||||
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
return retval;
|
||||
}
|
||||
|
||||
s_cbData.arm7Stc = (u32)s_cbData.pBootSegBuf->rh.s.sub_ram_address;
|
||||
// 配置先と再配置情報を取得 & Arm7の常駐モジュールを指定先に転送
|
||||
SYSM_CheckLoadRegionAndSetRelocateInfo( ARM7_STATIC, &s_cbData.arm7Stc, s_cbData.pBootSegBuf->rh.s.sub_size, &SYSMi_GetWork()->romRelocateInfo[ARM7_STATIC] , s_cbData.twlFlg);
|
||||
s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
|
||||
s_cbData.pBootSegBuf->rh.s.sub_rom_offset,
|
||||
(u32 *)s_cbData.arm7Stc,
|
||||
s_cbData.pBootSegBuf->rh.s.sub_size);
|
||||
retval = s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
|
||||
s_cbData.pBootSegBuf->rh.s.sub_rom_offset,
|
||||
(u32 *)s_cbData.arm7Stc,
|
||||
s_cbData.pBootSegBuf->rh.s.sub_size);
|
||||
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
return retval;
|
||||
}
|
||||
|
||||
// TWLでのみロード
|
||||
if( s_cbData.pBootSegBuf->rh.s.platform_code & PLATFORM_CODE_FLAG_TWL ) {
|
||||
@ -521,26 +518,33 @@ void HOTSW_LoadStaticModule(void)
|
||||
s_cbData.arm9Ltd = (u32)s_cbData.pBootSegBuf->rh.s.main_ltd_ram_address;
|
||||
// 配置先と再配置情報を取得 & Arm9の常駐モジュールを指定先に転送(※TWLカード対応していないので、注意!!)
|
||||
SYSM_CheckLoadRegionAndSetRelocateInfo( ARM9_LTD_STATIC, &s_cbData.arm9Ltd, s_cbData.pBootSegBuf->rh.s.main_ltd_size, &SYSMi_GetWork()->romRelocateInfo[ARM9_LTD_STATIC] , TRUE);
|
||||
s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
|
||||
s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset,
|
||||
(u32 *)SYSM_CARD_TWL_SECURE_BUF,
|
||||
size);
|
||||
retval = s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
|
||||
s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset,
|
||||
(u32 *)SYSM_CARD_TWL_SECURE_BUF,
|
||||
size);
|
||||
if( s_cbData.pBootSegBuf->rh.s.main_ltd_size > SECURE_SEGMENT_SIZE ) {
|
||||
s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
|
||||
s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset + SECURE_SEGMENT_SIZE,
|
||||
(u32 *)(s_cbData.arm9Ltd + SECURE_SEGMENT_SIZE),
|
||||
s_cbData.pBootSegBuf->rh.s.main_ltd_size - size);
|
||||
retval = s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
|
||||
s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset + SECURE_SEGMENT_SIZE,
|
||||
(u32 *)(s_cbData.arm9Ltd + SECURE_SEGMENT_SIZE),
|
||||
s_cbData.pBootSegBuf->rh.s.main_ltd_size - size);
|
||||
}
|
||||
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
return retval;
|
||||
}
|
||||
|
||||
s_cbData.arm7Ltd = (u32)s_cbData.pBootSegBuf->rh.s.sub_ltd_ram_address;
|
||||
// 配置先と再配置情報を取得 & Arm7の常駐モジュールを指定先に転送
|
||||
SYSM_CheckLoadRegionAndSetRelocateInfo( ARM7_LTD_STATIC, &s_cbData.arm7Ltd, s_cbData.pBootSegBuf->rh.s.sub_ltd_size, &SYSMi_GetWork()->romRelocateInfo[ARM7_LTD_STATIC], TRUE);
|
||||
s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
|
||||
s_cbData.pBootSegBuf->rh.s.sub_ltd_rom_offset,
|
||||
(u32 *)s_cbData.arm7Ltd,
|
||||
s_cbData.pBootSegBuf->rh.s.sub_ltd_size);
|
||||
|
||||
retval = s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
|
||||
s_cbData.pBootSegBuf->rh.s.sub_ltd_rom_offset,
|
||||
(u32 *)s_cbData.arm7Ltd,
|
||||
s_cbData.pBootSegBuf->rh.s.sub_ltd_size);
|
||||
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
return retval;
|
||||
}
|
||||
|
||||
// セキュア領域先頭2K分のハッシュ値を求めて、Work領域にコピー
|
||||
{
|
||||
u8 sha1data[DIGEST_SIZE_SHA1];
|
||||
@ -561,24 +565,30 @@ void HOTSW_LoadStaticModule(void)
|
||||
|
||||
// Arm9常駐モジュール Hash値のチェック
|
||||
if(!CheckArm9HashValue()){
|
||||
retval = HOTSW_HASH_CHECK_ERROR;
|
||||
OS_PutString("×Arm9 Static Module Hash Check Error...\n");
|
||||
}
|
||||
|
||||
// Arm7常駐モジュール Hash値のチェック
|
||||
if(!CheckArm7HashValue()){
|
||||
retval = HOTSW_HASH_CHECK_ERROR;
|
||||
OS_PutString("×Arm7 Static Module Hash Check Error...\n");
|
||||
}
|
||||
|
||||
// Arm9拡張常駐モジュール Hash値のチェック
|
||||
if(!CheckExtArm9HashValue()){
|
||||
retval = HOTSW_HASH_CHECK_ERROR;
|
||||
OS_PutString("×Arm9 Ltd Static Module Hash Check Error...\n");
|
||||
}
|
||||
|
||||
// Arm7拡張常駐モジュール Hash値のチェック
|
||||
if(!CheckExtArm7HashValue()){
|
||||
retval = HOTSW_HASH_CHECK_ERROR;
|
||||
OS_PutString("×Arm7 Ltd Static Module Hash Check Error...\n");
|
||||
}
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
@ -661,7 +671,7 @@ static void GenVA_VB_VD(void)
|
||||
* ※この関数は開発カード用に発行しないといけない。
|
||||
* 製品版カードの場合、このコマンドは無視される設計
|
||||
* ----------------------------------------------------------------- */
|
||||
static void LoadTable(void)
|
||||
static HotSwState LoadTable(void)
|
||||
{
|
||||
u32 temp;
|
||||
|
||||
@ -680,6 +690,8 @@ static void LoadTable(void)
|
||||
while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){}
|
||||
temp = reg_HOTSW_MCD1;
|
||||
}
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -687,7 +699,7 @@ static void LoadTable(void)
|
||||
|
||||
Description: Romエミュレーションデータの読み込み
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void ReadRomEmulationData(void)
|
||||
static HotSwState ReadRomEmulationData(void)
|
||||
{
|
||||
u32 count=0;
|
||||
u32 temp;
|
||||
@ -696,7 +708,7 @@ static void ReadRomEmulationData(void)
|
||||
// 量産用CPUでは平文アクセス防止のためリードしない
|
||||
if ( ! (*(u8*)(OS_CHIPTYPE_DEBUGGER_ADDR) & OS_CHIPTYPE_DEBUGGER_MASK) )
|
||||
{
|
||||
return;
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
// MCCMD レジスタ設定
|
||||
@ -719,6 +731,8 @@ static void ReadRomEmulationData(void)
|
||||
}
|
||||
|
||||
MI_CpuCopyFast(s_cbData.romEmuBuf, (void*)HW_ISD_RESERVED, 32);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
@ -726,7 +740,7 @@ static void ReadRomEmulationData(void)
|
||||
*
|
||||
* ノーマルモード時のカードIDを読み込む関数
|
||||
* ----------------------------------------------------------------- */
|
||||
void ReadIDNormal(void)
|
||||
HotSwState ReadIDNormal(void)
|
||||
{
|
||||
// カード割り込みによるDMAコピー
|
||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &s_cbData.id_nml, sizeof(s_cbData.id_nml) );
|
||||
@ -743,6 +757,8 @@ void ReadIDNormal(void)
|
||||
|
||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||
OS_SleepThread(NULL);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
@ -810,6 +826,25 @@ static void DecryptObjectFile(void)
|
||||
MI_CpuCopy32(pEncBuf, pEncDes, (u32)size);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* HOTSW_IsCardExist関数
|
||||
*
|
||||
* カードの存在判定
|
||||
*
|
||||
* ※SCFG_MC1のCDETフラグを見ている
|
||||
* ----------------------------------------------------------------- */
|
||||
BOOL HOTSW_IsCardExist(void)
|
||||
{
|
||||
u32 mask = (u32)(REG_MI_MC_SL2_CDET_MASK >> GetMcSlotShift());
|
||||
|
||||
if( !(reg_MI_MC1 & mask) ){
|
||||
return TRUE;
|
||||
}
|
||||
else{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* IsSwap関数
|
||||
*
|
||||
@ -827,25 +862,6 @@ static BOOL IsSwap(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* IsCardExist関数
|
||||
*
|
||||
* カードの存在判定
|
||||
*
|
||||
* ※SCFG_MC1のCDETフラグを見ている
|
||||
* ----------------------------------------------------------------- */
|
||||
static BOOL IsCardExist(void)
|
||||
{
|
||||
u32 mask = (u32)(REG_MI_MC_SL2_CDET_MASK >> GetMcSlotShift());
|
||||
|
||||
if( !(reg_MI_MC1 & mask) ){
|
||||
return TRUE;
|
||||
}
|
||||
else{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* GetMcSlotShift関数
|
||||
*
|
||||
@ -853,7 +869,7 @@ static BOOL IsCardExist(void)
|
||||
* ----------------------------------------------------------------- */
|
||||
static u32 GetMcSlotShift(void)
|
||||
{
|
||||
return (u32)(IsSwap() * REG_MI_MC_SL2_CDET_SHIFT);
|
||||
return (u32)(IsSwap() * REG_MI_MC_SL2_CDET_SHIFT);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
@ -968,10 +984,10 @@ static void McThread(void *arg)
|
||||
{
|
||||
#pragma unused( arg )
|
||||
|
||||
u32 currentId_g = UNDEF_CODE;
|
||||
BOOL isPulledOut = TRUE;
|
||||
BOOL retval;
|
||||
HotSwMessage *msg;
|
||||
u32 hotswCount = UNDEF_CODE;
|
||||
BOOL isPulledOut = TRUE;
|
||||
HotSwState retval;
|
||||
OSMessage *msg;
|
||||
|
||||
while(1){
|
||||
OS_ReceiveMessage(&s_ctData.hotswQueue, (OSMessage *)&msg, OS_MESSAGE_BLOCK);
|
||||
@ -989,12 +1005,11 @@ static void McThread(void *arg)
|
||||
}
|
||||
|
||||
// カードが挿さってたら
|
||||
if(IsCardExist()){
|
||||
if(HOTSW_IsCardExist()){
|
||||
// 前の状態が挿し
|
||||
if(!isPulledOut){
|
||||
(void)s_funcTable[s_cbData.cardType].ReadID_G(&s_cbData);
|
||||
if(currentId_g == s_cbData.id_gam){
|
||||
|
||||
// 抜き差しがなかったか判定
|
||||
if(CARDi_IsPulledOutEx(hotswCount)){
|
||||
u16 id = (u16)OS_GetLockID();
|
||||
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
|
||||
if( SYSMi_GetWork()->flags.arm9.reqChangeHotSW ) {
|
||||
@ -1026,27 +1041,30 @@ static void McThread(void *arg)
|
||||
// カードデータロード完了フラグ
|
||||
SYSMi_GetWork()->flags.common.isCardLoadCompleted = TRUE;
|
||||
|
||||
OS_PutString("ok!\n");
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 挿し回数を取得
|
||||
hotswCount = CARDi_GetSlotResetCount();
|
||||
|
||||
// HotSwをbusy状態にする
|
||||
SetHotSwState(TRUE);
|
||||
|
||||
|
||||
// カード読み込み開始
|
||||
retval = HOTSW_LoadCardData();
|
||||
retval = LoadCardData();
|
||||
|
||||
// HotSwをfree状態にする
|
||||
SetHotSwState(FALSE);
|
||||
|
||||
// GameモードでのIDを登録する
|
||||
currentId_g = s_cbData.id_gam;
|
||||
|
||||
// 状態フラグを更新
|
||||
isPulledOut = !retval;
|
||||
|
||||
isPulledOut = (retval == HOTSW_SUCCESS) ? FALSE : TRUE;
|
||||
|
||||
// カード読み込み失敗してたら、後処理する
|
||||
if(!retval){
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
OS_TPrintf("ng... retval : %d\n", retval);
|
||||
// カードロックの開放
|
||||
#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
UnlockExCard(s_cbData.lockID);
|
||||
@ -1094,10 +1112,6 @@ static void McThread(void *arg)
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void InterruptCallbackCard(void)
|
||||
{
|
||||
// 送信メッセージを作成 (活線挿抜回数を取得・カード挿し)
|
||||
s_ctData.hotswPulledOutMsg[s_ctData.idx_pulledOut].hotswCount = CARDi_GetSlotResetCount();
|
||||
s_ctData.hotswPulledOutMsg[s_ctData.idx_pulledOut].type = HOTSW_PULLEDOUT;
|
||||
|
||||
// メッセージ送信
|
||||
OS_SendMessage(&s_ctData.hotswQueue, (OSMessage *)&s_ctData.hotswPulledOutMsg[s_ctData.idx_pulledOut], OS_MESSAGE_NOBLOCK);
|
||||
|
||||
@ -1122,10 +1136,6 @@ static void InterruptCallbackCardDet(void)
|
||||
{
|
||||
// SDKのカード状態をリセットする
|
||||
CARDi_ResetSlotStatus();
|
||||
|
||||
// 送信メッセージを作成 (活線挿抜回数を取得・カード挿し)
|
||||
s_ctData.hotswInsertMsg[s_ctData.idx_insert].hotswCount = CARDi_GetSlotResetCount();
|
||||
s_ctData.hotswInsertMsg[s_ctData.idx_insert].type = HOTSW_INSERT;
|
||||
|
||||
// メッセージ送信
|
||||
OS_SendMessage(&s_ctData.hotswQueue, (OSMessage *)&s_ctData.hotswInsertMsg[s_ctData.idx_insert], OS_MESSAGE_NOBLOCK);
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
|
||||
Description: DSカードType1のノーマルモードのBoot Segment読み込み
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadBootSegNormal_ROMEMU(CardBootData *cbd)
|
||||
HotSwState ReadBootSegNormal_ROMEMU(CardBootData *cbd)
|
||||
{
|
||||
u32 i,j=0;
|
||||
u64 page = 0;
|
||||
@ -41,6 +41,10 @@ void ReadBootSegNormal_ROMEMU(CardBootData *cbd)
|
||||
// u32 n = 0;
|
||||
|
||||
for(i=0; i<BOOT_PAGE_NUM; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// ゼロクリア
|
||||
MI_CpuClear8(&tempCnd, sizeof(GCDCmd64));
|
||||
|
||||
@ -75,6 +79,8 @@ void ReadBootSegNormal_ROMEMU(CardBootData *cbd)
|
||||
|
||||
page++;
|
||||
}
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -82,12 +88,16 @@ void ReadBootSegNormal_ROMEMU(CardBootData *cbd)
|
||||
|
||||
Description: DSカードType1のノーマルモードのモード変更
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ChangeModeNormal_ROMEMU(CardBootData *cbd)
|
||||
HotSwState ChangeModeNormal_ROMEMU(CardBootData *cbd)
|
||||
{
|
||||
#pragma unused( cbd )
|
||||
|
||||
GCDCmd64 tempCnd, cnd;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// ゼロクリア
|
||||
MI_CpuClear8(&tempCnd, sizeof(GCDCmd64));
|
||||
|
||||
@ -113,6 +123,8 @@ void ChangeModeNormal_ROMEMU(CardBootData *cbd)
|
||||
|
||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||
OS_SleepThread(NULL);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -124,8 +136,12 @@ void ChangeModeNormal_ROMEMU(CardBootData *cbd)
|
||||
|
||||
Description:
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadIDSecure_ROMEMU(CardBootData *cbd)
|
||||
HotSwState ReadIDSecure_ROMEMU(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// カード割り込みによるDMAコピー
|
||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_scr, sizeof(cbd->id_scr) );
|
||||
|
||||
@ -141,6 +157,8 @@ void ReadIDSecure_ROMEMU(CardBootData *cbd)
|
||||
|
||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||
OS_SleepThread(NULL);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -148,7 +166,7 @@ void ReadIDSecure_ROMEMU(CardBootData *cbd)
|
||||
|
||||
Description:
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadSegSecure_ROMEMU(CardBootData *cbd)
|
||||
HotSwState ReadSegSecure_ROMEMU(CardBootData *cbd)
|
||||
{
|
||||
u32 i,j=0;
|
||||
u64 page = 0x20;
|
||||
@ -156,6 +174,10 @@ void ReadSegSecure_ROMEMU(CardBootData *cbd)
|
||||
u32 n = 0;
|
||||
|
||||
for(i=0; i<SECURE_PAGE_NUM; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// ゼロクリア
|
||||
MI_CpuClear8(&tempCnd, sizeof(GCDCmd64));
|
||||
|
||||
@ -189,6 +211,8 @@ void ReadSegSecure_ROMEMU(CardBootData *cbd)
|
||||
}
|
||||
page++;
|
||||
}
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -196,9 +220,11 @@ void ReadSegSecure_ROMEMU(CardBootData *cbd)
|
||||
|
||||
Description:
|
||||
*---------------------------------------------------------------------------*/
|
||||
void SwitchONPNGSecure_ROMEMU(CardBootData *cbd)
|
||||
HotSwState SwitchONPNGSecure_ROMEMU(CardBootData *cbd)
|
||||
{
|
||||
#pragma unused( cbd )
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -206,9 +232,11 @@ void SwitchONPNGSecure_ROMEMU(CardBootData *cbd)
|
||||
|
||||
Description:
|
||||
*---------------------------------------------------------------------------*/
|
||||
void SwitchOFFPNGSecure_ROMEMU(CardBootData *cbd)
|
||||
HotSwState SwitchOFFPNGSecure_ROMEMU(CardBootData *cbd)
|
||||
{
|
||||
#pragma unused( cbd )
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -216,12 +244,16 @@ void SwitchOFFPNGSecure_ROMEMU(CardBootData *cbd)
|
||||
|
||||
Description:
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ChangeModeSecure_ROMEMU(CardBootData *cbd)
|
||||
HotSwState ChangeModeSecure_ROMEMU(CardBootData *cbd)
|
||||
{
|
||||
#pragma unused( cbd )
|
||||
|
||||
GCDCmd64 tempCnd, cnd;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// ゼロクリア
|
||||
MI_CpuClear8(&tempCnd, sizeof(GCDCmd64));
|
||||
|
||||
@ -247,6 +279,8 @@ void ChangeModeSecure_ROMEMU(CardBootData *cbd)
|
||||
|
||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||
OS_SleepThread(NULL);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -258,10 +292,14 @@ void ChangeModeSecure_ROMEMU(CardBootData *cbd)
|
||||
|
||||
Description: ゲームモードでIDを読み込む
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadIDGame_ROMEMU(CardBootData *cbd)
|
||||
HotSwState ReadIDGame_ROMEMU(CardBootData *cbd)
|
||||
{
|
||||
#pragma unused( cbd )
|
||||
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// カード割り込みによるDMAコピー
|
||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_gam, sizeof(cbd->id_gam) );
|
||||
|
||||
@ -277,6 +315,8 @@ void ReadIDGame_ROMEMU(CardBootData *cbd)
|
||||
|
||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||
OS_SleepThread(NULL);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -284,7 +324,7 @@ void ReadIDGame_ROMEMU(CardBootData *cbd)
|
||||
|
||||
Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ReadPageGame_ROMEMU(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||
HotSwState ReadPageGame_ROMEMU(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||
{
|
||||
#pragma unused( cbd )
|
||||
|
||||
@ -300,6 +340,10 @@ void ReadPageGame_ROMEMU(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||
OS_TPrintf("Read Game Segment Page Count : %d size : %x\n", loop, size);
|
||||
|
||||
for(i=0; i<loop; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
// ゼロクリア
|
||||
MI_CpuClear8(&cndLE, sizeof(GCDCmd64));
|
||||
|
||||
@ -330,4 +374,6 @@ void ReadPageGame_ROMEMU(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||
*((u32 *)buf + counter++) = reg_HOTSW_MCD1;
|
||||
}
|
||||
}
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
@ -17,11 +17,8 @@ extern "C" {
|
||||
// 活栓挿抜処理の初期化
|
||||
void HOTSW_Init(void);
|
||||
|
||||
// カードからデータをロードする。Normalモード→Secureモード→Gameモードを行う
|
||||
BOOL HOTSW_LoadCardData(void);
|
||||
|
||||
// ARM7,9の常駐モジュールを展開する関数
|
||||
void HOTSW_LoadStaticModule(void);
|
||||
// カードの存在判定
|
||||
BOOL HOTSW_IsCardExist(void);
|
||||
|
||||
// Boot Segment バッファの指定
|
||||
void HOTSW_SetBootSegmentBuffer(void* buf, u32 size);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user