1
0
Files
irix-657m-src/stand/arcs/include/hwreg.h
2022-09-29 17:59:04 +03:00

87 lines
2.2 KiB
C

#ifndef _HWREG_H_
#define _HWREG_H_
/*
* Access mode
*/
typedef struct hwreg_accmode_s hwreg_accmode_t;
struct hwreg_accmode_s {
char *name;
char *desc;
};
/*
* Register field
*/
typedef struct hwreg_field_s {
__uint32_t nameoff; /* Field name */
uchar_t topbit; /* Field's msbit position */
uchar_t botbit; /* Field's lsbit position */
uchar_t accmode; /* Access mode RO, WO, or RW */
uchar_t reset; /* Flag whether set upon reset */
__uint64_t resetval; /* System reset initial value */
} hwreg_field_t;
/*
* Register
*/
typedef struct hwreg_s {
#ifdef HWREG_COMPILE
char *name; /* Register name */
#else
__uint32_t nameoff; /* Register name */
#endif
__uint32_t noteoff; /* Informational note */
__uint64_t address; /* Address of register */
ushort_t sfield; /* Start field index */
uchar_t nfield; /* Number of fields */
} hwreg_t;
typedef struct hwreg_set_s {
hwreg_t *regs;
hwreg_field_t *fields;
char *strtab;
int regcount;
} hwreg_set_t;
/*
* Externs
*/
extern char *hwreg_upcase(char *dst, char *src);
extern void hwreg_name2c(char *dst, char *src);
extern void hwreg_getbits(char *s,
uchar_t *topbit, uchar_t *botbit);
extern __int64_t hwreg_ctoi(char *s, char **end_s);
extern hwreg_t *hwreg_lookup_name(hwreg_set_t *regset,
char *name, int partial);
extern hwreg_t *hwreg_lookup_addr(hwreg_set_t *regset,
__uint64_t addr);
extern hwreg_field_t *hwreg_lookup_field(hwreg_set_t *regset, hwreg_t *r,
char *name, int partial);
extern __uint64_t hwreg_reset_default(hwreg_set_t *regset, hwreg_t *r);
extern __uint64_t hwreg_encode_field(hwreg_set_t *regset, hwreg_t *r,
char *asst,
int (*prf)(const char *fmt, ...));
extern __uint64_t hwreg_encode(hwreg_set_t *regset, hwreg_t *r,
char *assts,
int (*prf)(const char *fmt, ...));
extern void hwreg_decode(hwreg_set_t *regset, hwreg_t *r,
int shortform, int showreset,
int base, __uint64_t value,
int (*prf)(const char *fmt, ...));
extern hwreg_accmode_t hwreg_accmodes[];
#endif /* _HWREG_H_ */