TEMU  3.0
The Terma Emulator
Register.h
Go to the documentation of this file.
1 #ifndef TEMU_REGISTER_H
2 #define TEMU_REGISTER_H
3 #include <stdint.h>
4 #include <stdlib.h>
7 #include "temu-c/Memory/Memory.h"
8 
9 /*
10  * EXPERIMENTAL API
11  * API Changes:
12  * 2019-07-09: Rework introspection API, no more temu_Field objects returned.
13  * Add index argument to set/get/read/write.
14  * 2018-06-11: Remove wr and rd arguments from temu_addField
15  * Replace the separate flag params with a flag bit field.
16  */
17 
18 // Registers are normal properties suitable for device registers (must
19 // be of an integer type), but have addtitional meta-data attached to
20 // them. Primarily you can associate fields with a register, a
21 // register field may even have individual accessors which can be
22 // invoked to set single bits.
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 #define TEMU_FIELD_WR (1 << 0) // Writeable field
29 #define TEMU_FIELD_WARM_RESET (1 << 1) // Field is subject to warm reset
30 
31 typedef struct {
32  const char *Name;
33  const char *Desc;
34  uint64_t Mask;
35  uint64_t ResetValue;
36  unsigned Writable : 1;
37  unsigned Resettable : 1;
38  unsigned ClearOnSet : 1;
40 
41 #define TEMU_FIELD_INFO_NULL ((temu_FieldInfo){NULL, NULL, 0, 0})
42 
43 typedef struct {
44  const char *Name;
45  const char *Desc;
46  size_t NumRegs;
47 
48  unsigned DeviceOffset;
49  unsigned Stride;
50  uint64_t ColdResetValue;
51 
52  uint64_t WarmResetMask;
53  uint64_t WarmResetValue;
54 
55  uint64_t ReadMask;
56  uint64_t WriteMask;
57 
58  size_t NumFields;
61 
62 typedef struct {
63  const char *Name;
64  const char *Desc;
65  size_t NumRegisters;
66  const char **RegNames;
68 
69 typedef struct {
71  const char **BankNames;
73 
74 
77 typedef struct temu_Field temu_Field;
78 
87  temu_MemAccessIface *MemAccessIface);
88 
89 
96 
123 temu_addRegister(temu_RegisterBank *Bank, const char *Name, int Offset,
124  temu_Type Typ, int Count, temu_PropWriter Wr,
125  temu_PropReader Rd, const char *Doc,
126  // Offset of register from device mapping (or bank mapping)
127  // in memory space
128  uint32_t DeviceOffset, uint32_t Stride);
129 
131 temu_addRegisterWithFields(temu_RegisterBank *Bank, const char *Name, int Offset,
132  temu_Type Typ, int Count, temu_PropWriter Wr,
133  temu_PropReader Rd, const char *Doc,
134  // Offset of register from device mapping (or
135  // bank mapping) in memory space
136  uint32_t DeviceOffset, uint32_t Stride,
137  temu_FieldInfo Fields[]);
138 
155 TEMU_API void temu_addField(temu_Register *R, const char *Name, uint64_t Mask,
156  uint64_t Reset, uint64_t Flags,
157  const char *Doc);
158 
159 
167  const char *Name);
168 
169 
179 
190 TEMU_API const temu_RegisterInfo * temu_getRegisterInfo(temu_Class *C, const char *RegName);
191 
193 temu_getRegisterBankInfo(temu_Class *C, const char *RegBankName);
194 
202  const char *Name);
203 
210 
217 
227 TEMU_API uint64_t temu_getFieldValue(temu_Object *Obj, const char *RegName, unsigned RegIdx,
228  const char *FieldName);
229 
239 TEMU_API uint64_t temu_readFieldValue(temu_Object *Obj, const char *RegName,
240  unsigned RegIdx, const char *FieldName);
241 
242 
253 TEMU_API int temu_setFieldValue(temu_Object *Obj, const char *RegName, unsigned RegIdx,
254  const char *FieldName, uint64_t Value);
255 
256 
267 TEMU_API int temu_writeFieldValue(temu_Object *Obj, const char *RegName, unsigned RegIdx,
268  const char *FieldName, uint64_t Value);
269 
279 
286 
293 
300 
301 #ifdef __cplusplus
302 } // extern c
303 #endif
304 
305 #endif /* ! TEMU_REGISTER_H */
uint64_t WarmResetMask
Definition: Register.h:52
size_t NumFields
Definition: Register.h:58
TEMU_API uint64_t temu_getRegisterWarmResetValue(temu_Register *Reg)
void(* temu_PropWriter)(void *Obj, temu_Propval Pv, int Idx)
Definition: Objsys.h:687
TEMU_API const temu_RegisterBankInfo * temu_getRegisterBankInfo(temu_Class *C, const char *RegBankName)
TEMU_API uint64_t temu_getRegisterColdResetValue(temu_Register *Reg)
unsigned DeviceOffset
Definition: Register.h:48
TEMU_API temu_Register * temu_addRegister(temu_RegisterBank *Bank, const char *Name, int Offset, temu_Type Typ, int Count, temu_PropWriter Wr, temu_PropReader Rd, const char *Doc, uint32_t DeviceOffset, uint32_t Stride)
const char * Desc
Definition: Register.h:64
Definition: Register.h:31
TEMU_API uint64_t temu_getRegisterWriteMask(temu_Register *Reg)
uint64_t Mask
Definition: Register.h:34
TEMU_API const temu_RegisterInfo * temu_getRegisterInfo(temu_Class *C, const char *RegName)
const char * Desc
Definition: Register.h:33
const char ** RegNames
Definition: Register.h:66
TEMU_API const temu_ModelRegInfo * temu_getModelRegisterBankInfo(temu_Class *C)
uint64_t ColdResetValue
Definition: Register.h:50
unsigned ClearOnSet
Definition: Register.h:38
TEMU_API const char * temu_getRegisterDocs(temu_Register *R)
size_t NumRegs
Definition: Register.h:46
TEMU_API const char * temu_getRegisterName(temu_Register *R)
TEMU_API int temu_setFieldValue(temu_Object *Obj, const char *RegName, unsigned RegIdx, const char *FieldName, uint64_t Value)
size_t NumRegisters
Definition: Register.h:65
TEMU_API uint64_t temu_getFieldValue(temu_Object *Obj, const char *RegName, unsigned RegIdx, const char *FieldName)
temu_Propval(* temu_PropReader)(void *Obj, int Idx)
Definition: Objsys.h:695
const char * Desc
Definition: Register.h:45
temu_Type
Definition: Objsys.h:282
TEMU_API temu_RegisterBank * temu_addRegisterBank(temu_Class *C, const char *Name, temu_MemAccessIface *MemAccessIface)
#define TEMU_API
Definition: Attributes.h:53
Definition: Memory.h:212
Definition: Objsys.h:435
unsigned Resettable
Definition: Register.h:37
TEMU_API temu_Register * temu_addRegisterWithFields(temu_RegisterBank *Bank, const char *Name, int Offset, temu_Type Typ, int Count, temu_PropWriter Wr, temu_PropReader Rd, const char *Doc, uint32_t DeviceOffset, uint32_t Stride, temu_FieldInfo Fields[])
Definition: Register.h:69
uint64_t ResetValue
Definition: Register.h:35
const char ** BankNames
Definition: Register.h:71
struct temu_Field temu_Field
Definition: Register.h:77
struct temu_RegisterBank temu_RegisterBank
Definition: Register.h:75
TEMU_API uint64_t temu_getRegisterReadMask(temu_Register *Reg)
uint64_t WriteMask
Definition: Register.h:56
Definition: Objsys.h:82
unsigned Writable
Definition: Register.h:36
const char * Name
Definition: Register.h:44
temu_FieldInfo * Field
Definition: Register.h:59
TEMU_API uint64_t temu_readFieldValue(temu_Object *Obj, const char *RegName, unsigned RegIdx, const char *FieldName)
struct temu_Register temu_Register
Definition: Register.h:76
uint64_t ReadMask
Definition: Register.h:55
const char * Name
Definition: Register.h:63
Definition: Register.h:62
TEMU_API int temu_writeFieldValue(temu_Object *Obj, const char *RegName, unsigned RegIdx, const char *FieldName, uint64_t Value)
unsigned Stride
Definition: Register.h:49
Definition: Register.h:43
const char * Name
Definition: Register.h:32
TEMU_API temu_Register * temu_getRegister(temu_RegisterBank *Bank, const char *Name)
TEMU_API void temu_addField(temu_Register *R, const char *Name, uint64_t Mask, uint64_t Reset, uint64_t Flags, const char *Doc)
size_t NumRegisterBanks
Definition: Register.h:70
TEMU_API temu_RegisterBank * temu_getRegisterBank(temu_Class *C, const char *Name)
TEMU_API const char * temu_getRegisterBankName(temu_RegisterBank *Bank)
uint64_t WarmResetValue
Definition: Register.h:53