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