1.1 --- a/src/mmio.h Wed Jul 30 22:50:44 2008 +0000
1.2 +++ b/src/mmio.h Thu Jan 15 01:24:25 2009 +0000
1.4 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1.5 * GNU General Public License for more details.
1.7 -#ifndef dream_mmio_H
1.8 -#define dream_mmio_H 1
1.9 +#ifndef lxdream_mmio_H
1.10 +#define lxdream_mmio_H 1
1.20 #define LXDREAM_PAGE_TABLE_ENTRIES 128*1024
1.21 #define LXDREAM_PAGE_SIZE 4096
1.23 struct mmio_region {
1.26 - int32_t (*io_read)(uint32_t addr);
1.27 - void (*io_write)(uint32_t addr, uint32_t val);
1.28 + struct mem_region_fn fn;
1.30 char *save_mem; /* Used to compare for gui updates */
1.33 #undef MMIO_REGION_LIST_BEGIN
1.35 #undef MMIO_REGION_LIST_END
1.36 -#define MMIO_REGION_BEGIN(b,id,d) struct mmio_region mmio_region_##id = { #id, d, b, mmio_region_##id##_read, mmio_region_##id##_write, 0, 0, {
1.37 +#define MMIO_REGION_BEGIN(b,id,d) struct mmio_region mmio_region_##id = { #id, d, b, {mmio_region_##id##_read, mmio_region_##id##_write,mmio_region_##id##_read, mmio_region_##id##_write,mmio_region_##id##_read, mmio_region_##id##_write,NULL, NULL, unmapped_prefetch}, 0, 0, {
1.38 #define LONG_PORT( o,id,f,def,d ) { #id, d, 32, o, def, f },
1.39 #define WORD_PORT( o,id,f,def,d ) { #id, d, 16, o, def, f },
1.40 #define BYTE_PORT( o,id,f,def,d ) { #id, d, 8, o, def, f },
1.41 @@ -125,14 +125,16 @@
1.42 * actually need any direct code on read and/or write
1.44 #define MMIO_REGION_READ_STUBFN( id ) \
1.45 -int32_t mmio_region_##id##_read( uint32_t reg ) { \
1.46 +int32_t FASTCALL mmio_region_##id##_read( uint32_t reg ) { \
1.47 + reg = reg & 0xFFF; \
1.48 int32_t val = MMIO_READ( id, reg ); \
1.49 WARN( "Read from unimplemented module %s (%03X => %08X) [%s: %s]",\
1.50 #id, reg, val, MMIO_REGID(id,reg), MMIO_REGDESC(id,reg) ); \
1.53 #define MMIO_REGION_WRITE_STUBFN( id ) \
1.54 -void mmio_region_##id##_write( uint32_t reg, uint32_t val ) { \
1.55 +void FASTCALL mmio_region_##id##_write( uint32_t reg, uint32_t val ) { \
1.56 + reg = reg & 0xFFF; \
1.57 WARN( "Write to unimplemented module %s (%03X <= %08X) [%s: %s]", \
1.58 #id, reg, val, MMIO_REGID(id,reg), MMIO_REGDESC(id,reg) ); \
1.59 MMIO_WRITE( id, reg, val ); \
1.60 @@ -141,32 +143,26 @@
1.61 MMIO_REGION_READ_STUBFN( id ) \
1.62 MMIO_REGION_WRITE_STUBFN( id )
1.63 #define MMIO_REGION_READ_DEFFN( id ) \
1.64 -int32_t mmio_region_##id##_read( uint32_t reg ) { \
1.65 - return MMIO_READ( id, reg ); \
1.66 +int32_t FASTCALL mmio_region_##id##_read( uint32_t reg ) { \
1.67 + return MMIO_READ( id, reg&0xFFF ); \
1.69 #define MMIO_REGION_WRITE_DEFFN( id ) \
1.70 -void mmio_region_##id##_write( uint32_t reg, uint32_t val ) { \
1.71 - MMIO_WRITE( id, reg, val ); \
1.72 +void FASTCALL mmio_region_##id##_write( uint32_t reg, uint32_t val ) { \
1.73 + MMIO_WRITE( id, reg&0xFFF, val ); \
1.75 #define MMIO_REGION_DEFFNS( id ) \
1.76 MMIO_REGION_READ_DEFFN( id ) \
1.77 MMIO_REGION_WRITE_DEFFN( id )
1.80 -#define MMIO_REGION_WRITE_FN( id, reg, val ) \
1.81 -void mmio_region_##id##_write( uint32_t reg, uint32_t val )
1.83 -#define MMIO_REGION_READ_FN( id, reg ) \
1.84 -int32_t mmio_region_##id##_read( uint32_t reg )
1.88 #ifndef MMIO_IFACE_INCLUDED
1.89 #define MMIO_IFACE_INCLUDED
1.90 #define MMIO_REGION_BEGIN(b,id,d) \
1.91 extern struct mmio_region mmio_region_##id; \
1.92 -int32_t mmio_region_##id##_read(uint32_t); \
1.93 -void mmio_region_##id##_write(uint32_t, uint32_t); \
1.94 +int32_t FASTCALL mmio_region_##id##_read(uint32_t); \
1.95 +void FASTCALL mmio_region_##id##_write(uint32_t, uint32_t); \
1.96 enum mmio_region_##id##_port_t {
1.97 #define LONG_PORT( o,id,f,def,d ) id = o,
1.98 #define WORD_PORT( o,id,f,def,d ) id = o,
1.99 @@ -177,5 +173,12 @@
1.100 #define MMIO_REGION_LIST_END
1.103 +#define MMIO_REGION_WRITE_FN( id, reg, val ) \
1.104 +void FASTCALL mmio_region_##id##_write( uint32_t reg, uint32_t val )
1.106 +#define MMIO_REGION_READ_FN( id, reg ) \
1.107 +int32_t FASTCALL mmio_region_##id##_read( uint32_t reg )