xref: /aosp_15_r20/external/deqp/framework/common/tcuLibDrm.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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