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 
2 //===-- temu-c/Memory.h - Memory Helpers ------------------------*- C++ -*-===//
3 //
4 // T-EMU: The Terma Emulator
5 // (c) Terma 2015-2016
6 // Authors: Mattias Holm <maho (at) terma.com>
7 //
8 //===----------------------------------------------------------------------===//
9 
10 
11 #ifndef TEMU_SUPPORT_MEMORY
12 #define TEMU_SUPPORT_MEMORY
13 
14 #include <stdint.h>
16 #include "temu-c/Support/Objsys.h"
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
23 
33  typedef enum {
34  teMA_Break = 1,
35  teMA_WatchRead = 1 << 1,
36  teMA_WatchWrite = 1 << 2,
37  teMA_Upset = 1 << 3,
38  teMA_Faulty = 1 << 4,
39  teMA_User1 = 1 << 5,
40  teMA_User2 = 1 << 6,
41  teMA_User3 = 1 << 7,
43 
44 typedef uint8_t temu_MemoryAttrs;
45 
46 
47 // Private interface, this is not stable yet
48 typedef struct temu_MemorySpaceIface {
49  int (*mapDevice)(void *Obj, uint64_t Addr, uint64_t Len, void *Device,
50  uint32_t Flags);
51  void (*setAttr)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
52  void (*clearAttr)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
53  temu_MemoryAttrs (*getAttrs)(void *Obj, uint64_t Addr);
54 
55  int (*mapDeviceWithNamedIface)(void *Obj, uint64_t Addr, uint64_t Len, void *Device, const char *IfaceName,
56  uint32_t Flags);
57  int (*unmapRange)(void *Obj, uint64_t Addr, uint64_t Len);
59 
60 TEMU_IFACE_REFERENCE_TYPE(temu_MemorySpace);
61 #define TEMU_MEMORY_SPACE_IFACE_TYPE "MemorySpaceIface"
62 
63 // Private interface, do not use directly
64 typedef struct {
65  void* (*getPDC)(void *Obj, uint64_t Addr);
66  void (*allocPDC)(void *Obj, uint64_t Addr);
67  void (*disposePDC)(void *Obj, uint64_t Addr);
68  void (*writePDC)(void *Obj, uint64_t Addr, void *Inst);
69  void (*clearPDC)(void *Obj, uint64_t Addr);
72 #define TEMU_PDC_IFACE_TYPE "PDCIface"
73 
74 
88 TEMU_API int temu_memoryRead(void *mem, uint8_t *buff, uint64_t addr, uint32_t size,
89  int swap);
90 
103 TEMU_API int temu_memoryWrite(void *mem, uint64_t addr, uint8_t *buff, uint32_t size,
104  int swap);
105 
115 TEMU_API int temu_memoryMap(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj,
116  uint32_t Flags);
117 
118 
130 TEMU_API int temu_memoryMapNamedIface(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj, const char *IfaceName,
131  uint32_t Flags);
132 
140 TEMU_API void temu_memorySetAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
141 
149 TEMU_API void temu_memoryClearAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr);
150 
157 TEMU_API temu_MemoryAttrs temu_memoryGetAttrs(void *Obj, uint64_t Addr);
158 
167 TEMU_API int temu_memoryReadPhys32(void *Obj, uint64_t Addr, uint32_t *Word);
168 
176 TEMU_API int temu_memoryWritePhys32(void *Obj, uint64_t Addr, uint32_t Word);
177 
198 TEMU_API uint32_t temu_normaliseWrite32(uint32_t OldVal, uint32_t NewVal,
199  int Sz, int Off);
200 
213 TEMU_API uint32_t temu_normaliseRead32(uint32_t Value, int Sz, int Off);
214 
215 
228 TEMU_API uint16_t temu_normaliseRead16(uint16_t Value, int Sz, int Off);
229 
230 
252 TEMU_API uint16_t temu_normaliseWrite16(uint16_t OldVal, uint16_t NewVal,
253  int Sz, int Off);
254 
255 
256 
257 #ifdef __cplusplus
258 }
259 #endif
260 
261 #endif /* ! TEMU_SUPPORT_MEMORY */
TEMU_API void temu_memoryClearAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
TEMU_API int temu_memoryRead(void *mem, uint8_t *buff, uint64_t addr, uint32_t size, int swap)
TEMU_API void temu_memorySetAttr(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
TEMU_API uint16_t temu_normaliseWrite16(uint16_t OldVal, uint16_t NewVal, int Sz, int Off)
Write watchpoint set.
Definition: Memory.h:36
TEMU_API uint32_t temu_normaliseRead32(uint32_t Value, int Sz, int Off)
int(* unmapRange)(void *Obj, uint64_t Addr, uint64_t Len)
Definition: Memory.h:57
temu_MemoryAttr
Memory attribute enumeration.
Definition: Memory.h:33
User definable.
Definition: Memory.h:39
TEMU_API int temu_memoryWrite(void *mem, uint64_t addr, uint8_t *buff, uint32_t size, int swap)
User definable.
Definition: Memory.h:40
TEMU_API int temu_memoryWritePhys32(void *Obj, uint64_t Addr, uint32_t Word)
Read watchpoint set.
Definition: Memory.h:35
TEMU_API temu_MemoryAttrs temu_memoryGetAttrs(void *Obj, uint64_t Addr)
Get memory attributes for address.
#define TEMU_IFACE_REFERENCE_TYPE(N)
Definition: Objsys.h:129
struct temu_MemorySpaceIface temu_MemorySpaceIface
Single event upset.
Definition: Memory.h:37
int(* mapDevice)(void *Obj, uint64_t Addr, uint64_t Len, void *Device, uint32_t Flags)
Definition: Memory.h:49
TEMU_API uint16_t temu_normaliseRead16(uint16_t Value, int Sz, int Off)
temu_MemoryAttrs(* getAttrs)(void *Obj, uint64_t Addr)
Definition: Memory.h:53
TEMU_API uint32_t temu_normaliseWrite32(uint32_t OldVal, uint32_t NewVal, int Sz, int Off)
TEMU_API int temu_memoryMap(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj, uint32_t Flags)
void(* setAttr)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
Definition: Memory.h:51
User definable.
Definition: Memory.h:41
TEMU_API int temu_memoryReadPhys32(void *Obj, uint64_t Addr, uint32_t *Word)
TEMU_API int temu_memoryMapNamedIface(void *Obj, uint64_t Addr, uint64_t Len, void *MemObj, const char *IfaceName, uint32_t Flags)
int(* mapDeviceWithNamedIface)(void *Obj, uint64_t Addr, uint64_t Len, void *Device, const char *IfaceName, uint32_t Flags)
Definition: Memory.h:55
uint8_t temu_MemoryAttrs
Definition: Memory.h:44
Breakpoint set.
Definition: Memory.h:34
Multiple event upset / uncorrectable.
Definition: Memory.h:38
#define TEMU_API
Definition: Attributes.h:53
void(* clearAttr)(void *Obj, uint64_t Addr, uint64_t Len, temu_MemoryAttr Attr)
Definition: Memory.h:52