From 2afda414e89982cfcfd00503ce51d3fe2dcfa8e4 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b08762b0-b915-fc4b-9d8c-17b2551a87ff> Date: Fri, 16 May 2008 08:48:21 +0000 Subject: [PATCH] =?UTF-8?q?(=E6=9B=B4=E6=96=B0:Akabane=20Jumpei)=20?= =?UTF-8?q?=E3=82=AB=E3=83=BC=E3=83=89=E3=83=AA=E3=83=BC=E3=83=89=E3=82=92?= =?UTF-8?q?DMA=E3=82=B3=E3=83=94=E3=83=BC=E3=82=92=E4=BD=BF=E3=81=86?= =?UTF-8?q?=E3=81=8B=E3=80=81CPU=E3=82=B3=E3=83=94=E3=83=BC=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E3=81=86=E3=81=8B=E3=80=81=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=E3=82=B9=E3=82=A4=E3=83=83=E3=83=81=E3=81=A7=E5=88=87=E6=9B=BF?= =?UTF-8?q?=E3=81=88=E3=82=89=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=80=82=20=E3=83=87=E3=83=95=E3=82=A9?= =?UTF-8?q?=E3=83=AB=E3=83=88=E3=81=A7=E3=81=AFCPU=E3=82=B3=E3=83=94?= =?UTF-8?q?=E3=83=BC=E3=82=92=E4=BD=BF=E3=81=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ビルドスイッチ:#define USE_CPU_COPY git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1380 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../hotsw/ARM7/src/dsCardCommon.c | 129 ++++++++++++++---- .../libraries_sysmenu/hotsw/ARM7/src/hotsw.c | 4 +- .../hotsw/ARM7/src/romEmulation.c | 27 +++- include/sysmenu/hotsw/common/hotsw.h | 1 + 4 files changed, 129 insertions(+), 32 deletions(-) diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c index 53c2c886..93999bfe 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c @@ -76,10 +76,12 @@ void HOTSWi_SetCommand(GCDCmd64 *cndLE) HotSwState ReadIDNormal(CardBootData *cbd) { GCDCmd64 cndLE; - + +#ifndef USE_CPU_COPY // J[h荞݂ɂDMARs[ HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_nml, sizeof(cbd->id_nml) ); - +#endif + // gGfBAō cndLE.dw = HSWOP_N_OP_RD_ID; @@ -91,10 +93,17 @@ HotSwState ReadIDNormal(CardBootData *cbd) // MCCNT1 WX^ݒ reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_STAT | (0x1 & LATENCY1_MASK); - + +#ifndef USE_CPU_COPY // bZ[WM OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); - +#else + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + cbd->id_nml = reg_HOTSW_MCD1; + } +#endif + return HOTSW_SUCCESS; } @@ -114,6 +123,10 @@ HotSwState ReadBootSegNormal(CardBootData *cbd) u64 page = 0; GCDCmd64 cndLE; +#ifdef USE_CPU_COPY + u32 j = 0; +#endif + if(cbd->cardType == DS_CARD_TYPE_1){ loop = 0x1UL; pc = 0x4UL; @@ -137,6 +150,7 @@ HotSwState ReadBootSegNormal(CardBootData *cbd) return HOTSW_PULLED_OUT_ERROR; } +#ifndef USE_CPU_COPY if(cbd->modeType == HOTSW_MODE1){ // NewDMA]̏ HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, dst + (u32)(PAGE_WORD_SIZE*i), size ); @@ -146,7 +160,8 @@ HotSwState ReadBootSegNormal(CardBootData *cbd) // Mode2̂Ƃ́Af[^̂ĂB HOTSW_NDmaPipe_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, &temp, size ); } - +#endif + // gGfBAō cndLE.dw = HSWOP_N_OP_RD_PAGE; cndLE.dw |= page << HSWOP_N_RD_PAGE_ADDR_SHIFT; @@ -160,9 +175,20 @@ HotSwState ReadBootSegNormal(CardBootData *cbd) // MCCNT1 WX^ݒ reg_HOTSW_MCCNT1 = START_MASK | CT_MASK | PC_MASK & (pc << PC_SHIFT) | LATENCY2_MASK | LATENCY1_MASK; +#ifndef USE_CPU_COPY // bZ[WM OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); - +#else + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + if(cbd->modeType == HOTSW_MODE1){ + *(dst + j++) = reg_HOTSW_MCD1; + } + else{ + temp = reg_HOTSW_MCD1; + } + } +#endif page++; } @@ -185,9 +211,11 @@ HotSwState ReadStatusNormal(CardBootData *cbd) return HOTSW_PULLED_OUT_ERROR; } +#ifndef USE_CPU_COPY // J[h荞݂ɂDMARs[ HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, &cbd->romStatus, sizeof(cbd->romStatus) ); - +#endif + // gGfBAō cndLE.dw = HSWOP_N_OP_RD_STAT; @@ -200,8 +228,15 @@ HotSwState ReadStatusNormal(CardBootData *cbd) // MCCNT1 WX^ݒ reg_HOTSW_MCCNT1 = (cbd->gameCommondParam & ~SCRAMBLE_MASK) | START_MASK | HOTSW_PAGE_STAT; +#ifndef USE_CPU_COPY // bZ[WM OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); +#else + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + cbd->romStatus = reg_HOTSW_MCD1; + } +#endif return HOTSW_SUCCESS; } @@ -306,9 +341,11 @@ HotSwState LoadTable(void) { GCDCmd64 cndLE; u32 temp; - + +#ifndef USE_CPU_COPY // NewDMA]iǂݎ̂āj̏ HOTSW_NDmaPipe_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, &temp, HOTSW_LOAD_TABLE_SIZE ); +#endif // gGfBAō cndLE.dw = HSWOP_N_OP_LD_TABLE; @@ -321,9 +358,16 @@ HotSwState LoadTable(void) // MCCNT1 WX^ݒ reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_16 | LATENCY2_MASK & (0x18 << LATENCY2_SHIFT); - + +#ifndef USE_CPU_COPY // bZ[WM OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); +#else + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + temp = reg_HOTSW_MCD1; + } +#endif return HOTSW_SUCCESS; } @@ -471,18 +515,27 @@ HotSwState ReadIDSecure(CardBootData *cbd) // R}h񑗐MiNTR-MROM̓CeVNbNݒύX̂݁j PreSendSecureCommand(cbd, &scrambleMask); +#ifndef USE_CPU_COPY // NewDMA]̏ HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, buf, sizeof(buf) ); - +#endif + // MCCNT0 WX^ݒ reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & HOTSW_E2PROM_CTRL_MASK) | REG_MI_MCCNT0_E_MASK ); // MCCNT1 WX^ݒ reg_HOTSW_MCCNT1 = START_MASK | HOTSW_PAGE_STAT | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param; +#ifndef USE_CPU_COPY // bZ[WM OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); - +#else + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + *buf = reg_HOTSW_MCD1; + } +#endif + // R}hJE^CNg cbd->vbi++; @@ -536,20 +589,29 @@ HotSwState ReadSegSecure(CardBootData *cbd) PreSendSecureCommand(cbd, &scrambleMask); for(k=0; kpBootSegBuf->rh.s.secure_cmd_param; +#ifndef USE_CPU_COPY // bZ[WM OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); // ]ς݃y[W j++; +#else + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + *(buf + j++) = reg_HOTSW_MCD1; + } +#endif } // ǂݍ݃ZOgԍCNg @@ -694,10 +756,12 @@ HotSwState ReadIDGame(CardBootData *cbd) if(!HOTSW_IsCardAccessible()){ return HOTSW_PULLED_OUT_ERROR; } - + +#ifndef USE_CPU_COPY // NewDMA]̏ HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_gam, sizeof(cbd->id_gam) ); - +#endif + // gGfBAō cndLE.dw = HSWOP_G_OP_RD_ID; @@ -709,12 +773,15 @@ HotSwState ReadIDGame(CardBootData *cbd) // MCCNT1 WX^ݒ reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_STAT; - + +#ifndef USE_CPU_COPY // bZ[WM -#ifndef USE_WRAM_LOAD OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); #else - HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO); + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + cbd->id_gam = reg_HOTSW_MCD1; + } #endif return HOTSW_SUCCESS; @@ -743,9 +810,11 @@ HotSwState ReadPageGame(CardBootData *cbd, u32 start_addr, void* buf, u32 size) return HOTSW_PULLED_OUT_ERROR; } +#ifndef USE_CPU_COPY // NewDMA]̏ HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, (u32 *)buf + (u32)(PAGE_WORD_SIZE*i), PAGE_SIZE ); - +#endif + // R}h쐬 cndLE.dw = HSWOP_G_OP_RD_PAGE; cndLE.dw |= (page + i) << HSWOP_G_RD_PAGE_ADDR_SHIFT; @@ -758,12 +827,15 @@ HotSwState ReadPageGame(CardBootData *cbd, u32 start_addr, void* buf, u32 size) // MCCNT1 WX^ݒ reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_1; - + +#ifndef USE_CPU_COPY // bZ[WM -#ifndef USE_WRAM_LOAD OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); #else - HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO); + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + *((u32 *)buf + counter++) = reg_HOTSW_MCD1; + } #endif } @@ -783,10 +855,12 @@ HotSwState ReadStatusGame(CardBootData *cbd) if(!HOTSW_IsCardAccessible()){ return HOTSW_PULLED_OUT_ERROR; } - + +#ifndef USE_CPU_COPY // NewDMA]̏ HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, &cbd->romStatus, sizeof(cbd->romStatus) ); - +#endif + // gGfBAō cndLE.dw = HSWOP_G_OP_RD_STAT; @@ -799,11 +873,14 @@ HotSwState ReadStatusGame(CardBootData *cbd) // MCCNT1 WX^ݒ (START = 1 W/R = 0 PC = 111(Xe[^X[h) ̑Romwb_̏ɂ܂) reg_HOTSW_MCCNT1 = cbd->gameCommondParam | START_MASK | HOTSW_PAGE_STAT; +#ifndef USE_CPU_COPY // bZ[WM -#ifndef USE_WRAM_LOAD - OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); + OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); #else - HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO); + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + cbd->romStatus = reg_HOTSW_MCD1; + } #endif return HOTSW_SUCCESS; diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 57bb8816..db5ac3d3 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -2397,10 +2397,12 @@ static void SetInterrupt(void) #ifndef DEBUG_USED_CARD_SLOT_B_ SetInterruptCallback( OS_IE_CARD_A_IREQ , InterruptCallbackCard ); SetInterruptCallback( OS_IE_CARD_A_DET , InterruptCallbackCardDet ); - (void)OS_EnableIrqMask(OS_IE_NDMA2); #else SetInterruptCallback( OS_IE_CARD_B_IREQ , InterruptCallbackCard ); SetInterruptCallback( OS_IE_CARD_B_DET , InterruptCallbackCardDet ); +#endif + +#ifndef USE_CPU_COPY (void)OS_EnableIrqMask(OS_IE_NDMA2); #endif } diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c b/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c index 4a9fcb8a..46bcaa4f 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c @@ -65,10 +65,12 @@ HotSwState ReadIDSecure_ROMEMU(CardBootData *cbd) if(!HOTSW_IsCardAccessible()){ return HOTSW_PULLED_OUT_ERROR; } - + +#ifndef USE_CPU_COPY // J[h荞݂ɂDMARs[ HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_scr, sizeof(cbd->id_scr) ); - +#endif + // gGfBAō cndLE.dw = HSWOP_N_OP_RD_ID; @@ -81,9 +83,15 @@ HotSwState ReadIDSecure_ROMEMU(CardBootData *cbd) // MCCNT1 WX^ݒ (START = 1 PC = 111(Xe[^X[h) latency1 = 1 ) reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x7 << PC_SHIFT) | (0x1 & LATENCY1_MASK); +#ifndef USE_CPU_COPY // bZ[WM OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); - +#else + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + cbd->id_scr = reg_HOTSW_MCD1; + } +#endif return HOTSW_SUCCESS; } @@ -103,10 +111,12 @@ HotSwState ReadSegSecure_ROMEMU(CardBootData *cbd) if(!HOTSW_IsCardAccessible()){ return HOTSW_PULLED_OUT_ERROR; } - + +#ifndef USE_CPU_COPY // NewDMA]̏ HOTSW_NDmaCopy_Card( HOTSW_NDMA_NO, (u32 *)HOTSW_MCD1, (u32 *)cbd->pSecureSegBuf + (u32)(PAGE_WORD_SIZE*i), PAGE_SIZE ); - +#endif + // gGfBAō cndLE.dw = HSWOP_N_OP_RD_PAGE; cndLE.dw |= page << HSWOP_N_RD_PAGE_ADDR_SHIFT; @@ -120,8 +130,15 @@ HotSwState ReadSegSecure_ROMEMU(CardBootData *cbd) // MCCNT1 WX^ݒ (START = 1 PC_MASK PC = 001(1y[W[h) latency1 = 0xd) reg_HOTSW_MCCNT1 = START_MASK | CT_MASK | PC_MASK & (0x1 << PC_SHIFT) | (0xd & LATENCY1_MASK); +#ifndef USE_CPU_COPY // bZ[WM OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); +#else + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + *((u32 *)cbd->pSecureSegBuf + j++) = reg_HOTSW_MCD1; + } +#endif page++; } diff --git a/include/sysmenu/hotsw/common/hotsw.h b/include/sysmenu/hotsw/common/hotsw.h index c7a5abfb..c7819f4f 100644 --- a/include/sysmenu/hotsw/common/hotsw.h +++ b/include/sysmenu/hotsw/common/hotsw.h @@ -25,6 +25,7 @@ extern "C" { #define SYSM_HOTSW_ENABLE_ROMEMU #define USE_WRAM_LOAD +#define USE_CPU_COPY // enum ------------------------------------------------------------------- // Xbhɑ郁bZ[W̃Xe[g