hc
2024-03-22 a0752693d998599af469473b8dc239ef973a012f
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
/** @file
 
  Copyright (c) 2022 Rockchip Electronics Co. Ltd.
 
  SPDX-License-Identifier: BSD-2-Clause-Patent
 
**/
 
 
#ifndef __ROCKCHIP_DISPLAY_H__
#define __ROCKCHIP_DISPLAY_H__
 
#include <Uefi/UefiBaseType.h>
 
#define LIST_FOR_EACH_ENTRY(Pos, Head, Member)                \
   for (Pos = BASE_CR((Head)->ForwardLink, typeof(*Pos), Member);    \
        &Pos->Member != (Head);                    \
        Pos = BASE_CR(Pos->Member.ForwardLink, typeof(*Pos), Member))
 
#define __ROUND_MASK(x, y) ((__typeof__(x))((y)-1))
#define ROUNDUP(x, y) ((((x)-1) | __ROUND_MASK(x, y))+1)
#define ROUNDDOWN(x, y) ((x) & ~__ROUND_MASK(x, y))
#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1))
 
#define INLINE static inline
 
#define BIT(x)                (1 << x)
 
#define EDID_SIZE             128
 
typedef enum {
  ROCKCHIP_DISPLAY_FULLSCREEN,
  ROCKCHIP_DISPLAY_CENTER,
} LOGO_DISPLAY_MODE;
 
typedef enum {
  ROCKCHIP_FMT_ARGB8888 = 0,
  ROCKCHIP_FMT_RGB888,
  ROCKCHIP_FMT_RGB565,
  ROCKCHIP_FMT_YUV420SP = 4,
  ROCKCHIP_FMT_YUV422SP,
  ROCKCHIP_FMT_YUV444SP,
} DATA_FORMAT;
 
/*
 * display output interface supported by rockchip lcdc
 */
#define ROCKCHIP_OUT_MODE_P888          0
#define ROCKCHIP_OUT_MODE_BT1120        0
#define ROCKCHIP_OUT_MODE_P666          1
#define ROCKCHIP_OUT_MODE_P565          2
#define ROCKCHIP_OUT_MODE_BT656         5
#define ROCKCHIP_OUT_MODE_S888          8
#define ROCKCHIP_OUT_MODE_S888_DUMMY    12
#define ROCKCHIP_OUT_MODE_YUV420        14
/* for use special outface */
#define ROCKCHIP_OUT_MODE_AAAA          15
 
#define VOP_OUTPUT_IF_RGB               BIT(0)
#define VOP_OUTPUT_IF_BT1120            BIT(1)
#define VOP_OUTPUT_IF_BT656             BIT(2)
#define VOP_OUTPUT_IF_LVDS0             BIT(3)
#define VOP_OUTPUT_IF_LVDS1             BIT(4)
#define VOP_OUTPUT_IF_MIPI0             BIT(5)
#define VOP_OUTPUT_IF_MIPI1             BIT(6)
#define VOP_OUTPUT_IF_eDP0              BIT(7)
#define VOP_OUTPUT_IF_eDP1              BIT(8)
#define VOP_OUTPUT_IF_DP0               BIT(9)
#define VOP_OUTPUT_IF_DP1               BIT(10)
#define VOP_OUTPUT_IF_HDMI0             BIT(11)
#define VOP_OUTPUT_IF_HDMI1             BIT(12)
 
typedef struct {
  UINT32                      Mode;
  UINT32                      Offset;
  UINT32                      Width;
  UINT32                      Height;
  UINT32                      Bpp;
  CHAR8                       *Memory;
  BOOLEAN                     YMirror;
} LOGO_INFO;
 
typedef struct {
  UINT32                      Width;
  UINT32                      Height;
} VOP_RECT;
 
typedef struct {
  UINT32                      LeftMargin;
  UINT32                      RightMargin;
  UINT32                      TopMargin;
  UINT32                      BottomMargin;
} OVER_SCAN;
 
typedef struct {
  /* Proposed mode values */
  UINT32                      Clock;        /* in kHz */
  UINT32                      HDisplay;
  UINT32                      HSyncStart;
  UINT32                      HSyncEnd;
  UINT32                      HTotal;
  UINT32                      VDisplay;
  UINT32                      VSyncStart;
  UINT32                      VSyncEnd;
  UINT32                      VTotal;
  UINT32                      VRefresh;
  UINT32                      VScan;
  UINT32                      Flags;
  UINT32                      PictureAspectRatio;
  UINT32                      HSkew;
  UINT32                      Type;
  /* Actual mode we give to hw */
  UINT32                      CrtcClock;         /* in KHz */
  UINT32                      CrtcHDisplay;
  UINT32                      CrtcHBlankStart;
  UINT32                      CrtcHBblankEnd;
  UINT32                      CrtcHSyncStart;
  UINT32                      CrtcHSyncEnd;
  UINT32                      CrtcHTotal;
  UINT32                      CrtcHSkew;
  UINT32                      CrtcVDisplay;
  UINT32                      CrtcVBlankStart;
  UINT32                      CrtcVBlankEnd;
  UINT32                      CrtcVSyncStart;
  UINT32                      CrtcVSyncEnd;
  UINT32                      CrtcVTotal;
  BOOLEAN                     Invalid;
} DRM_DISPLAY_MODE;
 
typedef struct {
  UINT16 Brightness;
  UINT16 Contrast;
  UINT16 Saturation;
  UINT16 Hue;
} BASE_BCSH_INFO;
 
typedef struct {
  INT8 DispHeadFlag[6];
  /* struct base2_screen_info screen_info[4]; --- todo */
  BASE_BCSH_INFO BCSHInfo;
  /* struct base_overscan overscan_info; --- todo */
  /* struct base2_gamma_lut_data gamma_lut_data; --- todo */
  /* struct base2_cubic_lut_data cubic_lut_data; --- todo */
  /* struct framebuffer_info framebuffer_info; --- todo */
  UINT32 Reserved[244];
  UINT32 CRC;
} BASE2_DISP_INFO;
 
typedef struct {
  VOID                        *Connector;
  OVER_SCAN                   OverScan;
  DRM_DISPLAY_MODE            DisplayMode;
  BASE2_DISP_INFO             *DispInfo; /* disp_info from baseparameter 2.0 */
  UINT8                       EDID[EDID_SIZE * 4];
  UINT32                      BusFormat;
  UINT32                      OutputMode;
  UINT32                      Type;
  UINT32                      OutputInterface;
  UINT32                      OutputFlags;
  UINT32                      ColorSpace;
  UINT32                      BPC;
 
  /**
   * @hold_mode: enabled when it's:
   * (1) mcu hold mode
   * (2) mipi dsi cmd mode
   * (3) edp psr mode
   */
  BOOLEAN                     hold_mode;
} CONNECTOR_STATE;
 
typedef struct {
  VOID                        *Crtc;
  VOID                        *Private;
  UINT32                      CrtcID;
  UINT32                      Format;
  UINT32                      YMirror;
  UINT32                      RBSwap;
  UINT32                      XVirtual;
  UINT32                      SrcX;
  UINT32                      SrcY;
  UINT32                      SrcW;
  UINT32                      SrcH;
  UINT32                      CrtcX;
  UINT32                      CrtcY;
  UINT32                      CrtcW;
  UINT32                      CrtcH;
  UINT32                      Feature;
  UINT32                      DMAAddress;
  BOOLEAN                     YUVOverlay;
  VOP_RECT                    MaxOutput;
} CRTC_STATE;
 
typedef struct {
  LIST_ENTRY                  ListHead;
  CRTC_STATE                  CrtcState;
  CONNECTOR_STATE             ConnectorState;
 
  UINT32                      ModeNumber;
 
  VOID                        *MemoryBase;
  UINT32                      MemorySize;
 
  BOOLEAN                     IsInit;
  BOOLEAN                     IsEnable;
 
  BOOLEAN                     IsForceOutput;
  UINT32                      ForceOutputFormat;
} DISPLAY_STATE;
 
EFIAPI
EFI_STATUS
DisplaySetCrtcInfo (
  OUT DRM_DISPLAY_MODE                     *Mode,
  IN  UINT32                               AdjustFlags
  );
 
EFIAPI
EFI_STATUS
DisplaySetFramebuffer (
  OUT EFI_PHYSICAL_ADDRESS*                VramBaseAddress,
  OUT UINTN*                               VramSize
  );
 
#endif