1/*
2Copyright (c) 2012, Broadcom Europe Ltd
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, are permitted provided that the following conditions are 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 copyright
10 notice, this list of conditions and the following disclaimer in the
11 documentation and/or other materials provided with the distribution.
12 * Neither the name of the copyright holder nor the
13 names of its contributors may be used to endorse or promote products
14 derived from this software without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*/
27
28// Typedefs and enums for the VideoCore III Display Manager
29
30#ifndef _DISPMANX_TYPES_H
31#define _DISPMANX_TYPES_H
32
33#include "interface/vctypes/vc_image_types.h"
34#include "interface/vctypes/vc_display_types.h"
35
36#define VC_DISPMANX_VERSION 1
37
38/* Opaque handles */
39typedef uint32_t DISPMANX_DISPLAY_HANDLE_T;
40typedef uint32_t DISPMANX_UPDATE_HANDLE_T;
41typedef uint32_t DISPMANX_ELEMENT_HANDLE_T;
42typedef uint32_t DISPMANX_RESOURCE_HANDLE_T;
43
44typedef uint32_t DISPMANX_PROTECTION_T;
45
46#define DISPMANX_NO_HANDLE 0
47
48#define DISPMANX_PROTECTION_MAX 0x0f
49#define DISPMANX_PROTECTION_NONE 0
50#define DISPMANX_PROTECTION_HDCP 11 // Derived from the WM DRM levels, 101-300
51
52
53
54/* Default display IDs.
55 Note: if you overwrite with your own dispmanx_platform_init function, you
56 should use IDs you provided during dispmanx_display_attach.
57*/
58#define DISPMANX_ID_MAIN_LCD 0
59#define DISPMANX_ID_AUX_LCD 1
60#define DISPMANX_ID_HDMI0 2
61// deprecated, but support for backwards compatibility
62#define DISPMANX_ID_HDMI DISPMANX_ID_HDMI0
63#define DISPMANX_ID_SDTV 3
64#define DISPMANX_ID_FORCE_LCD 4
65#define DISPMANX_ID_FORCE_TV 5
66#define DISPMANX_ID_FORCE_OTHER 6 /* non-default display */
67#define DISPMANX_ID_HDMI1 7
68#define DISPMANX_ID_FORCE_TV2 8
69
70#define DISPMANX_ID_MAX DISPMANX_ID_FORCE_TV2 // should always be the last on.
71
72/* Return codes. Nonzero ones indicate failure. */
73typedef enum {
74 DISPMANX_SUCCESS = 0,
75 DISPMANX_INVALID = -1
76 /* XXX others TBA */
77} DISPMANX_STATUS_T;
78
79typedef enum {
80 /* Bottom 2 bits sets the orientation */
81 DISPMANX_NO_ROTATE = 0,
82 DISPMANX_ROTATE_90 = 1,
83 DISPMANX_ROTATE_180 = 2,
84 DISPMANX_ROTATE_270 = 3,
85
86 DISPMANX_FLIP_HRIZ = 1 << 16,
87 DISPMANX_FLIP_VERT = 1 << 17,
88
89 /* invert left/right images */
90 DISPMANX_STEREOSCOPIC_INVERT = 1 << 19,
91 /* extra flags for controlling 3d duplication behaviour */
92 DISPMANX_STEREOSCOPIC_NONE = 0 << 20,
93 DISPMANX_STEREOSCOPIC_MONO = 1 << 20,
94 DISPMANX_STEREOSCOPIC_SBS = 2 << 20,
95 DISPMANX_STEREOSCOPIC_TB = 3 << 20,
96 DISPMANX_STEREOSCOPIC_MASK = 15 << 20,
97
98 /* extra flags for controlling snapshot behaviour */
99 DISPMANX_SNAPSHOT_NO_YUV = 1 << 24,
100 DISPMANX_SNAPSHOT_NO_RGB = 1 << 25,
101 DISPMANX_SNAPSHOT_FILL = 1 << 26,
102 DISPMANX_SNAPSHOT_SWAP_RED_BLUE = 1 << 27,
103 DISPMANX_SNAPSHOT_PACK = 1 << 28
104} DISPMANX_TRANSFORM_T;
105
106typedef enum {
107 /* Bottom 2 bits sets the alpha mode */
108 DISPMANX_FLAGS_ALPHA_FROM_SOURCE = 0,
109 DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS = 1,
110 DISPMANX_FLAGS_ALPHA_FIXED_NON_ZERO = 2,
111 DISPMANX_FLAGS_ALPHA_FIXED_EXCEED_0X07 = 3,
112
113 DISPMANX_FLAGS_ALPHA_PREMULT = 1 << 16,
114 DISPMANX_FLAGS_ALPHA_MIX = 1 << 17,
115 DISPMANX_FLAGS_ALPHA_DISCARD_LOWER_LAYERS = 1 << 18,
116} DISPMANX_FLAGS_ALPHA_T;
117
118typedef struct {
119 DISPMANX_FLAGS_ALPHA_T flags;
120 uint32_t opacity;
121 VC_IMAGE_T *mask;
122} DISPMANX_ALPHA_T;
123
124typedef struct {
125 DISPMANX_FLAGS_ALPHA_T flags;
126 uint32_t opacity;
127 DISPMANX_RESOURCE_HANDLE_T mask;
128} VC_DISPMANX_ALPHA_T; /* for use with vmcs_host */
129
130typedef enum {
131 DISPMANX_FLAGS_CLAMP_NONE = 0,
132 DISPMANX_FLAGS_CLAMP_LUMA_TRANSPARENT = 1,
133#if __VCCOREVER__ >= 0x04000000
134 DISPMANX_FLAGS_CLAMP_TRANSPARENT = 2,
135 DISPMANX_FLAGS_CLAMP_REPLACE = 3
136#else
137 DISPMANX_FLAGS_CLAMP_CHROMA_TRANSPARENT = 2,
138 DISPMANX_FLAGS_CLAMP_TRANSPARENT = 3
139#endif
140} DISPMANX_FLAGS_CLAMP_T;
141
142typedef enum {
143 DISPMANX_FLAGS_KEYMASK_OVERRIDE = 1,
144 DISPMANX_FLAGS_KEYMASK_SMOOTH = 1 << 1,
145 DISPMANX_FLAGS_KEYMASK_CR_INV = 1 << 2,
146 DISPMANX_FLAGS_KEYMASK_CB_INV = 1 << 3,
147 DISPMANX_FLAGS_KEYMASK_YY_INV = 1 << 4
148} DISPMANX_FLAGS_KEYMASK_T;
149
150typedef union {
151 struct {
152 uint8_t yy_upper;
153 uint8_t yy_lower;
154 uint8_t cr_upper;
155 uint8_t cr_lower;
156 uint8_t cb_upper;
157 uint8_t cb_lower;
158 } yuv;
159 struct {
160 uint8_t red_upper;
161 uint8_t red_lower;
162 uint8_t blue_upper;
163 uint8_t blue_lower;
164 uint8_t green_upper;
165 uint8_t green_lower;
166 } rgb;
167} DISPMANX_CLAMP_KEYS_T;
168
169typedef struct {
170 DISPMANX_FLAGS_CLAMP_T mode;
171 DISPMANX_FLAGS_KEYMASK_T key_mask;
172 DISPMANX_CLAMP_KEYS_T key_value;
173 uint32_t replace_value;
174} DISPMANX_CLAMP_T;
175
176typedef struct {
177 int32_t width;
178 int32_t height;
179 DISPMANX_TRANSFORM_T transform;
180 DISPLAY_INPUT_FORMAT_T input_format;
181 uint32_t display_num;
182} DISPMANX_MODEINFO_T;
183
184/* Update callback. */
185typedef void (*DISPMANX_CALLBACK_FUNC_T)(DISPMANX_UPDATE_HANDLE_T u, void * arg);
186
187/* Progress callback */
188typedef void (*DISPMANX_PROGRESS_CALLBACK_FUNC_T)(DISPMANX_UPDATE_HANDLE_T u,
189 uint32_t line,
190 void * arg);
191
192/* Pluggable display interface */
193
194typedef struct tag_DISPMANX_DISPLAY_FUNCS_T {
195 // Get essential HVS configuration to be passed to the HVS driver. Options
196 // is any combination of the following flags: HVS_ONESHOT, HVS_FIFOREG,
197 // HVS_FIFO32, HVS_AUTOHSTART, HVS_INTLACE; and if HVS_FIFOREG, one of;
198 // { HVS_FMT_RGB888, HVS_FMT_RGB565, HVS_FMT_RGB666, HVS_FMT_YUV }.
199 int32_t (*get_hvs_config)(void *instance, uint32_t *pchan,
200 uint32_t *poptions, DISPLAY_INFO_T *info,
201 uint32_t *bg_colour, uint32_t *test_mode);
202
203 // Get optional HVS configuration for gamma tables, OLED matrix and dither controls.
204 // Set these function pointers to NULL if the relevant features are not required.
205 int32_t (*get_gamma_params)(void * instance,
206 int32_t gain[3], int32_t offset[3], int32_t gamma[3]);
207 int32_t (*get_oled_params)(void * instance, uint32_t * poffsets,
208 uint32_t coeffs[3]);
209 int32_t (*get_dither)(void * instance, uint32_t * dither_depth, uint32_t * dither_type);
210
211 // Get mode information, which may be returned to the applications as a courtesy.
212 // Transform should be set to 0, and {width,height} should be final dimensions.
213 int32_t (*get_info)(void * instance, DISPMANX_MODEINFO_T * info);
214
215 // Inform driver that the application refcount has become nonzero / zero
216 // These callbacks might perhaps be used for backlight and power management.
217 int32_t (*open)(void * instance);
218 int32_t (*close)(void * instance);
219
220 // Display list updated callback. Primarily of use to a "one-shot" display.
221 // For convenience of the driver, we pass the register address of the HVS FIFO.
222 void (*dlist_updated)(void * instance, volatile uint32_t * fifo_reg);
223
224 // End-of-field callback. This may occur in an interrupt context.
225 void (*eof_callback)(void * instance);
226
227 // Return screen resolution format
228 DISPLAY_INPUT_FORMAT_T (*get_input_format)(void * instance);
229
230 int32_t (*suspend_resume)(void *instance, int up);
231
232 DISPLAY_3D_FORMAT_T (*get_3d_format)(void * instance);
233} DISPMANX_DISPLAY_FUNCS_T;
234
235#endif /* ifndef _DISPMANX_TYPES_H */
236