mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新:Akabane Jumpei)
・符号生成回路初期化をRomHeaderのデバイスタイプを見て設定するように修正 ・DMAとカードのデータ転送終了を待つインライン関数を追加 ・ソースの整理 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/branches/20080312_hotsw@868 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
f85716dd96
commit
28a0a22b9a
@ -22,7 +22,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/*************************************************************************/
|
||||
extern BLOWFISH_CTX GCDi_BlowfishInitTableBufDS;
|
||||
extern BLOWFISH_CTX HotSwBlowfishInitTableBufDS;
|
||||
|
||||
// Function Prototype ------------------------------------------------------------------------
|
||||
// Blowfish <20>‰Šú‰»
|
||||
|
||||
@ -7,6 +7,21 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
static inline void HOTSW_WaitCardCtrl(void)
|
||||
{
|
||||
while( reg_HOTSW_MCCNT1 & REG_MI_MCCNT1_START_MASK ){
|
||||
// OS_PutString("Card is busy..\n");
|
||||
}
|
||||
}
|
||||
|
||||
static inline void HOTSW_WaitDmaCtrl(u32 ndmaNo)
|
||||
{
|
||||
while( MI_NDMA_REG( ndmaNo, MI_NDMA_REG_CNT_WOFFSET ) & MI_NDMA_ENABLE_MASK ){
|
||||
// OS_PutString("Dma is busy..\n");
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
// Function Describe
|
||||
// ===========================================================================
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include <twl.h>
|
||||
#include <twl/os/common/format_rom.h>
|
||||
#include <sysmenu.h>
|
||||
#include <firm/gcd/blowfish.h>
|
||||
#include "romSpec.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -48,10 +49,6 @@ extern "C" {
|
||||
|
||||
#define ROM_EMULATION_DATA_SIZE 0x20 // ROMエミュレーションデータサイズ
|
||||
|
||||
#define PNA_BASE_VALUE 0x60e8 //
|
||||
#define PNB_L_VALUE 0x879b9b05 //
|
||||
#define PNB_H_VALUE 0x5c //
|
||||
|
||||
#define HOTSW_THREAD_STACK_SIZE (1024 + PAGE_SIZE) // スタックサイズ
|
||||
#define HOTSW_DMA_MSG_NUM 8 // DMA転送終了割り込み
|
||||
#define HOTSW_INSERT_MSG_NUM 16 // 挿し割り込み送信メッセージの数
|
||||
@ -108,6 +105,17 @@ extern "C" {
|
||||
#define SCRAMBLE_MASK 0x1840e000
|
||||
#define SECURE_COMMAND_SCRAMBLE_MASK 0x00406000 // CS SE DSのマスク
|
||||
|
||||
// Page Count
|
||||
#define HOTSW_PAGE_0 0x0UL << PC_SHIFT
|
||||
#define HOTSW_PAGE_1 0x1UL << PC_SHIFT
|
||||
#define HOTSW_PAGE_2 0x2UL << PC_SHIFT
|
||||
#define HOTSW_PAGE_4 0x3UL << PC_SHIFT
|
||||
#define HOTSW_PAGE_8 0x4UL << PC_SHIFT
|
||||
#define HOTSW_PAGE_16 0x5UL << PC_SHIFT
|
||||
#define HOTSW_PAGE_32 0x6UL << PC_SHIFT
|
||||
#define HOTSW_PAGE_STAT 0x7UL << PC_SHIFT
|
||||
|
||||
|
||||
#define AddLatency2ToLatency1(param)\
|
||||
( (((param) & LATENCY2_MASK) \
|
||||
>> LATENCY2_SHIFT) \
|
||||
@ -235,15 +243,13 @@ typedef union BootSegmentData
|
||||
} BootSegmentData;
|
||||
|
||||
// struct -------------------------------------------------------------------
|
||||
typedef struct BLOWFISH_CTX{
|
||||
/*typedef struct BLOWFISH_CTX{
|
||||
u32 P[16 + 2];
|
||||
u32 S[4][256];
|
||||
} BLOWFISH_CTX;
|
||||
} BLOWFISH_CTX;*/
|
||||
|
||||
// カードブート時に必要な変数一式をまとめた構造体
|
||||
typedef struct CardBootData{
|
||||
u16 lockID;
|
||||
|
||||
u32 vae;
|
||||
u32 vbi;
|
||||
u32 vd;
|
||||
@ -253,11 +259,6 @@ typedef struct CardBootData{
|
||||
u32 id_scr2;
|
||||
u32 id_gam;
|
||||
|
||||
u32 arm9StcSize;
|
||||
u32 arm7StcSize;
|
||||
u32 arm9LtdSize;
|
||||
u32 arm7LtdSize;
|
||||
|
||||
u32 arm9Stc;
|
||||
u32 arm7Stc;
|
||||
u32 arm9Ltd;
|
||||
@ -270,9 +271,11 @@ typedef struct CardBootData{
|
||||
|
||||
u32 romEmuBuf[ROM_EMULATION_DATA_SIZE/sizeof(u32)];
|
||||
u32 keyBuf[KEY_BUF_SIZE];
|
||||
u32 keyBuf2[KEY_BUF_SIZE];
|
||||
|
||||
CardTypeEx cardType;
|
||||
ModeType modeType;
|
||||
RomMode romMode;
|
||||
u32 secureLatency;
|
||||
u32 gameCommondParam;
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ static u32 F(const BLOWFISH_CTX *ctx, u32 x);
|
||||
//*****************************************
|
||||
void GCDm_MakeBlowfishTableDS(CardBootData *cbd, s32 keyLen)
|
||||
{
|
||||
const BLOWFISH_CTX *initTable = &GCDi_BlowfishInitTableBufDS;
|
||||
const BLOWFISH_CTX *initTable = &HotSwBlowfishInitTableBufDS;
|
||||
|
||||
u32 blowfishedKey[2];
|
||||
|
||||
|
||||
@ -7,18 +7,13 @@
|
||||
#include <hotswTypes.h>
|
||||
#include <customNDma.h>
|
||||
|
||||
|
||||
// Define data --------------------------------------------------------------
|
||||
#define NDMA_BLOCK_WORD_COUNT_1 0x0
|
||||
#define NDMA_NO_INTERVAL_NORMAL_SCALE 0x0
|
||||
#define NDMA_TOTAL_WORD_COUNT_1 0x1
|
||||
#define NDMA_WORD_COUNT_1 0x1
|
||||
#define ASSERT_DMANO( ndmaNo ) SDK_ASSERTMSG( (ndmaNo) <= MI_NDMA_MAX_NUM, "illegal NDMA No." );
|
||||
|
||||
// Function prototype -------------------------------------------------------
|
||||
static void HOTSWi_NDmaCopy_Card(u32 ndmaNo, const void *src, void *dest, u32 size, u32 dcont);
|
||||
|
||||
|
||||
// ===========================================================================
|
||||
// Function Describe
|
||||
// ===========================================================================
|
||||
@ -50,23 +45,21 @@ static void HOTSWi_NDmaCopy_Card(u32 ndmaNo, const void *src, void *dest, u32 si
|
||||
ASSERT_DMANO( ndmaNo );
|
||||
|
||||
//---- confirm CARD free
|
||||
while( reg_HOTSW_MCCNT1 & REG_MI_MCCNT1_START_MASK ){}
|
||||
HOTSW_WaitCardCtrl();
|
||||
|
||||
//---- confirm DMA free
|
||||
while( MI_IsNDmaBusy(ndmaNo) == TRUE ){
|
||||
OS_TPrintf("Dma is busy..\n");
|
||||
}
|
||||
HOTSW_WaitDmaCtrl(ndmaNo);
|
||||
|
||||
//---- set up registers
|
||||
MI_NDMA_REG( ndmaNo, MI_NDMA_REG_SAD_WOFFSET ) = (u32)src;
|
||||
MI_NDMA_REG( ndmaNo, MI_NDMA_REG_DAD_WOFFSET ) = (u32)dest;
|
||||
MI_NDMA_REG( ndmaNo, MI_NDMA_REG_BCNT_WOFFSET ) = NDMA_NO_INTERVAL_NORMAL_SCALE;
|
||||
MI_NDMA_REG( ndmaNo, MI_NDMA_REG_BCNT_WOFFSET ) = MI_NDMA_INTERVAL_PS_1;
|
||||
MI_NDMA_REG( ndmaNo, MI_NDMA_REG_TCNT_WOFFSET ) = (u32)(size/4);
|
||||
MI_NDMA_REG( ndmaNo, MI_NDMA_REG_WCNT_WOFFSET ) = NDMA_WORD_COUNT_1;
|
||||
|
||||
//---- decide control register
|
||||
contData = NDMA_BLOCK_WORD_COUNT_1 | MI_NDMA_ENABLE;
|
||||
contData |= (MI_NDMA_SRC_FIX | dcont | MI_NDMA_DEST_RELOAD_DISABLE);
|
||||
contData = MI_NDMA_BWORD_1 | MI_NDMA_ENABLE/* | MI_NDMA_CONTINUOUS_ON*/;
|
||||
contData |= MI_NDMA_SRC_FIX | dcont | MI_NDMA_SRC_RELOAD_DISABLE | MI_NDMA_DEST_RELOAD_DISABLE;
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
contData |= MI_NDMA_TIMING_CARD_A;
|
||||
#else
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
#include <customNDma.h>
|
||||
|
||||
// extern -------------------------------------------------------------------
|
||||
extern CardThreadData s_ctData;
|
||||
extern CardThreadData HotSwThreadData;
|
||||
|
||||
// define -------------------------------------------------------------------
|
||||
#define SECURE_SEGMENT_NUM 4
|
||||
@ -75,17 +75,17 @@ HotSwState ReadIDNormal(CardBootData *cbd)
|
||||
// MCCMD レジスタ設定
|
||||
HOTSWi_SetCommand(&cndLE);
|
||||
|
||||
// MCCNT0 レジスタ設定 (E = 1 I = 1 SEL = 0に)
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & 0x0fff) | 0xc000);
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定 (START = 1 PC = 111(ステータスリード) latency1 = 1 に)
|
||||
reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x7 << PC_SHIFT) | (0x1 & LATENCY1_MASK);
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_STAT | (0x1 & LATENCY1_MASK);
|
||||
|
||||
// メッセージ受信
|
||||
// OS_ReceiveMessage(&s_ctData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
// OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
|
||||
// DMAが終了するまで待つ
|
||||
while( MI_IsNDmaBusy(HOTSW_NDMA_NO) == TRUE ){}
|
||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
@ -146,14 +146,17 @@ HotSwState ReadBootSegNormal(CardBootData *cbd)
|
||||
// MCCMD レジスタ設定
|
||||
HOTSWi_SetCommand(&cndLE);
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = START_MASK | CT_MASK | PC_MASK & (pc << PC_SHIFT) | LATENCY2_MASK | LATENCY1_MASK;
|
||||
|
||||
// メッセージ受信
|
||||
// OS_ReceiveMessage(&s_ctData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
// OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
|
||||
// DMAが終了するまで待つ
|
||||
while( MI_IsNDmaBusy(HOTSW_NDMA_NO) == TRUE ){}
|
||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
||||
|
||||
page++;
|
||||
}
|
||||
@ -186,17 +189,17 @@ HotSwState ReadStatusNormal(CardBootData *cbd)
|
||||
// MCCMD レジスタ設定
|
||||
HOTSWi_SetCommand(&cndLE);
|
||||
|
||||
// MCCNT0 レジスタ設定 (E = 1 I = 1 SEL = 0に)
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & 0x0fff) | 0xc000);
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = (cbd->gameCommondParam & ~SCRAMBLE_MASK) | START_MASK | (PC_MASK & (0x7 << PC_SHIFT));
|
||||
reg_HOTSW_MCCNT1 = (cbd->gameCommondParam & ~SCRAMBLE_MASK) | START_MASK | HOTSW_PAGE_STAT;
|
||||
|
||||
// メッセージ受信
|
||||
// OS_ReceiveMessage(&s_ctData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
// OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
|
||||
// DMAが終了するまで待つ
|
||||
while( MI_IsNDmaBusy(HOTSW_NDMA_NO) == TRUE ){}
|
||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
@ -221,10 +224,14 @@ HotSwState RefreshBadBlockNormal(CardBootData *cbd)
|
||||
// MCCMD レジスタ設定
|
||||
HOTSWi_SetCommand(&cndLE);
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = (cbd->gameCommondParam & ~SCRAMBLE_MASK) | START_MASK | (PC_MASK & (0x0 << PC_SHIFT));
|
||||
reg_HOTSW_MCCNT1 = (cbd->gameCommondParam & ~SCRAMBLE_MASK) | START_MASK | HOTSW_PAGE_0;
|
||||
|
||||
while(reg_HOTSW_MCCNT1 & START_MASK){}
|
||||
// カードデータ転送終了まで待つ
|
||||
HOTSW_WaitCardCtrl();
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
@ -271,10 +278,14 @@ static HotSwState HOTSWi_ChangeModeNormal(CardBootData *cbd, u64 cmd)
|
||||
// MCCMD レジスタ設定
|
||||
HOTSWi_SetCommand(&cndLE);
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = (cbd->gameCommondParam & ~SCRAMBLE_MASK) | START_MASK | (PC_MASK & (0x0 << PC_SHIFT));
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
while(reg_HOTSW_MCCNT1 & START_MASK){}
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = (cbd->gameCommondParam & ~SCRAMBLE_MASK) | START_MASK | HOTSW_PAGE_0;
|
||||
|
||||
// カードデータ転送終了まで待つ
|
||||
HOTSW_WaitCardCtrl();
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
@ -302,17 +313,17 @@ HotSwState LoadTable(void)
|
||||
// MCCMD レジスタ設定
|
||||
HOTSWi_SetCommand(&cndLE);
|
||||
|
||||
// MCCNT0 レジスタ設定 (E = 1 I = 1 SEL = 0に)
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & 0x0fff) | 0xc000);
|
||||
|
||||
// MCCNT1 レジスタ設定 (START = 1 W/R = 0 PC = 101(16ページ) latency1 = 0(必要ないけど) に)
|
||||
reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x5 << PC_SHIFT);
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_16;
|
||||
|
||||
// メッセージ受信
|
||||
// OS_ReceiveMessage(&s_ctData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
// OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
|
||||
// DMAが終了するまで待つ
|
||||
while( MI_IsNDmaBusy(HOTSW_NDMA_NO) == TRUE ){}
|
||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
@ -338,8 +349,11 @@ HotSwState ReadRomEmulationData(CardBootData *cbd)
|
||||
reg_HOTSW_MCCMD0 = 0x3e000000;
|
||||
reg_HOTSW_MCCMD1 = 0x0;
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定 (START = 1 PC = 001(1ページリード)に latency1 = 0x5fe)
|
||||
reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x1 << PC_SHIFT) | (0x5fe & LATENCY1_MASK);
|
||||
reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_1 | (0x5fe & LATENCY1_MASK);
|
||||
|
||||
// MCCNTレジスタのRDYフラグをポーリングして、フラグが立ったらデータをMCD1レジスタに再度セット。スタートフラグが0になるまでループ。
|
||||
while(reg_HOTSW_MCCNT1 & START_FLG_MASK){
|
||||
@ -415,6 +429,9 @@ static void PreSendSecureCommand(CardBootData *cbd, u32 *scrambleMask)
|
||||
if(cbd->cardType == DS_CARD_TYPE_2){
|
||||
u32 latency = (u32)cbd->pBootSegBuf->rh.s.secure_cmd_latency * 0x100;
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = START_MASK | *scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||
|
||||
@ -454,15 +471,18 @@ HotSwState ReadIDSecure(CardBootData *cbd)
|
||||
|
||||
// NewDMA転送の準備
|
||||
HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_scr, sizeof(cbd->id_scr) );
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x7 << PC_SHIFT) | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||
reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_STAT | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||
|
||||
// メッセージ受信
|
||||
// OS_ReceiveMessage(&s_ctData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
// OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
|
||||
// DMAが終了するまで待つ
|
||||
while( MI_IsNDmaBusy(HOTSW_NDMA_NO) == TRUE ){}
|
||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
@ -519,14 +539,17 @@ HotSwState ReadSegSecure(CardBootData *cbd)
|
||||
// NewDMA転送の準備
|
||||
HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, buf + (interval*j), size );
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (pc << PC_SHIFT) | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||
|
||||
// メッセージ受信
|
||||
// OS_ReceiveMessage(&s_ctData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
// OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
|
||||
// DMAが終了するまで待つ
|
||||
while( MI_IsNDmaBusy(HOTSW_NDMA_NO) == TRUE ){}
|
||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
||||
|
||||
// 転送済みページ数
|
||||
j++;
|
||||
@ -564,10 +587,14 @@ HotSwState SwitchONPNGSecure(CardBootData *cbd)
|
||||
// コマンド初回送信(NTR-MROMはレイテンシクロック設定変更のみ)
|
||||
PreSendSecureCommand(cbd, &scrambleMask);
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param | (cbd->secureLatency & LATENCY1_MASK);
|
||||
|
||||
while(reg_HOTSW_MCCNT1 & START_MASK){}
|
||||
|
||||
// カードデータ転送終了まで待つ
|
||||
HOTSW_WaitCardCtrl();
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
@ -597,10 +624,14 @@ HotSwState SwitchOFFPNGSecure(CardBootData *cbd)
|
||||
// コマンド初回送信(NTR-MROMはレイテンシクロック設定変更のみ)
|
||||
PreSendSecureCommand(cbd, &scrambleMask);
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param | (cbd->secureLatency & LATENCY1_MASK);
|
||||
|
||||
while(reg_HOTSW_MCCNT1 & START_MASK){}
|
||||
|
||||
// カードデータ転送終了まで待つ
|
||||
HOTSW_WaitCardCtrl();
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
@ -632,10 +663,14 @@ HotSwState ChangeModeSecure(CardBootData *cbd)
|
||||
// コマンド初回送信(NTR-MROMはレイテンシクロック設定変更のみ)
|
||||
PreSendSecureCommand(cbd, &scrambleMask);
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param | (cbd->secureLatency & LATENCY1_MASK);
|
||||
|
||||
while(reg_HOTSW_MCCNT1 & START_MASK){}
|
||||
|
||||
// カードデータ転送終了まで待つ
|
||||
HOTSW_WaitCardCtrl();
|
||||
|
||||
// コマンドカウンタインクリメント
|
||||
cbd->vbi++;
|
||||
@ -669,14 +704,17 @@ HotSwState ReadIDGame(CardBootData *cbd)
|
||||
// MCCMD レジスタ設定
|
||||
HOTSWi_SetCommand(&cndLE);
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | (PC_MASK & (0x7 << PC_SHIFT));
|
||||
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_STAT;
|
||||
|
||||
// メッセージ受信
|
||||
// OS_ReceiveMessage(&s_ctData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
// OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
|
||||
// DMAが終了するまで待つ
|
||||
while( MI_IsNDmaBusy(HOTSW_NDMA_NO) == TRUE ){}
|
||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
@ -713,14 +751,17 @@ HotSwState ReadPageGame(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||
// MCCMD レジスタ設定
|
||||
HOTSWi_SetCommand(&cndLE);
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | (PC_MASK & (0x1 << PC_SHIFT));
|
||||
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_1;
|
||||
|
||||
// メッセージ受信
|
||||
// OS_ReceiveMessage(&s_ctData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
// OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
|
||||
// DMAが終了するまで待つ
|
||||
while( MI_IsNDmaBusy(HOTSW_NDMA_NO) == TRUE ){}
|
||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
||||
}
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
@ -748,14 +789,17 @@ HotSwState ReadStatusGame(CardBootData *cbd)
|
||||
// MCCMD レジスタ設定
|
||||
HOTSWi_SetCommand(&cndLE);
|
||||
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定 (START = 1 W/R = 0 PC = 111(ステータスリード) その他Romヘッダの情報におまかせ)
|
||||
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | (PC_MASK & (0x7 << PC_SHIFT));
|
||||
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_STAT;
|
||||
|
||||
// メッセージ受信
|
||||
// OS_ReceiveMessage(&s_ctData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
// OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK);
|
||||
|
||||
// DMAが終了するまで待つ
|
||||
while( MI_IsNDmaBusy(HOTSW_NDMA_NO) == TRUE ){}
|
||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
@ -779,10 +823,14 @@ HotSwState RefreshBadBlockGame(CardBootData *cbd)
|
||||
// MCCMD レジスタ設定
|
||||
HOTSWi_SetCommand(&cndLE);
|
||||
|
||||
// MCCNT1 レジスタ設定 (START = 1 W/R = 0 PC = 000(コマンドのみ) その他Romヘッダの情報におまかせ)
|
||||
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | (PC_MASK & (0x0 << PC_SHIFT));
|
||||
// MCCNT0 レジスタ設定
|
||||
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK );
|
||||
|
||||
// MCCNT1 レジスタ設定
|
||||
reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_0;
|
||||
|
||||
while(reg_HOTSW_MCCNT1 & START_MASK){}
|
||||
// カードデータ転送終了まで待つ
|
||||
HOTSW_WaitCardCtrl();
|
||||
|
||||
return HOTSW_SUCCESS;
|
||||
}
|
||||
|
||||
@ -149,8 +149,8 @@ static CardBootFunction s_funcTable[] = {
|
||||
};
|
||||
|
||||
// Global Values ------------------------------------------------------------
|
||||
BLOWFISH_CTX GCDi_BlowfishInitTableBufDS;
|
||||
CardThreadData s_ctData;
|
||||
BLOWFISH_CTX HotSwBlowfishInitTableBufDS;
|
||||
CardThreadData HotSwThreadData;
|
||||
|
||||
#include <twl/ltdwram_end.h>
|
||||
|
||||
@ -169,7 +169,7 @@ void HOTSW_Init(u32 threadPrio)
|
||||
|
||||
#ifndef USE_LOCAL_KEYTABLE
|
||||
// 初期化後に他の用途でWRAM_0を使用できるようにローカルバッファへコピーしておく
|
||||
MI_CpuCopyFast((void *)HW_WRAM_0_LTD, &GCDi_BlowfishInitTableBufDS, sizeof(BLOWFISH_CTX));
|
||||
MI_CpuCopyFast((void *)HW_WRAM_0_LTD, &HotSwBlowfishInitTableBufDS, sizeof(BLOWFISH_CTX));
|
||||
#endif
|
||||
// PXI初期化
|
||||
PXI_Init();
|
||||
@ -198,7 +198,7 @@ void HOTSW_Init(u32 threadPrio)
|
||||
MI_CpuClear8(&s_cbData, sizeof(CardBootData));
|
||||
|
||||
// カードスレッド用構造体の初期化
|
||||
MI_CpuClear8(&s_ctData, sizeof(CardThreadData));
|
||||
MI_CpuClear8(&HotSwThreadData, sizeof(CardThreadData));
|
||||
|
||||
// HotSwリソースの排他制御用Lock IDの取得(開放しないで持ち続ける)
|
||||
{
|
||||
@ -217,22 +217,22 @@ void HOTSW_Init(u32 threadPrio)
|
||||
}
|
||||
|
||||
// カードブート用スレッドの生成
|
||||
OS_CreateThread(&s_ctData.thread,
|
||||
OS_CreateThread(&HotSwThreadData.thread,
|
||||
McThread,
|
||||
NULL,
|
||||
s_ctData.stack + HOTSW_THREAD_STACK_SIZE / sizeof(u64),
|
||||
HotSwThreadData.stack + HOTSW_THREAD_STACK_SIZE / sizeof(u64),
|
||||
HOTSW_THREAD_STACK_SIZE,
|
||||
threadPrio
|
||||
);
|
||||
|
||||
// メッセージキューの初期化
|
||||
OS_InitMessageQueue( &s_ctData.hotswQueue, &s_ctData.hotswMsgBuffer[0], HOTSW_MSG_BUFFER_NUM );
|
||||
OS_InitMessageQueue( &HotSwThreadData.hotswQueue, &HotSwThreadData.hotswMsgBuffer[0], HOTSW_MSG_BUFFER_NUM );
|
||||
|
||||
// メッセージキューの初期化
|
||||
OS_InitMessageQueue( &s_ctData.hotswDmaQueue, &s_ctData.hotswDmaMsgBuffer[0], HOTSW_DMA_MSG_NUM );
|
||||
OS_InitMessageQueue( &HotSwThreadData.hotswDmaQueue, &HotSwThreadData.hotswDmaMsgBuffer[0], HOTSW_DMA_MSG_NUM );
|
||||
|
||||
// スレッド起動
|
||||
OS_WakeupThreadDirect(&s_ctData.thread);
|
||||
OS_WakeupThreadDirect(&HotSwThreadData.thread);
|
||||
|
||||
// Boot Segment バッファの設定
|
||||
HOTSW_SetBootSegmentBuffer((void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE );
|
||||
@ -246,10 +246,10 @@ void HOTSW_Init(u32 threadPrio)
|
||||
// カードが挿さってあったらスレッドを起動する
|
||||
if(HOTSW_IsCardExist()){
|
||||
// メッセージ送信
|
||||
OS_SendMessage(&s_ctData.hotswQueue, (OSMessage)&s_ctData.hotswInsertMsg[s_ctData.idx_insert], OS_MESSAGE_NOBLOCK);
|
||||
OS_SendMessage(&HotSwThreadData.hotswQueue, (OSMessage)&HotSwThreadData.hotswInsertMsg[HotSwThreadData.idx_insert], OS_MESSAGE_NOBLOCK);
|
||||
|
||||
// メッセージインデックスをインクリメント
|
||||
s_ctData.idx_insert = (s_ctData.idx_insert+1) % HOTSW_INSERT_MSG_NUM;
|
||||
HotSwThreadData.idx_insert = (HotSwThreadData.idx_insert+1) % HOTSW_INSERT_MSG_NUM;
|
||||
}
|
||||
else{
|
||||
SYSMi_GetWork()->flags.hotsw.is1stCardChecked = TRUE;
|
||||
@ -295,6 +295,8 @@ static HotSwState LoadCardData(void)
|
||||
|
||||
// ロード処理開始
|
||||
if(HOTSW_IsCardAccessible()){
|
||||
s_cbData.modeType = HOTSW_MODE1;
|
||||
|
||||
// カード側でKey Tableをロードする
|
||||
state = LoadTable();
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
@ -302,13 +304,6 @@ static HotSwState LoadCardData(void)
|
||||
// ---------------------- Normal Mode ----------------------
|
||||
romMode = HOTSW_ROM_MODE_NORMAL;
|
||||
|
||||
// カードID読み込み
|
||||
state = ReadIDNormal(&s_cbData);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
// カードタイプを判別をして、使う関数を切替える IDの最上位ビットが1なら3DM
|
||||
s_cbData.cardType = (s_cbData.id_nml & HOTSW_ROMID_1TROM_MASK) ? DS_CARD_TYPE_2 : DS_CARD_TYPE_1;
|
||||
|
||||
{
|
||||
u8 i;
|
||||
u8 *romEmuInf = (u8 *)s_cbData.romEmuBuf;
|
||||
@ -317,8 +312,15 @@ static HotSwState LoadCardData(void)
|
||||
LockHotSwRsc(&SYSMi_GetWork()->lockCardRsc);
|
||||
|
||||
// Boot Segment読み込み
|
||||
state = s_funcTable[s_cbData.cardType].ReadBootSegment_N(&s_cbData);
|
||||
state = ReadBootSegNormal(&s_cbData);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
// カードID読み込み
|
||||
state = ReadIDNormal(&s_cbData);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
// カードタイプを判別をして、使う関数を切替える IDの最上位ビットが1なら3DM
|
||||
s_cbData.cardType = (s_cbData.id_nml & HOTSW_ROMID_1TROM_MASK) ? DS_CARD_TYPE_2 : DS_CARD_TYPE_1;
|
||||
|
||||
// Romエミュレーション情報を取得
|
||||
state = ReadRomEmulationData(&s_cbData);
|
||||
@ -357,7 +359,7 @@ static HotSwState LoadCardData(void)
|
||||
if( retval == HOTSW_SUCCESS ) {
|
||||
// NTRカードかTWLカードか
|
||||
#ifdef DEBUG_MODE
|
||||
if(s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset && s_cbData.pBootSegBuf->rh.s.sub_ltd_rom_offset)
|
||||
if(s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset && s_cbData.pBootSegBuf->rh.s.sub_ltd_rom_offset && (s_cbData.id_nml & HOTSW_ROMID_TWLROM_MASK))
|
||||
#else
|
||||
if(s_cbData.pBootSegBuf->rh.s.platform_code & 0x02)
|
||||
#endif
|
||||
@ -464,10 +466,10 @@ end:
|
||||
}
|
||||
|
||||
// カードDMA終了確認
|
||||
while( MI_IsNDmaBusy(HOTSW_NDMA_NO) == TRUE ){}
|
||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
||||
|
||||
// カードアクセス終了確認
|
||||
while( reg_HOTSW_MCCNT1 & REG_MI_MCCNT1_START_MASK ){}
|
||||
HOTSW_WaitCardCtrl();
|
||||
|
||||
// カードのロック開放(※ロックIDは開放せずに持ち続ける)
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
@ -1084,24 +1086,28 @@ static void McPowerOff(void)
|
||||
|
||||
Description: 符号生成回路初期値設定レジスタを設定する
|
||||
|
||||
※注:この関数はセキュアモードで、
|
||||
sPNG_ONコマンドを実行してから呼び出してください。
|
||||
※注:この関数はセキュアモードで、sPNG_ONコマンドを実行してから呼び出してください。
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void SetMCSCR(void)
|
||||
{
|
||||
u32 pna_l = (u32)(PNA_BASE_VALUE | (s_cbData.vd << 15));
|
||||
u32 pna_h = (u32)(s_cbData.vd >> 17);
|
||||
|
||||
static u32 pnbL = 0x879b9b05;
|
||||
static u8 pnbH = 0x5c;
|
||||
static u8 pnaL1 = 0x60;
|
||||
static u8 pnaL0Table[8] = { 0xe8, 0x4d, 0x5a, 0xb1, 0x17, 0x8f, 0x99, 0xd5 };
|
||||
|
||||
u32 pnaL = s_cbData.vd << 15 | pnaL1 << 8 | pnaL0Table[(s_cbData.pBootSegBuf->rh.s.rom_type & 0x7)];
|
||||
u8 pnaH = (u8)((s_cbData.vd >> 17) & 0x7f);
|
||||
|
||||
// SCR A
|
||||
reg_HOTSW_MCSCR0 = pna_l;
|
||||
reg_HOTSW_MCSCR0 = pnaL;
|
||||
|
||||
// SCR B
|
||||
reg_HOTSW_MCSCR1 = PNB_L_VALUE;
|
||||
reg_HOTSW_MCSCR1 = pnbL;
|
||||
|
||||
// [d0 -d6 ] -> SCR A
|
||||
// [d16-d22] -> SCR B
|
||||
reg_HOTSW_MCSCR2 = (u32)(pna_h | PNB_H_VALUE << 16);
|
||||
|
||||
reg_HOTSW_MCSCR2 = (u32)(pnaH | pnbH << 16);
|
||||
|
||||
// MCCNT1 レジスタ設定 (SCR = 1に)
|
||||
reg_HOTSW_MCCNT1 = SCR_MASK;
|
||||
}
|
||||
@ -1122,7 +1128,7 @@ static void McThread(void *arg)
|
||||
HotSwMessage *msg;
|
||||
|
||||
while(1){
|
||||
OS_ReceiveMessage(&s_ctData.hotswQueue, (OSMessage *)&msg, OS_MESSAGE_BLOCK);
|
||||
OS_ReceiveMessage(&HotSwThreadData.hotswQueue, (OSMessage *)&msg, OS_MESSAGE_BLOCK);
|
||||
|
||||
if( msg->ctrl == TRUE ) {
|
||||
// [TODO]とりあえず、ここでHOTSWを抑制した時点でisExistCardがFALSEなら、HOTSWのFinalizeをするようにする。
|
||||
@ -1231,15 +1237,15 @@ static void McThread(void *arg)
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void InterruptCallbackCard(void)
|
||||
{
|
||||
s_ctData.hotswPulledOutMsg[s_ctData.idx_pulledOut].ctrl = FALSE;
|
||||
s_ctData.hotswPulledOutMsg[s_ctData.idx_pulledOut].value = 0;
|
||||
s_ctData.hotswPulledOutMsg[s_ctData.idx_pulledOut].type = HOTSW_PULLOUT;
|
||||
HotSwThreadData.hotswPulledOutMsg[HotSwThreadData.idx_pulledOut].ctrl = FALSE;
|
||||
HotSwThreadData.hotswPulledOutMsg[HotSwThreadData.idx_pulledOut].value = 0;
|
||||
HotSwThreadData.hotswPulledOutMsg[HotSwThreadData.idx_pulledOut].type = HOTSW_PULLOUT;
|
||||
|
||||
// メッセージ送信
|
||||
OS_SendMessage(&s_ctData.hotswQueue, (OSMessage *)&s_ctData.hotswPulledOutMsg[s_ctData.idx_pulledOut], OS_MESSAGE_NOBLOCK);
|
||||
OS_SendMessage(&HotSwThreadData.hotswQueue, (OSMessage *)&HotSwThreadData.hotswPulledOutMsg[HotSwThreadData.idx_pulledOut], OS_MESSAGE_NOBLOCK);
|
||||
|
||||
// メッセージインデックスをインクリメント
|
||||
s_ctData.idx_pulledOut = (s_ctData.idx_pulledOut+1) % HOTSW_PULLED_MSG_NUM;
|
||||
HotSwThreadData.idx_pulledOut = (HotSwThreadData.idx_pulledOut+1) % HOTSW_PULLED_MSG_NUM;
|
||||
|
||||
OS_PutString("○\n");
|
||||
}
|
||||
@ -1251,15 +1257,15 @@ static void InterruptCallbackCard(void)
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void InterruptCallbackCardDet(void)
|
||||
{
|
||||
s_ctData.hotswInsertMsg[s_ctData.idx_insert].ctrl = FALSE;
|
||||
s_ctData.hotswInsertMsg[s_ctData.idx_insert].value = 0;
|
||||
s_ctData.hotswInsertMsg[s_ctData.idx_insert].type = HOTSW_INSERT;
|
||||
HotSwThreadData.hotswInsertMsg[HotSwThreadData.idx_insert].ctrl = FALSE;
|
||||
HotSwThreadData.hotswInsertMsg[HotSwThreadData.idx_insert].value = 0;
|
||||
HotSwThreadData.hotswInsertMsg[HotSwThreadData.idx_insert].type = HOTSW_INSERT;
|
||||
|
||||
// メッセージ送信
|
||||
OS_SendMessage(&s_ctData.hotswQueue, (OSMessage *)&s_ctData.hotswInsertMsg[s_ctData.idx_insert], OS_MESSAGE_NOBLOCK);
|
||||
OS_SendMessage(&HotSwThreadData.hotswQueue, (OSMessage *)&HotSwThreadData.hotswInsertMsg[HotSwThreadData.idx_insert], OS_MESSAGE_NOBLOCK);
|
||||
|
||||
// メッセージインデックスをインクリメント
|
||||
s_ctData.idx_insert = (s_ctData.idx_insert+1) % HOTSW_INSERT_MSG_NUM;
|
||||
HotSwThreadData.idx_insert = (HotSwThreadData.idx_insert+1) % HOTSW_INSERT_MSG_NUM;
|
||||
|
||||
OS_PutString("●\n");
|
||||
}
|
||||
@ -1272,10 +1278,10 @@ static void InterruptCallbackCardDet(void)
|
||||
static void InterruptCallbackNDma(void)
|
||||
{
|
||||
// メッセージ送信
|
||||
// OS_SendMessage(&s_ctData.hotswDmaQueue, (OSMessage *)&s_ctData.hotswDmaMsg[s_ctData.idx_dma], OS_MESSAGE_NOBLOCK);
|
||||
// OS_SendMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&HotSwThreadData.hotswDmaMsg[HotSwThreadData.idx_dma], OS_MESSAGE_NOBLOCK);
|
||||
|
||||
// メッセージインデックスをインクリメント
|
||||
// s_ctData.idx_dma = (s_ctData.idx_dma+1) % HOTSW_DMA_MSG_NUM;
|
||||
// HotSwThreadData.idx_dma = (HotSwThreadData.idx_dma+1) % HOTSW_DMA_MSG_NUM;
|
||||
|
||||
OS_PutString("▽\n");
|
||||
}
|
||||
@ -1293,15 +1299,15 @@ static void InterruptCallbackPxi(PXIFifoTag tag, u32 data, BOOL err)
|
||||
|
||||
d.data = data;
|
||||
|
||||
s_ctData.hotswPxiMsg[s_ctData.idx_ctrl].ctrl = (d.msg.ctrl) ? TRUE : FALSE;
|
||||
s_ctData.hotswPxiMsg[s_ctData.idx_ctrl].value = d.msg.value;
|
||||
s_ctData.hotswPxiMsg[s_ctData.idx_ctrl].type = HOTSW_CONTROL;
|
||||
HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl].ctrl = (d.msg.ctrl) ? TRUE : FALSE;
|
||||
HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl].value = d.msg.value;
|
||||
HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl].type = HOTSW_CONTROL;
|
||||
|
||||
// メッセージ送信
|
||||
OS_SendMessage(&s_ctData.hotswQueue, (OSMessage *)&s_ctData.hotswPxiMsg[s_ctData.idx_ctrl], OS_MESSAGE_NOBLOCK);
|
||||
OS_SendMessage(&HotSwThreadData.hotswQueue, (OSMessage *)&HotSwThreadData.hotswPxiMsg[HotSwThreadData.idx_ctrl], OS_MESSAGE_NOBLOCK);
|
||||
|
||||
// メッセージインデックスをインクリメント
|
||||
s_ctData.idx_ctrl = (s_ctData.idx_ctrl+1) % HOTSW_CTRL_MSG_NUM;
|
||||
HotSwThreadData.idx_ctrl = (HotSwThreadData.idx_ctrl+1) % HOTSW_CTRL_MSG_NUM;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
|
||||
Loading…
Reference in New Issue
Block a user