00001 #ifndef TEMU_MEMORY_IF_H
00002 #define TEMU_MEMORY_IF_H
00003
00004 #include "temu-c/Support/Objsys.h"
00005
00006 #include <stdint.h>
00007
00008 #ifdef __cplusplus
00009 extern "C" {
00010 #endif
00011
00012 typedef enum {
00013 teMK_RAM,
00014 teMK_ROM,
00015 teMK_MMIO,
00016 } temu_MemoryKind;
00017
00028 typedef struct temu_MemTransaction {
00029 uint64_t Va;
00030 uint64_t Pa;
00031
00035 uint64_t Value;
00036
00044 uint8_t Size;
00045
00050 uint64_t Offset;
00059 void *Initiator;
00066 void *Page;
00067 uint64_t Cycles;
00068 } temu_MemTransaction;
00069
00072 typedef struct temu_MemAccessIface {
00075 void (*fetch)(void *Obj, temu_MemTransaction *Mt);
00076
00078 void (*read)(void *Obj, temu_MemTransaction *Mt);
00079
00081 void (*write)(void *Obj, temu_MemTransaction *Mt);
00082 } temu_MemAccessIface;
00083
00084 OBJSYS_OBJ_TYPE(temu_MemAccess);
00085
00099
00100 typedef struct temu_MemoryIface {
00101 void (*readBytes)(void *Obj, void *Dest, uint64_t Offs, uint32_t Size, int Swap);
00102 void (*writeBytes)(void *Obj, uint64_t Offs, uint32_t Size, void *Src, int Swap);
00103 } temu_MemoryIface;
00104
00105 OBJSYS_OBJ_TYPE(temu_Memory);
00106
00107
00109
00119 typedef enum {
00120 teMA_Break = 1,
00121 teMA_WatchRead = 1 << 1,
00122 teMA_WatchWrite = 1 << 2,
00123 teMA_Upset = 1 << 3,
00124 teMA_Faulty = 1 << 4,
00125 teMA_User1 = 1 << 5,
00126 teMA_User2 = 1 << 6,
00127 teMA_User3 = 1 << 7,
00128 } temu_MemoryAttr;
00129
00134 typedef struct temu_MemoryMapIface {
00135 void (*map)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryKind Type);
00136 void (*mapDevice)(void *Obj, uint64_t Addr, uint64_t Len, void *Device);
00137 void (*setAttribute)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
00138 void (*clearAttribute)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
00139 void (*clearAttributes)(void *Obj, uint64_t Addr, uint64_t Len);
00140 } temu_MemoryMapIface;
00141
00142 OBJSYS_OBJ_TYPE(temu_MemoryMap);
00143
00152 extern "C" void
00153 temu_mapMemorySpace(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj);
00154
00155
00156
00157
00166 extern "C" void
00167 temu_setMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
00168
00169
00177 extern "C" void
00178 temu_clearMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
00179
00180 #ifdef __cplusplus
00181 }
00182 #endif
00183
00184 #endif