intel/common: Add gen_get_pci_device_id_override
authorJordan Justen <jordan.l.justen@intel.com>
Sat, 10 Feb 2018 01:12:05 +0000 (17:12 -0800)
committerJordan Justen <jordan.l.justen@intel.com>
Tue, 27 Feb 2018 19:15:10 +0000 (11:15 -0800)
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Scott D Phillips <scott.d.phillips@intel.com>
src/intel/common/gen_device_info.c
src/intel/common/gen_device_info.h

index a08a13a32a420b4366eb2ed76294364a5b1c76d2..113a9dca1ff9faeac19089af5d4cdc77e7d598d7 100644 (file)
 #include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
 #include "gen_device_info.h"
 #include "compiler/shader_enums.h"
 #include "util/macros.h"
 
+static int
+parse_devid_override(const char *devid_override)
+{
+   static const struct {
+      const char *name;
+      int pci_id;
+   } name_map[] = {
+      { "brw", 0x2a02 },
+      { "g4x", 0x2a42 },
+      { "ilk", 0x0042 },
+      { "snb", 0x0126 },
+      { "ivb", 0x016a },
+      { "hsw", 0x0d2e },
+      { "byt", 0x0f33 },
+      { "bdw", 0x162e },
+      { "chv", 0x22B3 },
+      { "skl", 0x1912 },
+      { "bxt", 0x5A85 },
+      { "kbl", 0x5912 },
+      { "glk", 0x3185 },
+      { "cnl", 0x5a52 },
+   };
+
+   for (unsigned i = 0; i < ARRAY_SIZE(name_map); i++) {
+      if (!strcmp(name_map[i].name, devid_override))
+         return name_map[i].pci_id;
+   }
+
+   return strtol(devid_override, NULL, 0);
+}
+
+/**
+ * Get the overridden PCI ID for the device. This is set with the
+ * INTEL_DEVID_OVERRIDE environment variable.
+ *
+ * Returns -1 if the override is not set.
+ */
+int
+gen_get_pci_device_id_override(void)
+{
+   if (geteuid() == getuid()) {
+      const char *devid_override = getenv("INTEL_DEVID_OVERRIDE");
+      if (devid_override)
+         return parse_devid_override(devid_override);
+   }
+
+   return -1;
+}
+
 static const struct gen_device_info gen_device_info_i965 = {
    .gen = 4,
    .has_negative_rhw_bug = true,
index fd9c17531dbf41d15b5f89bdc271667959a4a07e..6a96143cebb605fb64c32f7601f0c866844ef321 100644 (file)
@@ -199,6 +199,7 @@ struct gen_device_info
 #define gen_device_info_is_9lp(devinfo) \
    ((devinfo)->is_broxton || (devinfo)->is_geminilake)
 
+int gen_get_pci_device_id_override(void);
 bool gen_get_device_info(int devid, struct gen_device_info *devinfo);
 const char *gen_get_device_name(int devid);