From 4198a301b3f15c4bad83544735d888a749f271d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Fri, 23 Jun 2023 16:41:57 -0700 Subject: [PATCH] intel: Move i915_drm.h specific code from common/intel_gem.h to common/i915/intel_gem.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This allow us to remove one more i915_drm.h include from code shared by both backends. Signed-off-by: José Roberto de Souza Reviewed-by: Marcin Ślusarz Part-of: --- .../drivers/iris/i915/iris_kmd_backend.c | 1 + src/intel/common/i915/intel_gem.h | 89 ++++++++++++++++++ src/intel/common/intel_gem.h | 91 ------------------- src/intel/dev/i915/intel_device_info.c | 1 + src/intel/perf/intel_perf.c | 1 + src/intel/vulkan/i915/anv_kmd_backend.c | 1 + 6 files changed, 93 insertions(+), 91 deletions(-) diff --git a/src/gallium/drivers/iris/i915/iris_kmd_backend.c b/src/gallium/drivers/iris/i915/iris_kmd_backend.c index 59771da55c4..e79e942c5d3 100644 --- a/src/gallium/drivers/iris/i915/iris_kmd_backend.c +++ b/src/gallium/drivers/iris/i915/iris_kmd_backend.c @@ -25,6 +25,7 @@ #include #include "common/intel_gem.h" +#include "common/i915/intel_gem.h" #include "dev/intel_debug.h" #include "drm-uapi/i915_drm.h" diff --git a/src/intel/common/i915/intel_gem.h b/src/intel/common/i915/intel_gem.h index b2e4856033c..24e2cc5ad22 100644 --- a/src/intel/common/i915/intel_gem.h +++ b/src/intel/common/i915/intel_gem.h @@ -49,3 +49,92 @@ i915_gem_create_context_ext(int fd, bool i915_gem_supports_protected_context(int fd); bool i915_gem_get_param(int fd, uint32_t param, int *value); bool i915_gem_can_render_on_fd(int fd); + +/** + * A wrapper around DRM_IOCTL_I915_QUERY + * + * Unfortunately, the error semantics of this ioctl are rather annoying so + * it's better to have a common helper. + */ +static inline int +intel_i915_query_flags(int fd, uint64_t query_id, uint32_t flags, + void *buffer, int32_t *buffer_len) +{ + struct drm_i915_query_item item = { + .query_id = query_id, + .length = *buffer_len, + .flags = flags, + .data_ptr = (uintptr_t)buffer, + }; + + struct drm_i915_query args = { + .num_items = 1, + .flags = 0, + .items_ptr = (uintptr_t)&item, + }; + + int ret = intel_ioctl(fd, DRM_IOCTL_I915_QUERY, &args); + if (ret != 0) + return -errno; + else if (item.length < 0) + return item.length; + + *buffer_len = item.length; + return 0; +} + +static inline int +intel_i915_query(int fd, uint64_t query_id, void *buffer, + int32_t *buffer_len) +{ + return intel_i915_query_flags(fd, query_id, 0, buffer, buffer_len); +} + +/** + * Query for the given data, allocating as needed + * + * The caller is responsible for freeing the returned pointer. + */ +static inline void * +intel_i915_query_alloc(int fd, uint64_t query_id, int32_t *query_length) +{ + if (query_length) + *query_length = 0; + + int32_t length = 0; + int ret = intel_i915_query(fd, query_id, NULL, &length); + if (ret < 0) + return NULL; + + void *data = calloc(1, length); + assert(data != NULL); /* This shouldn't happen in practice */ + if (data == NULL) + return NULL; + + ret = intel_i915_query(fd, query_id, data, &length); + assert(ret == 0); /* We should have caught the error above */ + if (ret < 0) { + free(data); + return NULL; + } + + if (query_length) + *query_length = length; + + return data; +} + +static inline void +intel_gem_add_ext(__u64 *ptr, uint32_t ext_name, + struct i915_user_extension *ext) +{ + __u64 *iter = ptr; + + while (*iter != 0) { + iter = (__u64 *) &((struct i915_user_extension *)(uintptr_t)*iter)->next_extension; + } + + ext->name = ext_name; + + *iter = (uintptr_t) ext; +} diff --git a/src/intel/common/intel_gem.h b/src/intel/common/intel_gem.h index da752841c60..795cc736813 100644 --- a/src/intel/common/intel_gem.h +++ b/src/intel/common/intel_gem.h @@ -28,8 +28,6 @@ extern "C" { #endif -#include "drm-uapi/i915_drm.h" - #include #include #include @@ -85,80 +83,6 @@ intel_ioctl(int fd, unsigned long request, void *arg) return ret; } -/** - * A wrapper around DRM_IOCTL_I915_QUERY - * - * Unfortunately, the error semantics of this ioctl are rather annoying so - * it's better to have a common helper. - */ -static inline int -intel_i915_query_flags(int fd, uint64_t query_id, uint32_t flags, - void *buffer, int32_t *buffer_len) -{ - struct drm_i915_query_item item = { - .query_id = query_id, - .length = *buffer_len, - .flags = flags, - .data_ptr = (uintptr_t)buffer, - }; - - struct drm_i915_query args = { - .num_items = 1, - .flags = 0, - .items_ptr = (uintptr_t)&item, - }; - - int ret = intel_ioctl(fd, DRM_IOCTL_I915_QUERY, &args); - if (ret != 0) - return -errno; - else if (item.length < 0) - return item.length; - - *buffer_len = item.length; - return 0; -} - -static inline int -intel_i915_query(int fd, uint64_t query_id, void *buffer, - int32_t *buffer_len) -{ - return intel_i915_query_flags(fd, query_id, 0, buffer, buffer_len); -} - -/** - * Query for the given data, allocating as needed - * - * The caller is responsible for freeing the returned pointer. - */ -static inline void * -intel_i915_query_alloc(int fd, uint64_t query_id, int32_t *query_length) -{ - if (query_length) - *query_length = 0; - - int32_t length = 0; - int ret = intel_i915_query(fd, query_id, NULL, &length); - if (ret < 0) - return NULL; - - void *data = calloc(1, length); - assert(data != NULL); /* This shouldn't happen in practice */ - if (data == NULL) - return NULL; - - ret = intel_i915_query(fd, query_id, data, &length); - assert(ret == 0); /* We should have caught the error above */ - if (ret < 0) { - free(data); - return NULL; - } - - if (query_length) - *query_length = length; - - return data; -} - bool intel_gem_supports_syncobj_wait(int fd); bool @@ -199,19 +123,4 @@ bool intel_gem_create_context_ext(int fd, enum intel_gem_create_context_flags fl bool intel_gem_supports_protected_context(int fd, enum intel_kmd_type kmd_type); -static inline void -intel_gem_add_ext(__u64 *ptr, uint32_t ext_name, - struct i915_user_extension *ext) -{ - __u64 *iter = ptr; - - while (*iter != 0) { - iter = (__u64 *) &((struct i915_user_extension *)(uintptr_t)*iter)->next_extension; - } - - ext->name = ext_name; - - *iter = (uintptr_t) ext; -} - #endif /* INTEL_GEM_H */ diff --git a/src/intel/dev/i915/intel_device_info.c b/src/intel/dev/i915/intel_device_info.c index cfc29e2f8e5..c2fd7c7edca 100644 --- a/src/intel/dev/i915/intel_device_info.c +++ b/src/intel/dev/i915/intel_device_info.c @@ -28,6 +28,7 @@ #include "intel/dev/intel_hwconfig.h" #include "intel/common/intel_gem.h" +#include "intel/common/i915/intel_gem.h" #include "util/bitscan.h" #include "util/log.h" diff --git a/src/intel/perf/intel_perf.c b/src/intel/perf/intel_perf.c index 69d8d06ed24..52f4d989e7a 100644 --- a/src/intel/perf/intel_perf.c +++ b/src/intel/perf/intel_perf.c @@ -36,6 +36,7 @@ #include #include "common/intel_gem.h" +#include "common/i915/intel_gem.h" #include "dev/intel_debug.h" #include "dev/intel_device_info.h" diff --git a/src/intel/vulkan/i915/anv_kmd_backend.c b/src/intel/vulkan/i915/anv_kmd_backend.c index a7673fce2b2..cdf55591a51 100644 --- a/src/intel/vulkan/i915/anv_kmd_backend.c +++ b/src/intel/vulkan/i915/anv_kmd_backend.c @@ -28,6 +28,7 @@ #include "i915/anv_batch_chain.h" #include "drm-uapi/i915_drm.h" +#include "intel/common/i915/intel_gem.h" static uint32_t i915_gem_create(struct anv_device *device,