xref: /aosp_15_r20/external/drm_hwcomposer/drm/DrmUnique.h (revision 0a9764fe0a15e71ebbeb85e87e10990c23aab47f)
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