freedreno/decode: Add enum value decoding
Signed-off-by: Rob Clark <rob.clark@oss.qualcomm.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36426>
This commit is contained in:
parent
c8f9990733
commit
d8840db682
6 changed files with 27 additions and 0 deletions
|
|
@ -817,6 +817,12 @@ regbase(const char *name)
|
|||
return rnn_regbase(rnn, name);
|
||||
}
|
||||
|
||||
int
|
||||
enumval(const char *enumname, const char *enumval)
|
||||
{
|
||||
return rnn_enumval(rnn, enumname, enumval);
|
||||
}
|
||||
|
||||
static int
|
||||
endswith(uint32_t regbase, const char *suffix)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -102,6 +102,7 @@ bool regacc_push(struct regacc *regacc, uint32_t regbase, uint32_t dword);
|
|||
void printl(int lvl, const char *fmt, ...);
|
||||
const char *pktname(unsigned opc);
|
||||
uint32_t regbase(const char *name);
|
||||
int enumval(const char *enumname, const char *enumval);
|
||||
const char *regname(uint32_t regbase, int color);
|
||||
bool reg_written(uint32_t regbase);
|
||||
uint32_t reg_lastval(uint32_t regbase);
|
||||
|
|
|
|||
|
|
@ -150,6 +150,12 @@ rnn_enumname(struct rnn *rnn, const char *name, uint32_t val)
|
|||
return rnndec_decode_enum(rnn->vc, name, val);
|
||||
}
|
||||
|
||||
int
|
||||
rnn_enumval(struct rnn *rnn, const char *enumname, const char *enumval)
|
||||
{
|
||||
return rnndec_decode_enum_value(rnn->vc, enumname, enumval);
|
||||
}
|
||||
|
||||
static struct rnndelem *
|
||||
regelem(struct rnndomain *domain, const char *name)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ const char *rnn_regname(struct rnn *rnn, uint32_t regbase, int color);
|
|||
struct rnndecaddrinfo *rnn_reginfo(struct rnn *rnn, uint32_t regbase);
|
||||
void rnn_reginfo_free(struct rnndecaddrinfo *info);
|
||||
const char *rnn_enumname(struct rnn *rnn, const char *name, uint32_t val);
|
||||
int rnn_enumval(struct rnn *rnn, const char *enumname, const char *enumval);
|
||||
|
||||
struct rnndelem *rnn_regelem(struct rnn *rnn, const char *name);
|
||||
struct rnndelem *rnn_regoff(struct rnn *rnn, uint32_t offset);
|
||||
|
|
|
|||
|
|
@ -125,6 +125,18 @@ const char *rnndec_decode_enum(struct rnndeccontext *ctx, const char *enumname,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int rnndec_decode_enum_value(struct rnndeccontext *ctx, const char *enumname, const char *enumval)
|
||||
{
|
||||
struct rnnenum *en = rnn_findenum (ctx->db, enumname);
|
||||
if (en) {
|
||||
for (int i = 0; i < en->valsnum; i++)
|
||||
if (rnndec_varmatch(ctx, &en->vals[i]->varinfo) &&
|
||||
en->vals[i]->valvalid && !strcmp(en->vals[i]->name, enumval))
|
||||
return en->vals[i]->value;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* The name UNK%u is used as a placeholder for bitfields that exist but
|
||||
* have an unknown function.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ struct rnndeccontext *rnndec_newcontext(struct rnndb *db);
|
|||
int rnndec_varadd(struct rnndeccontext *ctx, char *varset, const char *variant);
|
||||
int rnndec_varmatch(struct rnndeccontext *ctx, struct rnnvarinfo *vi);
|
||||
const char *rnndec_decode_enum(struct rnndeccontext *ctx, const char *enumname, uint64_t enumval);
|
||||
int rnndec_decode_enum_value(struct rnndeccontext *ctx, const char *enumname, const char *enumval);
|
||||
char *rnndec_decodeval(struct rnndeccontext *ctx, struct rnntypeinfo *ti, uint64_t value);
|
||||
int rnndec_checkaddr(struct rnndeccontext *ctx, struct rnndomain *domain, uint64_t addr, int write);
|
||||
struct rnndecaddrinfo *rnndec_decodeaddr(struct rnndeccontext *ctx, struct rnndomain *domain, uint64_t addr, int write);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue