1*0a9764feSAndroid Build Coastguard Worker /*
2*0a9764feSAndroid Build Coastguard Worker * Copyright (C) 2021 The Android Open Source Project
3*0a9764feSAndroid Build Coastguard Worker *
4*0a9764feSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*0a9764feSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*0a9764feSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*0a9764feSAndroid Build Coastguard Worker *
8*0a9764feSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*0a9764feSAndroid Build Coastguard Worker *
10*0a9764feSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*0a9764feSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*0a9764feSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*0a9764feSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*0a9764feSAndroid Build Coastguard Worker * limitations under the License.
15*0a9764feSAndroid Build Coastguard Worker */
16*0a9764feSAndroid Build Coastguard Worker
17*0a9764feSAndroid Build Coastguard Worker #pragma once
18*0a9764feSAndroid Build Coastguard Worker
19*0a9764feSAndroid Build Coastguard Worker #include <xf86drmMode.h>
20*0a9764feSAndroid Build Coastguard Worker
21*0a9764feSAndroid Build Coastguard Worker #include <functional>
22*0a9764feSAndroid Build Coastguard Worker #include <memory>
23*0a9764feSAndroid Build Coastguard Worker
24*0a9764feSAndroid Build Coastguard Worker template <typename T>
25*0a9764feSAndroid Build Coastguard Worker using DUniquePtr = std::unique_ptr<T, std::function<void(T *)>>;
26*0a9764feSAndroid Build Coastguard Worker
27*0a9764feSAndroid Build Coastguard Worker using DrmModeAtomicReqUnique = DUniquePtr<drmModeAtomicReq>;
MakeDrmModeAtomicReqUnique()28*0a9764feSAndroid Build Coastguard Worker auto inline MakeDrmModeAtomicReqUnique() {
29*0a9764feSAndroid Build Coastguard Worker return DrmModeAtomicReqUnique(drmModeAtomicAlloc(), [](drmModeAtomicReq *it) {
30*0a9764feSAndroid Build Coastguard Worker drmModeAtomicFree(it);
31*0a9764feSAndroid Build Coastguard Worker });
32*0a9764feSAndroid Build Coastguard Worker };
33*0a9764feSAndroid Build Coastguard Worker
34*0a9764feSAndroid Build Coastguard Worker using DrmModeConnectorUnique = DUniquePtr<drmModeConnector>;
MakeDrmModeConnectorUnique(int fd,uint32_t connector_id)35*0a9764feSAndroid Build Coastguard Worker auto inline MakeDrmModeConnectorUnique(int fd, uint32_t connector_id) {
36*0a9764feSAndroid Build Coastguard Worker return DrmModeConnectorUnique(drmModeGetConnector(fd, connector_id),
37*0a9764feSAndroid Build Coastguard Worker [](drmModeConnector *it) {
38*0a9764feSAndroid Build Coastguard Worker drmModeFreeConnector(it);
39*0a9764feSAndroid Build Coastguard Worker });
40*0a9764feSAndroid Build Coastguard Worker }
41*0a9764feSAndroid Build Coastguard Worker
42*0a9764feSAndroid Build Coastguard Worker using DrmModeCrtcUnique = DUniquePtr<drmModeCrtc>;
MakeDrmModeCrtcUnique(int fd,uint32_t crtc_id)43*0a9764feSAndroid Build Coastguard Worker auto inline MakeDrmModeCrtcUnique(int fd, uint32_t crtc_id) {
44*0a9764feSAndroid Build Coastguard Worker return DrmModeCrtcUnique(drmModeGetCrtc(fd, crtc_id),
45*0a9764feSAndroid Build Coastguard Worker [](drmModeCrtc *it) { drmModeFreeCrtc(it); });
46*0a9764feSAndroid Build Coastguard Worker }
47*0a9764feSAndroid Build Coastguard Worker
48*0a9764feSAndroid Build Coastguard Worker using DrmModeEncoderUnique = DUniquePtr<drmModeEncoder>;
MakeDrmModeEncoderUnique(int fd,uint32_t encoder_id)49*0a9764feSAndroid Build Coastguard Worker auto inline MakeDrmModeEncoderUnique(int fd, uint32_t encoder_id) {
50*0a9764feSAndroid Build Coastguard Worker return DrmModeEncoderUnique(drmModeGetEncoder(fd, encoder_id),
51*0a9764feSAndroid Build Coastguard Worker [](drmModeEncoder *it) {
52*0a9764feSAndroid Build Coastguard Worker drmModeFreeEncoder(it);
53*0a9764feSAndroid Build Coastguard Worker });
54*0a9764feSAndroid Build Coastguard Worker }
55*0a9764feSAndroid Build Coastguard Worker
56*0a9764feSAndroid Build Coastguard Worker using DrmModePlaneUnique = DUniquePtr<drmModePlane>;
MakeDrmModePlaneUnique(int fd,uint32_t plane_id)57*0a9764feSAndroid Build Coastguard Worker auto inline MakeDrmModePlaneUnique(int fd, uint32_t plane_id) {
58*0a9764feSAndroid Build Coastguard Worker return DrmModePlaneUnique(drmModeGetPlane(fd, plane_id),
59*0a9764feSAndroid Build Coastguard Worker [](drmModePlane *it) { drmModeFreePlane(it); });
60*0a9764feSAndroid Build Coastguard Worker }
61*0a9764feSAndroid Build Coastguard Worker
62*0a9764feSAndroid Build Coastguard Worker using DrmModePlaneResUnique = DUniquePtr<drmModePlaneRes>;
MakeDrmModePlaneResUnique(int fd)63*0a9764feSAndroid Build Coastguard Worker auto inline MakeDrmModePlaneResUnique(int fd) {
64*0a9764feSAndroid Build Coastguard Worker return DrmModePlaneResUnique(drmModeGetPlaneResources(fd),
65*0a9764feSAndroid Build Coastguard Worker [](drmModePlaneRes *it) {
66*0a9764feSAndroid Build Coastguard Worker drmModeFreePlaneResources(it);
67*0a9764feSAndroid Build Coastguard Worker });
68*0a9764feSAndroid Build Coastguard Worker }
69*0a9764feSAndroid Build Coastguard Worker
70*0a9764feSAndroid Build Coastguard Worker using DrmModeUserPropertyBlobUnique = DUniquePtr<uint32_t /*id*/>;
71*0a9764feSAndroid Build Coastguard Worker
72*0a9764feSAndroid Build Coastguard Worker using DrmModePropertyBlobUnique = DUniquePtr<drmModePropertyBlobRes>;
MakeDrmModePropertyBlobUnique(int fd,uint32_t blob_id)73*0a9764feSAndroid Build Coastguard Worker auto inline MakeDrmModePropertyBlobUnique(int fd, uint32_t blob_id) {
74*0a9764feSAndroid Build Coastguard Worker return DrmModePropertyBlobUnique(drmModeGetPropertyBlob(fd, blob_id),
75*0a9764feSAndroid Build Coastguard Worker [](drmModePropertyBlobRes *it) {
76*0a9764feSAndroid Build Coastguard Worker drmModeFreePropertyBlob(it);
77*0a9764feSAndroid Build Coastguard Worker });
78*0a9764feSAndroid Build Coastguard Worker }
79*0a9764feSAndroid Build Coastguard Worker
80*0a9764feSAndroid Build Coastguard Worker using DrmModeResUnique = DUniquePtr<drmModeRes>;
MakeDrmModeResUnique(int fd)81*0a9764feSAndroid Build Coastguard Worker auto inline MakeDrmModeResUnique(int fd) {
82*0a9764feSAndroid Build Coastguard Worker return DrmModeResUnique(drmModeGetResources(fd),
83*0a9764feSAndroid Build Coastguard Worker [](drmModeRes *it) { drmModeFreeResources(it); });
84*0a9764feSAndroid Build Coastguard Worker }
85