diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/drm/libdrm | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/drm/libdrm')
-rw-r--r-- | third_party/drm/libdrm/moz.build | 19 | ||||
-rw-r--r-- | third_party/drm/libdrm/mozdrm.cpp | 66 |
2 files changed, 85 insertions, 0 deletions
diff --git a/third_party/drm/libdrm/moz.build b/third_party/drm/libdrm/moz.build new file mode 100644 index 0000000000..3c5ebbf1e0 --- /dev/null +++ b/third_party/drm/libdrm/moz.build @@ -0,0 +1,19 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +SOURCES += [ + 'mozdrm.cpp', +] + +if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": + CXXFLAGS += CONFIG['MOZ_GTK3_CFLAGS'] + +LOCAL_INCLUDES += [ + '/third_party/drm/', + '/third_party/drm/drm/include/libdrm/', + ] + +FINAL_LIBRARY = 'xul' diff --git a/third_party/drm/libdrm/mozdrm.cpp b/third_party/drm/libdrm/mozdrm.cpp new file mode 100644 index 0000000000..b2fb59be64 --- /dev/null +++ b/third_party/drm/libdrm/mozdrm.cpp @@ -0,0 +1,66 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:expandtab:shiftwidth=4:tabstop=4: + */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/Types.h" +#include "prlink.h" + +#include <drm/xf86drm.h> + +#define GET_FUNC(func, lib) \ + func##_fn = \ + (decltype(func##_fn))PR_FindFunctionSymbol(lib, #func) \ + +#define IS_FUNC_LOADED(func) \ + (func != nullptr) \ + +static int (*drmGetDevices2_fn)(uint32_t flags, drmDevicePtr devices[], int max_devices); +static void (*drmFreeDevices_fn)(drmDevicePtr devices[], int count); + +bool IsDRMLibraryLoaded() { + static bool isLoaded = + (IS_FUNC_LOADED(drmGetDevices2_fn) && + IS_FUNC_LOADED(drmFreeDevices_fn)); + + return isLoaded; +} + +bool LoadDRMLibrary() { + static PRLibrary* drmLib = nullptr; + static bool drmInitialized = false; + + //TODO Thread safe + if (!drmInitialized) { + drmInitialized = true; + drmLib = PR_LoadLibrary("libdrm.so.2"); + if (!drmLib) { + return false; + } + + GET_FUNC(drmGetDevices2, drmLib); + GET_FUNC(drmFreeDevices, drmLib); + } + + return IsDRMLibraryLoaded(); +} + +int +drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices) +{ + if (!LoadDRMLibrary()) { + return 0; + } + return drmGetDevices2_fn(flags, devices, max_devices); +} + +void +drmFreeDevices(drmDevicePtr devices[], int count) +{ + if (!LoadDRMLibrary()) { + return; + } + return drmFreeDevices_fn(devices, count); +} |