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)
83 TDM_TRANSFORM_NORMAL = 0, /**< no transform */
84 TDM_TRANSFORM_90 = 1, /**< rotate 90 */
85 TDM_TRANSFORM_180 = 2, /**< rotate 180 */
86 TDM_TRANSFORM_270 = 3, /**< rotate 270 */
87 TDM_TRANSFORM_FLIPPED = 4, /**< no rotate and horizontal flip */
88 TDM_TRANSFORM_FLIPPED_90 = 5, /**< rotate 90 and horizontal flip */
89 TDM_TRANSFORM_FLIPPED_180 = 6, /**< rotate 180 and horizontal flip */
90 TDM_TRANSFORM_FLIPPED_270 = 7, /**< rotate 270 and horizontal flip */
94 * @brief The output connection status enumeration
97 TDM_OUTPUT_CONN_STATUS_DISCONNECTED, /**< output disconnected */
98 TDM_OUTPUT_CONN_STATUS_CONNECTED, /**< output connected */
99 TDM_OUTPUT_CONN_STATUS_MODE_SETTED, /**< output connected and setted a mode */
100 } tdm_output_conn_status;
103 * @brief The output connection status enumeration
104 * @details bit compatible with the libdrm definitions.
107 TDM_OUTPUT_TYPE_Unknown, /**< unknown */
108 TDM_OUTPUT_TYPE_VGA, /**< VGA connection */
109 TDM_OUTPUT_TYPE_DVII, /**< DVII connection */
110 TDM_OUTPUT_TYPE_DVID, /**< DVID connection */
111 TDM_OUTPUT_TYPE_DVIA, /**< DVIA connection */
112 TDM_OUTPUT_TYPE_Composite, /**< Composite connection */
113 TDM_OUTPUT_TYPE_SVIDEO, /**< SVIDEO connection */
114 TDM_OUTPUT_TYPE_LVDS, /**< LVDS connection */
115 TDM_OUTPUT_TYPE_Component, /**< Component connection */
116 TDM_OUTPUT_TYPE_9PinDIN, /**< 9PinDIN connection */
117 TDM_OUTPUT_TYPE_DisplayPort, /**< DisplayPort connection */
118 TDM_OUTPUT_TYPE_HDMIA, /**< HDMIA connection */
119 TDM_OUTPUT_TYPE_HDMIB, /**< HDMIB connection */
120 TDM_OUTPUT_TYPE_TV, /**< TV connection */
121 TDM_OUTPUT_TYPE_eDP, /**< eDP connection */
122 TDM_OUTPUT_TYPE_VIRTUAL, /**< Virtual connection for WiFi Display */
123 TDM_OUTPUT_TYPE_DSI, /**< DSI connection */
127 * @brief The DPMS enumeration
128 * @details bit compatible with the libdrm definitions.
131 TDM_OUTPUT_DPMS_ON, /**< On */
132 TDM_OUTPUT_DPMS_STANDBY, /**< StandBy */
133 TDM_OUTPUT_DPMS_SUSPEND, /**< Suspend */
134 TDM_OUTPUT_DPMS_OFF, /**< Off */
138 * @brief The layer capability enumeration
140 * A layer can have one of CURSOR, PRIMARY and OVERLAY capability. And a layer
141 * also can have one of GRAPHIC and VIDEO capability. And a layer also can have
142 * SCALE and TRANSFORM capability.\n
146 capabilities = TDM_LAYER_CAPABILITY_PRIMARY | TDM_LAYER_CAPABILITY_GRAPHIC;
147 capabilities = TDM_LAYER_CAPABILITY_OVERLAY | TDM_LAYER_CAPABILITY_GRAPHIC | TDM_LAYER_CAPABILITY_SCALE;
148 capabilities = TDM_LAYER_CAPABILITY_OVERLAY | TDM_LAYER_CAPABILITY_GRAPHIC | TDM_LAYER_CAPABILITY_SCALE | TDM_LAYER_CAPABILITY_TRANSFORM;
149 capabilities = TDM_LAYER_CAPABILITY_CURSOR | TDM_LAYER_CAPABILITY_GRAPHIC;
150 capabilities = TDM_LAYER_CAPABILITY_OVERLAY | TDM_LAYER_CAPABILITY_VIDEO;
153 * - When a video plays, in most of cases, video buffers will be displayed to
154 * a GRAPHIC layer after converting RGB buffers via PP. In this case, a backend
155 * module doesn't need to offer VIDEO layer.
156 * - But in case that s vendor wants to handle a video by their own way,
157 * a backend module offer VIDEO layers. And a display server will pass a video
158 * buffer to a VIDEO layer without converting.
161 TDM_LAYER_CAPABILITY_CURSOR = (1 << 0), /**< cursor */
162 TDM_LAYER_CAPABILITY_PRIMARY = (1 << 1), /**< primary */
163 TDM_LAYER_CAPABILITY_OVERLAY = (1 << 2), /**< overlay */
164 TDM_LAYER_CAPABILITY_GRAPHIC = (1 << 4), /**< graphic */
165 TDM_LAYER_CAPABILITY_VIDEO = (1 << 5), /**< video */
166 TDM_LAYER_CAPABILITY_SCALE = (1 << 8), /**< if a layer has scale capability */
167 TDM_LAYER_CAPABILITY_TRANSFORM = (1 << 9), /**< if a layer has transform capability */
168 TDM_LAYER_CAPABILITY_SCANOUT = (1 << 10), /**< if a layer allows a scanout buffer only */
169 TDM_LAYER_CAPABILITY_RESEVED_MEMORY = (1 << 11), /**< if a layer allows a reserved buffer only */
170 } tdm_layer_capability;
173 * @brief The pp capability enumeration
176 TDM_PP_CAPABILITY_SYNC = (1 << 0), /**< The pp device supports synchronous operation */
177 TDM_PP_CAPABILITY_ASYNC = (1 << 1), /**< The pp device supports asynchronous operation */
178 TDM_PP_CAPABILITY_SCALE = (1 << 4), /**< The pp device supports scale operation */
179 TDM_PP_CAPABILITY_TRANSFORM = (1 << 5), /**< The pp device supports transform operation */
183 * @brief The capture capability enumeration
186 TDM_CAPTURE_CAPABILITY_OUTPUT = (1 << 0), /**< The capture device supports to dump a output */
187 TDM_CAPTURE_CAPABILITY_LAYER = (1 << 1), /**< The capture device supports to dump a layer */
188 TDM_CAPTURE_CAPABILITY_SCALE = (1 << 4), /**< The capture device supports scale operation */
189 TDM_CAPTURE_CAPABILITY_TRANSFORM = (1 << 5), /**< The capture device supports transform operation */
190 } tdm_capture_capability;
193 * @brief The output mode type enumeration
194 * @details bit compatible with the libdrm definitions.
197 TDM_OUTPUT_MODE_TYPE_BUILTIN = (1 << 0),
198 TDM_OUTPUT_MODE_TYPE_CLOCK_C = ((1 << 1) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
199 TDM_OUTPUT_MODE_TYPE_CRTC_C = ((1 << 2) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
200 TDM_OUTPUT_MODE_TYPE_PREFERRED = (1 << 3),
201 TDM_OUTPUT_MODE_TYPE_DEFAULT = (1 << 4),
202 TDM_OUTPUT_MODE_TYPE_USERDEF = (1 << 5),
203 TDM_OUTPUT_MODE_TYPE_DRIVER = (1 << 6),
204 } tdm_output_mode_type;
207 * @brief The output mode flag enumeration
208 * @details bit compatible with the libdrm definitions.
211 TDM_OUTPUT_MODE_FLAG_PHSYNC = (1 << 0),
212 TDM_OUTPUT_MODE_FLAG_NHSYNC = (1 << 1),
213 TDM_OUTPUT_MODE_FLAG_PVSYNC = (1 << 2),
214 TDM_OUTPUT_MODE_FLAG_NVSYNC = (1 << 3),
215 TDM_OUTPUT_MODE_FLAG_INTERLACE = (1 << 4),
216 TDM_OUTPUT_MODE_FLAG_DBLSCAN = (1 << 5),
217 TDM_OUTPUT_MODE_FLAG_CSYNC = (1 << 6),
218 TDM_OUTPUT_MODE_FLAG_PCSYNC = (1 << 7),
219 TDM_OUTPUT_MODE_FLAG_NCSYNC = (1 << 8),
220 TDM_OUTPUT_MODE_FLAG_HSKEW = (1 << 9), /* hskew provided */
221 TDM_OUTPUT_MODE_FLAG_BCAST = (1 << 10),
222 TDM_OUTPUT_MODE_FLAG_PIXMUX = (1 << 11),
223 TDM_OUTPUT_MODE_FLAG_DBLCLK = (1 << 12),
224 TDM_OUTPUT_MODE_FLAG_CLKDIV2 = (1 << 13),
225 } tdm_output_mode_flag;
229 TDM_EVENT_LOOP_READABLE = (1 << 0),
230 TDM_EVENT_LOOP_WRITABLE = (1 << 1),
231 TDM_EVENT_LOOP_HANGUP = (1 << 2),
232 TDM_EVENT_LOOP_ERROR = (1 << 3),
233 } tdm_event_loop_mask;
236 * @brief The output mode structure
238 typedef struct _tdm_output_mode {
240 unsigned int hdisplay, hsync_start, hsync_end, htotal, hskew;
241 unsigned int vdisplay, vsync_start, vsync_end, vtotal, vscan;
242 unsigned int vrefresh;
245 char name[TDM_NAME_LEN];
249 * @brief The property structure
251 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 {
275 * @brief The value union
286 * @brief The info config structure
288 typedef struct _tdm_info_config {
295 * @brief The layer info structre
297 typedef struct _tdm_info_layer {
298 tdm_info_config src_config;
300 tdm_transform transform;
304 * @brief The pp info structre
306 typedef struct _tdm_info_pp {
307 tdm_info_config src_config;
308 tdm_info_config dst_config;
309 tdm_transform transform;
315 * @brief The capture info structre
317 typedef struct _tdm_info_capture {
318 tdm_info_config dst_config;
319 tdm_transform transform;
326 * @brief The tdm display object
328 typedef void tdm_display;
331 * @brief The tdm output object
333 typedef void tdm_output;
336 * @brief The tdm layer object
338 typedef void tdm_layer;
341 * @brief The tdm capture object
343 typedef void tdm_capture;
346 * @brief The tdm pp object
351 * @brief The vblank handler
352 * @see output_set_vblank_handler() function of #tdm_func_display
354 typedef void (*tdm_output_vblank_handler)(tdm_output *output, unsigned int sequence,
355 unsigned int tv_sec, unsigned int tv_usec,
359 * @brief The commit handler
360 * @see output_set_commit_handler() function of #tdm_func_display
362 typedef void (*tdm_output_commit_handler)(tdm_output *output, unsigned int sequence,
363 unsigned int tv_sec, unsigned int tv_usec,
367 * @brief The tdm event source
369 typedef void tdm_event_loop_source;
372 * @brief The fd source handler
374 typedef tdm_error (*tdm_event_loop_fd_handler)(int fd, tdm_event_loop_mask mask, void *user_data);
377 * @brief The timer source handler
379 typedef tdm_error (*tdm_event_loop_timer_handler)(void *user_data);
385 #endif /* _TDM_TYPES_H_ */