T-EMU  2
The Terma Emulator
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
Memory.h
Go to the documentation of this file.
1 //===------------------------------------------------------------*- C++ -*-===//
2 //
3 // T-EMU: The Terma Emulator
4 // (c) Terma 2015
5 // Authors: Mattias Holm <maho (at) terma.com>
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef TEMU_MEMORY_IF_H
10 #define TEMU_MEMORY_IF_H
11 
12 #include "temu-c/Support/Objsys.h"
13 
14 #include <stdint.h>
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 typedef enum temu_MemoryKind {
25 
26 // Memory transaction flags
27 #define TEMU_MT_CACHEABLE 1
28 #define TEMU_MT_BYPASS_CACHE (1 << 1)
29 #define TEMU_MT_FORCE_CACHE_MISS (1 << 2)
30 typedef struct temu_MemTransaction {
41  uint64_t Va;
42  uint64_t Pa;
43 
47  uint64_t Value;
48 
56  uint8_t Size;
57 
62  uint64_t Offset;
71  void *Initiator;
78  void *Page;
79  uint64_t Cycles;
80 
81  uint32_t Flags;
83 
86 typedef struct temu_MemAccessIface {
89  void (*fetch)(void *Obj, temu_MemTransaction *Mt);
90 
92  void (*read)(void *Obj, temu_MemTransaction *Mt);
93 
95  void (*write)(void *Obj, temu_MemTransaction *Mt);
97 
98 TEMU_IFACE_REFERENCE_TYPE(temu_MemAccess);
99 
113 
114 typedef struct temu_MemoryIface {
115  int (*readBytes)(void *Obj, void *Dest, uint64_t Offs, uint32_t Size, int Swap);
116  int (*writeBytes)(void *Obj, uint64_t Offs, uint32_t Size, const void *Src, int Swap);
118 
119 TEMU_IFACE_REFERENCE_TYPE(temu_Memory);
120 
121 
123 
133 typedef enum {
135  teMA_WatchRead = 1 << 1,
136  teMA_WatchWrite = 1 << 2,
137  teMA_Upset = 1 << 3,
138  teMA_Faulty = 1 << 4,
139  teMA_User1 = 1 << 5,
140  teMA_User2 = 1 << 6,
141  teMA_User3 = 1 << 7,
143 
148 typedef struct temu_MemoryMapIface {
149  void (*map)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryKind Type)
150  __attribute__((deprecated));
151  void (*mapDevice)(void *Obj, uint64_t Addr, uint64_t Len, void *Device)
152  __attribute__((deprecated));
153  void (*setAttribute)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
154  __attribute__((deprecated));
155  void (*clearAttribute)(void *Obj, uint64_t Addr, uint64_t Len,
156  temu_MemoryAttr Attr)
157  __attribute__((deprecated));
158  void (*clearAttributes)(void *Obj, uint64_t Addr, uint64_t Len)
159  __attribute__((deprecated));
161 
162 
163 TEMU_IFACE_REFERENCE_TYPE(temu_MemoryMap);
164 
173 void
174 temu_mapMemorySpace(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj);
175 
176 
177 
178 
187 void
188 temu_setMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
189 
190 
198 void
199 temu_clearMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
200 
201 #ifdef __cplusplus
202 }
203 #endif
204 
205 #endif /* ! TEMU_MEMORY_IF_H */
void(* write)(void *Obj, temu_MemTransaction *Mt)
Function called on writes.
Definition: Memory.h:95
uint64_t Pa
64 bit physical address
Definition: Memory.h:42
void(* read)(void *Obj, temu_MemTransaction *Mt)
Function called on reads.
Definition: Memory.h:92
uint8_t Size
Definition: Memory.h:56
struct temu_MemoryMapIface temu_MemoryMapIface
Single event upset.
Definition: Memory.h:137
struct temu_MemoryIface temu_MemoryIface
User definable.
Definition: Memory.h:141
User definable.
Definition: Memory.h:139
void temu_setMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
void(* clearAttributes)(void *Obj, uint64_t Addr, uint64_t Len) __attribute__((deprecated))
Definition: Memory.h:158
uint64_t Value
Definition: Memory.h:47
Read watchpoint set.
Definition: Memory.h:135
void(* setAttribute)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr) __attribute__((deprecated))
Definition: Memory.h:153
int(* readBytes)(void *Obj, void *Dest, uint64_t Offs, uint32_t Size, int Swap)
Definition: Memory.h:115
uint64_t Cycles
Cycle cost for memory access (initialised to 0)
Definition: Memory.h:79
temu_MemoryKind
Definition: Memory.h:20
Write watchpoint set.
Definition: Memory.h:136
void(* fetch)(void *Obj, temu_MemTransaction *Mt)
Definition: Memory.h:89
temu_MemoryAttr
Memory attribute enumeration.
Definition: Memory.h:133
void temu_mapMemorySpace(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj)
void(* mapDevice)(void *Obj, uint64_t Addr, uint64_t Len, void *Device) __attribute__((deprecated))
Definition: Memory.h:151
void(* clearAttribute)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr) __attribute__((deprecated))
Definition: Memory.h:155
void void __attribute__((deprecated))
void temu_clearMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
Breakpoint set.
Definition: Memory.h:134
struct temu_MemTransaction temu_MemTransaction
void * Initiator
Definition: Memory.h:71
TEMU_IFACE_REFERENCE_TYPE(temu_MemAccess)
User definable.
Definition: Memory.h:140
int(* writeBytes)(void *Obj, uint64_t Offs, uint32_t Size, const void *Src, int Swap)
Definition: Memory.h:116
struct temu_MemAccessIface temu_MemAccessIface
uint32_t Flags
Flags for use in the memory hierarchy.
Definition: Memory.h:81
uint64_t Offset
Definition: Memory.h:62
uint64_t Va
64 bit virtual for unified 32/64 bit interface.
Definition: Memory.h:41
Multiple event upset / uncorrectable.
Definition: Memory.h:138
void(* map)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryKind Type) __attribute__((deprecated))
Definition: Memory.h:149