pipe-loader: extract a standalone get_driver_descriptor helper function
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 30 Jun 2017 09:06:44 +0000 (11:06 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 2 Aug 2017 07:50:58 +0000 (09:50 +0200)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c

index 193c8ddff2fb7921d89aefa85860e4d1b6cf3e13..92b242178d5c593b2e67a4a5b2e23d070f724743 100644 (file)
@@ -156,6 +156,31 @@ static const struct drm_driver_descriptor driver_descriptors[] = {
 };
 #endif
 
+static const struct drm_driver_descriptor *
+get_driver_descriptor(const char *driver_name, struct util_dl_library **plib)
+{
+#ifdef GALLIUM_STATIC_TARGETS
+   for (int i = 0; i < ARRAY_SIZE(driver_descriptors); i++) {
+      if (strcmp(driver_descriptors[i].driver_name, driver_name) == 0)
+         return &driver_descriptors[i];
+   }
+#else
+   *plib = pipe_loader_find_module(driver_name, PIPE_SEARCH_DIR);
+   if (!*plib)
+      return NULL;
+
+   const struct drm_driver_descriptor *dd =
+         (const struct drm_driver_descriptor *)
+         util_dl_get_proc_address(*plib, "driver_descriptor");
+
+   /* sanity check on the driver name */
+   if (dd && strcmp(dd->driver_name, driver_name) == 0)
+      return dd;
+#endif
+
+   return NULL;
+}
+
 bool
 pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, int fd)
 {
@@ -179,27 +204,13 @@ pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, int fd)
    if (!ddev->base.driver_name)
       goto fail;
 
-#ifdef GALLIUM_STATIC_TARGETS
-   for (int i = 0; i < ARRAY_SIZE(driver_descriptors); i++) {
-      if (strcmp(driver_descriptors[i].driver_name, ddev->base.driver_name) == 0) {
-         ddev->dd = &driver_descriptors[i];
-         break;
-      }
-   }
+   struct util_dl_library **plib = NULL;
+#ifndef GALLIUM_STATIC_TARGETS
+   plib = &ddev->lib;
+#endif
+   ddev->dd = get_driver_descriptor(ddev->base.driver_name, plib);
    if (!ddev->dd)
       goto fail;
-#else
-   ddev->lib = pipe_loader_find_module(&ddev->base, PIPE_SEARCH_DIR);
-   if (!ddev->lib)
-      goto fail;
-
-   ddev->dd = (const struct drm_driver_descriptor *)
-      util_dl_get_proc_address(ddev->lib, "driver_descriptor");
-
-   /* sanity check on the driver name */
-   if (!ddev->dd || strcmp(ddev->dd->driver_name, ddev->base.driver_name) != 0)
-      goto fail;
-#endif
 
    *dev = &ddev->base;
    return true;