From: José Roberto de Souza Date: Thu, 9 Feb 2023 17:45:56 +0000 (-0800) Subject: intel/common: Implement the Xe functions for intel_engine X-Git-Tag: upstream/23.3.3~12023 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=19aa1fb851f7065443b6dadda92e2151bf8e1027;p=platform%2Fupstream%2Fmesa.git intel/common: Implement the Xe functions for intel_engine Signed-off-by: José Roberto de Souza Reviewed-by: Lionel Landwerlin Part-of: --- diff --git a/src/intel/common/intel_engine.c b/src/intel/common/intel_engine.c index a460e11..0d7e3dc 100644 --- a/src/intel/common/intel_engine.c +++ b/src/intel/common/intel_engine.c @@ -27,6 +27,7 @@ #include "intel_engine.h" #include "i915/intel_engine.h" +#include "xe/intel_engine.h" struct intel_query_engine_info * intel_engine_get_info(int fd, enum intel_kmd_type type) @@ -34,6 +35,8 @@ intel_engine_get_info(int fd, enum intel_kmd_type type) switch (type) { case INTEL_KMD_TYPE_I915: return i915_engine_get_info(fd); + case INTEL_KMD_TYPE_XE: + return xe_engine_get_info(fd); default: unreachable("Missing"); return NULL; diff --git a/src/intel/common/meson.build b/src/intel/common/meson.build index 00c4a3d..5dfa61c 100644 --- a/src/intel/common/meson.build +++ b/src/intel/common/meson.build @@ -23,6 +23,8 @@ files_libintel_common = files( 'i915/intel_engine.h', 'i915/intel_gem.c', 'i915/intel_gem.h', + 'xe/intel_engine.c', + 'xe/intel_engine.h', 'intel_aux_map.c', 'intel_aux_map.h', 'intel_buffer_alloc.h', diff --git a/src/intel/common/xe/intel_engine.c b/src/intel/common/xe/intel_engine.c new file mode 100644 index 0000000..f1e2ebc --- /dev/null +++ b/src/intel/common/xe/intel_engine.c @@ -0,0 +1,92 @@ +/* + * Copyright © 2023 Intel Corporation + * + * 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, sublicense, + * 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 NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS 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 "xe/intel_engine.h" + +#include + +#include "common/intel_gem.h" + +#include "drm-uapi/xe_drm.h" + +static enum intel_engine_class +xe_engine_class_to_intel(uint16_t xe) +{ + switch (xe) { + case DRM_XE_ENGINE_CLASS_RENDER: + return INTEL_ENGINE_CLASS_RENDER; + case DRM_XE_ENGINE_CLASS_COPY: + return INTEL_ENGINE_CLASS_COPY; + case DRM_XE_ENGINE_CLASS_VIDEO_DECODE: + return INTEL_ENGINE_CLASS_VIDEO; + case DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE: + return INTEL_ENGINE_CLASS_VIDEO_ENHANCE; + case DRM_XE_ENGINE_CLASS_COMPUTE: + return INTEL_ENGINE_CLASS_COMPUTE; + default: + return INTEL_ENGINE_CLASS_INVALID; + } +} + +struct intel_query_engine_info * +xe_engine_get_info(int fd) +{ + struct drm_xe_device_query query = { + .query = DRM_XE_DEVICE_QUERY_ENGINES, + }; + if (intel_ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query)) + return NULL; + + struct drm_xe_engine_class_instance *xe_engines = calloc(1, query.size); + if (!xe_engines) + return NULL; + + query.data = (uintptr_t)xe_engines; + if (intel_ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query)) + goto error_free_xe_engines; + + const uint32_t engines_count = query.size / sizeof(*xe_engines); + struct intel_query_engine_info *intel_engines_info; + intel_engines_info = calloc(1, sizeof(*intel_engines_info) + + sizeof(*intel_engines_info->engines) * + engines_count); + if (!intel_engines_info) { + goto error_free_xe_engines; + return NULL; + } + + for (uint32_t i = 0; i < engines_count; i++) { + struct drm_xe_engine_class_instance *xe_engine = &xe_engines[i]; + struct intel_engine_class_instance *intel_engine = &intel_engines_info->engines[i]; + + intel_engine->engine_class = xe_engine_class_to_intel(xe_engine->engine_class); + intel_engine->engine_instance = xe_engine->engine_instance; + } + + intel_engines_info->num_engines = engines_count; + free(xe_engines); + return intel_engines_info; + +error_free_xe_engines: + free(xe_engines); + return NULL; +} diff --git a/src/intel/common/xe/intel_engine.h b/src/intel/common/xe/intel_engine.h new file mode 100644 index 0000000..dd3d21c --- /dev/null +++ b/src/intel/common/xe/intel_engine.h @@ -0,0 +1,27 @@ +/* + * Copyright © 2023 Intel Corporation + * + * 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, sublicense, + * 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 NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS 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. + */ + +#pragma once + +struct intel_query_engine_info * +xe_engine_get_info(int fd);