TEMU  2
The Terma Emulator
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
Register.h
Go to the documentation of this file.
1 #ifndef TEMU_REGISTER_H
2 #define TEMU_REGISTER_H
3 #include <stdint.h>
6 #include "temu-c/Memory/Memory.h"
7 
8 /*
9  * EXPERIMENTAL API
10  * API Changes:
11  * 2018-06-11: Remove wr and rd arguments from temu_addField
12  * Replace the separate flag params with a flag bit field.
13  */
14 
15 // Registers are normal properties suitable for device registers (must
16 // be of an integer type), but have addtitional meta-data attached to
17 // them. Primarily you can associate fields with a register, a
18 // register field may even have individual accessors which can be
19 // invoked to set single bits.
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
27 typedef struct temu_Field temu_Field;
28 
37 temu_addRegisterBank(temu_Class *C, const char *Name,
38  temu_MemAccessIface *MemAccessIface);
39 
46 
73 temu_addRegister(temu_RegisterBank *Bank, const char *Name, int Offset,
74  temu_Type Typ, int Count, temu_PropWriter Wr,
75  temu_PropReader Rd, const char *Doc,
76  // Offset of register from device mapping (or bank mapping)
77  // in memory space
78  uint32_t DeviceOffset, uint32_t Stride);
79 
80 #define TEMU_FIELD_WR (1 << 0)
81 #define TEMU_FIELD_WARM_RESET (1 << 1)
82 
100 TEMU_API void temu_addField(temu_Register *R, const char *Name, uint64_t Mask,
101  uint64_t ColdReset, uint64_t WarmReset,
102  uint64_t Flags, const char *Doc);
103 
111  const char *Name);
112 
121 TEMU_API int temu_getRegisterBanks(temu_Class *C, unsigned Idx, unsigned Length,
122  temu_RegisterBank **Banks);
123 
131  const char *Name);
132 
141 TEMU_API int temu_getRegisters(temu_RegisterBank *Bank, unsigned Idx,
142  unsigned Length, temu_Register **Regs);
143 
150 
157 
164 TEMU_API temu_Field *temu_getField(temu_Register *R, const char *Name);
165 
174 TEMU_API int temu_getFields(temu_Register *R, unsigned Idx, unsigned Length,
175  temu_Field **Fields);
176 
182 TEMU_API const char *temu_getFieldName(temu_Field *R);
183 
189 TEMU_API const char *temu_getFieldDocs(temu_Field *R);
190 
196 TEMU_API uint64_t temu_getFieldMask(temu_Field *Field);
197 
205 TEMU_API uint64_t temu_getFieldValue(void *Obj, const char *RegName,
206  const char *FieldName);
207 
216 TEMU_API int temu_setFieldValue(void *Obj, const char *RegName,
217  const char *FieldName, uint64_t Value);
218 
225 TEMU_API int temu_writeFieldValue(void *Obj, const char *RegName,
226  const char *FieldName, uint64_t Value);
227 
237 
244 
251 
258 
259 #ifdef __cplusplus
260 } // extern c
261 #endif
262 
263 #endif /* ! TEMU_REGISTER_H */
TEMU_API uint64_t temu_getFieldMask(temu_Field *Field)
temu_getFieldMask Get field mask
temu_Type
Definition: Objsys.h:221
void(* temu_PropWriter)(void *Obj, temu_Propval Pv, int Idx)
Definition: Objsys.h:547
TEMU_API int temu_getRegisterBanks(temu_Class *C, unsigned Idx, unsigned Length, temu_RegisterBank **Banks)
temu_getRegisterBanks Get all register banks of a class
TEMU_API uint64_t temu_getRegisterWriteMask(temu_Register *Reg)
temu_getRegisterWriteMask Get the current write mask of a register
TEMU_API int temu_getFields(temu_Register *R, unsigned Idx, unsigned Length, temu_Field **Fields)
temu_getFields Get all fields of a register
TEMU_API uint64_t temu_getFieldValue(void *Obj, const char *RegName, const char *FieldName)
temu_getFieldValue Retrieve the value of a field in a register
TEMU_API const char * temu_getFieldDocs(temu_Field *R)
temu_getFieldDocs Get the documentation of a field as a C-string
TEMU_API temu_Field * temu_getField(temu_Register *R, const char *Name)
temu_getField Get a field of a register
TEMU_API temu_Register * temu_getRegister(temu_RegisterBank *Bank, const char *Name)
temu_getRegister Get a register from a register bank by name
TEMU_API uint64_t temu_getRegisterWarmResetValue(temu_Register *Reg)
void temu_Class
Definition: Objsys.h:58
struct temu_Field temu_Field
Definition: Register.h:27
TEMU_API temu_RegisterBank * temu_getRegisterBank(temu_Class *C, const char *Name)
temu_getRegisterBank Get a register bank from a class by name
TEMU_API uint64_t temu_getRegisterReadMask(temu_Register *Reg)
temu_getRegisterReadMask Get the current read mask of a register
TEMU_API int temu_getRegisters(temu_RegisterBank *Bank, unsigned Idx, unsigned Length, temu_Register **Regs)
temu_getRegisters Get all or chunk of registers from a bank
TEMU_API const char * temu_getRegisterDocs(temu_Register *R)
temu_getRegisterDocs Get the documentation of a register as a string
TEMU_API uint64_t temu_getRegisterColdResetValue(temu_Register *Reg)
struct temu_Register temu_Register
Definition: Register.h:26
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)
temu_Propval(* temu_PropReader)(void *Obj, int Idx)
Definition: Objsys.h:555
TEMU_API int temu_setFieldValue(void *Obj, const char *RegName, const char *FieldName, uint64_t Value)
temu_setFieldValue Set a field&#39;s value in a register
TEMU_API const char * temu_getRegisterName(temu_Register *R)
temu_getRegisterName Retrieve register name from pointer
TEMU_API temu_RegisterBank * temu_addRegisterBank(temu_Class *C, const char *Name, temu_MemAccessIface *MemAccessIface)
temu_addRegisterBank Adds a register bank to a T-EMU class
TEMU_API int temu_writeFieldValue(void *Obj, const char *RegName, const char *FieldName, uint64_t Value)
temu_writeFieldValue Set a field&#39;s value in a register with side-effects
TEMU_API void temu_addField(temu_Register *R, const char *Name, uint64_t Mask, uint64_t ColdReset, uint64_t WarmReset, uint64_t Flags, const char *Doc)
struct temu_RegisterBank temu_RegisterBank
Definition: Register.h:25
TEMU_API const char * temu_getRegisterBankName(temu_RegisterBank *Bank)
temu_getRegisterBankName Retrieves the register bank name from its object
#define TEMU_API
Definition: Attributes.h:53
TEMU_API const char * temu_getFieldName(temu_Field *R)
temu_getFieldName Get the name of a field from a field object