use a tab instead of 8 spaces
[platform/core/uifw/libtdm.git] / include / tdm_types.h
1 /**************************************************************************
2
3 libtdm
4
5 Copyright 2015 Samsung Electronics co., Ltd. All Rights Reserved.
6
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>
13
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:
21
22 The above copyright notice and this permission notice (including the
23 next paragraph) shall be included in all copies or substantial portions
24 of the Software.
25
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.
33
34 **************************************************************************/
35
36 #ifndef _TDM_TYPES_H_
37 #define _TDM_TYPES_H_
38
39 #include <tbm_surface.h>
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45 #define TDM_NAME_LEN        64
46
47 /**
48  * @file tdm_types.h
49  * @brief The header file which defines Enumerations and Structures for frontend and backend.
50  * @details
51  * Both frontend(@ref tdm.h) and backend(@ref tdm_backend.h) header files
52  * include @ref tdm_types.h
53  * @par Example
54  * @code
55    #include <tdm.h>    //for a frontend user
56  * @endcode
57  * @code
58    #include <tdm_backend.h>  //for a vendor to implement a backend module
59  * @endcode
60  */
61
62 /**
63  * @brief The error enumeration
64  */
65 typedef enum
66 {
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 */
77 } tdm_error;
78
79 /**
80  * @brief The transform enumeration(rotate, flip)
81  */
82 typedef enum {
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 */
91 } tdm_transform;
92
93 /**
94  * @brief The output connection status enumeration
95  */
96 typedef enum {
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;
101
102 /**
103  * @brief The output connection status enumeration
104  * @details bit compatible with the libdrm definitions.
105  */
106 typedef enum {
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 */
124 } tdm_output_type;
125
126 /**
127  * @brief The DPMS enumeration
128  * @details bit compatible with the libdrm definitions.
129  */
130 typedef enum {
131         TDM_OUTPUT_DPMS_ON,         /**< On */
132         TDM_OUTPUT_DPMS_STANDBY,    /**< StandBy */
133         TDM_OUTPUT_DPMS_SUSPEND,    /**< Suspend */
134         TDM_OUTPUT_DPMS_OFF,        /**< Off */
135 } tdm_output_dpms;
136
137 /**
138  * @brief The layer capability enumeration
139  * @details
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
143  * @par Example
144  * @code
145    //For example
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;
151  * @endcode
152  * @remark
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.
159  */
160 typedef enum {
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;
171
172 /**
173  * @brief The pp capability enumeration
174  */
175 typedef enum {
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 */
180 } tdm_pp_capability;
181
182 /**
183  * @brief The capture capability enumeration
184  */
185 typedef enum {
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;
191
192 /**
193  * @brief The output mode type enumeration
194  * @details bit compatible with the libdrm definitions.
195  */
196 typedef enum {
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;
205
206 /**
207  * @brief The output mode flag enumeration
208  * @details bit compatible with the libdrm definitions.
209  */
210 typedef enum {
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;
226
227 /**
228  * @brief The output mode structure
229  */
230 typedef struct _tdm_output_mode {
231         unsigned int clock;
232         unsigned int hdisplay, hsync_start, hsync_end, htotal, hskew;
233         unsigned int vdisplay, vsync_start, vsync_end, vtotal, vscan;
234         unsigned int vrefresh;
235         unsigned int flags;
236         unsigned int type;
237         char name[TDM_NAME_LEN];
238 } tdm_output_mode;
239
240 /**
241  * @brief The property structure
242  */
243 typedef struct _tdm_prop {
244         unsigned int id;
245         char name[TDM_NAME_LEN];
246 } tdm_prop;
247
248 /**
249  * @brief The size structure
250  */
251 typedef struct _tdm_size {
252         unsigned int h;     /**< width */
253         unsigned int v;     /**< height */
254 } tdm_size;
255
256 /**
257  * @brief The pos structure
258  */
259 typedef struct _tdm_pos {
260         unsigned int x;
261         unsigned int y;
262         unsigned int w;
263         unsigned int h;
264 } tdm_pos;
265
266 /**
267  * @brief The value union
268  */
269 typedef union {
270         void     *ptr;
271         int32_t  s32;
272         uint32_t u32;
273         int64_t  s64;
274         uint64_t u64;
275 } tdm_value;
276
277 /**
278  * @brief The info config structure
279  */
280 typedef struct _tdm_info_config {
281         tdm_size size;
282         tdm_pos pos;
283         tbm_format format;
284 } tdm_info_config;
285
286 /**
287  * @brief The layer info structre
288  */
289 typedef struct _tdm_info_layer {
290         tdm_info_config src_config;
291         tdm_pos dst_pos;
292         tdm_transform transform;
293 } tdm_info_layer;
294
295 /**
296  * @brief The pp info structre
297  */
298 typedef struct _tdm_info_pp {
299         tdm_info_config src_config;
300         tdm_info_config dst_config;
301         tdm_transform transform;
302         int sync;
303         int flags;
304 } tdm_info_pp;
305
306 /**
307  * @brief The capture info structre
308  */
309 typedef struct _tdm_info_capture {
310         tdm_info_config dst_config;
311         tdm_transform transform;
312         int oneshot;
313         int frequency;
314         int flags;
315 } tdm_info_capture;
316
317 /**
318  * @brief The tdm display object
319  */
320 typedef void tdm_display;
321
322 /**
323  * @brief The tdm output object
324  */
325 typedef void tdm_output;
326
327 /**
328  * @brief The tdm layer object
329  */
330 typedef void tdm_layer;
331
332 /**
333  * @brief The tdm capture object
334  */
335 typedef void tdm_capture;
336
337 /**
338  * @brief The tdm pp object
339  */
340 typedef void tdm_pp;
341
342 /**
343  * @brief The vblank handler
344  * @see output_set_vblank_handler() function of #tdm_func_display
345  */
346 typedef void (*tdm_output_vblank_handler)(tdm_output *output, unsigned int sequence,
347                                           unsigned int tv_sec, unsigned int tv_usec,
348                                           void *user_data);
349
350 /**
351  * @brief The commit handler
352  * @see output_set_commit_handler() function of #tdm_func_display
353  */
354 typedef void (*tdm_output_commit_handler)(tdm_output *output, unsigned int sequence,
355                                           unsigned int tv_sec, unsigned int tv_usec,
356                                           void *user_data);
357
358
359 #ifdef __cplusplus
360 }
361 #endif
362
363 #endif /* _TDM_TYPES_H_ */