5
#include "util/u_debug.h"
8
#define NVQMD_ENUM_1(X,drf,v0) \
10
#define NVQMD_ENUM_2(X,drf,v0,v1) \
13
#define NVQMD_ENUM_3(X,drf,v0,v1,v2) \
17
#define NVQMD_ENUM_8(X,drf,v0,v1,v2,v3,v4,v5,v6,v7) \
27
#define NVQMD_ENUM_(X,_1,_2,_3,_4,_5,_6,_7,_8,_9,IMPL,...) IMPL
28
#define NVQMD_ENUM(A...) NVQMD_ENUM_(X, ##A, NVQMD_ENUM_8, NVQMD_ENUM_7, \
29
NVQMD_ENUM_6, NVQMD_ENUM_5, \
30
NVQMD_ENUM_4, NVQMD_ENUM_3, \
31
NVQMD_ENUM_2, NVQMD_ENUM_1)(X, ##A)
33
#define NVQMD_VAL_N(X,d,r,p,f,o) do { \
34
uint32_t val = NVVAL_MW_GET_X((p), d##_##r##_##f); \
35
debug_printf(" %-36s: "o"\n", #f, val); \
37
#define NVQMD_VAL_I(X,d,r,p,f,i,o) do { \
38
uint32_t val = NVVAL_MW_GET_X((p), d##_##r##_##f(i)); \
40
snprintf(name, sizeof(name), "%s(%d)", #f, i); \
41
debug_printf(" %-36s: "o"\n", name, val); \
43
#define NVQMD_VAL_(X,_1,_2,_3,_4,_5,_6,IMPL,...) IMPL
44
#define NVQMD_VAL(A...) NVQMD_VAL_(X, ##A, NVQMD_VAL_I, NVQMD_VAL_N)(X, ##A)
46
#define NVQMD_DEF(d,r,p,f,e...) do { \
47
static const char *ev[] = { NVQMD_ENUM(d##_##r##_##f,##e) }; \
48
uint32_t val = NVVAL_MW_GET((p), d, r, f); \
49
if (val < ARRAY_SIZE(ev) && ev[val]) \
50
debug_printf(" %-36s: %s\n", #f, ev[val]); \
52
debug_printf(" %-36s: UNKNOWN 0x%x\n", #f, val); \
54
#define NVQMD_IDX(d,r,p,f,i,e...) do { \
55
static const char *ev[] = { NVQMD_ENUM(d##_##r##_##f,##e) }; \
57
snprintf(name, sizeof(name), "%s(%d)", #f, i); \
58
uint32_t val = NVVAL_MW_GET((p), d, r, f, i); \
59
if (val < ARRAY_SIZE(ev) && ev[val]) \
60
debug_printf(" %-36s: %s\n", name, ev[val]); \
62
debug_printf(" %-36s: UNKNOWN 0x%x\n", name, val); \
65
void NVA0C0QmdDump_V00_06(uint32_t *);
66
void NVC0C0QmdDump_V02_01(uint32_t *);
67
void NVC3C0QmdDump_V02_02(uint32_t *);