 |
TEMU
4.0
The Terma Emulator
|
Go to the documentation of this file.
9 #ifndef TEMU_MEMORY_IF_H
10 #define TEMU_MEMORY_IF_H
12 #include "temu-c/Support/Memory.h"
13 #include "temu-c/Support/Objsys.h"
30 } temu_MemoryEndianness;
32 #define TEMU_MT_CACHEABLE 1
33 #define TEMU_MT_BYPASS_CACHE (1
<< 1
)
34 #define TEMU_MT_FORCE_CACHE_MISS (1
<< 2
)
35 #define TEMU_MT_FAILED (1
<< 3
)
36 #define TEMU_MT_CACHE_HIT (1
<< 4
)
38 #define TEMU_MT_PRIV_SHIFT (5
)
40 #define TEMU_MT_PRIV_MASK (7
<< 5
)
41 #define TEMU_MT_PRIV_USER (0
<< 5
)
42 #define TEMU_MT_PRIV_SUPER (1
<< 5
)
43 #define TEMU_MT_PRIV_HYPER (2
<< 5
)
48 #define TEMU_MT_PROBE (1
<< 8
)
49 #define TEMU_MT_SELF_MODIFYING (1
<< 9
)
70 #define TEMU_MT_ENDIAN_BIT 10
71 #define TEMU_MT_BIG_ENDIAN (0
<< 10
)
72 #define TEMU_MT_LITTLE_ENDIAN (1
<< 10
)
74 temu_hasDifferentEndianness(uint32_t a, uint32_t b)
76 return ((a ^ b) >> 10) & 1;
79 #define TEMU_MT_ISA_0 (0
<< 11
)
80 #define TEMU_MT_ISA_1 (1
<< 11
)
81 #define TEMU_MT_ISA_2 (2
<< 11
)
83 #define TEMU_MT_GET_ISA(flags) ((flags >> 11
) & 7
)
85 #define TEMU_MT_PROF_ACCESS (1
<< 13
)
86 #define TEMU_MT_PROF_ACCESS_BIT 13
90 #define TEMU_MT_BYPASS_PROT (1
<< 14
)
92 #define TEMU_MT_READ (1
<< 15
)
93 #define TEMU_MT_WRITE (1
<< 16
)
98 #define TEMU_MT_LOCK_ACQUIRE (1
<< 17
)
99 #define TEMU_MT_LOCK_RELEASE (1
<< 18
)
100 #define TEMU_MT_LOCK_ACQUIRE_AND_RELEASE (3
<< 17
)
182 } temu_MemTransaction;
185 #define TEMU_MEM_ACCESS_CAP_F8 (1
<< 0
)
186 #define TEMU_MEM_ACCESS_CAP_F16 (1
<< 1
)
187 #define TEMU_MEM_ACCESS_CAP_F32 (1
<< 2
)
188 #define TEMU_MEM_ACCESS_CAP_F64 (1
<< 3
)
189 #define TEMU_MEM_ACCESS_CAP_F_ALL (0xf
)
192 #define TEMU_MEM_ACCESS_CAP_R8 (1
<< (0
+ 4
))
193 #define TEMU_MEM_ACCESS_CAP_R16 (1
<< (1
+ 4
))
194 #define TEMU_MEM_ACCESS_CAP_R32 (1
<< (2
+ 4
))
195 #define TEMU_MEM_ACCESS_CAP_R64 (1
<< (3
+ 4
))
196 #define TEMU_MEM_ACCESS_CAP_R_ALL (0xf
<< 4
)
199 #define TEMU_MEM_ACCESS_CAP_W8 (1
<< (0
+ 8
))
200 #define TEMU_MEM_ACCESS_CAP_W16 (1
<< (1
+ 8
))
201 #define TEMU_MEM_ACCESS_CAP_W32 (1
<< (2
+ 8
))
202 #define TEMU_MEM_ACCESS_CAP_W64 (1
<< (3
+ 8
))
203 #define TEMU_MEM_ACCESS_CAP_W_ALL (0xf
<< 8
)
206 #define TEMU_MEM_ACCESS_CAP_E8 (1
<< (0
+ 12
))
207 #define TEMU_MEM_ACCESS_CAP_E16 (1
<< (1
+ 12
))
208 #define TEMU_MEM_ACCESS_CAP_E32 (1
<< (2
+ 12
))
209 #define TEMU_MEM_ACCESS_CAP_E64 (1
<< (3
+ 12
))
210 #define TEMU_MEM_ACCESS_CAP_E_ALL (0xf
<< 12
)
218 } temu_MemAccessCapabilities;
239 void (*
mapped)(
void *Obj, uint64_t Pa, uint64_t Len);
247 const temu_MemAccessCapabilities *(*getCapabilities)(
void *Obj);
260 #define TEMU_MEM_ACCESS_IFACE_TYPE "MemAccessIface"
261 TEMU_IFACE_REFERENCE_TYPE(temu_MemAccess);
283 int (*
readBytes)(
void *Obj,
void *Dest, uint64_t Offs, uint32_t Size,
285 int (*
writeBytes)(
void *Obj, uint64_t Offs, uint32_t Size,
const void *Src,
288 #define TEMU_MEMORY_IFACE_TYPE "MemoryIface"
289 TEMU_IFACE_REFERENCE_TYPE(temu_Memory);
301 temu_Object_ *MemObj);
314 temu_Object_ *MemObj, uint32_t Flags);
325 temu_MemoryAttr Attr);
335 temu_MemoryAttr Attr);
void(* exchange)(void *Obj, temu_MemTransaction *Mt)
Definition: Memory.h:236
void(* mapped)(void *Obj, uint64_t Pa, uint64_t Len)
Optional method, called when interface is mapped.
Definition: Memory.h:239
@ teME_BigEndian
Memory access interface in big endian.
Definition: Memory.h:27
void(* probe)(void *Obj, temu_MemTransaction *Mt)
Definition: Memory.h:258
struct temu_MemAccessIface temu_MemAccessIface
Definition: Memory.h:51
int temu_memoryWriteTransaction(void *Obj, temu_MemTransaction *MT)
uint16_t LargeTransactions
Supports large transactions (e.g. RAM/ROM)
Definition: Memory.h:215
@ teME_LittleEndian
Memory access interface in little endian.
Definition: Memory.h:28
@ teIT_Device
Memory transaction initiated by device.
Definition: Memory.h:23
void * Page
Definition: Memory.h:175
int temu_memoryExchangeTransaction(void *Obj, temu_MemTransaction *MT)
temu_MemoryKind Kind
Mapping type.
Definition: Memory.h:216
uint64_t Cycles
Cycle cost for memory access (initialised to 0).
Definition: Memory.h:176
int(* readBytes)(void *Obj, void *Dest, uint64_t Offs, uint32_t Size, int Swap)
Definition: Memory.h:283
uint64_t Value
Definition: Memory.h:119
uint64_t Pa
64 bit physical address
Definition: Memory.h:114
int temu_mapMemorySpace(void *Obj, uint64_t Addr, uint64_t Len, temu_Object_ *MemObj)
temu_MemoryEndianness Endianness
Endianess of transaction interface.
Definition: Memory.h:217
@ teME_UnspecifiedEndian
Memory access interface in undefined endian.
Definition: Memory.h:29
uint32_t Flags
Flags for use in the memory hierarchy.
Definition: Memory.h:177
void * IR
Definition: Memory.h:179
@ teIT_Cpu
Memory transaction initiated by CPU.
Definition: Memory.h:22
int temu_mapMemorySpaceFlags(void *Obj, uint64_t Addr, uint64_t Len, temu_Object_ *MemObj, uint32_t Flags)
temu_Object_ * Initiator
Definition: Memory.h:168
int temu_memoryReadTransaction(void *Obj, temu_MemTransaction *MT)
void * Meta
Definition: Memory.h:181
uint64_t Va
64 bit virtual for unified 32/64 bit interface.
Definition: Memory.h:113
void(* fetch)(void *Obj, temu_MemTransaction *Mt)
Definition: Memory.h:225
int temu_memoryFetchTransaction(void *Obj, temu_MemTransaction *MT)
uint64_t Offset
Definition: Memory.h:152
void(* read)(void *Obj, temu_MemTransaction *Mt)
Function called on reads.
Definition: Memory.h:228
uint64_t Size
Definition: Memory.h:146
@ teIT_Unknown
Memory transaction initiator unknown.
Definition: Memory.h:24
uint16_t TransactionBaseSizes
Flags indicating legal transaction sizes.
Definition: Memory.h:213
void temu_clearMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
void temu_setMemAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
int(* writeBytes)(void *Obj, uint64_t Offs, uint32_t Size, const void *Src, int Swap)
Definition: Memory.h:285
temu_InitiatorType InitiatorType
Definition: Memory.h:159
void(* write)(void *Obj, temu_MemTransaction *Mt)
Function called on writes.
Definition: Memory.h:231