 |
TEMU
4.4
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
)
101 #define TEMU_MT_CHECK_FETCH_ATTRIBS (1
<< 19
)
103 #define TEMU_MT_ALLOC_IR (1
<< 20
)
104 #define TEMU_MT_FORCE_REBIND (1
<< 21
)
186 } temu_MemTransaction;
189 #define TEMU_MEM_ACCESS_CAP_F8 (1
<< 0
)
190 #define TEMU_MEM_ACCESS_CAP_F16 (1
<< 1
)
191 #define TEMU_MEM_ACCESS_CAP_F32 (1
<< 2
)
192 #define TEMU_MEM_ACCESS_CAP_F64 (1
<< 3
)
193 #define TEMU_MEM_ACCESS_CAP_F_ALL (0xf
)
196 #define TEMU_MEM_ACCESS_CAP_R8 (1
<< (0
+ 4
))
197 #define TEMU_MEM_ACCESS_CAP_R16 (1
<< (1
+ 4
))
198 #define TEMU_MEM_ACCESS_CAP_R32 (1
<< (2
+ 4
))
199 #define TEMU_MEM_ACCESS_CAP_R64 (1
<< (3
+ 4
))
200 #define TEMU_MEM_ACCESS_CAP_R_ALL (0xf
<< 4
)
203 #define TEMU_MEM_ACCESS_CAP_W8 (1
<< (0
+ 8
))
204 #define TEMU_MEM_ACCESS_CAP_W16 (1
<< (1
+ 8
))
205 #define TEMU_MEM_ACCESS_CAP_W32 (1
<< (2
+ 8
))
206 #define TEMU_MEM_ACCESS_CAP_W64 (1
<< (3
+ 8
))
207 #define TEMU_MEM_ACCESS_CAP_W_ALL (0xf
<< 8
)
210 #define TEMU_MEM_ACCESS_CAP_E8 (1
<< (0
+ 12
))
211 #define TEMU_MEM_ACCESS_CAP_E16 (1
<< (1
+ 12
))
212 #define TEMU_MEM_ACCESS_CAP_E32 (1
<< (2
+ 12
))
213 #define TEMU_MEM_ACCESS_CAP_E64 (1
<< (3
+ 12
))
214 #define TEMU_MEM_ACCESS_CAP_E_ALL (0xf
<< 12
)
222 } temu_MemAccessCapabilities;
243 void (*
mapped)(
void *Obj, uint64_t Pa, uint64_t Len);
251 const temu_MemAccessCapabilities *(*getCapabilities)(
void *Obj);
264 #define TEMU_MEM_ACCESS_IFACE_TYPE "MemAccessIface"
265 TEMU_IFACE_REFERENCE_TYPE(temu_MemAccess);
287 int (*
readBytes)(
void *Obj,
void *Dest, uint64_t Offs, uint32_t Size,
289 int (*
writeBytes)(
void *Obj, uint64_t Offs, uint32_t Size,
const void *Src,
292 #define TEMU_MEMORY_IFACE_TYPE "MemoryIface"
293 TEMU_IFACE_REFERENCE_TYPE(temu_Memory);
305 temu_Object_ *MemObj);
318 temu_Object_ *MemObj, uint32_t Flags);
329 temu_MemoryAttr Attr);
339 temu_MemoryAttr Attr);
void(* exchange)(void *Obj, temu_MemTransaction *Mt)
Definition: Memory.h:240
void(* mapped)(void *Obj, uint64_t Pa, uint64_t Len)
Optional method, called when interface is mapped.
Definition: Memory.h:243
@ teME_BigEndian
Memory access interface in big endian.
Definition: Memory.h:27
void(* probe)(void *Obj, temu_MemTransaction *Mt)
Definition: Memory.h:262
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:219
struct temu_MemTransaction temu_MemTransaction
Definition: Debugger.h:21
@ 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:179
int temu_memoryExchangeTransaction(void *Obj, temu_MemTransaction *MT)
temu_MemoryKind Kind
Mapping type.
Definition: Memory.h:220
uint64_t Cycles
Cycle cost for memory access (initialised to 0).
Definition: Memory.h:180
int(* readBytes)(void *Obj, void *Dest, uint64_t Offs, uint32_t Size, int Swap)
Definition: Memory.h:287
uint64_t Value
Definition: Memory.h:123
uint64_t Pa
64 bit physical address
Definition: Memory.h:118
int temu_mapMemorySpace(void *Obj, uint64_t Addr, uint64_t Len, temu_Object_ *MemObj)
temu_MemoryEndianness Endianness
Endianess of transaction interface.
Definition: Memory.h:221
@ 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:181
void * IR
Definition: Memory.h:183
@ 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:172
int temu_memoryReadTransaction(void *Obj, temu_MemTransaction *MT)
void * Meta
Definition: Memory.h:185
uint64_t Va
64 bit virtual for unified 32/64 bit interface.
Definition: Memory.h:117
void(* fetch)(void *Obj, temu_MemTransaction *Mt)
Definition: Memory.h:229
int temu_memoryFetchTransaction(void *Obj, temu_MemTransaction *MT)
uint64_t Offset
Definition: Memory.h:156
void(* read)(void *Obj, temu_MemTransaction *Mt)
Function called on reads.
Definition: Memory.h:232
uint64_t Size
Definition: Memory.h:150
@ teIT_Unknown
Memory transaction initiator unknown.
Definition: Memory.h:24
uint16_t TransactionBaseSizes
Flags indicating legal transaction sizes.
Definition: Memory.h:217
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:289
temu_InitiatorType InitiatorType
Definition: Memory.h:163
void(* write)(void *Obj, temu_MemTransaction *Mt)
Function called on writes.
Definition: Memory.h:235