X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Floader%2Floader.c;h=38395c8b768f1bbd35807b9bb9bcba68cc5ec313;hb=b7169367fd677e230aa33a7b4f87962371fde2b3;hp=38d8752e26e6c9eca9b801fd685a05d08be74874;hpb=bf1838838a695f27d9d9c486e608a9412044a598;p=mesa.git diff --git a/src/loader/loader.c b/src/loader/loader.c index 38d8752e26e..38395c8b768 100644 --- a/src/loader/loader.c +++ b/src/loader/loader.c @@ -53,7 +53,7 @@ #define MAX_DRM_DEVICES 64 #ifdef USE_DRICONF #include "util/xmlconfig.h" -#include "util/xmlpool.h" +#include "util/driconf.h" #endif #endif @@ -195,7 +195,7 @@ static char *loader_get_dri_config_driver(int fd) driParseOptionInfo(&defaultInitOptions, __driConfigOptionsLoader); driParseConfigFiles(&userInitOptions, &defaultInitOptions, 0, - "loader", kernel_driver, NULL, 0); + "loader", kernel_driver, NULL, 0, NULL, 0); if (driCheckOption(&userInitOptions, "dri_driver", DRI_STRING)) { char *opt = driQueryOptionstr(&userInitOptions, "dri_driver"); /* not an empty string */ @@ -217,7 +217,7 @@ static char *loader_get_dri_config_device_id(void) driParseOptionInfo(&defaultInitOptions, __driConfigOptionsLoader); driParseConfigFiles(&userInitOptions, &defaultInitOptions, 0, - "loader", NULL, NULL, 0); + "loader", NULL, NULL, 0, NULL, 0); if (driCheckOption(&userInitOptions, "device_id", DRI_STRING)) prime = strdup(driQueryOptionstr(&userInitOptions, "device_id")); driDestroyOptionCache(&userInitOptions); @@ -428,33 +428,14 @@ loader_get_device_name_for_fd(int fd) return result; } -char * -loader_get_driver_for_fd(int fd) +static char * +loader_get_pci_driver(int fd) { int vendor_id, chip_id, i, j; char *driver = NULL; - /* Allow an environment variable to force choosing a different driver - * binary. If that driver binary can't survive on this FD, that's the - * user's problem, but this allows vc4 simulator to run on an i965 host, - * and may be useful for some touch testing of i915 on an i965 host. - */ - if (geteuid() == getuid()) { - driver = getenv("MESA_LOADER_DRIVER_OVERRIDE"); - if (driver) - return strdup(driver); - } - -#if defined(HAVE_LIBDRM) && defined(USE_DRICONF) - driver = loader_get_dri_config_driver(fd); - if (driver) - return driver; -#endif - - if (!loader_get_pci_id_for_fd(fd, &vendor_id, &chip_id)) { - driver = loader_get_kernel_driver_name(fd); - return driver; - } + if (!loader_get_pci_id_for_fd(fd, &vendor_id, &chip_id)) + return NULL; for (i = 0; i < ARRAY_SIZE(driver_map); i++) { if (vendor_id != driver_map[i].vendor_id) @@ -482,6 +463,35 @@ out: return driver; } +char * +loader_get_driver_for_fd(int fd) +{ + char *driver; + + /* Allow an environment variable to force choosing a different driver + * binary. If that driver binary can't survive on this FD, that's the + * user's problem, but this allows vc4 simulator to run on an i965 host, + * and may be useful for some touch testing of i915 on an i965 host. + */ + if (geteuid() == getuid()) { + driver = getenv("MESA_LOADER_DRIVER_OVERRIDE"); + if (driver) + return strdup(driver); + } + +#if defined(HAVE_LIBDRM) && defined(USE_DRICONF) + driver = loader_get_dri_config_driver(fd); + if (driver) + return driver; +#endif + + driver = loader_get_pci_driver(fd); + if (!driver) + driver = loader_get_kernel_driver_name(fd); + + return driver; +} + void loader_set_logger(loader_logger *logger) {