From 3ee693b2bad364d08d8d349c1467d2c3def6e705 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 11 Jan 2020 20:54:35 +0000 Subject: [PATCH 01/14] -D__linux__ is predefined on Linux and illegal on non-Linux In file included from media_driver/agnostic/common/cm/cm_hal.cpp:26: In file included from media_driver/agnostic/common/os/mos_os.h:30: In file included from media_driver/agnostic/common/os/mos_defs.h:38: In file included from /usr/include/c++/v1/stdio.h:101: /usr/include/c++/v1/__config:219:12: fatal error: 'features.h' file not found # include ^~~~~~~~~~~~ --- media_driver/cmake/linux/media_compile_flags_linux.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/media_driver/cmake/linux/media_compile_flags_linux.cmake b/media_driver/cmake/linux/media_compile_flags_linux.cmake index 04729a2bd23..d9ba9bb90ce 100755 --- a/media_driver/cmake/linux/media_compile_flags_linux.cmake +++ b/media_driver/cmake/linux/media_compile_flags_linux.cmake @@ -89,7 +89,6 @@ endif() if(NOT ${PLATFORM} STREQUAL "android") set(MEDIA_COMPILER_FLAGS_COMMON ${MEDIA_COMPILER_FLAGS_COMMON} - -D__linux__ -fno-tree-pre -fPIC -Wl,--no-as-needed From a4313cae85334a1852c9aa414639da5ae8aace1d Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 11 Jan 2020 21:56:35 +0000 Subject: [PATCH 02/14] Avoid __fastcall conflicting with system definition In file included from media_driver/agnostic/common/cm/cm_kernel_rt.cpp:35: In file included from media_driver/agnostic/common/cm/cm_mov_inst.h:31: In file included from media_driver/agnostic/common/cm/cm_mem.h:128: media_driver/linux/common/cm/hal/cm_mem_os.h:33:9: error: '__fastcall' macro redefined [-Werror,-Wmacro-redefined] #define __fastcall ^ /usr/include/sys/cdefs.h:372:9: note: previous definition is here #define __fastcall __attribute__((__fastcall__)) ^ --- media_driver/linux/common/cm/hal/osservice/cm_mem_os.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/media_driver/linux/common/cm/hal/osservice/cm_mem_os.h b/media_driver/linux/common/cm/hal/osservice/cm_mem_os.h index e911e4e7e40..fb95bf299c8 100644 --- a/media_driver/linux/common/cm/hal/osservice/cm_mem_os.h +++ b/media_driver/linux/common/cm/hal/osservice/cm_mem_os.h @@ -30,6 +30,9 @@ #include typedef uintptr_t UINT_PTR; +#ifdef __fastcall + #undef __fastcall +#endif #define __fastcall #define __noop From 4980335d82c42f8dd0f11b3839e70c4307823627 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Mon, 29 Nov 2021 23:05:27 +0000 Subject: [PATCH 03/14] Avoid ALIGN conflicting with system definition In file included from media_driver/linux/gen12/ddi/media_libva_caps_g12.cpp:38: media_driver/linux/common/os/i915/include/mos_bufmgr_priv.h:351:9: error: 'ALIGN' macro redefined [-Werror,-Wmacro-redefined] #define ALIGN(value, alignment) ((value + alignment - 1) & ~(alignment - 1)) ^ /usr/include/machine/param.h:79:9: note: previous definition is here #define ALIGN(p) _ALIGN(p) ^ In file included from media_driver/linux/gen12/ddi/media_libva_caps_g12.cpp:30: In file included from media_driver/linux/common/ddi/media_libva.h:52: In file included from media_driver/agnostic/common/codec/hal/codechal_decoder.h:40: In file included from media_driver/agnostic/common/cm/cm_wrapper.h:31: In file included from media_driver/linux/common/cm/hal/cm_wrapper_os.h:31: In file included from media_driver/agnostic/common/cm/cm_def.h:31: In file included from media_driver/agnostic/common/cm/cm_common.h:31: In file included from media_driver/linux/common/cm/hal/cm_innerdef_os.h:42: In file included from /usr/include/pthread_np.h:36: In file included from /usr/include/sys/param.h:162: /usr/include/machine/param.h:79:2: error: bootlegging test --- media_driver/linux/common/os/i915/include/mos_bufmgr_priv.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/media_driver/linux/common/os/i915/include/mos_bufmgr_priv.h b/media_driver/linux/common/os/i915/include/mos_bufmgr_priv.h index 20a3f4bd64a..79c252abfd9 100644 --- a/media_driver/linux/common/os/i915/include/mos_bufmgr_priv.h +++ b/media_driver/linux/common/os/i915/include/mos_bufmgr_priv.h @@ -348,6 +348,10 @@ struct mos_bufmgr { bool has_full_vd = true; }; +#ifdef ALIGN +/* via on FreeBSD also defines ALIGN */ +#undef ALIGN +#endif #define ALIGN(value, alignment) ((value + alignment - 1) & ~(alignment - 1)) #define ROUND_UP_TO(x, y) (((x) + (y) - 1) / (y) * (y)) #define ROUND_UP_TO_MB(x) ROUND_UP_TO((x), 1024*1024) From fcfc4431f4b78abe5c55a502c2a3e27f09f001ec Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 11 Jan 2020 22:25:22 +0000 Subject: [PATCH 04/14] Avoid -ldl if not required or not supported ld: error: unable to find library -ldl --- cmrtlib/linux/CMakeLists.txt | 2 +- media_driver/linux/ult/ult_app/CMakeLists.txt | 2 +- media_driver/media_top_cmake.cmake | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmrtlib/linux/CMakeLists.txt b/cmrtlib/linux/CMakeLists.txt index b066138d9df..c8f7e74f87f 100644 --- a/cmrtlib/linux/CMakeLists.txt +++ b/cmrtlib/linux/CMakeLists.txt @@ -101,7 +101,7 @@ set(CMRT_VERSION ${CMRT_VERSION_MAJOR}.${CMRT_VERSION_MINOR}.${CMRT_VERSION_PATC set_target_properties(igfxcmrt PROPERTIES VERSION ${CMRT_VERSION}) set_target_properties(igfxcmrt PROPERTIES SOVERSION ${CMRT_VERSION_MAJOR}) -target_link_libraries( igfxcmrt dl va rt ${GCC_SECURE_LINK_FLAGS}) +target_link_libraries( igfxcmrt ${CMAKE_DL_LIBS} va rt ${GCC_SECURE_LINK_FLAGS}) include(GNUInstallDirs) diff --git a/media_driver/linux/ult/ult_app/CMakeLists.txt b/media_driver/linux/ult/ult_app/CMakeLists.txt index 98c7ad9585c..5edb283eb41 100644 --- a/media_driver/linux/ult/ult_app/CMakeLists.txt +++ b/media_driver/linux/ult/ult_app/CMakeLists.txt @@ -61,7 +61,7 @@ else () endif () add_executable(devult ${SOURCES}) -target_link_libraries(devult libgtest libdl.so) +target_link_libraries(devult libgtest ${CMAKE_DL_LIBS}) if (DEFINED BYPASS_MEDIA_ULT AND "${BYPASS_MEDIA_ULT}" STREQUAL "yes") # must explictly pass along BYPASS_MEDIA_ULT as yes then could bypass the running of media ult diff --git a/media_driver/media_top_cmake.cmake b/media_driver/media_top_cmake.cmake index 2d223d8d24f..fff6d60f10d 100755 --- a/media_driver/media_top_cmake.cmake +++ b/media_driver/media_top_cmake.cmake @@ -202,7 +202,7 @@ MediaAddCommonTargetDefines(${LIB_NAME}_CP) bs_ufo_link_libraries_noBsymbolic( ${LIB_NAME} "${INCLUDED_LIBS}" - "${PKG_PCIACCESS_LIBRARIES} m pthread dl" + "${PKG_PCIACCESS_LIBRARIES} m pthread ${CMAKE_DL_LIBS}" ) if (NOT DEFINED INCLUDED_LIBS OR "${INCLUDED_LIBS}" STREQUAL "") From 77382f10e352ed3733cf2b1db9b275dab3eb8ee7 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 11 Jan 2020 21:04:51 +0000 Subject: [PATCH 05/14] Clang forbids downcasting pthread_t if it's a pointer media_driver/media_driver_next/linux/common/os/mos_utilities_specific_next.cpp:1693:12: error: cast from pointer to smaller type 'uint32_t' (aka 'unsigned int') loses information return (uint32_t)pthread_self(); ^~~~~~~~~~~~~~~~~~~~~~~~ --- .../linux/common/os/osservice/mos_utilities_specific.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp b/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp index 4e3c6e016c7..58083d796d5 100644 --- a/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp +++ b/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp @@ -2094,7 +2094,7 @@ uint32_t MosUtilities::MosGetThreadId( uint32_t MosUtilities::MosGetCurrentThreadId() { - return (uint32_t)pthread_self(); + return (uintptr_t)pthread_self(); } MOS_STATUS MosUtilities::MosWaitThread( From 4440a982d23595f2daebe0a0bf609adc26835c3b Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 11 Jan 2020 21:08:31 +0000 Subject: [PATCH 06/14] makedev() is defined in on BSDs and on Solaris In file included from cmrtlib/linux/hardware/cm_device_os.cpp:24: cmrtlib/linux/../linux/hardware/drm_device.h:42:10: fatal error: 'sys/sysmacros.h' file not found #include // ^~~~~~~~~~~~~~~~~ media_driver/linux/common/os/i915/xf86drm.c:50:10: fatal error: 'sys/sysmacros.h' file not found #include ^~~~~~~~~~~~~~~~~ media_driver/linux/ult/libdrm_mock/xf86drm_mock.c:50:10: fatal error: 'sys/sysmacros.h' file not found #include ^~~~~~~~~~~~~~~~~ --- cmrtlib/linux/hardware/drm_device.h | 6 +++--- media_driver/linux/common/os/i915/xf86drm.c | 6 ++++-- media_driver/linux/ult/libdrm_mock/xf86drm_mock.c | 7 ++++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/cmrtlib/linux/hardware/drm_device.h b/cmrtlib/linux/hardware/drm_device.h index 33aea72dbb8..48cc420ebd4 100644 --- a/cmrtlib/linux/hardware/drm_device.h +++ b/cmrtlib/linux/hardware/drm_device.h @@ -39,16 +39,16 @@ #include #include #include -#include // +#include #include #define stat_t struct stat #include #include #include -#ifdef MAJOR_IN_MKDEV +#ifdef __sun //#ifdef MAJOR_IN_MKDEV #include #endif -#ifdef MAJOR_IN_SYSMACROS +#if defined(__GLIBC__) || defined(__linux__) //#ifdef MAJOR_IN_SYSMACROS #include #endif #include diff --git a/media_driver/linux/common/os/i915/xf86drm.c b/media_driver/linux/common/os/i915/xf86drm.c index d0fc1b7aca4..6adfdcfdffb 100644 --- a/media_driver/linux/common/os/i915/xf86drm.c +++ b/media_driver/linux/common/os/i915/xf86drm.c @@ -47,15 +47,17 @@ #include #include #include -#include #include #define stat_t struct stat #include #include #include -#ifdef HAVE_SYS_MKDEV_H +#ifdef __sun //#ifdef MAJOR_IN_MKDEV # include /* defines major(), minor(), and makedev() on Solaris */ #endif +#if defined(__GLIBC__) || defined(__linux__) //#ifdef MAJOR_IN_SYSMACROS +# include +#endif /* Not all systems have MAP_FAILED defined */ #ifndef MAP_FAILED diff --git a/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c b/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c index f888fab0a86..f351bb3001c 100644 --- a/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c +++ b/media_driver/linux/ult/libdrm_mock/xf86drm_mock.c @@ -47,16 +47,17 @@ #include #include #include -#include #include #define stat_t struct stat #include #include #include -#ifdef HAVE_SYS_MKDEV_H +#ifdef __sun //#ifdef MAJOR_IN_MKDEV # include /* defines major(), minor(), and makedev() on Solaris */ #endif -#include +#if defined(__GLIBC__) || defined(__linux__) //#ifdef MAJOR_IN_SYSMACROS +# include +#endif /* Not all systems have MAP_FAILED defined */ #ifndef MAP_FAILED From 8249202403a4595c93312ff71fcfbb892b3754a5 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 11 Jan 2020 21:12:39 +0000 Subject: [PATCH 07/14] memalign is Linux-specific, so use C11 aligned_alloc instead In file included from cmrtlib/agnostic/hardware/cm_queue.cpp:22: In file included from cmrtlib/linux/../agnostic/hardware/cm_queue.h:26: cmrtlib/linux/../linux/share/cm_def_os.h:37:10: fatal error: 'malloc.h' file not found #include ^~~~~~~~~~ In file included from cmrtlib/agnostic/share/cm_avs_state_msg_ex.cpp:22: In file included from cmrtlib/linux/../agnostic/share/cm_def.h:26: cmrtlib/linux/../linux/share/cm_def_os.h:104:10: error: use of undeclared identifier 'memalign' return memalign(alignment, size); ^ media_driver/agnostic/common/os/mos_utilities.c:36:10: fatal error: 'malloc.h' file not found #include // For memalign ^~~~~~~~~~ media_driver/agnostic/common/os/mos_utilities.c:4047:11: error: use of undeclared identifier 'memalign' ptr = _aligned_malloc(size, alignment); ^ media_driver/linux/common/os/mos_utilities_specific.h:91:43: note: expanded from macro '_aligned_malloc' #define _aligned_malloc(size, alignment) memalign(alignment, size) ^ --- cmrtlib/linux/share/cm_def_os.h | 6 +++--- cmrtlib/linux/share/cm_rt_def_os.h | 3 +-- media_driver/agnostic/ult/cm/buffer_up_test.cpp | 1 - media_driver/linux/ult/ult_app/cm/cm_test.h | 3 +-- media_softlet/agnostic/common/os/mos_utilities_next.cpp | 1 - .../linux/common/os/osservice/mos_utilities_specific.h | 3 +-- 6 files changed, 6 insertions(+), 11 deletions(-) diff --git a/cmrtlib/linux/share/cm_def_os.h b/cmrtlib/linux/share/cm_def_os.h index 9fe41bc33cc..eae77df943b 100644 --- a/cmrtlib/linux/share/cm_def_os.h +++ b/cmrtlib/linux/share/cm_def_os.h @@ -32,15 +32,15 @@ #define Display unsigned int #endif +#include #include #include "pthread.h" -#include //////////////////////////////////////////////////////////////////////////////////// // MS-specific defines/typedefs, which are absent under Linux but still used //////////////////////////////////////////////////////////////////////////////////// -#define _aligned_malloc(size, alignment) memalign(alignment, size) +#define _aligned_malloc(size, alignment) aligned_alloc(alignment, size) #define _aligned_free(ptr) free(ptr) typedef uint8_t BOOLEAN, *PBOOLEAN; //////////////////////////////////////////////////////////////////////////////////// @@ -101,7 +101,7 @@ typedef enum _VACMTEXTUREFILTERTYPE { inline void * CM_ALIGNED_MALLOC(size_t size, size_t alignment) { - return memalign(alignment, size); + return aligned_alloc(alignment, size); } inline void CM_ALIGNED_FREE(void * memory) diff --git a/cmrtlib/linux/share/cm_rt_def_os.h b/cmrtlib/linux/share/cm_rt_def_os.h index b9f15f4bb86..8d6baee49c4 100644 --- a/cmrtlib/linux/share/cm_rt_def_os.h +++ b/cmrtlib/linux/share/cm_rt_def_os.h @@ -36,7 +36,6 @@ #include #include #include -#include #include #include #include @@ -175,7 +174,7 @@ template<> inline const char * CM_TYPE_NAME_UNMANGLED() { return "double inline void * CM_ALIGNED_MALLOC(size_t size, size_t alignment) { - return memalign(alignment, size); + return aligned_alloc(alignment, size); } inline void CM_ALIGNED_FREE(void * memory) diff --git a/media_driver/agnostic/ult/cm/buffer_up_test.cpp b/media_driver/agnostic/ult/cm/buffer_up_test.cpp index 67982c2d467..515bc115110 100644 --- a/media_driver/agnostic/ult/cm/buffer_up_test.cpp +++ b/media_driver/agnostic/ult/cm/buffer_up_test.cpp @@ -21,7 +21,6 @@ */ #include "cm_test.h" -#include class BufferUPTest: public CmTest { diff --git a/media_driver/linux/ult/ult_app/cm/cm_test.h b/media_driver/linux/ult/ult_app/cm/cm_test.h index b6ab1784953..e05ffdab138 100644 --- a/media_driver/linux/ult/ult_app/cm/cm_test.h +++ b/media_driver/linux/ult/ult_app/cm/cm_test.h @@ -23,7 +23,6 @@ #ifndef MEDIADRIVER_LINUX_CODECHAL_ULT_ULTAPP_CMTEST_H_ #define MEDIADRIVER_LINUX_CODECHAL_ULT_ULTAPP_CMTEST_H_ -#include #include "gtest/gtest.h" #include "mock_device.h" #include "../memory_leak_detector.h" @@ -34,7 +33,7 @@ class CmTest: public testing::Test { public: static void* AllocateAlignedMemory(size_t size, size_t alignment) - { return memalign(alignment, size); } + { return aligned_alloc(alignment, size); } static void FreeAlignedMemory(void *memory) { free(memory); } diff --git a/media_softlet/agnostic/common/os/mos_utilities_next.cpp b/media_softlet/agnostic/common/os/mos_utilities_next.cpp index b9780dbd2ce..619c5e26b0f 100644 --- a/media_softlet/agnostic/common/os/mos_utilities_next.cpp +++ b/media_softlet/agnostic/common/os/mos_utilities_next.cpp @@ -27,7 +27,6 @@ #include #include //open -#include // For memalign #include // atoi atol #include #include //for simulate random memory allcation failure diff --git a/media_softlet/linux/common/os/osservice/mos_utilities_specific.h b/media_softlet/linux/common/os/osservice/mos_utilities_specific.h index 8a139bcd7c1..a9121419a5e 100644 --- a/media_softlet/linux/common/os/osservice/mos_utilities_specific.h +++ b/media_softlet/linux/common/os/osservice/mos_utilities_specific.h @@ -27,7 +27,6 @@ #define __MOS_UTILITIES_SPECIFIC_H__ #include -#include #include "mos_defs.h" #include "media_class_trace.h" @@ -35,7 +34,7 @@ #define NOT_FOUND -1 -#define _aligned_malloc(size, alignment) memalign(alignment, size) +#define _aligned_malloc(size, alignment) aligned_alloc(alignment, size) #define _aligned_free(ptr) free(ptr) typedef void (*MOS_UserFeatureCallback)( void*, bool); From ab1209a220eb81946310f5883bf079a77ff6261e Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 11 Jan 2020 21:18:59 +0000 Subject: [PATCH 08/14] Get thread ID on more platforms media_driver/agnostic/common/cm/cm_task_internal.cpp:896:39: error: use of undeclared identifier 'SYS_gettid' m_taskProfilingInfo.threadID = CmGetCurThreadId(); // Get Thread ID ^ media_driver/linux/common/cm/hal/cm_innerdef_os.h:98:37: note: expanded from macro 'CmGetCurThreadId' #define CmGetCurThreadId() syscall(SYS_gettid) ^ media_driver/agnostic/common/cm/cm_task_internal.cpp:997:39: error: use of undeclared identifier 'SYS_gettid' m_taskProfilingInfo.threadID = CmGetCurThreadId(); // Get Thread ID ^ media_driver/linux/common/cm/hal/cm_innerdef_os.h:98:37: note: expanded from macro 'CmGetCurThreadId' #define CmGetCurThreadId() syscall(SYS_gettid) ^ --- .../linux/common/cm/hal/cm_innerdef_os.h | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/media_driver/linux/common/cm/hal/cm_innerdef_os.h b/media_driver/linux/common/cm/hal/cm_innerdef_os.h index eef1c9935a0..22347360cc3 100644 --- a/media_driver/linux/common/cm/hal/cm_innerdef_os.h +++ b/media_driver/linux/common/cm/hal/cm_innerdef_os.h @@ -36,7 +36,15 @@ #include "mos_os.h" #include "media_libva_common.h" #include +#if defined(__linux__) #include +#elif defined(__DragonFly__) || defined(__FreeBSD__) +#include +#elif defined(__NetBSD__) +#include +#elif defined(__sun) +#include +#endif #include //Require DRM VMAP patch, @@ -95,5 +103,18 @@ inline void GetLocalTime(PSYSTEMTIME psystime) #endif #define CmGetCurProcessId() getpid() +#if defined(__linux__) #define CmGetCurThreadId() syscall(SYS_gettid) +#elif defined(__DragonFly__) || defined(__FreeBSD__) +#define CmGetCurThreadId() pthread_getthreadid_np() +#elif defined(__NetBSD__) +#define CmGetCurThreadId() _lwp_self() +#elif defined(__OpenBSD__) +#define CmGetCurThreadId() getthrid() +#elif defined(__sun) +#define CmGetCurThreadId() thr_self() +#else +#warning "Cannot get kernel thread identifier on this platform." +#define CmGetCurThreadId() (uintptr_t)pthread_self() +#endif From acf5314930d3d95aafb76e49fa7791ff8d4b9088 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 11 Jan 2020 21:28:37 +0000 Subject: [PATCH 09/14] Get framebuffer resolution on more platforms media_driver/linux/common/codec/ddi/media_libva_decoder.cpp:48:10: fatal error: 'linux/fb.h' file not found #include ^~~~~~~~~~~~ media_driver/linux/common/codec/ddi/media_libva_decoder.cpp:55:43: error: variable has incomplete type 'struct fb_var_screeninfo' struct fb_var_screeninfo vsinfo; ^ media_driver/linux/common/codec/ddi/media_libva_decoder.cpp:62:22: error: use of undeclared identifier 'FBIOGET_VSCREENINFO' if(ioctl(fd, FBIOGET_VSCREENINFO, &vsinfo) < 0) ^ media_driver/linux/common/ddi/media_libva.cpp:39:10: fatal error: 'linux/fb.h' file not found #include ^~~~~~~~~~~~ --- .../common/codec/ddi/media_libva_decoder.cpp | 35 ++++++++++++++++++- media_driver/linux/common/ddi/media_libva.cpp | 2 -- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/media_driver/linux/common/codec/ddi/media_libva_decoder.cpp b/media_driver/linux/common/codec/ddi/media_libva_decoder.cpp index 07defcedf07..aee7a213ba1 100755 --- a/media_driver/linux/common/codec/ddi/media_libva_decoder.cpp +++ b/media_driver/linux/common/codec/ddi/media_libva_decoder.cpp @@ -47,7 +47,40 @@ #include #endif +#if defined(__linux__) #include +#define DEFAULT_FBDEV "/dev/graphics/fb0" +#elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__sun) +#include +# if defined(__sun) +#define DEFAULT_FBDEV "/dev/fb" +# else +#define DEFAULT_FBDEV "/dev/ttyv0" +# endif +#define FBIOGET_VSCREENINFO FBIOGTYPE +#define fb_var_screeninfo fbtype +#define xres fb_width +#define yres fb_height +#elif defined(__NetBSD__) || defined(__OpenBSD__) +#include +# if defined(__OpenBSD__) +#define DEFAULT_FBDEV "/dev/ttyC0" +# else +#define DEFAULT_FBDEV "/dev/ttyE0" +# endif +#define FBIOGET_VSCREENINFO WSDISPLAYIO_GINFO +#define fb_var_screeninfo wsdisplay_fbinfo +#define xres width +#define yres height +#else +#warning "Cannot query framebuffer properties on this platform." +#define DEFAULT_FBDEV "/dev/fb0" +#define FBIOGET_VSCREENINFO 0 +struct fb_var_screeninfo { + uint32_t xres; + uint32_t yres; +}; +#endif typedef MediaDdiFactory DdiDecodeFactory; @@ -800,7 +833,7 @@ static int32_t DdiDecode_GetDisplayInfo(VADriverContextP ctx) vsinfo.xres = 0; vsinfo.yres = 0; - fd = open("/dev/graphics/fb0",O_RDONLY); + fd = open(DEFAULT_FBDEV,O_RDONLY); if(fd > 0) { if(ioctl(fd, FBIOGET_VSCREENINFO, &vsinfo) < 0) diff --git a/media_driver/linux/common/ddi/media_libva.cpp b/media_driver/linux/common/ddi/media_libva.cpp index 631e1751b6b..50d3b39d08a 100755 --- a/media_driver/linux/common/ddi/media_libva.cpp +++ b/media_driver/linux/common/ddi/media_libva.cpp @@ -36,8 +36,6 @@ #include #endif -#include - #include "media_libva.h" #include "media_libva_util.h" From 9acd334c50a7cbf141ca4c19b6748d2ec5917902 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 11 Jan 2020 21:42:39 +0000 Subject: [PATCH 10/14] Enable skuwa debug messages on non-Linux --- media_driver/linux/common/os/linux_skuwa_debug.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/media_driver/linux/common/os/linux_skuwa_debug.h b/media_driver/linux/common/os/linux_skuwa_debug.h index 39c1676e2b2..e64b90bb4d4 100644 --- a/media_driver/linux/common/os/linux_skuwa_debug.h +++ b/media_driver/linux/common/os/linux_skuwa_debug.h @@ -35,7 +35,7 @@ #define DEVINFO_WARNING(msg) ALOGW(msg) #define DEVINFO_ERROR(msg) ALOGE(msg) -#elif defined(__linux__) // Linux libskuwa +#elif !defined(_WIN32) // Linux libskuwa #include #include From ce43a24880ea4c600bb2fd2de4027c3abbc8f8dc Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 23 May 2020 03:48:48 +0000 Subject: [PATCH 11/14] CI: add FreeBSD job --- .travis.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.travis.yml b/.travis.yml index 311177b25cd..929ebda2c25 100644 --- a/.travis.yml +++ b/.travis.yml @@ -111,3 +111,27 @@ script: make -j8 - ccache -s - ccache -z + +jobs: + include: + - os: linux + - os: freebsd + compiler: clang + before_install: + - sudo pkg install -y meson pkgconf libdrm libXext libXfixes wayland + - sudo pkg install -y -x '^mesa($|-libs)' + install: + - sudo ln -sf /usr/local/libdata/pkgconfig /usr/local/lib/ + - git clone https://github.com/intel/gmmlib.git + - (cd gmmlib && cmake -B _build -G Ninja && cmake --build _build && sudo cmake --install _build) + - git clone https://github.com/intel/libva.git + - (cd libva && meson _build && meson compile -C _build && sudo meson install -C _build) + script: + - ccache -s + - ccache -z + - cmake -B _build -G Ninja + -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + -DBUILD_TYPE=Release -DBUILD_CMRTLIB=OFF -DMEDIA_RUN_TEST_SUITE=OFF + - cmake --build _build + - ccache -s + - ccache -z From 097fd54c463d58f82ea18c46da37c93593f420e2 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 23 May 2020 03:49:30 +0000 Subject: [PATCH 12/14] CI: add FreeBSD gmmlib workaround --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 929ebda2c25..4821b52e49a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -123,6 +123,10 @@ jobs: install: - sudo ln -sf /usr/local/libdata/pkgconfig /usr/local/lib/ - git clone https://github.com/intel/gmmlib.git + - | # Workaround until https://github.com/intel/gmmlib/pull/68 is merged + if ! fgrep -q freebsd gmmlib/.travis.yml; then + (cd gmmlib && git fetch origin pull/68/head:freebsd && git checkout freebsd) + fi - (cd gmmlib && cmake -B _build -G Ninja && cmake --build _build && sudo cmake --install _build) - git clone https://github.com/intel/libva.git - (cd libva && meson _build && meson compile -C _build && sudo meson install -C _build) From 405c34f0b066e9f4b684cdfce6ba217cc12d206b Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Wed, 12 Jan 2022 20:38:50 +0000 Subject: [PATCH 13/14] Revert "[Media Common] Reduce library dependency" This reverts commit 53405da4ad2d99654b0d0034c3d42926a0f9e6f1. --- cmrtlib/linux/hardware/drm_device.h | 119 +----------------- .../linux/common/os/i915/include/xf86drm.h | 33 +++++ media_driver/linux/common/os/media_srcs.cmake | 4 - .../linux/common/os/mos_interface.cpp | 1 - media_driver/media_top_cmake.cmake | 2 +- 5 files changed, 36 insertions(+), 123 deletions(-) diff --git a/cmrtlib/linux/hardware/drm_device.h b/cmrtlib/linux/hardware/drm_device.h index 48cc420ebd4..cf0e69e90fe 100644 --- a/cmrtlib/linux/hardware/drm_device.h +++ b/cmrtlib/linux/hardware/drm_device.h @@ -53,7 +53,6 @@ #endif #include #include -#include #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) @@ -125,7 +124,7 @@ typedef void *drmAddress, **drmAddressPtr; /**< For mapped regions */ #define MAX3( A, B, C ) ((A) > (B) ? MAX2(A, C) : MAX2(B, C)) #define __align_mask(value, mask) (((value) + (mask)) & ~(mask)) -#define ALIGN_CEIL(value, alignment) __align_mask(value, (__typeof__(value))((alignment) - 1)) +#define ALIGN(value, alignment) __align_mask(value, (__typeof__(value))((alignment) - 1)) #define DRM_PLATFORM_DEVICE_NAME_LEN 512 typedef struct _drmPciBusInfo { @@ -231,21 +230,6 @@ drm_device_validate_flags(uint32_t flags) return (flags & ~DRM_DEVICE_GET_PCI_REVISION); } -static bool -drm_device_has_rdev(drmDevicePtr device, dev_t find_rdev) -{ - struct stat sbuf; - - for (int i = 0; i < DRM_NODE_MAX; i++) { - if (device->available_nodes & 1 << i) { - if (stat(device->nodes[i], &sbuf) == 0 && - sbuf.st_rdev == find_rdev) - return true; - } - } - return false; -} - static int drmGetMaxNodeName(void) { return sizeof(DRM_DIR_NAME) + @@ -305,7 +289,7 @@ static drmDevicePtr drmDeviceAlloc(unsigned int type, const char *node, unsigned int i; char *ptr; - max_node_length = ALIGN_CEIL(drmGetMaxNodeName(), sizeof(void *)); + max_node_length = ALIGN(drmGetMaxNodeName(), sizeof(void *)); extra = DRM_NODE_MAX * (sizeof(void *) + max_node_length); @@ -1198,105 +1182,6 @@ int drmGetDevices(drmDevicePtr devices[], int max_devices) return drmGetDevices2(DRM_DEVICE_GET_PCI_REVISION, devices, max_devices); } -/** - * Get information about the opened drm device - * - * \param fd file descriptor of the drm device - * \param flags feature/behaviour bitmask - * \param device the address of a drmDevicePtr where the information - * will be allocated in stored - * - * \return zero on success, negative error code otherwise. - * - * \note Unlike drmGetDevice it does not retrieve the pci device revision field - * unless the DRM_DEVICE_GET_PCI_REVISION \p flag is set. - */ -int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device) -{ - drmDevicePtr local_devices[MAX_DRM_NODES]; - drmDevicePtr d; - DIR *sysdir; - struct dirent *dent; - struct stat sbuf; - int subsystem_type; - int maj, min; - int ret, i, node_count; - dev_t find_rdev; - - if (drm_device_validate_flags(flags)) - return -EINVAL; - - if (fd == -1 || device == NULL) - return -EINVAL; - - if (fstat(fd, &sbuf)) - return -errno; - - find_rdev = sbuf.st_rdev; - maj = major(sbuf.st_rdev); - min = minor(sbuf.st_rdev); - - if (!drmNodeIsDRM(maj, min) || !S_ISCHR(sbuf.st_mode)) - return -EINVAL; - - subsystem_type = drmParseSubsystemType(maj, min); - if (subsystem_type < 0) - return subsystem_type; - - sysdir = opendir(DRM_DIR_NAME); - if (!sysdir) - return -errno; - - i = 0; - while ((dent = readdir(sysdir))) { - ret = process_device(&d, dent->d_name, subsystem_type, true, flags); - if (ret) - continue; - - if (i >= MAX_DRM_NODES) { - fprintf(stderr, "More than %d drm nodes detected. " - "Please report a bug - that should not happen.\n" - "Skipping extra nodes\n", MAX_DRM_NODES); - break; - } - local_devices[i] = d; - i++; - } - node_count = i; - - drmFoldDuplicatedDevices(local_devices, node_count); - - *device = NULL; - - for (i = 0; i < node_count; i++) { - if (!local_devices[i]) - continue; - - if (drm_device_has_rdev(local_devices[i], find_rdev)) - *device = local_devices[i]; - else - drmFreeDevice(&local_devices[i]); - } - - closedir(sysdir); - if (*device == NULL) - return -ENODEV; - return 0; -} - -/** - * Get information about the opened drm device - * - * \param fd file descriptor of the drm device - * \param device the address of a drmDevicePtr where the information - * will be allocated in stored - * - * \return zero on success, negative error code otherwise. - */ -int drmGetDevice(int fd, drmDevicePtr *device) -{ - return drmGetDevice2(fd, DRM_DEVICE_GET_PCI_REVISION, device); -} static int32_t GetRendererFileDescriptor(char * drm_node) { diff --git a/media_driver/linux/common/os/i915/include/xf86drm.h b/media_driver/linux/common/os/i915/include/xf86drm.h index 1a27858a497..6ff1ba8a000 100644 --- a/media_driver/linux/common/os/i915/include/xf86drm.h +++ b/media_driver/linux/common/os/i915/include/xf86drm.h @@ -713,6 +713,39 @@ extern char *drmGetRenderDeviceNameFromFd(int fd); #define DRM_BUS_PCI 0 +typedef struct _drmPciBusInfo { + uint16_t domain; + uint8_t bus; + uint8_t dev; + uint8_t func; +} drmPciBusInfo, *drmPciBusInfoPtr; + +typedef struct _drmPciDeviceInfo { + uint16_t vendor_id; + uint16_t device_id; + uint16_t subvendor_id; + uint16_t subdevice_id; + uint8_t revision_id; +} drmPciDeviceInfo, *drmPciDeviceInfoPtr; + +typedef struct _drmDevice { + char **nodes; /* DRM_NODE_MAX sized array */ + int available_nodes; /* DRM_NODE_* bitmask */ + int bustype; + union { + drmPciBusInfoPtr pci; + } businfo; + union { + drmPciDeviceInfoPtr pci; + } deviceinfo; +} drmDevice, *drmDevicePtr; + +extern int drmGetDevice(int fd, drmDevicePtr *device); +extern void drmFreeDevice(drmDevicePtr *device); + +extern int drmGetDevices(drmDevicePtr devices[], int max_devices); +extern void drmFreeDevices(drmDevicePtr devices[], int count); + #if defined(__cplusplus) } #endif diff --git a/media_driver/linux/common/os/media_srcs.cmake b/media_driver/linux/common/os/media_srcs.cmake index cb6fa13ee1b..197727e2a81 100644 --- a/media_driver/linux/common/os/media_srcs.cmake +++ b/media_driver/linux/common/os/media_srcs.cmake @@ -25,10 +25,6 @@ if(ENABLE_PRODUCTION_KMD) media_include_subdirectory(i915_production) endif() -# This is to include drm_device.h in cmrtlib, no cpp file needed. -include_directories(${BS_DIR_MEDIA}/cmrtlib/linux/hardware) - - set(TMP_SOURCES_ ${CMAKE_CURRENT_LIST_DIR}/hwinfo_linux.c ${CMAKE_CURRENT_LIST_DIR}/mos_context_specific.cpp diff --git a/media_driver/linux/common/os/mos_interface.cpp b/media_driver/linux/common/os/mos_interface.cpp index 7818b5b6f21..99ac2872dd5 100644 --- a/media_driver/linux/common/os/mos_interface.cpp +++ b/media_driver/linux/common/os/mos_interface.cpp @@ -34,7 +34,6 @@ #include "mos_os_virtualengine_scalability_specific_next.h" #include "mos_graphicsresource_specific_next.h" #include "mos_bufmgr_priv.h" -#include "drm_device.h" #if (_DEBUG || _RELEASE_INTERNAL) #include //for simulate random OS API failure diff --git a/media_driver/media_top_cmake.cmake b/media_driver/media_top_cmake.cmake index fff6d60f10d..1be5351775b 100755 --- a/media_driver/media_top_cmake.cmake +++ b/media_driver/media_top_cmake.cmake @@ -222,7 +222,7 @@ if (NOT DEFINED INCLUDED_LIBS OR "${INCLUDED_LIBS}" STREQUAL "") endif() target_compile_options( ${LIB_NAME} PUBLIC ${LIBGMM_CFLAGS_OTHER}) - target_link_libraries ( ${LIB_NAME} ${LIBGMM_LIBRARIES}) + target_link_libraries ( ${LIB_NAME} ${LIBGMM_LIBRARIES} drm) include(${MEDIA_EXT_CMAKE}/ext/media_feature_include_ext.cmake OPTIONAL) From a338a45f067568d3996096e4f52b2465c5cac12c Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sun, 19 Jun 2022 09:59:36 +0000 Subject: [PATCH 14/14] [Media Common] Detect backtrace() on non-GNU after b66bb0c234b4 ld: error: undefined symbol: backtrace >>> referenced by mos_utilities_specific.cpp:2504 (media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp:2504) >>> media_driver/CMakeFiles/iHD_drv_video_COMMON.dir/__/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp.o:(MosUtilities::MosTraceEvent(unsigned short, unsigned char, void const*, unsigned int, void const*, unsigned int)) c++: error: linker command failed with exit code 1 (use -v to see invocation) --- .../linux/common/os/osservice/mos_utilities_specific.cpp | 4 ++++ media_softlet/media_top_cmake.cmake | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp b/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp index 58083d796d5..d551053b3e0 100644 --- a/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp +++ b/media_softlet/linux/common/os/osservice/mos_utilities_specific.cpp @@ -51,7 +51,9 @@ #include #include // fork #include +#ifdef HAVE_EXECINFO_H #include // backtrace +#endif const char *MosUtilitiesSpecificNext::m_szUserFeatureFile = USER_FEATURE_FILE; MOS_PUF_KEYLIST MosUtilitiesSpecificNext::m_ufKeyList = nullptr; @@ -2489,6 +2491,7 @@ void MosUtilities::MosTraceEvent( MOS_FreeMemory(pTraceBuf); } } +#ifdef HAVE_EXECINFO_H if (m_mosTraceFilter & (1ULL << TR_KEY_CALL_STACK)) { // reserve space for header and stack size field. @@ -2508,6 +2511,7 @@ void MosUtilities::MosTraceEvent( size_t ret = write(MosUtilitiesSpecificNext::m_mosTraceFd, traceBuf, nLen); } } +#endif /* HAVE_EXECINFO_H */ } return; } diff --git a/media_softlet/media_top_cmake.cmake b/media_softlet/media_top_cmake.cmake index f381a0bfe1c..70a549866c9 100644 --- a/media_softlet/media_top_cmake.cmake +++ b/media_softlet/media_top_cmake.cmake @@ -29,6 +29,15 @@ option (MEDIA_RUN_TEST_SUITE "run google test module after install" ON) include(${MEDIA_SOFTLET_CMAKE}/media_gen_flags.cmake) include(${MEDIA_SOFTLET_CMAKE}/media_feature_flags.cmake) +check_include_file_cxx("execinfo.h" HAVE_EXECINFO_H) +if(HAVE_EXECINFO_H) + target_compile_definitions(${LIB_NAME} PRIVATE HAVE_EXECINFO_H) +endif() + +check_library_exists(execinfo backtrace "" HAVE_LIBEXECINFO) +if(HAVE_LIBEXECINFO) + target_link_libraries (${LIB_NAME} PRIVATE execinfo) +endif() if(NOT DEFINED SKIP_GMM_CHECK) # checking dependencies