1bf215546Sopenharmony_ci#ifndef __NVHW_QMD_H__ 2bf215546Sopenharmony_ci#define __NVHW_QMD_H__ 3bf215546Sopenharmony_ci#include <stdio.h> 4bf215546Sopenharmony_ci#include <stdint.h> 5bf215546Sopenharmony_ci#include "util/u_debug.h" 6bf215546Sopenharmony_ci#include "drf.h" 7bf215546Sopenharmony_ci 8bf215546Sopenharmony_ci#define NVQMD_ENUM_1(X,drf,v0) \ 9bf215546Sopenharmony_ci [drf##_##v0] = #v0 10bf215546Sopenharmony_ci#define NVQMD_ENUM_2(X,drf,v0,v1) \ 11bf215546Sopenharmony_ci [drf##_##v0] = #v0, \ 12bf215546Sopenharmony_ci [drf##_##v1] = #v1 13bf215546Sopenharmony_ci#define NVQMD_ENUM_3(X,drf,v0,v1,v2) \ 14bf215546Sopenharmony_ci [drf##_##v0] = #v0, \ 15bf215546Sopenharmony_ci [drf##_##v1] = #v1, \ 16bf215546Sopenharmony_ci [drf##_##v2] = #v2 17bf215546Sopenharmony_ci#define NVQMD_ENUM_8(X,drf,v0,v1,v2,v3,v4,v5,v6,v7) \ 18bf215546Sopenharmony_ci [drf##_##v0] = #v0, \ 19bf215546Sopenharmony_ci [drf##_##v1] = #v1, \ 20bf215546Sopenharmony_ci [drf##_##v2] = #v2, \ 21bf215546Sopenharmony_ci [drf##_##v3] = #v3, \ 22bf215546Sopenharmony_ci [drf##_##v4] = #v4, \ 23bf215546Sopenharmony_ci [drf##_##v5] = #v5, \ 24bf215546Sopenharmony_ci [drf##_##v6] = #v6, \ 25bf215546Sopenharmony_ci [drf##_##v7] = #v7 26bf215546Sopenharmony_ci 27bf215546Sopenharmony_ci#define NVQMD_ENUM_(X,_1,_2,_3,_4,_5,_6,_7,_8,_9,IMPL,...) IMPL 28bf215546Sopenharmony_ci#define NVQMD_ENUM(A...) NVQMD_ENUM_(X, ##A, NVQMD_ENUM_8, NVQMD_ENUM_7, \ 29bf215546Sopenharmony_ci NVQMD_ENUM_6, NVQMD_ENUM_5, \ 30bf215546Sopenharmony_ci NVQMD_ENUM_4, NVQMD_ENUM_3, \ 31bf215546Sopenharmony_ci NVQMD_ENUM_2, NVQMD_ENUM_1)(X, ##A) 32bf215546Sopenharmony_ci 33bf215546Sopenharmony_ci#define NVQMD_VAL_N(X,d,r,p,f,o) do { \ 34bf215546Sopenharmony_ci uint32_t val = NVVAL_MW_GET_X((p), d##_##r##_##f); \ 35bf215546Sopenharmony_ci debug_printf(" %-36s: "o"\n", #f, val); \ 36bf215546Sopenharmony_ci} while(0) 37bf215546Sopenharmony_ci#define NVQMD_VAL_I(X,d,r,p,f,i,o) do { \ 38bf215546Sopenharmony_ci uint32_t val = NVVAL_MW_GET_X((p), d##_##r##_##f(i)); \ 39bf215546Sopenharmony_ci char name[80]; \ 40bf215546Sopenharmony_ci snprintf(name, sizeof(name), "%s(%d)", #f, i); \ 41bf215546Sopenharmony_ci debug_printf(" %-36s: "o"\n", name, val); \ 42bf215546Sopenharmony_ci} while(0) 43bf215546Sopenharmony_ci#define NVQMD_VAL_(X,_1,_2,_3,_4,_5,_6,IMPL,...) IMPL 44bf215546Sopenharmony_ci#define NVQMD_VAL(A...) NVQMD_VAL_(X, ##A, NVQMD_VAL_I, NVQMD_VAL_N)(X, ##A) 45bf215546Sopenharmony_ci 46bf215546Sopenharmony_ci#define NVQMD_DEF(d,r,p,f,e...) do { \ 47bf215546Sopenharmony_ci static const char *ev[] = { NVQMD_ENUM(d##_##r##_##f,##e) }; \ 48bf215546Sopenharmony_ci uint32_t val = NVVAL_MW_GET((p), d, r, f); \ 49bf215546Sopenharmony_ci if (val < ARRAY_SIZE(ev) && ev[val]) \ 50bf215546Sopenharmony_ci debug_printf(" %-36s: %s\n", #f, ev[val]); \ 51bf215546Sopenharmony_ci else \ 52bf215546Sopenharmony_ci debug_printf(" %-36s: UNKNOWN 0x%x\n", #f, val); \ 53bf215546Sopenharmony_ci} while(0) 54bf215546Sopenharmony_ci#define NVQMD_IDX(d,r,p,f,i,e...) do { \ 55bf215546Sopenharmony_ci static const char *ev[] = { NVQMD_ENUM(d##_##r##_##f,##e) }; \ 56bf215546Sopenharmony_ci char name[80]; \ 57bf215546Sopenharmony_ci snprintf(name, sizeof(name), "%s(%d)", #f, i); \ 58bf215546Sopenharmony_ci uint32_t val = NVVAL_MW_GET((p), d, r, f, i); \ 59bf215546Sopenharmony_ci if (val < ARRAY_SIZE(ev) && ev[val]) \ 60bf215546Sopenharmony_ci debug_printf(" %-36s: %s\n", name, ev[val]); \ 61bf215546Sopenharmony_ci else \ 62bf215546Sopenharmony_ci debug_printf(" %-36s: UNKNOWN 0x%x\n", name, val); \ 63bf215546Sopenharmony_ci} while(0) 64bf215546Sopenharmony_ci 65bf215546Sopenharmony_civoid NVA0C0QmdDump_V00_06(uint32_t *); 66bf215546Sopenharmony_civoid NVC0C0QmdDump_V02_01(uint32_t *); 67bf215546Sopenharmony_civoid NVC3C0QmdDump_V02_02(uint32_t *); 68bf215546Sopenharmony_ci#endif 69