1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef _EXYNOSMPPTYPE_H
18 #define _EXYNOSMPPTYPE_H
19 
20 #include <system/graphics.h>
21 #include "DeconHeader.h"
22 
23 /*
24  * physical types
25  * Resources are sorted by physical type.
26  * Resource that has smaller type value is assigned first.
27  */
28 typedef enum {
29     MPP_DPP_G = 0,
30     MPP_DPP_GF,
31     MPP_DPP_VG,
32     MPP_DPP_VGS,
33     MPP_DPP_VGF,
34     MPP_DPP_VGFS,
35     MPP_DPP_VGRFS,
36     /* DPP count */
37     /* If you add DPP, You should increase this value */
38     MPP_DPP_NUM = 7,
39 
40     MPP_MSC = 7,
41     MPP_G2D,
42     MPP_P_TYPE_MAX
43 } mpp_phycal_type_t;
44 
45 /* logical types */
46 typedef enum {
47     MPP_LOGICAL_DPP_G = 0x01,
48     MPP_LOGICAL_DPP_GF = 0x02,
49     MPP_LOGICAL_DPP_VG = 0x04,
50     MPP_LOGICAL_DPP_VGS = 0x08,
51     MPP_LOGICAL_DPP_VGF = 0x10,
52     MPP_LOGICAL_DPP_VGFS = 0x20,
53     MPP_LOGICAL_DPP_VGRFS = 0x40,
54     MPP_LOGICAL_MSC = 0x100,
55     MPP_LOGICAL_MSC_YUV = 0x200,
56     MPP_LOGICAL_G2D_YUV = 0x1000,
57     MPP_LOGICAL_G2D_RGB = 0x2000,
58     MPP_LOGICAL_G2D_COMBO = 0x4000,
59     /*
60      * Increase MPP_LOGICAL_TYPE_NUM
61      * if type is added
62      */
63     MPP_LOGICAL_TYPE_NUM = 12
64 } mpp_logical_type_t;
65 
66 enum {
67     MPP_ATTR_AFBC                   = 0x00000001,
68     MPP_ATTR_WINDOW_UPDATE          = 0x00000002,
69     MPP_ATTR_BLOCK_MODE             = 0x00000004,
70     MPP_ATTR_USE_CAPA               = 0x00000008,
71     MPP_ATTR_FLIP_H                 = 0x00000020,
72     MPP_ATTR_FLIP_V                 = 0x00000040,
73     MPP_ATTR_ROT_90                 = 0x00000080,
74     MPP_ATTR_SCALE                  = 0x00000800,
75     MPP_ATTR_DIM                    = 0x00001000,
76     MPP_ATTR_LAYER_TRANSFORM        = 0x00002000,
77 
78     MPP_ATTR_WCG                    = 0x00100000,
79     MPP_ATTR_HDR10                  = 0x00200000,
80 
81     MPP_ATTR_HDR10PLUS              = 0x10000000,
82 };
83 
84 typedef struct feature_support_t {
85     mpp_phycal_type_t hwType; /* MPP_DPP_VG, MPP_DPP_VGFS, ... */
86     uint64_t attr;
87 } feature_support_t;
88 
89 typedef struct transform_map {
90     android_transform_t hal_tr;
91     uint32_t hwc_tr;
92 } transform_map_t;
93 
94 const transform_map_t transform_map_table [] =
95 {
96     {HAL_TRANSFORM_FLIP_H, MPP_ATTR_FLIP_H},
97     {HAL_TRANSFORM_FLIP_V, MPP_ATTR_FLIP_V},
98     {HAL_TRANSFORM_ROT_90, MPP_ATTR_ROT_90},
99 };
100 
101 typedef struct dpu_attr_map {
102     uint32_t dpp_attr;
103     uint32_t hwc_attr = 0;
104 } dpu_attr_map_t;
105 
106 typedef struct dpp_channel_map {
107     mpp_phycal_type_t type;
108     uint32_t index;
109     uint32_t    idma; // DECON_IDMA
110     decon_idma_type channel;
111 } dpp_channel_map_t;
112 
113 #endif
114