nkeynes@30: /** nkeynes@54: * $Id: sh4mmio.c,v 1.7 2006-01-01 08:08:40 nkeynes Exp $ nkeynes@30: * nkeynes@30: * Miscellaneous and not-really-implemented SH4 peripheral modules. Also nkeynes@30: * responsible for including the IMPL side of the SH4 MMIO pages. nkeynes@30: * Most of these will eventually be split off into their own files. nkeynes@30: * nkeynes@30: * Copyright (c) 2005 Nathan Keynes. nkeynes@30: * nkeynes@30: * This program is free software; you can redistribute it and/or modify nkeynes@30: * it under the terms of the GNU General Public License as published by nkeynes@30: * the Free Software Foundation; either version 2 of the License, or nkeynes@30: * (at your option) any later version. nkeynes@30: * nkeynes@30: * This program is distributed in the hope that it will be useful, nkeynes@30: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@30: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@30: * GNU General Public License for more details. nkeynes@30: */ nkeynes@35: #define MODULE sh4_module nkeynes@30: nkeynes@1: #include "dream.h" nkeynes@1: #include "mem.h" nkeynes@19: #include "clock.h" nkeynes@1: #include "sh4core.h" nkeynes@1: #include "sh4mmio.h" nkeynes@1: #define MMIO_IMPL nkeynes@1: #include "sh4mmio.h" nkeynes@1: nkeynes@1: /********************************* MMU *************************************/ nkeynes@1: nkeynes@1: MMIO_REGION_READ_STUBFN( MMU ) nkeynes@1: nkeynes@10: #define OCRAM_START (0x1C000000>>PAGE_BITS) nkeynes@10: #define OCRAM_END (0x20000000>>PAGE_BITS) nkeynes@10: nkeynes@10: static char *cache = NULL; nkeynes@10: nkeynes@1: void mmio_region_MMU_write( uint32_t reg, uint32_t val ) nkeynes@1: { nkeynes@1: switch(reg) { nkeynes@1: case CCR: nkeynes@10: mmu_set_cache_mode( val & (CCR_OIX|CCR_ORA) ); nkeynes@1: INFO( "Cache mode set to %08X", val ); nkeynes@1: break; nkeynes@1: default: nkeynes@1: break; nkeynes@1: } nkeynes@1: MMIO_WRITE( MMU, reg, val ); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@10: void mmu_init() nkeynes@10: { nkeynes@19: cache = mem_alloc_pages(2); nkeynes@10: } nkeynes@10: nkeynes@10: void mmu_set_cache_mode( int mode ) nkeynes@10: { nkeynes@10: uint32_t i; nkeynes@10: switch( mode ) { nkeynes@10: case MEM_OC_INDEX0: /* OIX=0 */ nkeynes@10: for( i=OCRAM_START; i>(25-PAGE_BITS)); nkeynes@10: break; nkeynes@10: default: /* disabled */ nkeynes@10: for( i=OCRAM_START; i> (i<<1)) & 0x03; nkeynes@1: if( bits == 2 ) bsc_input_mask_lo |= (1<> (i>>1)) & 0x03; nkeynes@1: if( bits == 2 ) bsc_input_mask_hi |= (1<>16) & bsc_input_mask_hi) | (bsc_output>>16); nkeynes@1: break; nkeynes@1: default: nkeynes@1: val = MMIO_READ( BSC, reg ); nkeynes@1: } nkeynes@1: WARN( "Read from (mostly) unimplemented BSC (%03X => %08X) [%s: %s]", nkeynes@1: reg, val, MMIO_REGID(BSC,reg), MMIO_REGDESC(BSC,reg) ); nkeynes@1: return val; nkeynes@1: } nkeynes@1: nkeynes@1: /********************************* UBC *************************************/ nkeynes@1: nkeynes@1: MMIO_REGION_STUBFNS( UBC ) nkeynes@1: nkeynes@1: nkeynes@1: /********************************** SCI *************************************/ nkeynes@1: nkeynes@1: MMIO_REGION_STUBFNS( SCI ) nkeynes@1: