diff options
author | Gwenole Beauchesne <gwenole.beauchesne@intel.com> | 2012-07-27 17:56:56 +0200 |
---|---|---|
committer | Gwenole Beauchesne <gwenole.beauchesne@intel.com> | 2012-09-26 11:53:58 +0200 |
commit | be903b05c86d096d1e0f241bd17f9bd768a65e3a (patch) | |
tree | a9ee8b7e3701fdb0e062073518df40fbb8de9cfd | |
parent | 5b2cfeae7a25de055c8db7b4b618f8a64e95eb8b (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.am | 2 | ||||
-rw-r--r-- | va/drm/va_drm.c | 42 | ||||
-rw-r--r-- | va/drm/va_drm_utils.c | 79 | ||||
-rw-r--r-- | va/drm/va_drm_utils.h | 72 |
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 */ |