/*---------------------------------------------------------------------------* Project: TwlSDK File: romEmulation.c *---------------------------------------------------------------------------*/ #include #include #include #include #include // Define Data -------------------------------------------------------------- #define BOOT_PAGE_NUM 8 #define SECURE_PAGE_NUM 32 // static value ------------------------------------------------------------- static OSMessage s_Msg; // extern ------------------------------------------------------------------- extern CardThreadData HotSwThreadData; // =========================================================================== // Function Describe // =========================================================================== // ■--------------------------------------■ // ■ ノーマルモードのコマンド ■ // ■--------------------------------------■ /*---------------------------------------------------------------------------* Name: ReadIDNormal_ROMEMU Description: DSカードType1のノーマルモードのID読み込み *---------------------------------------------------------------------------*/ // 共通 /*---------------------------------------------------------------------------* Name: ReadBootSegNormal_ROMEMU Description: DSカードType1のノーマルモードのBoot Segment読み込み *---------------------------------------------------------------------------*/ // 共通 /*---------------------------------------------------------------------------* Name: ChangeModeNormal_ROMEMU Description: DSカードType1のノーマルモードのモード変更 *---------------------------------------------------------------------------*/ // 共通 // ■--------------------------------------■ // ■ セキュアモードのコマンド ■ // ■--------------------------------------■ /*---------------------------------------------------------------------------* Name: ReadIDSecure_ROMEMU Description: *---------------------------------------------------------------------------*/ HotSwState ReadIDSecure_ROMEMU(CardBootData *cbd) { GCDCmd64 cndLE; if(!HOTSW_IsCardAccessible()){ return HOTSW_PULLED_OUT_ERROR; } #ifdef USE_NEW_DMA // カード割り込みによるDMAコピー HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_scr, sizeof(cbd->id_scr) ); #else HOTSW_DmaCopy32_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_scr, sizeof(cbd->id_scr) ); #endif // リトルエンディアンで作って cndLE.dw = HSWOP_N_OP_RD_ID; // MCCMD レジスタ設定 HOTSWi_SetCommand(&cndLE); // MCCNT0 レジスタ設定 #ifdef USE_NEW_DMA reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK); #else reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK | REG_MI_MCCNT0_I_MASK); #endif // MCCNT1 レジスタ設定 (START = 1 PC = 111(ステータスリード) latency1 = 1 に) reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x7 << PC_SHIFT) | (0x1 & LATENCY1_MASK); // メッセージ受信 OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); return HOTSW_SUCCESS; } /*---------------------------------------------------------------------------* Name: ReadSegSecure_ROMEMU Description: *---------------------------------------------------------------------------*/ HotSwState ReadSegSecure_ROMEMU(CardBootData *cbd) { u32 *buf = (cbd->modeType == HOTSW_MODE1) ? cbd->pSecureSegBuf : cbd->pSecure2SegBuf; u32 i,j=0; u32 keyTable2Adr = (u32)cbd->pBootSegBuf->rh.s.twl_card_keytable_area_rom_offset * TWLCARD_BORDER_OFFSET; u32 Secure2Adr = (cbd->modeType == HOTSW_MODE1) ? HOTSW_SECURE_AREA_OFS : (keyTable2Adr + HOTSW_SECURE2_AREA_OFS); u64 page = Secure2Adr/HOTSW_PAGE_SIZE; GCDCmd64 cndLE; u32 n = 0; for(i=0; i