1 /**************************************************************************
5 Copyright 2015 Samsung Electronics co., Ltd. All Rights Reserved.
7 Contact: Eunchul Kim <chulspro.kim@samsung.com>,
8 JinYoung Jeon <jy0.jeon@samsung.com>,
9 Taeheon Kim <th908.kim@samsung.com>,
10 YoungJun Cho <yj44.cho@samsung.com>,
11 SooChan Lim <sc1.lim@samsung.com>,
12 Boram Park <sc1.lim@samsung.com>
14 Permission is hereby granted, free of charge, to any person obtaining a
15 copy of this software and associated documentation files (the
16 "Software"), to deal in the Software without restriction, including
17 without limitation the rights to use, copy, modify, merge, publish,
18 distribute, sub license, and/or sell copies of the Software, and to
19 permit persons to whom the Software is furnished to do so, subject to
20 the following conditions:
22 The above copyright notice and this permission notice (including the
23 next paragraph) shall be included in all copies or substantial portions
26 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
29 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
30 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
31 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
32 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34 **************************************************************************/
39 #include <tbm_surface.h>
45 #define TDM_NAME_LEN 64
49 * @brief The header file which defines Enumerations and Structures for frontend and backend.
51 * Both frontend(@ref tdm.h) and backend(@ref tdm_backend.h) header files
52 * include @ref tdm_types.h
55 #include <tdm.h> //for a frontend user
58 #include <tdm_backend.h> //for a vendor to implement a backend module
63 * @brief The error enumeration
67 TDM_ERROR_NONE = 0, /**< none */
68 TDM_ERROR_BAD_REQUEST = -1, /**< bad request */
69 TDM_ERROR_OPERATION_FAILED = -2, /**< operaion failed */
70 TDM_ERROR_INVALID_PARAMETER = -3, /**< wrong input parameter */
71 TDM_ERROR_PERMISSION_DENIED = -4, /**< access denied */
72 TDM_ERROR_BUSY = -5, /**< hardware resource busy */
73 TDM_ERROR_OUT_OF_MEMORY = -6, /**< no free memory */
74 TDM_ERROR_BAD_MODULE = -7, /**< bad backend module */
75 TDM_ERROR_NOT_IMPLEMENTED = -8, /**< not implemented */
76 TDM_ERROR_NO_CAPABILITY = -9, /**< no capability */
80 * @brief The transform enumeration(rotate, flip)
84 TDM_TRANSFORM_NORMAL = 0, /**< no transform */
85 TDM_TRANSFORM_90 = 1, /**< rotate 90 */
86 TDM_TRANSFORM_180 = 2, /**< rotate 180 */
87 TDM_TRANSFORM_270 = 3, /**< rotate 270 */
88 TDM_TRANSFORM_FLIPPED = 4, /**< no rotate and horizontal flip */
89 TDM_TRANSFORM_FLIPPED_90 = 5, /**< rotate 90 and horizontal flip */
90 TDM_TRANSFORM_FLIPPED_180 = 6, /**< rotate 180 and horizontal flip */
91 TDM_TRANSFORM_FLIPPED_270 = 7, /**< rotate 270 and horizontal flip */
95 * @brief The output connection status enumeration
99 TDM_OUTPUT_CONN_STATUS_DISCONNECTED, /**< output disconnected */
100 TDM_OUTPUT_CONN_STATUS_CONNECTED, /**< output connected */
101 TDM_OUTPUT_CONN_STATUS_MODE_SETTED, /**< output connected and setted a mode */
102 } tdm_output_conn_status;
105 * @brief The output connection status enumeration
106 * @details bit compatible with the libdrm definitions.
110 TDM_OUTPUT_TYPE_Unknown, /**< unknown */
111 TDM_OUTPUT_TYPE_VGA, /**< VGA connection */
112 TDM_OUTPUT_TYPE_DVII, /**< DVII connection */
113 TDM_OUTPUT_TYPE_DVID, /**< DVID connection */
114 TDM_OUTPUT_TYPE_DVIA, /**< DVIA connection */
115 TDM_OUTPUT_TYPE_Composite, /**< Composite connection */
116 TDM_OUTPUT_TYPE_SVIDEO, /**< SVIDEO connection */
117 TDM_OUTPUT_TYPE_LVDS, /**< LVDS connection */
118 TDM_OUTPUT_TYPE_Component, /**< Component connection */
119 TDM_OUTPUT_TYPE_9PinDIN, /**< 9PinDIN connection */
120 TDM_OUTPUT_TYPE_DisplayPort, /**< DisplayPort connection */
121 TDM_OUTPUT_TYPE_HDMIA, /**< HDMIA connection */
122 TDM_OUTPUT_TYPE_HDMIB, /**< HDMIB connection */
123 TDM_OUTPUT_TYPE_TV, /**< TV connection */
124 TDM_OUTPUT_TYPE_eDP, /**< eDP connection */
125 TDM_OUTPUT_TYPE_VIRTUAL, /**< Virtual connection for WiFi Display */
126 TDM_OUTPUT_TYPE_DSI, /**< DSI connection */
130 * @brief The DPMS enumeration
131 * @details bit compatible with the libdrm definitions.
135 TDM_OUTPUT_DPMS_ON, /**< On */
136 TDM_OUTPUT_DPMS_STANDBY, /**< StandBy */
137 TDM_OUTPUT_DPMS_SUSPEND, /**< Suspend */
138 TDM_OUTPUT_DPMS_OFF, /**< Off */
142 * @brief The layer capability enumeration
144 * A layer can have one of CURSOR, PRIMARY and OVERLAY capability. And a layer
145 * also can have one of GRAPHIC and VIDEO capability. And a layer also can have
146 * SCALE and TRANSFORM capability.\n
150 capabilities = TDM_LAYER_CAPABILITY_PRIMARY | TDM_LAYER_CAPABILITY_GRAPHIC;
151 capabilities = TDM_LAYER_CAPABILITY_OVERLAY | TDM_LAYER_CAPABILITY_GRAPHIC | TDM_LAYER_CAPABILITY_SCALE;
152 capabilities = TDM_LAYER_CAPABILITY_OVERLAY | TDM_LAYER_CAPABILITY_GRAPHIC | TDM_LAYER_CAPABILITY_SCALE | TDM_LAYER_CAPABILITY_TRANSFORM;
153 capabilities = TDM_LAYER_CAPABILITY_CURSOR | TDM_LAYER_CAPABILITY_GRAPHIC;
154 capabilities = TDM_LAYER_CAPABILITY_OVERLAY | TDM_LAYER_CAPABILITY_VIDEO;
157 * - When a video plays, in most of cases, video buffers will be displayed to
158 * a GRAPHIC layer after converting RGB buffers via PP. In this case, a backend
159 * module doesn't need to offer VIDEO layer.
160 * - But in case that s vendor wants to handle a video by their own way,
161 * a backend module offer VIDEO layers. And a display server will pass a video
162 * buffer to a VIDEO layer without converting.
163 * - GRAPHIC layers have fixed zpos. But the zpos of VIDEO layer will be decided
164 * by a backend module side.
165 * - The frontend only can set the relative zpos to
166 * VIDEO layers via layer_set_video_pos() function of #tdm_func_display
170 TDM_LAYER_CAPABILITY_CURSOR = (1<<0), /**< cursor */
171 TDM_LAYER_CAPABILITY_PRIMARY = (1<<1), /**< primary */
172 TDM_LAYER_CAPABILITY_OVERLAY = (1<<2), /**< overlay */
173 TDM_LAYER_CAPABILITY_GRAPHIC = (1<<4), /**< graphic */
174 TDM_LAYER_CAPABILITY_VIDEO = (1<<5), /**< video */
175 TDM_LAYER_CAPABILITY_SCALE = (1<<8), /**< if a layer has scale capability */
176 TDM_LAYER_CAPABILITY_TRANSFORM = (1<<9), /**< if a layer has transform capability */
177 } tdm_layer_capability;
180 * @brief The pp capability enumeration
184 TDM_PP_CAPABILITY_SYNC = (1<<0), /**< The pp device supports synchronous operation */
185 TDM_PP_CAPABILITY_ASYNC = (1<<1), /**< The pp device supports asynchronous operation */
186 TDM_PP_CAPABILITY_SCALE = (1<<4), /**< The pp device supports scale operation */
187 TDM_PP_CAPABILITY_TRANSFORM = (1<<5), /**< The pp device supports transform operation */
191 * @brief The capture capability enumeration
195 TDM_CAPTURE_CAPABILITY_OUTPUT = (1<<0), /**< The capture device supports to dump a output */
196 TDM_CAPTURE_CAPABILITY_LAYER = (1<<1), /**< The capture device supports to dump a layer */
197 TDM_CAPTURE_CAPABILITY_SCALE = (1<<4), /**< The capture device supports scale operation */
198 TDM_CAPTURE_CAPABILITY_TRANSFORM = (1<<5), /**< The capture device supports transform operation */
199 } tdm_capture_capability;
202 * @brief The output mode type enumeration
203 * @details bit compatible with the libdrm definitions.
207 TDM_OUTPUT_MODE_TYPE_BUILTIN = (1<<0),
208 TDM_OUTPUT_MODE_TYPE_CLOCK_C = ((1<<1) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
209 TDM_OUTPUT_MODE_TYPE_CRTC_C = ((1<<2) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
210 TDM_OUTPUT_MODE_TYPE_PREFERRED = (1<<3),
211 TDM_OUTPUT_MODE_TYPE_DEFAULT = (1<<4),
212 TDM_OUTPUT_MODE_TYPE_USERDEF = (1<<5),
213 TDM_OUTPUT_MODE_TYPE_DRIVER = (1<<6),
214 } tdm_output_mode_type;
217 * @brief The output mode flag enumeration
218 * @details bit compatible with the libdrm definitions.
222 TDM_OUTPUT_MODE_FLAG_PHSYNC = (1<<0),
223 TDM_OUTPUT_MODE_FLAG_NHSYNC = (1<<1),
224 TDM_OUTPUT_MODE_FLAG_PVSYNC = (1<<2),
225 TDM_OUTPUT_MODE_FLAG_NVSYNC = (1<<3),
226 TDM_OUTPUT_MODE_FLAG_INTERLACE = (1<<4),
227 TDM_OUTPUT_MODE_FLAG_DBLSCAN = (1<<5),
228 TDM_OUTPUT_MODE_FLAG_CSYNC = (1<<6),
229 TDM_OUTPUT_MODE_FLAG_PCSYNC = (1<<7),
230 TDM_OUTPUT_MODE_FLAG_NCSYNC = (1<<8),
231 TDM_OUTPUT_MODE_FLAG_HSKEW = (1<<9), /* hskew provided */
232 TDM_OUTPUT_MODE_FLAG_BCAST = (1<<10),
233 TDM_OUTPUT_MODE_FLAG_PIXMUX = (1<<11),
234 TDM_OUTPUT_MODE_FLAG_DBLCLK = (1<<12),
235 TDM_OUTPUT_MODE_FLAG_CLKDIV2 = (1<<13),
236 } tdm_output_mode_flag;
239 * @brief The output mode structure
241 typedef struct _tdm_output_mode
245 unsigned int refresh;
248 char name[TDM_NAME_LEN];
252 * @brief The property structure
254 typedef struct _tdm_prop
257 char name[TDM_NAME_LEN];
261 * @brief The size structure
263 typedef struct _tdm_size {
264 unsigned int h; /**< width */
265 unsigned int v; /**< height */
269 * @brief The pos structure
271 typedef struct _tdm_pos
280 * @brief The value union
292 * @brief The info config structure
294 typedef struct _tdm_info_config
302 * @brief The layer info structre
304 typedef struct _tdm_info_layer
306 tdm_info_config src_config;
308 tdm_transform transform;
312 * @brief The pp info structre
314 typedef struct _tdm_info_pp
316 tdm_info_config src_config;
317 tdm_info_config dst_config;
318 tdm_transform transform;
324 * @brief The capture info structre
326 typedef struct _tdm_info_capture
328 tdm_info_config dst_config;
329 tdm_transform transform;
336 * @brief The tdm display object
338 typedef void tdm_display;
341 * @brief The tdm output object
343 typedef void tdm_output;
346 * @brief The tdm layer object
348 typedef void tdm_layer;
351 * @brief The tdm capture object
353 typedef void tdm_capture;
356 * @brief The tdm pp object
361 * @brief The vblank handler
362 * @see output_set_vblank_handler() function of #tdm_func_display
364 typedef void (*tdm_output_vblank_handler)(tdm_output *output, unsigned int sequence,
365 unsigned int tv_sec, unsigned int tv_usec, void *user_data);
368 * @brief The commit handler
369 * @see output_set_commit_handler() function of #tdm_func_display
371 typedef void (*tdm_output_commit_handler)(tdm_output *output, unsigned int sequence,
372 unsigned int tv_sec, unsigned int tv_usec, void *user_data);
379 #endif /* _TDM_TYPES_H_ */