summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-07-27 17:56:56 +0200
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-07-27 18:01:41 +0200
commitfbffed4f09d31bedf334e14722d163d8a31c13ed (patch)
tree7bc994838088781b92489ba171adf99f04d62018
parent2e6249bbb45ec9bfbef81fc560097a9725d875ee (diff)
drm: move driver name detection to utilities.
Move VA driver name characterisation into a dedicated utilities file. This is also meant to be useful to VA/Android that can re-use the same file as is since it is self-contained. Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
-rw-r--r--va/drm/Makefile.am2
-rw-r--r--va/drm/va_drm.c42
-rw-r--r--va/drm/va_drm_utils.c79
-rw-r--r--va/drm/va_drm_utils.h72
4 files changed, 158 insertions, 37 deletions
diff --git a/va/drm/Makefile.am b/va/drm/Makefile.am
index f38e114..b860ff5 100644
--- a/va/drm/Makefile.am
+++ b/va/drm/Makefile.am
@@ -30,6 +30,7 @@ INCLUDES = \
source_c = \
va_drm.c \
va_drm_auth.c \
+ va_drm_utils.c \
$(NULL)
source_h = \
@@ -39,6 +40,7 @@ source_h = \
source_h_priv = \
va_drm_auth.h \
va_drm_auth_x11.h \
+ va_drm_utils.h \
$(NULL)
if USE_X11
diff --git a/va/drm/va_drm.c b/va/drm/va_drm.c
index b7f60ba..25bf8bb 100644
--- a/va/drm/va_drm.c
+++ b/va/drm/va_drm.c
@@ -28,6 +28,7 @@
#include "va_backend.h"
#include "va_drmcommon.h"
#include "va_drm_auth.h"
+#include "va_drm_utils.h"
static int
va_DisplayContextIsValid(VADisplayContextP pDisplayContext)
@@ -49,19 +50,6 @@ va_DisplayContextDestroy(VADisplayContextP pDisplayContext)
free(pDisplayContext);
}
-struct driver_name_map {
- const char *key;
- int key_len;
- const char *name;
-};
-
-static const struct driver_name_map g_driver_name_map[] = {
- { "i915", 4, "i965" }, // Intel OTC GenX driver
- { "pvrsrvkm", 8, "pvr" }, // Intel UMG PVR driver
- { "emgd", 4, "emgd" }, // Intel ECG PVR driver
- { NULL, }
-};
-
static VAStatus
va_DisplayContextGetDriverName(
VADisplayContextP pDisplayContext,
@@ -71,33 +59,13 @@ va_DisplayContextGetDriverName(
VADriverContextP const ctx = pDisplayContext->pDriverContext;
struct drm_state * const drm_state = ctx->drm_state;
- drmVersionPtr drm_version;
- char *driver_name = NULL;
- const struct driver_name_map *m;
drm_magic_t magic;
+ VAStatus status;
int ret;
- *driver_name_ptr = NULL;
-
- drm_version = drmGetVersion(drm_state->fd);
- if (!drm_version)
- return VA_STATUS_ERROR_UNKNOWN;
-
- for (m = g_driver_name_map; m->key != NULL; m++) {
- if (drm_version->name_len >= m->key_len &&
- strncmp(drm_version->name, m->key, m->key_len) == 0)
- break;
- }
- drmFreeVersion(drm_version);
-
- if (!m->name)
- return VA_STATUS_ERROR_UNKNOWN;
-
- driver_name = strdup(m->name);
- if (!driver_name)
- return VA_STATUS_ERROR_ALLOCATION_FAILED;
-
- *driver_name_ptr = driver_name;
+ status = VA_DRM_GetDriverName(ctx, driver_name_ptr);
+ if (status != VA_STATUS_SUCCESS)
+ return status;
ret = drmGetMagic(drm_state->fd, &magic);
if (ret < 0)
diff --git a/va/drm/va_drm_utils.c b/va/drm/va_drm_utils.c
new file mode 100644
index 0000000..f3ffd6b
--- /dev/null
+++ b/va/drm/va_drm_utils.c
@@ -0,0 +1,79 @@
+/*
+ * va_drm_utils.c - VA/DRM Utilities
+ *
+ * Copyright (c) 2012 Intel Corporation. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "sysdeps.h"
+#include <xf86drm.h>
+#include "va_drm_utils.h"
+#include "va_drmcommon.h"
+
+struct driver_name_map {
+ const char *key;
+ int key_len;
+ const char *name;
+};
+
+static const struct driver_name_map g_driver_name_map[] = {
+ { "i915", 4, "i965" }, // Intel OTC GenX driver
+ { "pvrsrvkm", 8, "pvr" }, // Intel UMG PVR driver
+ { "emgd", 4, "emgd" }, // Intel ECG PVR driver
+ { NULL, }
+};
+
+/* Returns the VA driver name for the active display */
+VAStatus
+VA_DRM_GetDriverName(VADriverContextP ctx, char **driver_name_ptr)
+{
+ struct drm_state * const drm_state = ctx->drm_state;
+ drmVersionPtr drm_version;
+ char *driver_name = NULL;
+ const struct driver_name_map *m;
+
+ *driver_name_ptr = NULL;
+
+ if (!drm_state || drm_state->fd < 0)
+ return VA_STATUS_ERROR_INVALID_DISPLAY;
+
+ drm_version = drmGetVersion(drm_state->fd);
+ if (!drm_version)
+ return VA_STATUS_ERROR_UNKNOWN;
+
+ for (m = g_driver_name_map; m->key != NULL; m++) {
+ if (drm_version->name_len >= m->key_len &&
+ strncmp(drm_version->name, m->key, m->key_len) == 0)
+ break;
+ }
+ drmFreeVersion(drm_version);
+
+ if (!m->name)
+ return VA_STATUS_ERROR_UNKNOWN;
+
+ driver_name = strdup(m->name);
+ if (!driver_name)
+ return VA_STATUS_ERROR_ALLOCATION_FAILED;
+
+ *driver_name_ptr = driver_name;
+ return VA_STATUS_SUCCESS;
+}
diff --git a/va/drm/va_drm_utils.h b/va/drm/va_drm_utils.h
new file mode 100644
index 0000000..d039004
--- /dev/null
+++ b/va/drm/va_drm_utils.h
@@ -0,0 +1,72 @@
+/*
+ * va_drm_utils.h - VA/DRM Utilities
+ *
+ * Copyright (c) 2012 Intel Corporation. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef VA_DRM_UTILS_H
+#define VA_DRM_UTILS_H
+
+#include <va/va_backend.h>
+
+/**
+ * \file va_drm_utils.h
+ * \brief VA/DRM Utilities
+ *
+ * This file contains VA/DRM utility functions. The API herein defined is
+ * internal to libva. Users include the VA/DRM API itself or VA/Android,
+ * should it be based on DRM.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \brief Returns the VA driver name for the active display.
+ *
+ * This functions returns a newly allocated buffer in @driver_name_ptr that
+ * contains the VA driver name for the active display. Active display means
+ * the display obtained with any of the vaGetDisplay*() functions.
+ *
+ * The VADriverContext.drm_state structure must be valid, i.e. allocated
+ * and containing an open DRM connection descriptor. The DRM connection
+ * does *not* need to be authenticated as it only performs a call to
+ * drmGetVersion().
+ *
+ * @param[in] ctx the pointer to a VADriverContext
+ * @param[out] driver_name_ptr the newly allocated buffer containing
+ * the VA driver name
+ * @return VA_STATUS_SUCCESS if operation is successful, or another
+ * #VAStatus value otherwise.
+ */
+VAStatus
+VA_DRM_GetDriverName(VADriverContextP ctx, char **driver_name_ptr);
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* VA_DRM_UTILS_H */