1 /* 2 * Copyright (c) 2019, 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 37 namespace sde_drm { 38 39 class DRMAtomicReqInterface; 40 class DRMPlaneManager; 41 class DRMPlane; 42 class DRMConnectorManager; 43 class DRMEncoderManager; 44 class DRMConnnector; 45 class DRMCrtcManager; 46 class DRMCrtc; 47 48 class DRMManager : public DRMManagerInterface { 49 public: 50 virtual ~DRMManager(); 51 virtual int RegisterDisplay(DRMDisplayType disp_type, DRMDisplayToken *token); 52 virtual int RegisterDisplay(int32_t display_id, DRMDisplayToken *token); 53 virtual void UnregisterDisplay(DRMDisplayToken *token); 54 virtual void GetPlanesInfo(DRMPlanesInfo *info); 55 virtual int GetCrtcInfo(uint32_t crtc_id, DRMCrtcInfo *info); 56 virtual int GetConnectorInfo(uint32_t conn_id, DRMConnectorInfo *info); 57 virtual int GetConnectorsInfo(DRMConnectorsInfo *infos); 58 virtual int GetEncoderInfo(uint32_t encoder_id, DRMEncoderInfo *info); 59 virtual int GetEncodersInfo(DRMEncodersInfo *infos); 60 virtual void GetCrtcPPInfo(uint32_t crtc_id, DRMPPFeatureInfo *info); 61 virtual int CreateAtomicReq(const DRMDisplayToken &token, DRMAtomicReqInterface **intf); 62 virtual int DestroyAtomicReq(DRMAtomicReqInterface *intf); 63 virtual int SetScalerLUT(const DRMScalerLUTInfo &lut_info); 64 virtual int UnsetScalerLUT(); 65 virtual void GetDppsFeatureInfo(DRMDppsFeatureInfo *info); 66 67 DRMPlaneManager *GetPlaneMgr(); 68 DRMConnectorManager *GetConnectorMgr(); 69 DRMEncoderManager *GetEncoderMgr(); 70 DRMCrtcManager *GetCrtcMgr(); 71 DRMDppsManagerIntf *GetDppsMgrIntf(); 72 73 static DRMManager *GetInstance(int fd); 74 static void Destroy(); 75 76 private: 77 int Init(int drm_fd); 78 79 int fd_ = -1; 80 DRMPlaneManager *plane_mgr_ = {}; 81 DRMConnectorManager *conn_mgr_ = {}; 82 DRMEncoderManager *encoder_mgr_ = {}; 83 DRMCrtcManager *crtc_mgr_ = {}; 84 DRMDppsManagerIntf *dpps_mgr_intf_ = {}; 85 86 static DRMManager *s_drm_instance; 87 static std::mutex s_lock; 88 }; 89 90 } // namespace sde_drm 91 #endif // __DRM_MANAGER_H__ 92