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