summaryrefslogtreecommitdiff
path: root/intel/intel_decode.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2012-01-04 12:00:59 -0800
committerEric Anholt <eric@anholt.net>2012-01-27 13:21:19 -0800
commit9695eee8a2b6c749d79980e6057ac231aea6cb6d (patch)
tree1ef4e4f92a76eb82a9e63e5f9934560768e00d1d /intel/intel_decode.c
parent028715ee7074691895051296105e8b4cbbfaabb8 (diff)
downloadlibdrm-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.c28
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;
}