1 /*
2  * Copyright (c) 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 __RC_INTF_H__
31 #define __RC_INTF_H__
32 
33 #include <core/display_interface.h>
34 #include <string>
35 
36 #include "generic_intf.h"
37 #include "generic_payload.h"
38 
39 namespace sdm {
40 
41 struct RCInputConfig {
42   int32_t display_id = -1;                 // Used only for mask dumping and logging.
43   DisplayType display_type = kDisplayMax;  // Used only for mask dumping and logging.
44   uint32_t display_xres = 0;
45   uint32_t display_yres = 0;
46   uint32_t max_mem_size = 0;
47 };
48 
49 struct RCOutputConfig {
50   int32_t top_width = 0;
51   int32_t top_height = 0;
52   int32_t bottom_width = 0;
53   int32_t bottom_height = 0;
54   bool rc_needs_full_roi = false;
55 };
56 
57 // These value is to get the status of the mask
58 // kStatusIgnore: Either there is no mask layers or mask generation in progress.
59 // kStatusRcMaskStackHandled: Mask is successfully created by thread and mask layer got
60 //                            dropped in prepare.
61 // kStatusRcMaskStackDirty: Mask is successfully created by thread but need to call neteds validate,
62 //                          to make SF drop the mask layers.
63 enum RCMaskStackStatus {
64   kStatusIgnore,
65   kStatusRcMaskStackHandled,
66   kStatusRcMaskStackDirty,
67 };
68 
69 struct RCMaskCfgState {
70   RCMaskStackStatus rc_mask_state = kStatusIgnore;
71   bool rc_pu_full_roi = false;  // Unused, as driver is handling PU
72 };
73 
74 // RC specific params as enum
75 enum RCFeatureParams {
76   kRCFeatureDisplayId,
77   kRCFeatureDisplayType,
78   kRCFeatureDisplayXRes,
79   kRCFeatureDisplayYRes,
80   kRCFeatureResetHW,
81   kRCFeatureQueryDspp,
82   kRCFeatureParamMax,
83 };
84 
85 // RC specific ops as enum
86 enum RCFeatureOps {
87   kRCFeaturePrepare,
88   kRCFeatureCommit,
89   kRCFeatureOpsMax,
90 };
91 
92 using RCIntf = GenericIntf<RCFeatureParams, RCFeatureOps, GenericPayload>;
93 
94 }  // namespace sdm
95 
96 #endif  // __RC_INTF_H__
97