diff --git a/src/intel/common/intel_engine.c b/src/intel/common/intel_engine.c index df9b23560f7..391e5370b2e 100644 --- a/src/intel/common/intel_engine.c +++ b/src/intel/common/intel_engine.c @@ -24,73 +24,12 @@ #include #include "intel_engine.h" -#include "intel_gem.h" - -enum intel_engine_class i915_engine_class_to_intel(enum drm_i915_gem_engine_class i915) -{ - switch (i915) { - case I915_ENGINE_CLASS_RENDER: - return INTEL_ENGINE_CLASS_RENDER; - case I915_ENGINE_CLASS_COPY: - return INTEL_ENGINE_CLASS_COPY; - case I915_ENGINE_CLASS_VIDEO: - return INTEL_ENGINE_CLASS_VIDEO; - case I915_ENGINE_CLASS_VIDEO_ENHANCE: - return INTEL_ENGINE_CLASS_VIDEO_ENHANCE; - case I915_ENGINE_CLASS_COMPUTE: - return INTEL_ENGINE_CLASS_COMPUTE; - default: - return INTEL_ENGINE_CLASS_INVALID; - } -} - -enum drm_i915_gem_engine_class intel_engine_class_to_i915(enum intel_engine_class intel) -{ - switch (intel) { - case INTEL_ENGINE_CLASS_RENDER: - return I915_ENGINE_CLASS_RENDER; - case INTEL_ENGINE_CLASS_COPY: - return I915_ENGINE_CLASS_COPY; - case INTEL_ENGINE_CLASS_VIDEO: - return I915_ENGINE_CLASS_VIDEO; - case INTEL_ENGINE_CLASS_VIDEO_ENHANCE: - return I915_ENGINE_CLASS_VIDEO_ENHANCE; - case INTEL_ENGINE_CLASS_COMPUTE: - return I915_ENGINE_CLASS_COMPUTE; - default: - return I915_ENGINE_CLASS_INVALID; - } -} +#include "intel_engine_i915.h" struct intel_query_engine_info * intel_engine_get_info(int fd) { - struct drm_i915_query_engine_info *i915_engines_info; - i915_engines_info = intel_i915_query_alloc(fd, DRM_I915_QUERY_ENGINE_INFO, NULL); - if (!i915_engines_info) - return NULL; - - struct intel_query_engine_info *intel_engines_info; - intel_engines_info = calloc(1, sizeof(*intel_engines_info) + - sizeof(*intel_engines_info->engines) * - i915_engines_info->num_engines); - if (!intel_engines_info) { - free(i915_engines_info); - return NULL; - } - - for (int i = 0; i < i915_engines_info->num_engines; i++) { - struct drm_i915_engine_info *i915_engine = &i915_engines_info->engines[i]; - struct intel_engine_class_instance *intel_engine = &intel_engines_info->engines[i]; - - intel_engine->engine_class = i915_engine_class_to_intel(i915_engine->engine.engine_class); - intel_engine->engine_instance = i915_engine->engine.engine_instance; - } - - intel_engines_info->num_engines = i915_engines_info->num_engines; - - free(i915_engines_info); - return intel_engines_info; + return i915_engine_get_info(fd); } int diff --git a/src/intel/common/intel_engine.h b/src/intel/common/intel_engine.h index 89d9c54baab..eb16faeae8b 100644 --- a/src/intel/common/intel_engine.h +++ b/src/intel/common/intel_engine.h @@ -25,8 +25,6 @@ #include -#include "drm-uapi/i915_drm.h" - enum intel_engine_class { INTEL_ENGINE_CLASS_RENDER = 0, INTEL_ENGINE_CLASS_COPY, @@ -46,9 +44,6 @@ struct intel_query_engine_info { struct intel_engine_class_instance engines[]; }; -enum intel_engine_class i915_engine_class_to_intel(enum drm_i915_gem_engine_class i915); -enum drm_i915_gem_engine_class intel_engine_class_to_i915(enum intel_engine_class intel); - struct intel_query_engine_info *intel_engine_get_info(int fd); int intel_engines_count(const struct intel_query_engine_info *info, enum intel_engine_class engine_class); diff --git a/src/intel/common/intel_engine_i915.c b/src/intel/common/intel_engine_i915.c new file mode 100644 index 00000000000..bf4735b9070 --- /dev/null +++ b/src/intel/common/intel_engine_i915.c @@ -0,0 +1,97 @@ +/* + * Copyright © 2022 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 "intel_engine_i915.h" + +#include + +#include "intel_gem.h" + +static enum intel_engine_class +i915_engine_class_to_intel(enum drm_i915_gem_engine_class i915) +{ + switch (i915) { + case I915_ENGINE_CLASS_RENDER: + return INTEL_ENGINE_CLASS_RENDER; + case I915_ENGINE_CLASS_COPY: + return INTEL_ENGINE_CLASS_COPY; + case I915_ENGINE_CLASS_VIDEO: + return INTEL_ENGINE_CLASS_VIDEO; + case I915_ENGINE_CLASS_VIDEO_ENHANCE: + return INTEL_ENGINE_CLASS_VIDEO_ENHANCE; + case I915_ENGINE_CLASS_COMPUTE: + return INTEL_ENGINE_CLASS_COMPUTE; + default: + return INTEL_ENGINE_CLASS_INVALID; + } +} + +enum drm_i915_gem_engine_class +intel_engine_class_to_i915(enum intel_engine_class intel) +{ + switch (intel) { + case INTEL_ENGINE_CLASS_RENDER: + return I915_ENGINE_CLASS_RENDER; + case INTEL_ENGINE_CLASS_COPY: + return I915_ENGINE_CLASS_COPY; + case INTEL_ENGINE_CLASS_VIDEO: + return I915_ENGINE_CLASS_VIDEO; + case INTEL_ENGINE_CLASS_VIDEO_ENHANCE: + return I915_ENGINE_CLASS_VIDEO_ENHANCE; + case INTEL_ENGINE_CLASS_COMPUTE: + return I915_ENGINE_CLASS_COMPUTE; + default: + return I915_ENGINE_CLASS_INVALID; + } +} + +struct intel_query_engine_info * +i915_engine_get_info(int fd) +{ + struct drm_i915_query_engine_info *i915_engines_info; + i915_engines_info = intel_i915_query_alloc(fd, DRM_I915_QUERY_ENGINE_INFO, NULL); + if (!i915_engines_info) + return NULL; + + struct intel_query_engine_info *intel_engines_info; + intel_engines_info = calloc(1, sizeof(*intel_engines_info) + + sizeof(*intel_engines_info->engines) * + i915_engines_info->num_engines); + if (!intel_engines_info) { + free(i915_engines_info); + return NULL; + } + + for (int i = 0; i < i915_engines_info->num_engines; i++) { + struct drm_i915_engine_info *i915_engine = &i915_engines_info->engines[i]; + struct intel_engine_class_instance *intel_engine = &intel_engines_info->engines[i]; + + intel_engine->engine_class = i915_engine_class_to_intel(i915_engine->engine.engine_class); + intel_engine->engine_instance = i915_engine->engine.engine_instance; + } + + intel_engines_info->num_engines = i915_engines_info->num_engines; + + free(i915_engines_info); + return intel_engines_info; +} diff --git a/src/intel/common/intel_engine_i915.h b/src/intel/common/intel_engine_i915.h new file mode 100644 index 00000000000..e23665b1da3 --- /dev/null +++ b/src/intel/common/intel_engine_i915.h @@ -0,0 +1,33 @@ +/* + * Copyright © 2022 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 + +#include "intel_engine.h" + +#include "drm-uapi/i915_drm.h" + +enum drm_i915_gem_engine_class +intel_engine_class_to_i915(enum intel_engine_class intel); +struct intel_query_engine_info * +i915_engine_get_info(int fd); diff --git a/src/intel/common/intel_gem.c b/src/intel/common/intel_gem.c index cdc6ed95fcc..e983b99d907 100644 --- a/src/intel/common/intel_gem.c +++ b/src/intel/common/intel_gem.c @@ -23,6 +23,8 @@ #include "intel_gem.h" #include "drm-uapi/i915_drm.h" +#include "intel_engine_i915.h" + #define RCS_TIMESTAMP 0x2358 bool diff --git a/src/intel/common/meson.build b/src/intel/common/meson.build index 733189faa56..9512428b5ac 100644 --- a/src/intel/common/meson.build +++ b/src/intel/common/meson.build @@ -26,6 +26,8 @@ files_libintel_common = files( 'intel_decoder.h', 'intel_disasm.c', 'intel_disasm.h', + 'intel_engine_i915.c', + 'intel_engine_i915.h', 'intel_engine.c', 'intel_engine.h', 'intel_gem.c',