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.
166 TDM_LAYER_CAPABILITY_CURSOR = (1<<0), /**< cursor */
167 TDM_LAYER_CAPABILITY_PRIMARY = (1<<1), /**< primary */
168 TDM_LAYER_CAPABILITY_OVERLAY = (1<<2), /**< overlay */
169 TDM_LAYER_CAPABILITY_GRAPHIC = (1<<4), /**< graphic */
170 TDM_LAYER_CAPABILITY_VIDEO = (1<<5), /**< video */
171 TDM_LAYER_CAPABILITY_SCALE = (1<<8), /**< if a layer has scale capability */
172 TDM_LAYER_CAPABILITY_TRANSFORM = (1<<9), /**< if a layer has transform capability */
173 } tdm_layer_capability;
176 * @brief The pp capability enumeration
180 TDM_PP_CAPABILITY_SYNC = (1<<0), /**< The pp device supports synchronous operation */
181 TDM_PP_CAPABILITY_ASYNC = (1<<1), /**< The pp device supports asynchronous operation */
182 TDM_PP_CAPABILITY_SCALE = (1<<4), /**< The pp device supports scale operation */
183 TDM_PP_CAPABILITY_TRANSFORM = (1<<5), /**< The pp device supports transform operation */
187 * @brief The capture capability enumeration
191 TDM_CAPTURE_CAPABILITY_OUTPUT = (1<<0), /**< The capture device supports to dump a output */
192 TDM_CAPTURE_CAPABILITY_LAYER = (1<<1), /**< The capture device supports to dump a layer */
193 TDM_CAPTURE_CAPABILITY_SCALE = (1<<4), /**< The capture device supports scale operation */
194 TDM_CAPTURE_CAPABILITY_TRANSFORM = (1<<5), /**< The capture device supports transform operation */
195 } tdm_capture_capability;
198 * @brief The output mode type enumeration
199 * @details bit compatible with the libdrm definitions.
203 TDM_OUTPUT_MODE_TYPE_BUILTIN = (1<<0),
204 TDM_OUTPUT_MODE_TYPE_CLOCK_C = ((1<<1) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
205 TDM_OUTPUT_MODE_TYPE_CRTC_C = ((1<<2) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
206 TDM_OUTPUT_MODE_TYPE_PREFERRED = (1<<3),
207 TDM_OUTPUT_MODE_TYPE_DEFAULT = (1<<4),
208 TDM_OUTPUT_MODE_TYPE_USERDEF = (1<<5),
209 TDM_OUTPUT_MODE_TYPE_DRIVER = (1<<6),
210 } tdm_output_mode_type;
213 * @brief The output mode flag enumeration
214 * @details bit compatible with the libdrm definitions.
218 TDM_OUTPUT_MODE_FLAG_PHSYNC = (1<<0),
219 TDM_OUTPUT_MODE_FLAG_NHSYNC = (1<<1),
220 TDM_OUTPUT_MODE_FLAG_PVSYNC = (1<<2),
221 TDM_OUTPUT_MODE_FLAG_NVSYNC = (1<<3),
222 TDM_OUTPUT_MODE_FLAG_INTERLACE = (1<<4),
223 TDM_OUTPUT_MODE_FLAG_DBLSCAN = (1<<5),
224 TDM_OUTPUT_MODE_FLAG_CSYNC = (1<<6),
225 TDM_OUTPUT_MODE_FLAG_PCSYNC = (1<<7),
226 TDM_OUTPUT_MODE_FLAG_NCSYNC = (1<<8),
227 TDM_OUTPUT_MODE_FLAG_HSKEW = (1<<9), /* hskew provided */
228 TDM_OUTPUT_MODE_FLAG_BCAST = (1<<10),
229 TDM_OUTPUT_MODE_FLAG_PIXMUX = (1<<11),
230 TDM_OUTPUT_MODE_FLAG_DBLCLK = (1<<12),
231 TDM_OUTPUT_MODE_FLAG_CLKDIV2 = (1<<13),
232 } tdm_output_mode_flag;
235 * @brief The output mode structure
237 typedef struct _tdm_output_mode
241 unsigned int refresh;
244 char name[TDM_NAME_LEN];
248 * @brief The property structure
250 typedef struct _tdm_prop
253 char name[TDM_NAME_LEN];
257 * @brief The size structure
259 typedef struct _tdm_size {
260 unsigned int h; /**< width */
261 unsigned int v; /**< height */
265 * @brief The pos structure
267 typedef struct _tdm_pos
276 * @brief The value union
288 * @brief The info config structure
290 typedef struct _tdm_info_config
298 * @brief The layer info structre
300 typedef struct _tdm_info_layer
302 tdm_info_config src_config;
304 tdm_transform transform;
308 * @brief The pp info structre
310 typedef struct _tdm_info_pp
312 tdm_info_config src_config;
313 tdm_info_config dst_config;
314 tdm_transform transform;
320 * @brief The capture info structre
322 typedef struct _tdm_info_capture
324 tdm_info_config dst_config;
325 tdm_transform transform;
332 * @brief The tdm display object
334 typedef void tdm_display;
337 * @brief The tdm output object
339 typedef void tdm_output;
342 * @brief The tdm layer object
344 typedef void tdm_layer;
347 * @brief The tdm capture object
349 typedef void tdm_capture;
352 * @brief The tdm pp object
357 * @brief The vblank handler
358 * @see output_set_vblank_handler() function of #tdm_func_display
360 typedef void (*tdm_output_vblank_handler)(tdm_output *output, unsigned int sequence,
361 unsigned int tv_sec, unsigned int tv_usec, void *user_data);
364 * @brief The commit handler
365 * @see output_set_commit_handler() function of #tdm_func_display
367 typedef void (*tdm_output_commit_handler)(tdm_output *output, unsigned int sequence,
368 unsigned int tv_sec, unsigned int tv_usec, void *user_data);
375 #endif /* _TDM_TYPES_H_ */