From de465b1e6cb73af2459d598ab6d418030bd6bae9 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Tue, 17 May 2022 17:16:13 +0000 Subject: [PATCH] Move drm wrappers to a separate file Related-To: NEO-6852 Signed-off-by: Mateusz Jablonski --- .../linux/drm_direct_submission.inl | 1 + .../source/os_interface/linux/CMakeLists.txt | 2 + .../os_interface/linux/device_time_drm.cpp | 1 + .../os_interface/linux/drm_buffer_object.cpp | 1 + .../os_interface/linux/drm_command_stream.inl | 1 + .../os_interface/linux/drm_memory_manager.cpp | 1 + .../os_interface/linux/drm_null_device.h | 1 + .../os_interface/linux/drm_wrappers.cpp | 48 +++++++++++++++++ .../source/os_interface/linux/drm_wrappers.h | 52 +++++++++++++++++++ .../os_interface/linux/ioctl_helper.cpp | 33 +----------- .../source/os_interface/linux/ioctl_helper.h | 43 +-------------- .../linux/ioctl_helper_prelim.cpp | 1 + .../common/mocks/linux/mock_drm_wrappers.h | 2 +- 13 files changed, 113 insertions(+), 74 deletions(-) create mode 100644 shared/source/os_interface/linux/drm_wrappers.cpp create mode 100644 shared/source/os_interface/linux/drm_wrappers.h diff --git a/shared/source/direct_submission/linux/drm_direct_submission.inl b/shared/source/direct_submission/linux/drm_direct_submission.inl index 94c682dff8..8c01fd9b50 100644 --- a/shared/source/direct_submission/linux/drm_direct_submission.inl +++ b/shared/source/direct_submission/linux/drm_direct_submission.inl @@ -12,6 +12,7 @@ #include "shared/source/os_interface/linux/drm_allocation.h" #include "shared/source/os_interface/linux/drm_buffer_object.h" #include "shared/source/os_interface/linux/drm_neo.h" +#include "shared/source/os_interface/linux/drm_wrappers.h" #include "shared/source/os_interface/linux/os_context_linux.h" #include "shared/source/utilities/wait_util.h" diff --git a/shared/source/os_interface/linux/CMakeLists.txt b/shared/source/os_interface/linux/CMakeLists.txt index def26eb120..ba213942eb 100644 --- a/shared/source/os_interface/linux/CMakeLists.txt +++ b/shared/source/os_interface/linux/CMakeLists.txt @@ -41,6 +41,8 @@ set(NEO_CORE_OS_INTERFACE_LINUX ${CMAKE_CURRENT_SOURCE_DIR}/drm_memory_operations_handler_default.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drm_memory_operations_handler_default.h ${CMAKE_CURRENT_SOURCE_DIR}/drm_memory_manager_create_multi_host_allocation.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/drm_wrappers.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/drm_wrappers.h ${CMAKE_CURRENT_SOURCE_DIR}/hw_info_config_drm.cpp ${CMAKE_CURRENT_SOURCE_DIR}/hw_device_id.h ${CMAKE_CURRENT_SOURCE_DIR}/hw_device_id_linux.cpp diff --git a/shared/source/os_interface/linux/device_time_drm.cpp b/shared/source/os_interface/linux/device_time_drm.cpp index cf7d9a34cb..074fbfaf52 100644 --- a/shared/source/os_interface/linux/device_time_drm.cpp +++ b/shared/source/os_interface/linux/device_time_drm.cpp @@ -9,6 +9,7 @@ #include "shared/source/helpers/register_offsets.h" #include "shared/source/os_interface/linux/drm_neo.h" +#include "shared/source/os_interface/linux/drm_wrappers.h" #include "shared/source/os_interface/os_interface.h" #include "drm/i915_drm.h" diff --git a/shared/source/os_interface/linux/drm_buffer_object.cpp b/shared/source/os_interface/linux/drm_buffer_object.cpp index dfcbccf97c..5caf7a848b 100644 --- a/shared/source/os_interface/linux/drm_buffer_object.cpp +++ b/shared/source/os_interface/linux/drm_buffer_object.cpp @@ -12,6 +12,7 @@ #include "shared/source/os_interface/linux/drm_memory_manager.h" #include "shared/source/os_interface/linux/drm_memory_operations_handler.h" #include "shared/source/os_interface/linux/drm_neo.h" +#include "shared/source/os_interface/linux/drm_wrappers.h" #include "shared/source/os_interface/linux/ioctl_helper.h" #include "shared/source/os_interface/linux/os_context_linux.h" #include "shared/source/os_interface/linux/os_time_linux.h" diff --git a/shared/source/os_interface/linux/drm_command_stream.inl b/shared/source/os_interface/linux/drm_command_stream.inl index eaf8e77b1e..0a748bd54f 100644 --- a/shared/source/os_interface/linux/drm_command_stream.inl +++ b/shared/source/os_interface/linux/drm_command_stream.inl @@ -23,6 +23,7 @@ #include "shared/source/os_interface/linux/drm_memory_manager.h" #include "shared/source/os_interface/linux/drm_memory_operations_handler.h" #include "shared/source/os_interface/linux/drm_neo.h" +#include "shared/source/os_interface/linux/drm_wrappers.h" #include "shared/source/os_interface/linux/os_context_linux.h" #include "shared/source/os_interface/os_interface.h" diff --git a/shared/source/os_interface/linux/drm_memory_manager.cpp b/shared/source/os_interface/linux/drm_memory_manager.cpp index 129ea43acd..2c91a1308a 100644 --- a/shared/source/os_interface/linux/drm_memory_manager.cpp +++ b/shared/source/os_interface/linux/drm_memory_manager.cpp @@ -27,6 +27,7 @@ #include "shared/source/memory_manager/residency.h" #include "shared/source/os_interface/linux/allocator_helper.h" #include "shared/source/os_interface/linux/drm_memory_operations_handler.h" +#include "shared/source/os_interface/linux/drm_wrappers.h" #include "shared/source/os_interface/linux/os_context_linux.h" #include "shared/source/os_interface/os_interface.h" diff --git a/shared/source/os_interface/linux/drm_null_device.h b/shared/source/os_interface/linux/drm_null_device.h index eef7474b30..fca60ad42a 100644 --- a/shared/source/os_interface/linux/drm_null_device.h +++ b/shared/source/os_interface/linux/drm_null_device.h @@ -9,6 +9,7 @@ #include "shared/source/helpers/register_offsets.h" #include "shared/source/os_interface/linux/device_time_drm.h" #include "shared/source/os_interface/linux/drm_neo.h" +#include "shared/source/os_interface/linux/drm_wrappers.h" #include "drm/i915_drm.h" diff --git a/shared/source/os_interface/linux/drm_wrappers.cpp b/shared/source/os_interface/linux/drm_wrappers.cpp new file mode 100644 index 0000000000..b5b2c8b097 --- /dev/null +++ b/shared/source/os_interface/linux/drm_wrappers.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/os_interface/linux/drm_wrappers.h" + +#include "drm/i915_drm.h" + +#include + +namespace NEO { + +static_assert(sizeof(GemCreate) == sizeof(drm_i915_gem_create)); +static_assert(offsetof(GemCreate, size) == offsetof(drm_i915_gem_create, size)); +static_assert(offsetof(GemCreate, handle) == offsetof(drm_i915_gem_create, handle)); + +static_assert(sizeof(GemUserPtr) == sizeof(drm_i915_gem_userptr)); +static_assert(offsetof(GemUserPtr, userPtr) == offsetof(drm_i915_gem_userptr, user_ptr)); +static_assert(offsetof(GemUserPtr, userSize) == offsetof(drm_i915_gem_userptr, user_size)); +static_assert(offsetof(GemUserPtr, flags) == offsetof(drm_i915_gem_userptr, flags)); +static_assert(offsetof(GemUserPtr, handle) == offsetof(drm_i915_gem_userptr, handle)); + +static_assert(sizeof(RegisterRead) == sizeof(drm_i915_reg_read)); +static_assert(offsetof(RegisterRead, offset) == offsetof(drm_i915_reg_read, offset)); +static_assert(offsetof(RegisterRead, value) == offsetof(drm_i915_reg_read, val)); + +static_assert(sizeof(GemSetTiling) == sizeof(drm_i915_gem_set_tiling)); +static_assert(offsetof(GemSetTiling, handle) == offsetof(drm_i915_gem_set_tiling, handle)); +static_assert(offsetof(GemSetTiling, tilingMode) == offsetof(drm_i915_gem_set_tiling, tiling_mode)); +static_assert(offsetof(GemSetTiling, stride) == offsetof(drm_i915_gem_set_tiling, stride)); +static_assert(offsetof(GemSetTiling, swizzleMode) == offsetof(drm_i915_gem_set_tiling, swizzle_mode)); + +static_assert(sizeof(GemGetTiling) == sizeof(drm_i915_gem_get_tiling)); +static_assert(offsetof(GemGetTiling, handle) == offsetof(drm_i915_gem_get_tiling, handle)); +static_assert(offsetof(GemGetTiling, tilingMode) == offsetof(drm_i915_gem_get_tiling, tiling_mode)); +static_assert(offsetof(GemGetTiling, swizzleMode) == offsetof(drm_i915_gem_get_tiling, swizzle_mode)); +static_assert(offsetof(GemGetTiling, physSwizzleMode) == offsetof(drm_i915_gem_get_tiling, phys_swizzle_mode)); + +bool GemGetTiling::isTilingDisabled() const { return I915_TILING_NONE == tilingMode; } + +static_assert(sizeof(ExecObject) == sizeof(drm_i915_gem_exec_object2)); + +static_assert(sizeof(ExecBuffer) == sizeof(drm_i915_gem_execbuffer2)); + +} // namespace NEO diff --git a/shared/source/os_interface/linux/drm_wrappers.h b/shared/source/os_interface/linux/drm_wrappers.h new file mode 100644 index 0000000000..ad51b736ea --- /dev/null +++ b/shared/source/os_interface/linux/drm_wrappers.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once +#include +namespace NEO { + +struct RegisterRead { + uint64_t offset; + uint64_t value; +}; + +struct ExecObject { + uint8_t data[56]; +}; + +struct ExecBuffer { + uint8_t data[64]; +}; + +struct GemCreate { + uint64_t size; + uint32_t handle; +}; + +struct GemUserPtr { + uint64_t userPtr; + uint64_t userSize; + uint32_t flags; + uint32_t handle; +}; + +struct GemSetTiling { + uint32_t handle; + uint32_t tilingMode; + uint32_t stride; + uint32_t swizzleMode; +}; + +struct GemGetTiling { + bool isTilingDisabled() const; + + uint32_t handle; + uint32_t tilingMode; + uint32_t swizzleMode; + uint32_t physSwizzleMode; +}; +} // namespace NEO diff --git a/shared/source/os_interface/linux/ioctl_helper.cpp b/shared/source/os_interface/linux/ioctl_helper.cpp index de0560ff6e..04b3c97507 100644 --- a/shared/source/os_interface/linux/ioctl_helper.cpp +++ b/shared/source/os_interface/linux/ioctl_helper.cpp @@ -9,6 +9,7 @@ #include "shared/source/helpers/ptr_math.h" #include "shared/source/os_interface/linux/drm_neo.h" +#include "shared/source/os_interface/linux/drm_wrappers.h" #include "drm/i915_drm.h" @@ -18,36 +19,6 @@ uint32_t IoctlHelper::ioctl(Drm *drm, unsigned long request, void *arg) { return drm->ioctl(request, arg); } -static_assert(sizeof(GemCreate) == sizeof(drm_i915_gem_create)); -static_assert(offsetof(GemCreate, size) == offsetof(drm_i915_gem_create, size)); -static_assert(offsetof(GemCreate, handle) == offsetof(drm_i915_gem_create, handle)); - -static_assert(sizeof(GemUserPtr) == sizeof(drm_i915_gem_userptr)); -static_assert(offsetof(GemUserPtr, userPtr) == offsetof(drm_i915_gem_userptr, user_ptr)); -static_assert(offsetof(GemUserPtr, userSize) == offsetof(drm_i915_gem_userptr, user_size)); -static_assert(offsetof(GemUserPtr, flags) == offsetof(drm_i915_gem_userptr, flags)); -static_assert(offsetof(GemUserPtr, handle) == offsetof(drm_i915_gem_userptr, handle)); - -static_assert(sizeof(RegisterRead) == sizeof(drm_i915_reg_read)); -static_assert(offsetof(RegisterRead, offset) == offsetof(drm_i915_reg_read, offset)); -static_assert(offsetof(RegisterRead, value) == offsetof(drm_i915_reg_read, val)); - -static_assert(sizeof(GemSetTiling) == sizeof(drm_i915_gem_set_tiling)); -static_assert(offsetof(GemSetTiling, handle) == offsetof(drm_i915_gem_set_tiling, handle)); -static_assert(offsetof(GemSetTiling, tilingMode) == offsetof(drm_i915_gem_set_tiling, tiling_mode)); -static_assert(offsetof(GemSetTiling, stride) == offsetof(drm_i915_gem_set_tiling, stride)); -static_assert(offsetof(GemSetTiling, swizzleMode) == offsetof(drm_i915_gem_set_tiling, swizzle_mode)); - -static_assert(sizeof(GemGetTiling) == sizeof(drm_i915_gem_get_tiling)); -static_assert(offsetof(GemGetTiling, handle) == offsetof(drm_i915_gem_get_tiling, handle)); -static_assert(offsetof(GemGetTiling, tilingMode) == offsetof(drm_i915_gem_get_tiling, tiling_mode)); -static_assert(offsetof(GemGetTiling, swizzleMode) == offsetof(drm_i915_gem_get_tiling, swizzle_mode)); -static_assert(offsetof(GemGetTiling, physSwizzleMode) == offsetof(drm_i915_gem_get_tiling, phys_swizzle_mode)); - -bool GemGetTiling::isTilingDisabled() const { return I915_TILING_NONE == tilingMode; } - -static_assert(sizeof(ExecObject) == sizeof(drm_i915_gem_exec_object2)); - void IoctlHelper::fillExecObject(ExecObject &execObject, uint32_t handle, uint64_t gpuAddress, uint32_t drmContextId, bool bindInfo, bool isMarkedForCapture) { auto &drmExecObject = *reinterpret_cast(execObject.data); @@ -82,8 +53,6 @@ void IoctlHelper::logExecObject(const ExecObject &execObject, std::stringstream << ", size: " << size << " }\n"; } -static_assert(sizeof(ExecBuffer) == sizeof(drm_i915_gem_execbuffer2)); - void IoctlHelper::fillExecBuffer(ExecBuffer &execBuffer, uintptr_t buffersPtr, uint32_t bufferCount, uint32_t startOffset, uint32_t size, uint64_t flags, uint32_t drmContextId) { auto &drmExecBuffer = *reinterpret_cast(execBuffer.data); drmExecBuffer.buffers_ptr = buffersPtr; diff --git a/shared/source/os_interface/linux/ioctl_helper.h b/shared/source/os_interface/linux/ioctl_helper.h index 1fbe79e8c2..cb3209721a 100644 --- a/shared/source/os_interface/linux/ioctl_helper.h +++ b/shared/source/os_interface/linux/ioctl_helper.h @@ -25,6 +25,8 @@ class Drm; class IoctlHelper; enum class CacheRegion : uint16_t; struct HardwareInfo; +struct ExecBuffer; +struct ExecObject; extern IoctlHelper *ioctlHelperFactory[IGFX_MAX_PRODUCT]; @@ -70,51 +72,10 @@ struct UuidRegisterResult { uint32_t handle; }; -struct RegisterRead { - uint64_t offset; - uint64_t value; -}; - using MemRegionsVec = StackVec; using VmBindExtSetPatT = uint8_t[40]; using VmBindExtUserFenceT = uint8_t[56]; -struct ExecObject { - uint8_t data[56]; -}; - -struct ExecBuffer { - uint8_t data[64]; -}; - -struct GemCreate { - uint64_t size; - uint32_t handle; -}; - -struct GemUserPtr { - uint64_t userPtr; - uint64_t userSize; - uint32_t flags; - uint32_t handle; -}; - -struct GemSetTiling { - uint32_t handle; - uint32_t tilingMode; - uint32_t stride; - uint32_t swizzleMode; -}; - -struct GemGetTiling { - bool isTilingDisabled() const; - - uint32_t handle; - uint32_t tilingMode; - uint32_t swizzleMode; - uint32_t physSwizzleMode; -}; - class IoctlHelper { public: virtual ~IoctlHelper() {} diff --git a/shared/source/os_interface/linux/ioctl_helper_prelim.cpp b/shared/source/os_interface/linux/ioctl_helper_prelim.cpp index 4086815b8c..5cbcde4db0 100644 --- a/shared/source/os_interface/linux/ioctl_helper_prelim.cpp +++ b/shared/source/os_interface/linux/ioctl_helper_prelim.cpp @@ -12,6 +12,7 @@ #include "shared/source/helpers/ptr_math.h" #include "shared/source/helpers/string.h" #include "shared/source/os_interface/linux/cache_info.h" +#include "shared/source/os_interface/linux/drm_wrappers.h" #include "shared/source/os_interface/linux/ioctl_helper.h" #include "third_party/uapi/prelim/drm/i915_drm.h" diff --git a/shared/test/common/mocks/linux/mock_drm_wrappers.h b/shared/test/common/mocks/linux/mock_drm_wrappers.h index 36f4ea0506..82266d3381 100644 --- a/shared/test/common/mocks/linux/mock_drm_wrappers.h +++ b/shared/test/common/mocks/linux/mock_drm_wrappers.h @@ -6,7 +6,7 @@ */ #pragma once -#include "shared/source/os_interface/linux/ioctl_helper.h" +#include "shared/source/os_interface/linux/drm_wrappers.h" namespace NEO {