TEMU  4.4
The Terma Emulator
Register.h File Reference
#include <stdint.h>
#include <stdlib.h>
#include "temu-c/Support/Attributes.h"
#include "temu-c/Support/Objsys.h"
#include "temu-c/Memory/Memory.h"
Include dependency graph for Register.h:

Go to the source code of this file.

Data Structures

struct  temu_FieldInfo
 
struct  temu_RegisterInfo
 
struct  temu_RegisterBankInfo
 
struct  temu_ModelRegInfo
 

Macros

#define TEMU_FIELD_WR   (1 << 0)
 
#define TEMU_FIELD_WARM_RESET   (1 << 1)
 
#define TEMU_FIELD_INFO_NULL   ((temu_FieldInfo){NULL, NULL, 0, 0})
 

Typedefs

typedef struct temu_RegisterBank temu_RegisterBank
 
typedef struct temu_Register temu_Register
 
typedef struct temu_Field temu_Field
 

Functions

TEMU_API temu_RegisterBanktemu_addRegisterBank (temu_Class *C, const char *Name, temu_MemAccessIface *MemAccessIface)
 
const TEMU_API char * temu_getRegisterBankName (temu_RegisterBank *Bank)
 
TEMU_API temu_Registertemu_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_API temu_Registertemu_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[])
 
TEMU_API void temu_addField (temu_Register *R, const char *Name, uint64_t Mask, uint64_t Reset, uint64_t Flags, const char *Doc)
 
TEMU_API temu_RegisterBanktemu_getRegisterBank (temu_Class *C, const char *Name)
 
const TEMU_API temu_ModelRegInfotemu_getModelRegisterBankInfo (temu_Class *C)
 
const TEMU_API temu_RegisterInfotemu_getRegisterInfo (temu_Class *C, const char *RegName)
 
const TEMU_API temu_RegisterBankInfotemu_getRegisterBankInfo (temu_Class *C, const char *RegBankName)
 
TEMU_API temu_Registertemu_getRegister (temu_RegisterBank *Bank, const char *Name)
 
const TEMU_API char * temu_getRegisterName (temu_Register *R)
 
const TEMU_API char * temu_getRegisterDocs (temu_Register *R)
 
TEMU_API uint64_t temu_getFieldValue (temu_Object *Obj, const char *RegName, unsigned RegIdx, const char *FieldName)
 
TEMU_API uint64_t temu_readFieldValue (temu_Object *Obj, const char *RegName, unsigned RegIdx, const char *FieldName)
 
TEMU_API int temu_setFieldValue (temu_Object *Obj, const char *RegName, unsigned RegIdx, const char *FieldName, uint64_t Value)
 
TEMU_API int temu_writeFieldValue (temu_Object *Obj, const char *RegName, unsigned RegIdx, const char *FieldName, uint64_t Value)
 
TEMU_API uint64_t temu_getRegisterColdResetValue (temu_Register *Reg)
 
TEMU_API uint64_t temu_getRegisterWarmResetValue (temu_Register *Reg)
 
TEMU_API uint64_t temu_getRegisterWriteMask (temu_Register *Reg)
 
TEMU_API uint64_t temu_getRegisterReadMask (temu_Register *Reg)
 

Macro Definition Documentation

◆ TEMU_FIELD_INFO_NULL

#define TEMU_FIELD_INFO_NULL   ((temu_FieldInfo){NULL, NULL, 0, 0})

◆ TEMU_FIELD_WARM_RESET

#define TEMU_FIELD_WARM_RESET   (1 << 1)

◆ TEMU_FIELD_WR

#define TEMU_FIELD_WR   (1 << 0)

Typedef Documentation

◆ temu_Field

typedef struct temu_Field temu_Field

◆ temu_Register

typedef struct temu_Register temu_Register

◆ temu_RegisterBank

Function Documentation

◆ temu_addField()

TEMU_API void temu_addField ( temu_Register R,
const char *  Name,
uint64_t  Mask,
uint64_t  Reset,
uint64_t  Flags,
const char *  Doc 
)

Add field to meta register

Adds a field to the meta register.

Parameters
RMeta register pointer.
NameName of of field (must be a C-compatible identifier)
MaskMask identifying the bits in the register corresponding to the field. Mask must contain consecutive bits only.
ResetReset value.
FlagsFlags used: TEMU_FIELD_WR means field is writable, TEMU_FIELD_WARM_RESET means the field is subject to reset actions also on warm resets.
DocDocumentation string

◆ temu_addRegister()

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 
)

Add register property to class

Adds a register with the given name to a class. It returns a reference to a meta register which can be used to add fields.

Parameters
BankRegister bank to add register to
NameName of register (must be a valid C-identifier)
OffsetOffset to storage element in the device struct.
TypType of register, note that registers are limited to unsigned integer types with fixed width.
CountNumber of registers (normally 1)
WrRegister write function
RdRegister read function
DocDocumentation string for register.
DeviceOffsetOffset of register in memory system. This is the same offset that is used in the memory transaction interface.
StrideIn case the register is an array of registers, then the stride is used for the offset in physical address space between each register.
Returns
A reference to a meta register which can be used to add fields.

◆ temu_addRegisterBank()

TEMU_API temu_RegisterBank* temu_addRegisterBank ( temu_Class C,
const char *  Name,
temu_MemAccessIface MemAccessIface 
)

Adds a register bank to a TEMU class

Parameters
CPointer to the TEMU class
NameName of the register
MemAccessIfacePointer to the register memory access interface
Returns
Pointer to the new register bank

◆ temu_addRegisterWithFields()

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[] 
)

◆ temu_getFieldValue()

TEMU_API uint64_t temu_getFieldValue ( temu_Object Obj,
const char *  RegName,
unsigned  RegIdx,
const char *  FieldName 
)

Retrieve the value of a field in a register

Parameters
ObjThe object of the class the has the register
RegNameRegister name
RegIdxRegister index
FieldNameField name
Returns
The value of the field

◆ temu_getModelRegisterBankInfo()

const TEMU_API temu_ModelRegInfo* temu_getModelRegisterBankInfo ( temu_Class C)

Get list of class register banks The returned object is thread local. It will be destroyed on the next call in the current thread.

Parameters
CThe class object.
Returns
Thread local mobel reg info object with a list of all register banks.

◆ temu_getRegister()

TEMU_API temu_Register* temu_getRegister ( temu_RegisterBank Bank,
const char *  Name 
)

Get a register from a register bank by name

Parameters
BankPointer to the register bank object
NameName of the register
Returns
Pointer to the register object

◆ temu_getRegisterBank()

TEMU_API temu_RegisterBank* temu_getRegisterBank ( temu_Class C,
const char *  Name 
)

Get a register bank from a class by name

Parameters
CPointer to the TEMU class
NameName of the register bank
Returns
Pointer to the register bank

◆ temu_getRegisterBankInfo()

const TEMU_API temu_RegisterBankInfo* temu_getRegisterBankInfo ( temu_Class C,
const char *  RegBankName 
)

◆ temu_getRegisterBankName()

const TEMU_API char* temu_getRegisterBankName ( temu_RegisterBank Bank)

Retrieves the register bank name from its object

Parameters
BankPointer to the register bank name
Returns
Bank name as a C-string

◆ temu_getRegisterColdResetValue()

TEMU_API uint64_t temu_getRegisterColdResetValue ( temu_Register Reg)

Returns the cold reset value of the register (computed from the field info data). Cold reset is also known as a hard reset, and implies that the power has been off for some time.

Parameters
RegPointer to the register
Returns
The cold reset value

◆ temu_getRegisterDocs()

const TEMU_API char* temu_getRegisterDocs ( temu_Register R)

Get the documentation of a register as a string

Parameters
RPointer to the register
Returns
The documentation of the register as a C-string

◆ temu_getRegisterInfo()

const TEMU_API temu_RegisterInfo* temu_getRegisterInfo ( temu_Class C,
const char *  RegName 
)

Get register info for named register The returned object is thread local. It will be destroyed on the next call in the current thread.

Parameters
CThe class object.
RegNameRegister name.
Returns
Thread local register info object.

◆ temu_getRegisterName()

const TEMU_API char* temu_getRegisterName ( temu_Register R)

Retrieve register name from pointer

Parameters
RPointer to the register
Returns
The name of the register

◆ temu_getRegisterReadMask()

TEMU_API uint64_t temu_getRegisterReadMask ( temu_Register Reg)

Get the current read mask of a register

Parameters
RegPointer to the register
Returns
The value of the mask

◆ temu_getRegisterWarmResetValue()

TEMU_API uint64_t temu_getRegisterWarmResetValue ( temu_Register Reg)

Returns the warm reset value of the register

Parameters
RegPointer to the register
Returns
The warm reset value

◆ temu_getRegisterWriteMask()

TEMU_API uint64_t temu_getRegisterWriteMask ( temu_Register Reg)

Get the current write mask of a register

Parameters
RegPointer to the register
Returns
The value of the mask

◆ temu_readFieldValue()

TEMU_API uint64_t temu_readFieldValue ( temu_Object Obj,
const char *  RegName,
unsigned  RegIdx,
const char *  FieldName 
)

Retrieve the value of a field in a register with side-effects.

Parameters
ObjThe object of the class the has the register
RegNameRegister name
RegIdxRegister index
FieldNameField name
Returns
The value of the field

◆ temu_setFieldValue()

TEMU_API int temu_setFieldValue ( temu_Object Obj,
const char *  RegName,
unsigned  RegIdx,
const char *  FieldName,
uint64_t  Value 
)

Set a field's value in a register

Parameters
ObjThe object that contains the register
RegNameRegister name
RegIdxRegister index
FieldNameField name
ValueThe value to be set
Returns
zero on success, otherwise non-zero value

◆ temu_writeFieldValue()

TEMU_API int temu_writeFieldValue ( temu_Object Obj,
const char *  RegName,
unsigned  RegIdx,
const char *  FieldName,
uint64_t  Value 
)

Set a field's value in a register with side-effects

Parameters
ObjThe object that contains the register
RegNameRegister name
RegIdxRegister index
FieldNameField name
ValueThe value to be set
Returns
zero on success, otherwise non-zero value