diff options
author | Eric Anholt <eric@anholt.net> | 2012-01-04 12:00:59 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2012-01-27 13:21:19 -0800 |
commit | 9695eee8a2b6c749d79980e6057ac231aea6cb6d (patch) | |
tree | 1ef4e4f92a76eb82a9e63e5f9934560768e00d1d /intel/intel_decode.c | |
parent | 028715ee7074691895051296105e8b4cbbfaabb8 (diff) | |
download | libdrm-9695eee8a2b6c749d79980e6057ac231aea6cb6d.tar.gz libdrm-9695eee8a2b6c749d79980e6057ac231aea6cb6d.tar.bz2 libdrm-9695eee8a2b6c749d79980e6057ac231aea6cb6d.zip |
intel: Put the "gen" shorthand chipset identifier in the context.
It's a lot nicer than using IS_WHATEVER(devid) all over the place, and
we have this in our other projects too.
Diffstat (limited to 'intel/intel_decode.c')
-rw-r--r-- | intel/intel_decode.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/intel/intel_decode.c b/intel/intel_decode.c index 97820b35..3548f574 100644 --- a/intel/intel_decode.c +++ b/intel/intel_decode.c @@ -21,6 +21,7 @@ * IN THE SOFTWARE. */ +#include <assert.h> #include <stdint.h> #include <stdlib.h> #include <stdio.h> @@ -39,6 +40,12 @@ struct drm_intel_decode { /** PCI device ID. */ uint32_t devid; + /** + * Shorthand device identifier: 3 is 915, 4 is 965, 5 is + * Ironlake, etc. + */ + int gen; + /** GPU address of the start of the current packet. */ uint32_t hw_offset; /** CPU virtual address of the start of the current packet. */ @@ -2711,6 +2718,7 @@ decode_3d_965(struct drm_intel_decode *ctx) int unsigned min_len; int unsigned max_len; const char *name; + int gen; } opcodes_3d[] = { { 0x6000, 3, 3, "URB_FENCE" }, { 0x6001, 2, 2, "CS_URB_STATE" }, @@ -3327,6 +3335,11 @@ decode_3d_965(struct drm_intel_decode *ctx) for (idx = 0; idx < ARRAY_SIZE(opcodes_3d); idx++) { opcode_3d = &opcodes_3d[idx]; + + /* If it's marked as only for a specific gen, skip. */ + if (opcode_3d->gen && opcode_3d->gen != ctx->gen) + continue; + if ((data[0] & 0xffff0000) >> 16 == opcode_3d->opcode) { unsigned int i; len = 1; @@ -3434,6 +3447,21 @@ drm_intel_decode_context_alloc(uint32_t devid) ctx->devid = devid; ctx->out = stdout; + if (IS_GEN7(devid)) + ctx->gen = 7; + else if (IS_GEN6(devid)) + ctx->gen = 6; + else if (IS_GEN5(devid)) + ctx->gen = 5; + else if (IS_GEN4(devid)) + ctx->gen = 4; + else if (IS_9XX(devid)) + ctx->gen = 3; + else { + assert(IS_GEN2(devid)); + ctx->gen = 2; + } + return ctx; } |