v3d: Rename the vc5_dri.so driver to v3d_dri.so.
[mesa.git] / src / gallium / auxiliary / target-helpers / drm_helper.h
index f847b17dd685e1aa7ca7126836a186b682ad79d3..c494848888d57f3b2f64e67fff9607f83f19aee6 100644 (file)
@@ -4,13 +4,39 @@
 #include <stdio.h>
 #include "target-helpers/inline_debug_helper.h"
 #include "target-helpers/drm_helper_public.h"
+#include "state_tracker/drm_driver.h"
+#include "util/xmlpool.h"
+
+static const struct drm_conf_ret throttle_ret = {
+   .type = DRM_CONF_INT,
+   .val.val_int = 2,
+};
+
+static const struct drm_conf_ret share_fd_ret = {
+   .type = DRM_CONF_BOOL,
+   .val.val_bool = true,
+};
+
+const struct drm_conf_ret *
+pipe_default_configuration_query(enum drm_conf conf)
+{
+   switch (conf) {
+   case DRM_CONF_THROTTLE:
+      return &throttle_ret;
+   case DRM_CONF_SHARE_FD:
+      return &share_fd_ret;
+   default:
+      break;
+   }
+   return NULL;
+}
 
 #ifdef GALLIUM_I915
 #include "i915/drm/i915_drm_public.h"
 #include "i915/i915_public.h"
 
 struct pipe_screen *
-pipe_i915_create_screen(int fd)
+pipe_i915_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct i915_winsys *iws;
    struct pipe_screen *screen;
@@ -26,7 +52,7 @@ pipe_i915_create_screen(int fd)
 #else
 
 struct pipe_screen *
-pipe_i915_create_screen(int fd)
+pipe_i915_create_screen(int fd, const struct pipe_screen_config *config)
 {
    fprintf(stderr, "i915g: driver missing\n");
    return NULL;
@@ -34,53 +60,47 @@ pipe_i915_create_screen(int fd)
 
 #endif
 
-#ifdef GALLIUM_ILO
-#include "intel/drm/intel_drm_public.h"
-#include "ilo/ilo_public.h"
+#ifdef GALLIUM_NOUVEAU
+#include "nouveau/drm/nouveau_drm_public.h"
 
 struct pipe_screen *
-pipe_ilo_create_screen(int fd)
+pipe_nouveau_create_screen(int fd, const struct pipe_screen_config *config)
 {
-   struct intel_winsys *iws;
    struct pipe_screen *screen;
 
-   iws = intel_winsys_create_for_fd(fd);
-   if (!iws)
-      return NULL;
-
-   screen = ilo_screen_create(iws);
+   screen = nouveau_drm_screen_create(fd);
    return screen ? debug_screen_wrap(screen) : NULL;
 }
 
 #else
 
 struct pipe_screen *
-pipe_ilo_create_screen(int fd)
+pipe_nouveau_create_screen(int fd, const struct pipe_screen_config *config)
 {
-   fprintf(stderr, "ilo: driver missing\n");
+   fprintf(stderr, "nouveau: driver missing\n");
    return NULL;
 }
 
 #endif
 
-#ifdef GALLIUM_NOUVEAU
-#include "nouveau/drm/nouveau_drm_public.h"
+#ifdef GALLIUM_PL111
+#include "pl111/drm/pl111_drm_public.h"
 
 struct pipe_screen *
-pipe_nouveau_create_screen(int fd)
+pipe_pl111_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct pipe_screen *screen;
 
-   screen = nouveau_drm_screen_create(fd);
+   screen = pl111_drm_screen_create(fd);
    return screen ? debug_screen_wrap(screen) : NULL;
 }
 
 #else
 
 struct pipe_screen *
-pipe_nouveau_create_screen(int fd)
+pipe_pl111_create_screen(int fd, const struct pipe_screen_config *config)
 {
-   fprintf(stderr, "nouveau: driver missing\n");
+   fprintf(stderr, "pl111: driver missing\n");
    return NULL;
 }
 
@@ -92,18 +112,18 @@ pipe_nouveau_create_screen(int fd)
 #include "r300/r300_public.h"
 
 struct pipe_screen *
-pipe_r300_create_screen(int fd)
+pipe_r300_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct radeon_winsys *rw;
 
-   rw = radeon_drm_winsys_create(fd, r300_screen_create);
+   rw = radeon_drm_winsys_create(fd, config, r300_screen_create);
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
 #else
 
 struct pipe_screen *
-pipe_r300_create_screen(int fd)
+pipe_r300_create_screen(int fd, const struct pipe_screen_config *config)
 {
    fprintf(stderr, "r300: driver missing\n");
    return NULL;
@@ -117,18 +137,18 @@ pipe_r300_create_screen(int fd)
 #include "r600/r600_public.h"
 
 struct pipe_screen *
-pipe_r600_create_screen(int fd)
+pipe_r600_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct radeon_winsys *rw;
 
-   rw = radeon_drm_winsys_create(fd, r600_screen_create);
+   rw = radeon_drm_winsys_create(fd, config, r600_screen_create);
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
 #else
 
 struct pipe_screen *
-pipe_r600_create_screen(int fd)
+pipe_r600_create_screen(int fd, const struct pipe_screen_config *config)
 {
    fprintf(stderr, "r600: driver missing\n");
    return NULL;
@@ -143,28 +163,52 @@ pipe_r600_create_screen(int fd)
 #include "radeonsi/si_public.h"
 
 struct pipe_screen *
-pipe_radeonsi_create_screen(int fd)
+pipe_radeonsi_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct radeon_winsys *rw;
 
    /* First, try amdgpu. */
-   rw = amdgpu_winsys_create(fd, radeonsi_screen_create);
+   rw = amdgpu_winsys_create(fd, config, radeonsi_screen_create);
 
    if (!rw)
-      rw = radeon_drm_winsys_create(fd, radeonsi_screen_create);
+      rw = radeon_drm_winsys_create(fd, config, radeonsi_screen_create);
 
    return rw ? debug_screen_wrap(rw->screen) : NULL;
 }
 
+const struct drm_conf_ret *
+pipe_radeonsi_configuration_query(enum drm_conf conf)
+{
+   static const struct drm_conf_ret xml_options_ret = {
+      .type = DRM_CONF_POINTER,
+      .val.val_pointer =
+#include "radeonsi/si_driinfo.h"
+   };
+
+   switch (conf) {
+   case DRM_CONF_XML_OPTIONS:
+      return &xml_options_ret;
+   default:
+      break;
+   }
+   return pipe_default_configuration_query(conf);
+}
+
 #else
 
 struct pipe_screen *
-pipe_radeonsi_create_screen(int fd)
+pipe_radeonsi_create_screen(int fd, const struct pipe_screen_config *config)
 {
    fprintf(stderr, "radeonsi: driver missing\n");
    return NULL;
 }
 
+const struct drm_conf_ret *
+pipe_radeonsi_configuration_query(enum drm_conf conf)
+{
+   return NULL;
+}
+
 #endif
 
 #ifdef GALLIUM_VMWGFX
@@ -172,7 +216,7 @@ pipe_radeonsi_create_screen(int fd)
 #include "svga/svga_public.h"
 
 struct pipe_screen *
-pipe_vmwgfx_create_screen(int fd)
+pipe_vmwgfx_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct svga_winsys_screen *sws;
    struct pipe_screen *screen;
@@ -188,7 +232,7 @@ pipe_vmwgfx_create_screen(int fd)
 #else
 
 struct pipe_screen *
-pipe_vmwgfx_create_screen(int fd)
+pipe_vmwgfx_create_screen(int fd, const struct pipe_screen_config *config)
 {
    fprintf(stderr, "svga: driver missing\n");
    return NULL;
@@ -200,7 +244,7 @@ pipe_vmwgfx_create_screen(int fd)
 #include "freedreno/drm/freedreno_drm_public.h"
 
 struct pipe_screen *
-pipe_freedreno_create_screen(int fd)
+pipe_freedreno_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct pipe_screen *screen;
 
@@ -211,7 +255,7 @@ pipe_freedreno_create_screen(int fd)
 #else
 
 struct pipe_screen *
-pipe_freedreno_create_screen(int fd)
+pipe_freedreno_create_screen(int fd, const struct pipe_screen_config *config)
 {
    fprintf(stderr, "freedreno: driver missing\n");
    return NULL;
@@ -224,7 +268,7 @@ pipe_freedreno_create_screen(int fd)
 #include "virgl/virgl_public.h"
 
 struct pipe_screen *
-pipe_virgl_create_screen(int fd)
+pipe_virgl_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct pipe_screen *screen;
 
@@ -235,7 +279,7 @@ pipe_virgl_create_screen(int fd)
 #else
 
 struct pipe_screen *
-pipe_virgl_create_screen(int fd)
+pipe_virgl_create_screen(int fd, const struct pipe_screen_config *config)
 {
    fprintf(stderr, "virgl: driver missing\n");
    return NULL;
@@ -247,7 +291,7 @@ pipe_virgl_create_screen(int fd)
 #include "vc4/drm/vc4_drm_public.h"
 
 struct pipe_screen *
-pipe_vc4_create_screen(int fd)
+pipe_vc4_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct pipe_screen *screen;
 
@@ -258,7 +302,7 @@ pipe_vc4_create_screen(int fd)
 #else
 
 struct pipe_screen *
-pipe_vc4_create_screen(int fd)
+pipe_vc4_create_screen(int fd, const struct pipe_screen_config *config)
 {
    fprintf(stderr, "vc4: driver missing\n");
    return NULL;
@@ -266,11 +310,34 @@ pipe_vc4_create_screen(int fd)
 
 #endif
 
+#ifdef GALLIUM_V3D
+#include "vc5/drm/vc5_drm_public.h"
+
+struct pipe_screen *
+pipe_v3d_create_screen(int fd, const struct pipe_screen_config *config)
+{
+   struct pipe_screen *screen;
+
+   screen = v3d_drm_screen_create(fd);
+   return screen ? debug_screen_wrap(screen) : NULL;
+}
+
+#else
+
+struct pipe_screen *
+pipe_v3d_create_screen(int fd, const struct pipe_screen_config *config)
+{
+   fprintf(stderr, "v3d: driver missing\n");
+   return NULL;
+}
+
+#endif
+
 #ifdef GALLIUM_ETNAVIV
 #include "etnaviv/drm/etnaviv_drm_public.h"
 
 struct pipe_screen *
-pipe_etna_create_screen(int fd)
+pipe_etna_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct pipe_screen *screen;
 
@@ -281,7 +348,7 @@ pipe_etna_create_screen(int fd)
 #else
 
 struct pipe_screen *
-pipe_etna_create_screen(int fd)
+pipe_etna_create_screen(int fd, const struct pipe_screen_config *config)
 {
    fprintf(stderr, "etnaviv: driver missing\n");
    return NULL;
@@ -293,7 +360,7 @@ pipe_etna_create_screen(int fd)
 #include "imx/drm/imx_drm_public.h"
 
 struct pipe_screen *
-pipe_imx_drm_create_screen(int fd)
+pipe_imx_drm_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct pipe_screen *screen;
 
@@ -304,7 +371,7 @@ pipe_imx_drm_create_screen(int fd)
 #else
 
 struct pipe_screen *
-pipe_imx_drm_create_screen(int fd)
+pipe_imx_drm_create_screen(int fd, const struct pipe_screen_config *config)
 {
    fprintf(stderr, "imx-drm: driver missing\n");
    return NULL;
@@ -312,5 +379,28 @@ pipe_imx_drm_create_screen(int fd)
 
 #endif
 
+#ifdef GALLIUM_TEGRA
+#include "tegra/drm/tegra_drm_public.h"
+
+struct pipe_screen *
+pipe_tegra_create_screen(int fd, const struct pipe_screen_config *config)
+{
+   struct pipe_screen *screen;
+
+   screen = tegra_drm_screen_create(fd);
+
+   return screen ? debug_screen_wrap(screen) : NULL;
+}
+
+#else
+
+struct pipe_screen *
+pipe_tegra_create_screen(int fd, const struct pipe_screen_config *config)
+{
+   fprintf(stderr, "tegra: driver missing\n");
+   return NULL;
+}
+
+#endif
 
 #endif /* DRM_HELPER_H */