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