TEMU  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 #include "temu-c/Support/Memory.h"
14 
15 #include <stdint.h>
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 typedef enum temu_MemoryKind {
26 
27 typedef enum {
32 
33 // Memory transaction flags
34 #define TEMU_MT_CACHEABLE 1
35 #define TEMU_MT_BYPASS_CACHE (1 << 1)
36 #define TEMU_MT_FORCE_CACHE_MISS (1 << 2)
37 #define TEMU_MT_FAILED (1 << 3)
38 #define TEMU_MT_CACHE_HIT (1 << 4)
39 
40 #define TEMU_MT_PRIV_MASK (7 << 5)
41 #define TEMU_MT_PRIV_USER (1 << 5)
42 #define TEMU_MT_PRIV_SUPER (2 << 5)
43 #define TEMU_MT_PRIV_HYPER (3 << 5)
44 
45 #define TEMU_MT_PROBE (1 << 8)
46 
57 typedef struct temu_MemTransaction {
58  uint64_t Va;
59  uint64_t Pa;
60 
64  uint64_t Value;
65 
73  uint8_t Size;
74 
79  uint64_t Offset;
80 
95  void *Initiator;
102  void *Page;
103  uint64_t Cycles;
104 
105  uint32_t Flags;
107 
110 typedef struct temu_MemAccessIface {
113  void (*fetch)(void *Obj, temu_MemTransaction *Mt);
114 
116  void (*read)(void *Obj, temu_MemTransaction *Mt);
117 
119  void (*write)(void *Obj, temu_MemTransaction *Mt);
120 
124  void (*exchange)(void *Obj, temu_MemTransaction *Mt);
125 
126  // Optional method, experimental (signature may change)
127  void (*mapped)(void *Obj, uint64_t Pa, uint64_t Len);
129 #define TEMU_MEM_ACCESS_IFACE_TYPE "MemAccessIface"
130 TEMU_IFACE_REFERENCE_TYPE(temu_MemAccess);
131 
150 
151 typedef struct temu_MemoryIface {
152  int (*readBytes)(void *Obj, void *Dest, uint64_t Offs, uint32_t Size, int Swap);
153  int (*writeBytes)(void *Obj, uint64_t Offs, uint32_t Size, const void *Src, int Swap);
155 #define TEMU_MEMORY_IFACE_TYPE "MemoryIface"
156 TEMU_IFACE_REFERENCE_TYPE(temu_Memory);
157 
162 typedef struct temu_MemoryMapIface {
163  void (*map)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryKind Type)
164  __attribute__((deprecated));
165  void (*mapDevice)(void *Obj, uint64_t Addr, uint64_t Len, void *Device)
166  __attribute__((deprecated));
167  void (*setAttribute)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
168  __attribute__((deprecated));
169  void (*clearAttribute)(void *Obj, uint64_t Addr, uint64_t Len,
170  temu_MemoryAttr Attr)
171  __attribute__((deprecated));
172  void (*clearAttributes)(void *Obj, uint64_t Addr, uint64_t Len)
173  __attribute__((deprecated));
175 
176 #define TEMU_MEMORY_MAP_IFACE_TYPE "MemoryMapIface"
177 TEMU_IFACE_REFERENCE_TYPE(temu_MemoryMap);
178 
188 int
189 temu_mapMemorySpace(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj);
190 
191 
202 int
203 temu_mapMemorySpaceFlags(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj,
204  uint32_t Flags);
205 
206 
207 
216 void
217 temu_setMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
218 
219 
227 void
228 temu_clearMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
229 
230 #ifdef __cplusplus
231 }
232 #endif
233 
234 #endif /* ! TEMU_MEMORY_IF_H */
void(* write)(void *Obj, temu_MemTransaction *Mt)
Function called on writes.
Definition: Memory.h:119
uint64_t Pa
64 bit physical address
Definition: Memory.h:59
void(* read)(void *Obj, temu_MemTransaction *Mt)
Function called on reads.
Definition: Memory.h:116
uint8_t Size
Definition: Memory.h:73
struct temu_MemoryMapIface temu_MemoryMapIface
struct temu_MemoryIface temu_MemoryIface
TEMU_API void TEMU_API void __attribute__((deprecated))
temu_MemoryAttr
Memory attribute enumeration.
Definition: Memory.h:33
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:172
uint64_t Value
Definition: Memory.h:64
void(* exchange)(void *Obj, temu_MemTransaction *Mt)
Definition: Memory.h:124
void(* setAttribute)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr) __attribute__((deprecated))
Definition: Memory.h:167
int(* readBytes)(void *Obj, void *Dest, uint64_t Offs, uint32_t Size, int Swap)
Definition: Memory.h:152
uint64_t Cycles
Cycle cost for memory access (initialised to 0)
Definition: Memory.h:103
temu_MemoryKind
Definition: Memory.h:21
#define TEMU_IFACE_REFERENCE_TYPE(N)
Definition: Objsys.h:129
void(* fetch)(void *Obj, temu_MemTransaction *Mt)
Definition: Memory.h:113
void(* mapDevice)(void *Obj, uint64_t Addr, uint64_t Len, void *Device) __attribute__((deprecated))
Definition: Memory.h:165
void(* mapped)(void *Obj, uint64_t Pa, uint64_t Len)
Definition: Memory.h:127
void(* clearAttribute)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr) __attribute__((deprecated))
Definition: Memory.h:169
void temu_clearMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
struct temu_MemTransaction temu_MemTransaction
void * Initiator
Definition: Memory.h:95
temu_InitiatorType InitiatorType
Definition: Memory.h:86
int(* writeBytes)(void *Obj, uint64_t Offs, uint32_t Size, const void *Src, int Swap)
Definition: Memory.h:153
struct temu_MemAccessIface temu_MemAccessIface
uint32_t Flags
Flags for use in the memory hierarchy.
Definition: Memory.h:105
int temu_mapMemorySpaceFlags(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj, uint32_t Flags)
temu_InitiatorType
Definition: Memory.h:27
int temu_mapMemorySpace(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj)
uint64_t Offset
Definition: Memory.h:79
uint64_t Va
64 bit virtual for unified 32/64 bit interface.
Definition: Memory.h:58
void(* map)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryKind Type) __attribute__((deprecated))
Definition: Memory.h:163