filename | src/mmio.h |
changeset | 953:f4a156508ad1 |
prev | 796:a2dc83592467 |
next | 975:007bf7eb944f |
author | nkeynes |
date | Thu Jan 15 04:15:11 2009 +0000 (15 years ago) |
permissions | -rw-r--r-- |
last change | Add support for the Intel ICC compiler (C only, icc doesn't support Obj-C) - Rename Obj-C source to .m - Separate paths.c into paths_unix.c and paths_osx.m - Add configuration detection of ICC, along with specific opt flags |
file | annotate | diff | log | raw |
1.1 --- a/src/mmio.h Wed Jul 30 22:50:44 2008 +00001.2 +++ b/src/mmio.h Thu Jan 15 04:15:11 2009 +00001.3 @@ -16,8 +16,8 @@1.4 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the1.5 * GNU General Public License for more details.1.6 */1.7 -#ifndef dream_mmio_H1.8 -#define dream_mmio_H 11.9 +#ifndef lxdream_mmio_H1.10 +#define lxdream_mmio_H 11.12 #ifdef __cplusplus1.13 extern "C" {1.14 @@ -28,6 +28,7 @@1.16 #include <stdint.h>1.17 #include <stdlib.h>1.18 +#include "mem.h"1.20 #define LXDREAM_PAGE_TABLE_ENTRIES 128*10241.21 #define LXDREAM_PAGE_SIZE 40961.22 @@ -45,8 +46,7 @@1.23 struct mmio_region {1.24 char *id, *desc;1.25 uint32_t base;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.29 char *mem;1.30 char *save_mem; /* Used to compare for gui updates */1.31 struct mmio_port {1.32 @@ -112,7 +112,7 @@1.33 #undef MMIO_REGION_LIST_BEGIN1.34 #undef MMIO_REGION1.35 #undef MMIO_REGION_LIST_END1.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 write1.43 */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.51 return val; \1.52 }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.68 }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.74 }1.75 #define MMIO_REGION_DEFFNS( id ) \1.76 MMIO_REGION_READ_DEFFN( id ) \1.77 MMIO_REGION_WRITE_DEFFN( id )1.78 #endif1.80 -#define MMIO_REGION_WRITE_FN( id, reg, val ) \1.81 -void mmio_region_##id##_write( uint32_t reg, uint32_t val )1.82 -1.83 -#define MMIO_REGION_READ_FN( id, reg ) \1.84 -int32_t mmio_region_##id##_read( uint32_t reg )1.85 -1.86 #else1.88 #ifndef MMIO_IFACE_INCLUDED1.89 #define MMIO_IFACE_INCLUDED1.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_END1.101 #endif1.103 +#define MMIO_REGION_WRITE_FN( id, reg, val ) \1.104 +void FASTCALL mmio_region_##id##_write( uint32_t reg, uint32_t val )1.105 +1.106 +#define MMIO_REGION_READ_FN( id, reg ) \1.107 +int32_t FASTCALL mmio_region_##id##_read( uint32_t reg )1.108 +1.109 +1.110 #endif
.