revision 855:b937948d79d9
summary |
tree |
shortlog |
changelog |
graph |
changeset |
raw | bz2 | zip | gz changeset | 855:b937948d79d9 |
parent | 854:130928a3cdcb |
child | 856:02ac5f37bfc9 |
author | nkeynes |
date | Wed Sep 10 02:03:20 2008 +0000 (15 years ago) |
Initial impl of the alternate PVR DMA channel
src/asic.c | view | annotate | diff | log | ||
src/asic.h | view | annotate | diff | log |
1.1 --- a/src/asic.c Tue Sep 09 00:51:43 2008 +00001.2 +++ b/src/asic.c Wed Sep 10 02:03:20 2008 +00001.3 @@ -351,6 +351,28 @@1.4 asic_event( EVENT_PVR_DMA );1.5 }1.7 +void pvr_dma2_transfer()1.8 +{1.9 + if( MMIO_READ( EXTDMA, PVRDMA2CTL2 ) == 1 ) {1.10 + if( MMIO_READ( EXTDMA, PVRDMA2CTL1 ) == 1 ) {1.11 + sh4addr_t extaddr = MMIO_READ( EXTDMA, PVRDMA2EXT );1.12 + sh4addr_t sh4addr = MMIO_READ( EXTDMA, PVRDMA2SH4 );1.13 + int dir = MMIO_READ( EXTDMA, PVRDMA2DIR );1.14 + uint32_t length = MMIO_READ( EXTDMA, PVRDMA2SIZ );1.15 + unsigned char buf[length];1.16 + if( dir == 0 ) { /* SH4 to PVR */1.17 + mem_copy_from_sh4( buf, sh4addr, length );1.18 + mem_copy_to_sh4( extaddr, buf, length );1.19 + } else { /* PVR to SH4 */1.20 + mem_copy_from_sh4( buf, extaddr, length );1.21 + mem_copy_to_sh4( sh4addr, buf, length );1.22 + }1.23 + MMIO_WRITE( EXTDMA, PVRDMA2CTL2, 0 );1.24 + asic_event( EVENT_PVR_DMA2 );1.25 + }1.26 + }1.27 +}1.28 +1.29 void sort_dma_transfer( )1.30 {1.31 sh4addr_t table_addr = MMIO_READ( ASIC, SORTDMATBL );1.32 @@ -615,9 +637,8 @@1.33 break;1.34 case PVRDMA2CTL1:1.35 case PVRDMA2CTL2:1.36 - if( val != 0 ) {1.37 - ERROR( "Write to unimplemented DMA control register %08X", reg );1.38 - }1.39 + MMIO_WRITE( EXTDMA, reg, val & 1 );1.40 + pvr_dma2_transfer();1.41 break;1.42 default:1.43 MMIO_WRITE( EXTDMA, reg, val );
2.1 --- a/src/asic.h Tue Sep 09 00:51:43 2008 +00002.2 +++ b/src/asic.h Wed Sep 10 02:03:20 2008 +00002.3 @@ -182,6 +182,7 @@2.4 #define EVENT_PVR_OPAQUEMOD_DONE 82.5 #define EVENT_PVR_TRANS_DONE 92.6 #define EVENT_PVR_TRANSMOD_DONE 102.7 +#define EVENT_PVR_DMA2 112.8 #define EVENT_MAPLE_DMA 122.9 #define EVENT_MAPLE_ERR 13 /* ??? */2.10 #define EVENT_IDE_DMA 14
.