blob: a81525ca1f1b0b1f94915fdee063f7795e0a516a [file] [log] [blame]
Gousemoodhin Nadaf2e3eb3f2018-12-12 15:25:22 +05301/*
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_PP_MANAGER_H__
31#define __DRM_PP_MANAGER_H__
32
33#include <limits>
34#include "drm_utils.h"
35#include "drm_interface.h"
36#include "drm_property.h"
37
38namespace sde_drm {
39
40struct DRMPPPropInfo {
41 DRMProperty prop_enum;
42 uint32_t version = std::numeric_limits<uint32_t>::max();
43 uint32_t prop_id;
44 uint32_t blob_id;
45};
46
47class DRMPPManager {
48 public:
49 explicit DRMPPManager(int fd);
50 ~DRMPPManager();
51 void Init(const DRMPropertyManager &pm, uint32_t object_type);
52 void DeInit() {}
53 void GetPPInfo(DRMPPFeatureInfo *info);
54 void SetPPFeature(drmModeAtomicReq *req, uint32_t obj_id, DRMPPFeatureInfo &feature);
55
56 private:
57 int SetPPBlobProperty(drmModeAtomicReq *req, uint32_t obj_id, struct DRMPPPropInfo *prop_info,
58 DRMPPFeatureInfo &feature);
59
60 int fd_ = -1;
61 uint32_t object_type_ = std::numeric_limits<uint32_t>::max();
62 DRMPPPropInfo pp_prop_map_[kPPFeaturesMax] = {};
63};
64
65} // namespace sde_drm
66#endif // __DRM_PP_MANAGER_H__