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