• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef DRM_PLANE_H
17 #define DRM_PLANE_H
18 #include <cinttypes>
19 #include <string>
20 #include <vector>
21 #include <xf86drm.h>
22 #include <xf86drmMode.h>
23 
24 namespace OHOS {
25 namespace HDI {
26 namespace DISPLAY {
27 enum class DrmPropertyType {
28     DRM_PROPERTY_TYPE_INT,
29     DRM_PROPERTY_TYPE_ENUM,
30     DRM_PROPERTY_TYPE_OBJECT,
31     DRM_PROPERTY_TYPE_BLOB,
32     DRM_PROPERTY_TYPE_BITMASK,
33     DRM_PROPERTY_TYPE_INVALID,
34 };
35 
36 enum class DrmPlaneType {
37     DRM_PLANE_TYPE_CLUSTER0_WIN0 = 1 << 0,
38     DRM_PLANE_TYPE_CLUSTER0_WIN1 = 1 << 1,
39 
40     DRM_PLANE_TYPE_CLUSTER1_WIN0 = 1 << 2,
41     DRM_PLANE_TYPE_CLUSTER1_WIN1 = 1 << 3,
42 
43     DRM_PLANE_TYPE_ESMART0_WIN0 = 1 << 4,
44     DRM_PLANE_TYPE_ESMART0_WIN1 = 1 << 5,
45     DRM_PLANE_TYPE_ESMART0_WIN2 = 1 << 6,
46     DRM_PLANE_TYPE_ESMART0_WIN3 = 1 << 7,
47 
48     DRM_PLANE_TYPE_ESMART1_WIN0 = 1 << 8,
49     DRM_PLANE_TYPE_ESMART1_WIN1 = 1 << 9,
50     DRM_PLANE_TYPE_ESMART1_WIN2 = 1 << 10,
51     DRM_PLANE_TYPE_ESMART1_WIN3 = 1 << 11,
52 
53     DRM_PLANE_TYPE_SMART0_WIN0 = 1 << 12,
54     DRM_PLANE_TYPE_SMART0_WIN1 = 1 << 13,
55     DRM_PLANE_TYPE_SMART0_WIN2 = 1 << 14,
56     DRM_PLANE_TYPE_SMART0_WIN3 = 1 << 15,
57 
58     DRM_PLANE_TYPE_SMART1_WIN0 = 1 << 16,
59     DRM_PLANE_TYPE_SMART1_WIN1 = 1 << 17,
60     DRM_PLANE_TYPE_SMART1_WIN2 = 1 << 18,
61     DRM_PLANE_TYPE_SMART1_WIN3 = 1 << 19,
62 
63     DRM_PLANE_TYPE_CLUSTER0_MASK = 0x3,
64     DRM_PLANE_TYPE_CLUSTER1_MASK = 0xc,
65     DRM_PLANE_TYPE_CLUSTER_MASK = 0xf,
66     DRM_PLANE_TYPE_ESMART0_MASK = 0xf0,
67     DRM_PLANE_TYPE_ESMART1_MASK = 0xf00,
68     DRM_PLANE_TYPE_SMART0_MASK  = 0xf000,
69     DRM_PLANE_TYPE_SMART1_MASK  = 0xf0000,
70     DRM_PLANE_TYPE_Unknown      = 0xffffffff,
71 };
72 
73 struct PlaneMaskName {
74     DrmPlaneType mask;
75     const char *name;
76 };
77 
78 struct PlaneTypeName {
79     DrmPlaneType type;
80     const char *name;
81 };
82 
83 const std::string PROP_FBID = "FB_ID";
84 const std::string PROP_IN_FENCE_FD = "IN_FENCE_FD";
85 const std::string PROP_CRTC_ID = "CRTC_ID";
86 const std::string PROP_TYPE = "type";
87 
88 const std::string PROP_CRTC_X_ID = "CRTC_X";
89 const std::string PROP_CRTC_Y_ID = "CRTC_Y";
90 const std::string PROP_CRTC_W_ID = "CRTC_W";
91 const std::string PROP_CRTC_H_ID = "CRTC_H";
92 
93 const std::string PROP_SRC_X_ID = "SRC_X";
94 const std::string PROP_SRC_Y_ID = "SRC_Y";
95 const std::string PROP_SRC_W_ID = "SRC_W";
96 const std::string PROP_SRC_H_ID = "SRC_H";
97 
98 const std::string PROP_ZPOS_ID = "zpos";
99 
100 class DrmDevice;
101 
102 class DrmPlane {
103 public:
104     explicit DrmPlane(drmModePlane &p);
105     virtual ~DrmPlane();
106     int32_t Init(DrmDevice &drmDevice);
107     int GetCrtcProp(DrmDevice &drmDevice);
108     int GetSrcProp(DrmDevice &drmDevice);
GetId()109     uint32_t GetId() const
110     {
111         return mId;
112     }
GetPropFbId()113     uint32_t GetPropFbId() const
114     {
115         return mPropFbId;
116     }
GetPropCrtc_xId()117     uint32_t GetPropCrtc_xId() const
118     {
119         return mPropCrtc_xId;
120     }
GetPropCrtc_yId()121     uint32_t GetPropCrtc_yId() const
122     {
123         return mPropCrtc_yId;
124     }
GetPropCrtc_wId()125     uint32_t GetPropCrtc_wId() const
126     {
127         return mPropCrtc_wId;
128     }
GetPropCrtc_hId()129     uint32_t GetPropCrtc_hId() const
130     {
131         return mPropCrtc_hId;
132     }
GetPropSrc_xId()133     uint32_t GetPropSrc_xId() const
134     {
135         return mPropSrc_xId;
136     }
GetPropSrc_yId()137     uint32_t GetPropSrc_yId() const
138     {
139         return mPropSrc_yId;
140     }
GetPropSrc_wId()141     uint32_t GetPropSrc_wId() const
142     {
143         return mPropSrc_wId;
144     }
GetPropSrc_hId()145     uint32_t GetPropSrc_hId() const
146     {
147         return mPropSrc_hId;
148     }
GetPropZposId()149     uint32_t GetPropZposId() const
150     {
151         return mPropZposId;
152     }
GetPropFenceInId()153     uint32_t GetPropFenceInId() const
154     {
155         return mPropFenceInId;
156     }
GetPropCrtcId()157     uint32_t GetPropCrtcId() const
158     {
159         return mPropCrtcId;
160     }
GetPossibleCrtcs()161     uint32_t GetPossibleCrtcs() const
162     {
163         return mPossibleCrtcs;
164     }
GetType()165     uint32_t GetType() const
166     {
167         return mType;
168     }
BindToPipe(uint32_t pipe)169     void BindToPipe(uint32_t pipe)
170     {
171         mPipe = pipe;
172     }
UnBindPipe()173     void UnBindPipe()
174     {
175         mPipe = 0;
176     }
IsIdle()177     bool IsIdle() const
178     {
179         return (mPipe == 0);
180     }
GetCrtcId()181     uint32_t GetCrtcId()
182     {
183         return mCrtcId;
184     }
GetPipe()185     uint32_t GetPipe()
186     {
187         return mPipe;
188     }
GetWinType()189     DrmPlaneType GetWinType()
190     {
191         return mWinType;
192     }
GetName()193     std::string GetName()
194     {
195         return mName;
196     }
197 private:
198     uint32_t mId = 0;
199     uint32_t mPossibleCrtcs = 0;
200     uint32_t mCrtcId = 0;
201     uint32_t mPropFbId = 0;
202     uint32_t mPropFenceInId = 0;
203     uint32_t mPropCrtcId = 0;
204     DrmPlaneType mWinType = DrmPlaneType::DRM_PLANE_TYPE_Unknown;
205     std::string mName;
206 
207     uint32_t mPropCrtc_xId = 0;
208     uint32_t mPropCrtc_yId = 0;
209     uint32_t mPropCrtc_wId = 0;
210     uint32_t mPropCrtc_hId = 0;
211 
212     uint32_t mPropSrc_xId = 0;
213     uint32_t mPropSrc_yId = 0;
214     uint32_t mPropSrc_wId = 0;
215     uint32_t mPropSrc_hId = 0;
216 
217     uint32_t mPropZposId = 0;
218 
219     uint32_t mPipe = 0;
220     uint32_t mType = 0;
221     std::vector<uint32_t> mFormats;
222 };
223 } // namespace OHOS
224 } // namespace HDI
225 } // namespace DISPLAY
226 
227 #endif // DRM_PLANE_H
228