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);
126 #define TEMU_MEM_ACCESS_IFACE_TYPE "MemAccessIface"
127 TEMU_IFACE_REFERENCE_TYPE(temu_MemAccess);
128 
147 
148 typedef struct temu_MemoryIface {
149  int (*readBytes)(void *Obj, void *Dest, uint64_t Offs, uint32_t Size, int Swap);
150  int (*writeBytes)(void *Obj, uint64_t Offs, uint32_t Size, const void *Src, int Swap);
152 #define TEMU_MEMORY_IFACE_TYPE "MemoryIface"
153 TEMU_IFACE_REFERENCE_TYPE(temu_Memory);
154 
159 typedef struct temu_MemoryMapIface {
160  void (*map)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryKind Type)
161  __attribute__((deprecated));
162  void (*mapDevice)(void *Obj, uint64_t Addr, uint64_t Len, void *Device)
163  __attribute__((deprecated));
164  void (*setAttribute)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
165  __attribute__((deprecated));
166  void (*clearAttribute)(void *Obj, uint64_t Addr, uint64_t Len,
167  temu_MemoryAttr Attr)
168  __attribute__((deprecated));
169  void (*clearAttributes)(void *Obj, uint64_t Addr, uint64_t Len)
170  __attribute__((deprecated));
172 
173 #define TEMU_MEMORY_MAP_IFACE_TYPE "MemoryMapIface"
174 TEMU_IFACE_REFERENCE_TYPE(temu_MemoryMap);
175 
185 int
186 temu_mapMemorySpace(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj);
187 
188 
199 int
200 temu_mapMemorySpaceFlags(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj,
201  uint32_t Flags);
202 
203 
204 
213 void
214 temu_setMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
215 
216 
224 void
225 temu_clearMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
226 
227 #ifdef __cplusplus
228 }
229 #endif
230 
231 #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:169
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:164
int(* readBytes)(void *Obj, void *Dest, uint64_t Offs, uint32_t Size, int Swap)
Definition: Memory.h:149
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:162
void(* clearAttribute)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr) __attribute__((deprecated))
Definition: Memory.h:166
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:150
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:160