mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新:Akabane Jumpei)
・TWLカード対応(未完成) ・Game領域の常駐モジュール展開時の条件を修正 ・ソース整理 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/branches/20080312_hotsw@877 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
28a0a22b9a
commit
5cac7ab7b1
@ -34,32 +34,43 @@ extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// --- NewDMA Ch
|
||||
#define HOTSW_NDMA_NO 2
|
||||
|
||||
#define KEY_BUF_SIZE 3 // Blowfishキーのバッファサイズ
|
||||
#define HOTSW_NDMA_NO 2 // 使用するNDmaのチャンネル
|
||||
#define BOOT_SEGMENT_SIZE 0x1000 // Boot Segment領域のサイズ
|
||||
// --- Blowfish
|
||||
#define KEY_BUF_SIZE 3
|
||||
|
||||
#define PAGE_SIZE 0x200 // 1ページのサイズ(バイト単位)
|
||||
#define PAGE_WORD_SIZE 0x80 // 1ページのサイズ(ワード単位)
|
||||
// --- Boot Segment
|
||||
#define BOOT_SEGMENT_SIZE 0x1000
|
||||
|
||||
#define ONE_SEGMENT_SIZE 0x1000 // 1Segmentのサイズ(バイト単位)
|
||||
#define ONE_SEGMENT_WORD_SIZE 0x400 // 1Segmentのサイズ(ワード単位)
|
||||
// --- Secure Segment
|
||||
#define SECURE_SEGMENT_START 0x4000
|
||||
#define SECURE_SEGMENT_SIZE 0x4000
|
||||
#define SECURE_SEGMENT_END (SECURE_SEGMENT_START + SECURE_SEGMENT_SIZE)
|
||||
|
||||
#define SECURE_SEGMENT_SIZE 0x4000 // Secure領域のサイズ
|
||||
// --- Page / Segment (Byte)
|
||||
#define PAGE_SIZE 0x200
|
||||
#define ONE_SEGMENT_SIZE 0x1000
|
||||
|
||||
#define ROM_EMULATION_DATA_SIZE 0x20 // ROMエミュレーションデータサイズ
|
||||
// --- Page / Segment (Word)
|
||||
#define PAGE_WORD_SIZE 0x80
|
||||
#define ONE_SEGMENT_WORD_SIZE 0x400
|
||||
|
||||
#define HOTSW_THREAD_STACK_SIZE (1024 + PAGE_SIZE) // スタックサイズ
|
||||
#define HOTSW_DMA_MSG_NUM 8 // DMA転送終了割り込み
|
||||
#define HOTSW_INSERT_MSG_NUM 16 // 挿し割り込み送信メッセージの数
|
||||
#define HOTSW_PULLED_MSG_NUM 16 // 抜け割り込み送信メッセージの数
|
||||
#define HOTSW_CTRL_MSG_NUM 8 // PXI割り込み送信メッセージの数
|
||||
#define HOTSW_MSG_BUFFER_NUM (HOTSW_INSERT_MSG_NUM + HOTSW_PULLED_MSG_NUM + HOTSW_CTRL_MSG_NUM) // 受信バッファの数
|
||||
// --- Rom Emulation
|
||||
#define ROM_EMULATION_DATA_SIZE 0x20
|
||||
|
||||
// コントロールレジスタ0
|
||||
// --- Thread
|
||||
#define HOTSW_THREAD_STACK_SIZE (1024 * 2)
|
||||
#define HOTSW_DMA_MSG_NUM 8
|
||||
#define HOTSW_INSERT_MSG_NUM 16
|
||||
#define HOTSW_PULLED_MSG_NUM 16
|
||||
#define HOTSW_CTRL_MSG_NUM 8
|
||||
#define HOTSW_MSG_BUFFER_NUM (HOTSW_INSERT_MSG_NUM + HOTSW_PULLED_MSG_NUM + HOTSW_CTRL_MSG_NUM)
|
||||
|
||||
// --- Card Control Reg 0
|
||||
#define HOTSW_E2PROM_CTRL_MASK 0x00ff
|
||||
|
||||
// コントロールレジスタ1 bit関連
|
||||
// --- Card Control Reg 1
|
||||
#define START_FLG_MASK 0x80000000
|
||||
#define READY_FLG_MASK 0x00800000
|
||||
|
||||
@ -102,10 +113,10 @@ extern "C" {
|
||||
#define START_SHIFT 31
|
||||
#define START_MASK 0x80000000
|
||||
|
||||
#define SCRAMBLE_MASK 0x1840e000
|
||||
#define SCRAMBLE_MASK 0x1840e000 // スクランブル関係のフラグマスク
|
||||
#define SECURE_COMMAND_SCRAMBLE_MASK 0x00406000 // CS SE DS‚Ě<E2809A>}<7D>X<EFBFBD>N
|
||||
|
||||
// Page Count
|
||||
// --- Page Count
|
||||
#define HOTSW_PAGE_0 0x0UL << PC_SHIFT
|
||||
#define HOTSW_PAGE_1 0x1UL << PC_SHIFT
|
||||
#define HOTSW_PAGE_2 0x2UL << PC_SHIFT
|
||||
@ -115,13 +126,14 @@ extern "C" {
|
||||
#define HOTSW_PAGE_32 0x6UL << PC_SHIFT
|
||||
#define HOTSW_PAGE_STAT 0x7UL << PC_SHIFT
|
||||
|
||||
|
||||
// --- Latency
|
||||
#define AddLatency2ToLatency1(param)\
|
||||
( (((param) & LATENCY2_MASK) \
|
||||
>> LATENCY2_SHIFT) \
|
||||
+ ((param) & LATENCY1_MASK) \
|
||||
)
|
||||
|
||||
// --- Register Define
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
// Slot A
|
||||
#define SLOT_STATUS_MODE_SELECT_MSK 0x0c
|
||||
@ -175,6 +187,11 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
// Enum ---------------------------------------------------------------------
|
||||
typedef enum ModeType{
|
||||
HOTSW_MODE1,
|
||||
HOTSW_MODE2
|
||||
} ModeType;
|
||||
|
||||
typedef enum CardTypeEx{
|
||||
DS_CARD_TYPE_1 = 0,
|
||||
DS_CARD_TYPE_2,
|
||||
@ -225,6 +242,7 @@ typedef enum HotSwState{
|
||||
HOTSW_ID_CHECK_ERROR,
|
||||
HOTSW_PULLED_OUT_ERROR,
|
||||
HOTSW_DATA_DECRYPT_ERROR,
|
||||
HOTSW_BUFFER_OVERRUN_ERROR,
|
||||
HOTSW_UNEXPECTED_ERROR
|
||||
} HotSwState;
|
||||
|
||||
|
||||
@ -12,6 +12,8 @@
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <twl.h>
|
||||
#include <blowfish.h>
|
||||
#include <firm/format/from_firm.h>
|
||||
#include <firm/hw/ARM7/mmap_firm.h>
|
||||
|
||||
#define MAXKEYBYTES 56 /* 448 bits */
|
||||
#define N 16
|
||||
@ -35,7 +37,14 @@ void GCDm_MakeBlowfishTableDS(CardBootData *cbd, s32 keyLen)
|
||||
u32 *keyBuf = cbd->keyBuf;
|
||||
BLOWFISH_CTX *ctx = &cbd->keyTable;
|
||||
|
||||
MI_CpuCopyFast((void *)initTable, (void *)ctx, sizeof(BLOWFISH_CTX));
|
||||
if(cbd->modeType == HOTSW_MODE1){
|
||||
MI_CpuCopyFast((void *)initTable, (void *)ctx, sizeof(BLOWFISH_CTX));
|
||||
}
|
||||
else{
|
||||
keyBuf = cbd->keyBuf2;
|
||||
|
||||
MI_CpuCopyFast((void *)((OSFromFirm7Buf *)HW_FIRM_FROM_FIRM_BUF)->twl_blowfish, (void *)ctx, sizeof(BLOWFISH_CTX));
|
||||
}
|
||||
|
||||
keyBuf[0] = *RomHeaderGameCode;
|
||||
keyBuf[1] = *RomHeaderGameCode >> 1;
|
||||
|
||||
@ -51,6 +51,9 @@ static u32 GetMcSlotMask(void);
|
||||
static void SetMcSlotMode(u32 mode);
|
||||
static BOOL CmpMcSlotMode(u32 mode);
|
||||
|
||||
static void SetBootSegmentBuffer(void* buf, u32 size);
|
||||
static void SetSecureSegmentBuffer(ModeType type ,void* buf, u32 size);
|
||||
|
||||
static void SetInterruptCallback( OSIrqMask intr_bit, OSIrqFunction func );
|
||||
static void SetInterruptCallbackEx( OSIrqMask intr_bit, void *func );
|
||||
static void SetInterrupt(void);
|
||||
@ -235,13 +238,13 @@ void HOTSW_Init(u32 threadPrio)
|
||||
OS_WakeupThreadDirect(&HotSwThreadData.thread);
|
||||
|
||||
// Boot Segment バッファの設定
|
||||
HOTSW_SetBootSegmentBuffer((void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE );
|
||||
SetBootSegmentBuffer((void *)SYSM_CARD_ROM_HEADER_BAK, SYSM_CARD_ROM_HEADER_SIZE );
|
||||
|
||||
// Secure1 Segment バッファの設定
|
||||
HOTSW_SetSecureSegmentBuffer(HOTSW_MODE1, (void *)SYSM_CARD_NTR_SECURE_BUF, SECURE_AREA_SIZE );
|
||||
SetSecureSegmentBuffer(HOTSW_MODE1, (void *)SYSM_CARD_NTR_SECURE_BUF, SECURE_AREA_SIZE );
|
||||
|
||||
// Secure2 Segment バッファの設定
|
||||
HOTSW_SetSecureSegmentBuffer(HOTSW_MODE2, (void *)SYSM_CARD_TWL_SECURE_BUF, SECURE_AREA_SIZE );
|
||||
SetSecureSegmentBuffer(HOTSW_MODE2, (void *)SYSM_CARD_TWL_SECURE_BUF, SECURE_AREA_SIZE );
|
||||
|
||||
// カードが挿さってあったらスレッドを起動する
|
||||
if(HOTSW_IsCardExist()){
|
||||
@ -410,10 +413,54 @@ static HotSwState LoadCardData(void)
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
}
|
||||
|
||||
// ★TWLカード対応 一旦リセット後Secure2モードに移行
|
||||
if(s_cbData.twlFlg == TRUE){
|
||||
// Mode2に移行する準備
|
||||
s_cbData.modeType = HOTSW_MODE2;
|
||||
|
||||
// Secure2領域・Game2領域開始アドレス算出
|
||||
|
||||
|
||||
// ---------------------- Reset ----------------------
|
||||
McPowerOff();
|
||||
McPowerOn();
|
||||
|
||||
// ---------------------- Normal Mode ----------------------
|
||||
// 先頭1Page分だけでOK。データは読み捨てバッファに
|
||||
state = ReadBootSegNormal(&s_cbData);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
// Key Table初期化
|
||||
GCDm_MakeBlowfishTableDS(&s_cbData, 8);
|
||||
|
||||
// コマンド認証値・コマンドカウンタ初期値・PNジェネレータ初期値の生成
|
||||
GenVA_VB_VD();
|
||||
|
||||
// セキュア2モードに移行
|
||||
state = ChangeModeNormal2(&s_cbData);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
// ---------------------- Secure2 Mode ----------------------
|
||||
// PNG設定
|
||||
state = s_funcTable[s_cbData.cardType].SetPNG_S(&s_cbData);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
// DS側符号生成回路初期値設定 (レジスタ設定)
|
||||
SetMCSCR();
|
||||
|
||||
// セキュア2カードID読み込み
|
||||
state = s_funcTable[s_cbData.cardType].ReadID_S(&s_cbData);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
// Secure2領域のSegment読み込み
|
||||
state = s_funcTable[s_cbData.cardType].ReadSegment_S(&s_cbData);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
}
|
||||
|
||||
// ゲームモードに移行
|
||||
state = s_funcTable[s_cbData.cardType].ChangeMode_S(&s_cbData);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
|
||||
// ---------------------- Game Mode ----------------------
|
||||
romMode = HOTSW_ROM_MODE_GAME;
|
||||
|
||||
@ -601,55 +648,70 @@ static HotSwState LoadStaticModule(void)
|
||||
{
|
||||
HotSwState retval = HOTSW_SUCCESS;
|
||||
HotSwState state = HOTSW_SUCCESS;
|
||||
|
||||
u32 arm9StcEnd = s_cbData.pBootSegBuf->rh.s.main_rom_offset + s_cbData.pBootSegBuf->rh.s.main_size;
|
||||
|
||||
// 配置先と再配置情報を取得 & Arm9の常駐モジュール残りを指定先に転送
|
||||
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);
|
||||
retval = ReadPageGame(&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);
|
||||
state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.sub_rom_offset, (u32 *)s_cbData.arm7Stc, s_cbData.pBootSegBuf->rh.s.sub_size);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
return retval;
|
||||
}
|
||||
|
||||
// TWLでのみロード
|
||||
if( s_cbData.pBootSegBuf->rh.s.platform_code & PLATFORM_CODE_FLAG_TWL ) {
|
||||
u32 size = ( s_cbData.pBootSegBuf->rh.s.main_ltd_size < SECURE_SEGMENT_SIZE ) ?
|
||||
s_cbData.pBootSegBuf->rh.s.main_ltd_size : SECURE_SEGMENT_SIZE;
|
||||
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);
|
||||
state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset, (u32 *)SYSM_CARD_TWL_SECURE_BUF, size);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
if( s_cbData.pBootSegBuf->rh.s.main_ltd_size > SECURE_SEGMENT_SIZE ) {
|
||||
state = ReadPageGame(&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(SYSM_CheckLoadRegionAndSetRelocateInfo( ARM9_STATIC, &s_cbData.arm9Stc, s_cbData.pBootSegBuf->rh.s.main_size, &SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC] , s_cbData.twlFlg)){
|
||||
if(arm9StcEnd > SECURE_SEGMENT_END){
|
||||
state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.main_rom_offset + SECURE_SEGMENT_SIZE, (u32 *)(s_cbData.arm9Stc + SECURE_SEGMENT_SIZE), arm9StcEnd - SECURE_SEGMENT_END);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
retval = HOTSW_BUFFER_OVERRUN_ERROR;
|
||||
}
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
return retval;
|
||||
}
|
||||
|
||||
// 配置先と再配置情報を取得 & Arm7の常駐モジュールを指定先に転送
|
||||
s_cbData.arm7Stc = (u32)s_cbData.pBootSegBuf->rh.s.sub_ram_address;
|
||||
if(SYSM_CheckLoadRegionAndSetRelocateInfo( ARM7_STATIC, &s_cbData.arm7Stc, s_cbData.pBootSegBuf->rh.s.sub_size, &SYSMi_GetWork()->romRelocateInfo[ARM7_STATIC], s_cbData.twlFlg)){
|
||||
state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.sub_rom_offset, (u32 *)s_cbData.arm7Stc, s_cbData.pBootSegBuf->rh.s.sub_size);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
}
|
||||
else{
|
||||
retval = HOTSW_BUFFER_OVERRUN_ERROR;
|
||||
}
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
// [TODO] TWLカード対応 (※ 拡張領域の境界はRomHeaderの値で計算する)
|
||||
if( s_cbData.twlFlg ) {
|
||||
u32 size = ( s_cbData.pBootSegBuf->rh.s.main_ltd_size < SECURE_SEGMENT_SIZE ) ? s_cbData.pBootSegBuf->rh.s.main_ltd_size : SECURE_SEGMENT_SIZE;
|
||||
s_cbData.arm9Ltd = (u32)s_cbData.pBootSegBuf->rh.s.main_ltd_ram_address;
|
||||
// 配置先と再配置情報を取得 & Arm9の常駐モジュールを指定先に転送
|
||||
if(SYSM_CheckLoadRegionAndSetRelocateInfo( ARM9_LTD_STATIC, &s_cbData.arm9Ltd, s_cbData.pBootSegBuf->rh.s.main_ltd_size, &SYSMi_GetWork()->romRelocateInfo[ARM9_LTD_STATIC] , TRUE)){
|
||||
state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset, (u32 *)SYSM_CARD_TWL_SECURE_BUF, size);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
if( s_cbData.pBootSegBuf->rh.s.main_ltd_size > SECURE_SEGMENT_SIZE ) {
|
||||
state = ReadPageGame(&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 = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
}
|
||||
}
|
||||
else{
|
||||
retval = HOTSW_BUFFER_OVERRUN_ERROR;
|
||||
}
|
||||
|
||||
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);
|
||||
state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.sub_ltd_rom_offset, (u32 *)s_cbData.arm7Ltd, s_cbData.pBootSegBuf->rh.s.sub_ltd_size);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
|
||||
// 配置先と再配置情報を取得 & Arm7の常駐モジュールを指定先に転送
|
||||
s_cbData.arm7Ltd = (u32)s_cbData.pBootSegBuf->rh.s.sub_ltd_ram_address;
|
||||
if(SYSM_CheckLoadRegionAndSetRelocateInfo( ARM7_LTD_STATIC, &s_cbData.arm7Ltd, s_cbData.pBootSegBuf->rh.s.sub_ltd_size, &SYSMi_GetWork()->romRelocateInfo[ARM7_LTD_STATIC], TRUE)){
|
||||
state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.sub_ltd_rom_offset, (u32 *)s_cbData.arm7Ltd, s_cbData.pBootSegBuf->rh.s.sub_ltd_size);
|
||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||
}
|
||||
else{
|
||||
retval = HOTSW_BUFFER_OVERRUN_ERROR;
|
||||
}
|
||||
if(retval != HOTSW_SUCCESS){
|
||||
return retval;
|
||||
}
|
||||
@ -747,7 +809,7 @@ static HotSwState CheckCardAuthCode(void)
|
||||
*
|
||||
* 注:カードブート処理中は呼び出さないようにする
|
||||
* ----------------------------------------------------------------- */
|
||||
void HOTSW_SetBootSegmentBuffer(void* buf, u32 size)
|
||||
static void SetBootSegmentBuffer(void* buf, u32 size)
|
||||
{
|
||||
SDK_ASSERT(size > BOOT_SEGMENT_SIZE);
|
||||
|
||||
@ -767,7 +829,7 @@ void HOTSW_SetBootSegmentBuffer(void* buf, u32 size)
|
||||
*
|
||||
* 注:カードブート処理中は呼び出さないようにする
|
||||
* ----------------------------------------------------------------- */
|
||||
void HOTSW_SetSecureSegmentBuffer(ModeType type ,void* buf, u32 size)
|
||||
static void SetSecureSegmentBuffer(ModeType type ,void* buf, u32 size)
|
||||
{
|
||||
SDK_ASSERT(size > SECURE_SEGMENT_SIZE);
|
||||
|
||||
@ -1144,7 +1206,6 @@ static void McThread(void *arg)
|
||||
while(1){
|
||||
// 活線挿抜抑制フラグが立っていたら処理しない
|
||||
if( !SYSMi_GetWork()->flags.hotsw.isEnableHotSW ) {
|
||||
SYSMi_GetWork()->flags.hotsw.is1stCardChecked = TRUE;
|
||||
OS_PutString("### HotSw is restrained...\n");
|
||||
break;
|
||||
}
|
||||
@ -1187,6 +1248,7 @@ static void McThread(void *arg)
|
||||
SYSMi_GetWork()->flags.hotsw.isExistCard = FALSE;
|
||||
SYSMi_GetWork()->flags.hotsw.isValidCardBanner = FALSE;
|
||||
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
|
||||
SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted = FALSE;
|
||||
UnlockHotSwRsc(&SYSMi_GetWork()->lockHotSW);
|
||||
|
||||
// カードブート用構造体の初期化
|
||||
@ -1621,9 +1683,13 @@ static void DebugPrintErrorMessage(HotSwState state)
|
||||
case HOTSW_DATA_DECRYPT_ERROR:
|
||||
OS_PutString(" - Error 7 : Data Decrypt\n");
|
||||
break;
|
||||
|
||||
case HOTSW_BUFFER_OVERRUN_ERROR:
|
||||
OS_PutString(" - Error 8 : Buffer OverRun\n");
|
||||
break;
|
||||
|
||||
case HOTSW_UNEXPECTED_ERROR:
|
||||
OS_PutString(" - Error 8 : Unexpected\n");
|
||||
OS_PutString(" - Error 9 : Unexpected\n");
|
||||
break;
|
||||
|
||||
default :
|
||||
|
||||
@ -69,8 +69,8 @@ HotSwState ReadIDSecure_ROMEMU(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);
|
||||
@ -108,8 +108,8 @@ HotSwState ReadSegSecure_ROMEMU(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_MASK PC = 001(1ページリード)に latency1 = 0xd)
|
||||
reg_HOTSW_MCCNT1 = START_MASK | CT_MASK | PC_MASK & (0x1 << PC_SHIFT) | (0xd & LATENCY1_MASK);
|
||||
@ -168,6 +168,9 @@ HotSwState ChangeModeSecure_ROMEMU(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 に)
|
||||
reg_HOTSW_MCCNT1 = START_MASK;
|
||||
|
||||
|
||||
@ -33,11 +33,6 @@ typedef enum HotSwMessageType{
|
||||
HOTSW_CONTROL
|
||||
} HotSwMessageType;
|
||||
|
||||
typedef enum ModeType{
|
||||
HOTSW_MODE1,
|
||||
HOTSW_MODE2
|
||||
} ModeType;
|
||||
|
||||
// union -------------------------------------------------------------------
|
||||
// PXI用メッセージ
|
||||
typedef union HotSwPxiMessage{
|
||||
@ -68,12 +63,6 @@ BOOL HOTSW_IsCardExist(void);
|
||||
// カードにアクセスできる状態か判定
|
||||
BOOL HOTSW_IsCardAccessible(void);
|
||||
|
||||
// Boot Segment バッファの指定
|
||||
void HOTSW_SetBootSegmentBuffer(void* buf, u32 size);
|
||||
|
||||
// Secure Segment バッファの指定
|
||||
void HOTSW_SetSecureSegmentBuffer(ModeType type ,void* buf, u32 size);
|
||||
|
||||
// Romエミュレーション情報を格納しているバッファのポインタを返す
|
||||
#ifdef SDK_ARM7
|
||||
void* HOTSW_GetRomEmulationBuffer(void);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user