1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ANDROID_EXYNOS_HWC_MODULE_H_
#define ANDROID_EXYNOS_HWC_MODULE_H_
#include "ExynosHWC.h"
#include "DeconHeader.h"
/* TODO: Those definitions should be removed */
#define USE_SW_VSYNC
#define DISABLE_M2M_MPPS
#define FORCE_GPU_COMPOSITION
#define FIX_BASE_WINDOW_INDEX 5
#define DISABLE_READ_RESTRICTIONS
#define HWC_VERSION HWC_DEVICE_API_VERSION_1_5
#define VSYNC_DEV_PREFIX "/sys/devices/"
#define VSYNC_DEV_MIDDLE "platform/"
#ifdef USE_SW_VSYNC
/* Those are invalid vsync path */
#define VSYNC_DEV_NAME ""
#define PSR_DEV_NAME ""
#else
#define VSYNC_DEV_NAME "1c300000.decon_f/vsync"
#define PSR_DEV_NAME "1c300000.decon_f/psr_info"
#endif
#define VSYNC_DEV_NAME_EXT "19050000.decon_t/vsync"
#define DP_LINK_NAME "130b0000.displayport"
#define DP_UEVENT_NAME "change@/devices/platform/%s/extcon/extcon0"
#define DP_CABLE_STATE_NAME "/sys/devices/platform/%s/extcon/extcon0/cable.0/state"
#define IDMA(x) static_cast<decon_idma_type>(x)
enum {
HWC_DISPLAY_NONE_BIT = 0
};
/*
* pre_assign_info: all display_descriptors that want to reserve
*/
struct exynos_mpp_t {
int physicalType;
int logicalType;
char name[16];
uint32_t physical_index;
uint32_t logical_index;
uint32_t pre_assign_info;
};
const dpp_channel_map_t IDMA_CHANNEL_MAP[] = {
/* GF physical index is switched to change assign order */
/* DECON_IDMA is not used */
{MPP_DPP_GF, 0, IDMA(0), IDMA(0)},
{MPP_DPP_VGRFS, 0, IDMA(1), IDMA(1)},
{MPP_DPP_GF, 1, IDMA(2), IDMA(2)},
{MPP_DPP_VGRFS, 1, IDMA(3), IDMA(3)},
{MPP_DPP_GF, 2, IDMA(4), IDMA(4)},
{MPP_DPP_VGRFS, 2, IDMA(5), IDMA(5)},
{MPP_P_TYPE_MAX, 0, IDMA(6), IDMA(6)}, // not idma but..
{static_cast<mpp_phycal_type_t>(MAX_DECON_DMA_TYPE), 0, MAX_DECON_DMA_TYPE, IDMA(7)}
};
#define DECON_PRIMARY_DEV_NAME "/dev/graphics/fb0"
#define DECON_EXTERNAL_DEV_NAME "/dev/graphics/fb1"
#define DECON_EXT_BASE_WINDOW 0
#define PRIMARY_MAIN_BASE_WIN 2
#define EXTERNAL_MAIN_BASE_WIN 4
#define DISPLAY_MODE_MASK_LEN 8
#define DISPLAY_MODE_MASK_BIT 0xff
enum {
DISPLAY_MODE_PRIMARY_MAIN = 0, /* This is default mode */
DISPLAY_MODE_EXTERNAL_MAIN,
DISPLAY_MODE_NUM
};
/*
* This is base window index of primary display for each display mode.
* External display base window is always 0
*/
const uint32_t PRIMARY_DISP_BASE_WIN[] = {PRIMARY_MAIN_BASE_WIN, EXTERNAL_MAIN_BASE_WIN};
#define EXTERNAL_MAIN_DISPLAY_START_BIT (DISPLAY_MODE_MASK_LEN * DISPLAY_MODE_EXTERNAL_MAIN)
enum {
EXTERNAL_MAIN_DISPLAY_PRIMARY_BIT = 1 << (EXTERNAL_MAIN_DISPLAY_START_BIT + HWC_DISPLAY_PRIMARY),
EXTERNAL_MAIN_DISPLAY_EXTERNAL_BIT = 1 << (EXTERNAL_MAIN_DISPLAY_START_BIT + HWC_DISPLAY_EXTERNAL),
EXTERNAL_MAIN_DISPLAY_VIRTUAL_BIT = 1 << (EXTERNAL_MAIN_DISPLAY_START_BIT + HWC_DISPLAY_VIRTUAL),
};
const exynos_mpp_t AVAILABLE_OTF_MPP_UNITS[] = {
{MPP_DPP_GF, MPP_LOGICAL_DPP_GF, "DPP_GF0", 0, 0, HWC_DISPLAY_EXTERNAL_BIT|EXTERNAL_MAIN_DISPLAY_EXTERNAL_BIT},
{MPP_DPP_GF, MPP_LOGICAL_DPP_GF, "DPP_GF1", 1, 0, HWC_DISPLAY_PRIMARY_BIT|EXTERNAL_MAIN_DISPLAY_PRIMARY_BIT},
{MPP_DPP_GF, MPP_LOGICAL_DPP_GF, "DPP_GF2", 2, 0, HWC_DISPLAY_PRIMARY_BIT|EXTERNAL_MAIN_DISPLAY_EXTERNAL_BIT},
{MPP_DPP_VGRFS, MPP_LOGICAL_DPP_VGRFS, "DPP_VGRFS0", 0, 0, HWC_DISPLAY_EXTERNAL_BIT|EXTERNAL_MAIN_DISPLAY_EXTERNAL_BIT},
{MPP_DPP_VGRFS, MPP_LOGICAL_DPP_VGRFS, "DPP_VGRFS1", 1, 0, HWC_DISPLAY_PRIMARY_BIT|EXTERNAL_MAIN_DISPLAY_EXTERNAL_BIT},
{MPP_DPP_VGRFS, MPP_LOGICAL_DPP_VGRFS, "DPP_VGRFS2", 2, 0, HWC_DISPLAY_PRIMARY_BIT|EXTERNAL_MAIN_DISPLAY_EXTERNAL_BIT}
};
const exynos_mpp_t AVAILABLE_M2M_MPP_UNITS[] = {
#ifndef DISABLE_M2M_MPPS
{MPP_G2D, MPP_LOGICAL_G2D_YUV, "G2D0-YUV_PRI", 0, 0, HWC_DISPLAY_PRIMARY_BIT|EXTERNAL_MAIN_DISPLAY_PRIMARY_BIT},
{MPP_G2D, MPP_LOGICAL_G2D_YUV, "G2D0-YUV_PRI", 0, 1, HWC_DISPLAY_PRIMARY_BIT|EXTERNAL_MAIN_DISPLAY_PRIMARY_BIT},
{MPP_G2D, MPP_LOGICAL_G2D_YUV, "G2D0-YUV_EXT", 0, 2, HWC_DISPLAY_EXTERNAL_BIT|EXTERNAL_MAIN_DISPLAY_EXTERNAL_BIT},
{MPP_G2D, MPP_LOGICAL_G2D_RGB, "G2D0-RGB_PRI", 0, 3, HWC_DISPLAY_PRIMARY_BIT|EXTERNAL_MAIN_DISPLAY_PRIMARY_BIT},
{MPP_G2D, MPP_LOGICAL_G2D_RGB, "G2D0-RGB_EXT", 0, 4, HWC_DISPLAY_EXTERNAL_BIT|EXTERNAL_MAIN_DISPLAY_EXTERNAL_BIT},
{MPP_G2D, MPP_LOGICAL_G2D_COMBO, "G2D0-COMBO_VIR", 0, 5, HWC_DISPLAY_VIRTUAL_BIT|EXTERNAL_MAIN_DISPLAY_VIRTUAL_BIT}
#endif
};
#endif
|