• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (c) 2019, 2021, The Linux Foundation. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *    * Redistributions of source code must retain the above copyright
8 *      notice, this list of conditions and the following disclaimer.
9 *    * Redistributions in binary form must reproduce the above
10 *      copyright notice, this list of conditions and the following
11 *      disclaimer in the documentation and/or other materials provided
12 *      with the distribution.
13 *    * Neither the name of The Linux Foundation nor the names of its
14 *      contributors may be used to endorse or promote products derived
15 *      from this software without specific prior written permission.
16 
17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29 
30 #ifndef __DRM_MANAGER_H__
31 #define __DRM_MANAGER_H__
32 
33 #include <drm_interface.h>
34 #include <mutex>
35 #include "drm_dpps_mgr_intf.h"
36 #include "drm_panel_feature_mgr_intf.h"
37 
38 namespace sde_drm {
39 
40 class DRMAtomicReqInterface;
41 class DRMPlaneManager;
42 class DRMPlane;
43 class DRMConnectorManager;
44 class DRMEncoderManager;
45 class DRMConnnector;
46 class DRMCrtcManager;
47 class DRMCrtc;
48 
49 class DRMManager : public DRMManagerInterface {
50  public:
51   virtual ~DRMManager();
52   virtual int RegisterDisplay(DRMDisplayType disp_type, DRMDisplayToken *token);
53   virtual int RegisterDisplay(int32_t display_id, DRMDisplayToken *token);
54   virtual void UnregisterDisplay(DRMDisplayToken *token);
55   virtual void GetPlanesInfo(DRMPlanesInfo *info);
56   virtual int GetCrtcInfo(uint32_t crtc_id, DRMCrtcInfo *info);
57   virtual int GetConnectorInfo(uint32_t conn_id, DRMConnectorInfo *info);
58   virtual int GetConnectorsInfo(DRMConnectorsInfo *infos);
59   virtual int GetEncoderInfo(uint32_t encoder_id, DRMEncoderInfo *info);
60   virtual int GetEncodersInfo(DRMEncodersInfo *infos);
61   virtual void GetCrtcPPInfo(uint32_t crtc_id, DRMPPFeatureInfo *info);
62   virtual int CreateAtomicReq(const DRMDisplayToken &token, DRMAtomicReqInterface **intf);
63   virtual int DestroyAtomicReq(DRMAtomicReqInterface *intf);
64   virtual int SetScalerLUT(const DRMScalerLUTInfo &lut_info);
65   virtual int UnsetScalerLUT();
66   virtual void GetDppsFeatureInfo(DRMDppsFeatureInfo *info);
67   virtual void GetPanelFeature(DRMPanelFeatureInfo *info);
68   virtual void SetPanelFeature(const DRMPanelFeatureInfo &info);
69 
70   DRMPlaneManager *GetPlaneMgr();
71   DRMConnectorManager *GetConnectorMgr();
72   DRMEncoderManager *GetEncoderMgr();
73   DRMCrtcManager *GetCrtcMgr();
74   DRMDppsManagerIntf *GetDppsMgrIntf();
75   DRMPanelFeatureMgrIntf *GetPanelFeatureMgrIntf();
76 
77   static DRMManager *GetInstance(int fd);
78   static void Destroy();
79 
80  private:
81   int Init(int drm_fd);
82 
83   int fd_ = -1;
84   DRMPlaneManager *plane_mgr_ = {};
85   DRMConnectorManager *conn_mgr_ = {};
86   DRMEncoderManager *encoder_mgr_ = {};
87   DRMCrtcManager *crtc_mgr_ = {};
88   DRMDppsManagerIntf *dpps_mgr_intf_ = {};
89   DRMPanelFeatureMgrIntf *panel_feature_mgr_intf_ = {};
90 
91   static DRMManager *s_drm_instance;
92   static std::mutex s_lock;
93 };
94 
95 }  // namespace sde_drm
96 #endif  // __DRM_MANAGER_H__
97