drm/nouveau: add nouveau_enum_find() util function
authorBen Skeggs <bskeggs@redhat.com>
Mon, 7 Mar 2011 22:39:43 +0000 (08:39 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Mon, 14 Mar 2011 06:31:50 +0000 (16:31 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_util.c
drivers/gpu/drm/nouveau/nouveau_util.h
drivers/gpu/drm/nouveau/nv50_graph.c

index fbe0fb13bc1e05ad4995e7ab3be67e6dce1a5e0f..e51b51503baa0c9ee7ee417116b9e7145c55f2b7 100644 (file)
@@ -47,18 +47,27 @@ nouveau_bitfield_print(const struct nouveau_bitfield *bf, u32 value)
                printk(" (unknown bits 0x%08x)", value);
 }
 
-void
-nouveau_enum_print(const struct nouveau_enum *en, u32 value)
+const struct nouveau_enum *
+nouveau_enum_find(const struct nouveau_enum *en, u32 value)
 {
        while (en->name) {
-               if (value == en->value) {
-                       printk("%s", en->name);
-                       return;
-               }
-
+               if (en->value == value)
+                       return en;
                en++;
        }
 
+       return NULL;
+}
+
+void
+nouveau_enum_print(const struct nouveau_enum *en, u32 value)
+{
+       en = nouveau_enum_find(en, value);
+       if (en) {
+               printk("%s", en->name);
+               return;
+       }
+
        printk("(unknown enum 0x%08x)", value);
 }
 
index d9ceaea26f4bcf86835282eb752630d1a1ee65af..b97719fbb739ec53944b8acd95c902eea70419d3 100644 (file)
@@ -36,10 +36,14 @@ struct nouveau_bitfield {
 struct nouveau_enum {
        u32 value;
        const char *name;
+       void *data;
 };
 
 void nouveau_bitfield_print(const struct nouveau_bitfield *, u32 value);
 void nouveau_enum_print(const struct nouveau_enum *, u32 value);
+const struct nouveau_enum *
+nouveau_enum_find(const struct nouveau_enum *, u32 value);
+
 int nouveau_ratelimit(void);
 
 #endif
index e1267a1f6d10aa8a90a3f642863970eccf4d24a7..a8be5184477a6189714c8985e8bdacc143de1d95 100644 (file)
@@ -550,11 +550,11 @@ nv86_graph_tlb_flush(struct drm_device *dev)
 
 static struct nouveau_enum nv50_mp_exec_error_names[] =
 {
-       { 3, "STACK_UNDERFLOW" },
-       { 4, "QUADON_ACTIVE" },
-       { 8, "TIMEOUT" },
-       { 0x10, "INVALID_OPCODE" },
-       { 0x40, "BREAKPOINT" },
+       { 3, "STACK_UNDERFLOW", NULL },
+       { 4, "QUADON_ACTIVE", NULL },
+       { 8, "TIMEOUT", NULL },
+       { 0x10, "INVALID_OPCODE", NULL },
+       { 0x40, "BREAKPOINT", NULL },
        {}
 };
 
@@ -582,47 +582,47 @@ static struct nouveau_bitfield nv50_graph_trap_ccache[] = {
 
 /* There must be a *lot* of these. Will take some time to gather them up. */
 struct nouveau_enum nv50_data_error_names[] = {
-       { 0x00000003, "INVALID_QUERY_OR_TEXTURE" },
-       { 0x00000004, "INVALID_VALUE" },
-       { 0x00000005, "INVALID_ENUM" },
-       { 0x00000008, "INVALID_OBJECT" },
-       { 0x00000009, "READ_ONLY_OBJECT" },
-       { 0x0000000a, "SUPERVISOR_OBJECT" },
-       { 0x0000000b, "INVALID_ADDRESS_ALIGNMENT" },
-       { 0x0000000c, "INVALID_BITFIELD" },
-       { 0x0000000d, "BEGIN_END_ACTIVE" },
-       { 0x0000000e, "SEMANTIC_COLOR_BACK_OVER_LIMIT" },
-       { 0x0000000f, "VIEWPORT_ID_NEEDS_GP" },
-       { 0x00000010, "RT_DOUBLE_BIND" },
-       { 0x00000011, "RT_TYPES_MISMATCH" },
-       { 0x00000012, "RT_LINEAR_WITH_ZETA" },
-       { 0x00000015, "FP_TOO_FEW_REGS" },
-       { 0x00000016, "ZETA_FORMAT_CSAA_MISMATCH" },
-       { 0x00000017, "RT_LINEAR_WITH_MSAA" },
-       { 0x00000018, "FP_INTERPOLANT_START_OVER_LIMIT" },
-       { 0x00000019, "SEMANTIC_LAYER_OVER_LIMIT" },
-       { 0x0000001a, "RT_INVALID_ALIGNMENT" },
-       { 0x0000001b, "SAMPLER_OVER_LIMIT" },
-       { 0x0000001c, "TEXTURE_OVER_LIMIT" },
-       { 0x0000001e, "GP_TOO_MANY_OUTPUTS" },
-       { 0x0000001f, "RT_BPP128_WITH_MS8" },
-       { 0x00000021, "Z_OUT_OF_BOUNDS" },
-       { 0x00000023, "XY_OUT_OF_BOUNDS" },
-       { 0x00000027, "CP_MORE_PARAMS_THAN_SHARED" },
-       { 0x00000028, "CP_NO_REG_SPACE_STRIPED" },
-       { 0x00000029, "CP_NO_REG_SPACE_PACKED" },
-       { 0x0000002a, "CP_NOT_ENOUGH_WARPS" },
-       { 0x0000002b, "CP_BLOCK_SIZE_MISMATCH" },
-       { 0x0000002c, "CP_NOT_ENOUGH_LOCAL_WARPS" },
-       { 0x0000002d, "CP_NOT_ENOUGH_STACK_WARPS" },
-       { 0x0000002e, "CP_NO_BLOCKDIM_LATCH" },
-       { 0x00000031, "ENG2D_FORMAT_MISMATCH" },
-       { 0x0000003f, "PRIMITIVE_ID_NEEDS_GP" },
-       { 0x00000044, "SEMANTIC_VIEWPORT_OVER_LIMIT" },
-       { 0x00000045, "SEMANTIC_COLOR_FRONT_OVER_LIMIT" },
-       { 0x00000046, "LAYER_ID_NEEDS_GP" },
-       { 0x00000047, "SEMANTIC_CLIP_OVER_LIMIT" },
-       { 0x00000048, "SEMANTIC_PTSZ_OVER_LIMIT" },
+       { 0x00000003, "INVALID_QUERY_OR_TEXTURE", NULL },
+       { 0x00000004, "INVALID_VALUE", NULL },
+       { 0x00000005, "INVALID_ENUM", NULL },
+       { 0x00000008, "INVALID_OBJECT", NULL },
+       { 0x00000009, "READ_ONLY_OBJECT", NULL },
+       { 0x0000000a, "SUPERVISOR_OBJECT", NULL },
+       { 0x0000000b, "INVALID_ADDRESS_ALIGNMENT", NULL },
+       { 0x0000000c, "INVALID_BITFIELD", NULL },
+       { 0x0000000d, "BEGIN_END_ACTIVE", NULL },
+       { 0x0000000e, "SEMANTIC_COLOR_BACK_OVER_LIMIT", NULL },
+       { 0x0000000f, "VIEWPORT_ID_NEEDS_GP", NULL },
+       { 0x00000010, "RT_DOUBLE_BIND", NULL },
+       { 0x00000011, "RT_TYPES_MISMATCH", NULL },
+       { 0x00000012, "RT_LINEAR_WITH_ZETA", NULL },
+       { 0x00000015, "FP_TOO_FEW_REGS", NULL },
+       { 0x00000016, "ZETA_FORMAT_CSAA_MISMATCH", NULL },
+       { 0x00000017, "RT_LINEAR_WITH_MSAA", NULL },
+       { 0x00000018, "FP_INTERPOLANT_START_OVER_LIMIT", NULL },
+       { 0x00000019, "SEMANTIC_LAYER_OVER_LIMIT", NULL },
+       { 0x0000001a, "RT_INVALID_ALIGNMENT", NULL },
+       { 0x0000001b, "SAMPLER_OVER_LIMIT", NULL },
+       { 0x0000001c, "TEXTURE_OVER_LIMIT", NULL },
+       { 0x0000001e, "GP_TOO_MANY_OUTPUTS", NULL },
+       { 0x0000001f, "RT_BPP128_WITH_MS8", NULL },
+       { 0x00000021, "Z_OUT_OF_BOUNDS", NULL },
+       { 0x00000023, "XY_OUT_OF_BOUNDS", NULL },
+       { 0x00000027, "CP_MORE_PARAMS_THAN_SHARED", NULL },
+       { 0x00000028, "CP_NO_REG_SPACE_STRIPED", NULL },
+       { 0x00000029, "CP_NO_REG_SPACE_PACKED", NULL },
+       { 0x0000002a, "CP_NOT_ENOUGH_WARPS", NULL },
+       { 0x0000002b, "CP_BLOCK_SIZE_MISMATCH", NULL },
+       { 0x0000002c, "CP_NOT_ENOUGH_LOCAL_WARPS", NULL },
+       { 0x0000002d, "CP_NOT_ENOUGH_STACK_WARPS", NULL },
+       { 0x0000002e, "CP_NO_BLOCKDIM_LATCH", NULL },
+       { 0x00000031, "ENG2D_FORMAT_MISMATCH", NULL },
+       { 0x0000003f, "PRIMITIVE_ID_NEEDS_GP", NULL },
+       { 0x00000044, "SEMANTIC_VIEWPORT_OVER_LIMIT", NULL },
+       { 0x00000045, "SEMANTIC_COLOR_FRONT_OVER_LIMIT", NULL },
+       { 0x00000046, "LAYER_ID_NEEDS_GP", NULL },
+       { 0x00000047, "SEMANTIC_CLIP_OVER_LIMIT", NULL },
+       { 0x00000048, "SEMANTIC_PTSZ_OVER_LIMIT", NULL },
        {}
 };