1 #ifndef _TCULIBDRM_HPP 2 #define _TCULIBDRM_HPP 3 /*------------------------------------------------------------------------- 4 * Vulkan Conformance Tests 5 * ------------------------ 6 * 7 * Copyright (c) 2022 NVIDIA, Inc. 8 * Copyright (c) 2022 The Khronos Group Inc. 9 * 10 * Licensed under the Apache License, Version 2.0 (the "License"); 11 * you may not use this file except in compliance with the License. 12 * You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, software 17 * distributed under the License is distributed on an "AS IS" BASIS, 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 * See the License for the specific language governing permissions and 20 * limitations under the License. 21 * 22 *//*! 23 * \file 24 * \brief Drm utilities. 25 *//*--------------------------------------------------------------------*/ 26 27 #if DEQP_SUPPORT_DRM && !defined(CTS_USES_VULKANSC) 28 29 #include "deDynamicLibrary.hpp" 30 31 #include "deUniquePtr.hpp" 32 33 #include <xf86drm.h> 34 #include <xf86drmMode.h> 35 36 namespace tcu 37 { 38 39 class LibDrm : protected de::DynamicLibrary 40 { 41 typedef void (*FdDeleter)(int *); 42 typedef void (*PFNDRMMODEFREERESOURCESPROC)(drmModeRes *); 43 typedef void (*PFNDRMMODEFREECONNECTORPROC)(drmModeConnector *); 44 typedef void (*PFNDRMMODEFREEENCODERPROC)(drmModeEncoder *); 45 46 public: 47 typedef de::UniquePtr<int, FdDeleter> FdPtr; 48 typedef de::UniquePtr<drmModeRes, PFNDRMMODEFREERESOURCESPROC> ResPtr; 49 typedef de::UniquePtr<drmModeConnector, PFNDRMMODEFREECONNECTORPROC> ConnectorPtr; 50 typedef de::UniquePtr<drmModeEncoder, PFNDRMMODEFREEENCODERPROC> EncoderPtr; 51 52 LibDrm(void); 53 virtual ~LibDrm(void); 54 55 drmDevicePtr *getDevices(int *pNumDevices) const; 56 const char *findDeviceNode(drmDevicePtr *devices, int count, int64_t major, int64_t minor) const; 57 void freeDevices(drmDevicePtr *devices, int count) const; 58 59 FdPtr openFd(const char *node) const; 60 ResPtr getResources(int fd) const; 61 ConnectorPtr getConnector(int fd, uint32_t connectorId) const; 62 EncoderPtr getEncoder(int fd, uint32_t encoderId) const; 63 FdPtr createLease(int fd, const uint32_t *objects, int numObjects, int flags) const; 64 int authMagic(int fd, drm_magic_t magic) const; 65 66 private: 67 int intGetDevices(drmDevicePtr devices[], int maxDevices) const; 68 69 static const char *libDrmFiles[]; 70 71 typedef int (*PFNDRMGETDEVICES2PROC)(uint32_t, drmDevicePtr[], int); 72 typedef int (*PFNDRMGETDEVICESPROC)(drmDevicePtr[], int); 73 typedef void (*PFNDRMFREEDEVICESPROC)(drmDevicePtr[], int); 74 typedef drmModeRes *(*PFNDRMMODEGETRESOURCESPROC)(int); 75 typedef drmModeConnector *(*PFNDRMMODEGETCONNECTORPROC)(int, uint32_t); 76 typedef drmModeEncoder *(*PFNDRMMODEGETENCODERPROC)(int, uint32_t); 77 typedef int (*PFNDRMMODECREATELEASEPROC)(int, const uint32_t *, int, int, uint32_t *); 78 typedef int (*PFNDRMAUTHMAGIC)(int, drm_magic_t); 79 PFNDRMGETDEVICES2PROC pGetDevices2; 80 PFNDRMGETDEVICESPROC pGetDevices; 81 PFNDRMFREEDEVICESPROC pFreeDevices; 82 PFNDRMMODEGETRESOURCESPROC pGetResources; 83 PFNDRMMODEGETCONNECTORPROC pGetConnector; 84 PFNDRMMODEGETENCODERPROC pGetEncoder; 85 PFNDRMMODEFREERESOURCESPROC pFreeResources; 86 PFNDRMMODEFREECONNECTORPROC pFreeConnector; 87 PFNDRMMODEFREEENCODERPROC pFreeEncoder; 88 PFNDRMMODECREATELEASEPROC pCreateLease; 89 PFNDRMAUTHMAGIC pAuthMagic; 90 }; 91 92 } // namespace tcu 93 94 #endif // DEQP_SUPPORT_DRM && !defined (CTS_USES_VULKANSC) 95 96 #endif // _TCULIBDRM_HPP 97