diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h index 36cecc20..d689f28c 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h @@ -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のマスク -// 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; diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/blowfish.c b/build/libraries_sysmenu/hotsw/ARM7/src/blowfish.c index 97d287e8..e8f00b1c 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/blowfish.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/blowfish.c @@ -12,6 +12,8 @@ *---------------------------------------------------------------------------*/ #include #include +#include +#include #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; diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 7f6af521..eb293ebb 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -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 : diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c b/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c index 7ed7b13e..e191b23d 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c @@ -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; diff --git a/include/sysmenu/hotsw/common/hotsw.h b/include/sysmenu/hotsw/common/hotsw.h index b4669fc8..9f90e5bd 100644 --- a/include/sysmenu/hotsw/common/hotsw.h +++ b/include/sysmenu/hotsw/common/hotsw.h @@ -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);