first draft
[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 typedef enum
48 {
49     TDM_ERROR_NONE                  = 0,
50     TDM_ERROR_BAD_REQUEST           = -1, //bad request
51     TDM_ERROR_OPERATION_FAILED      = -2, //operaion failed
52     TDM_ERROR_INVALID_PARAMETER     = -3, //wrong input parameter
53     TDM_ERROR_PERMISSION_DENIED     = -4, //access denied
54     TDM_ERROR_BUSY                  = -5, //hardware resource busy
55     TDM_ERROR_OUT_OF_MEMORY         = -6, //no free memory
56     TDM_ERROR_BAD_MODULE            = -7, //bad backend module
57     TDM_ERROR_NOT_IMPLEMENTED       = -8, //not implemented
58 } tdm_error;
59
60 typedef enum
61 {
62     TDM_TRANSFORM_NORMAL            = 0,
63     TDM_TRANSFORM_90                = 1,
64     TDM_TRANSFORM_180               = 2,
65     TDM_TRANSFORM_270               = 3,
66     TDM_TRANSFORM_FLIPPED           = 4,
67     TDM_TRANSFORM_FLIPPED_90        = 5,
68     TDM_TRANSFORM_FLIPPED_180       = 6,
69     TDM_TRANSFORM_FLIPPED_270       = 7,
70     TDM_TRANSFORM_MAX               = 8
71 } tdm_transform;
72
73 typedef enum
74 {
75     TDM_OUTPUT_CONN_STATUS_DISCONNECTED,
76     TDM_OUTPUT_CONN_STATUS_CONNECTED,
77     TDM_OUTPUT_CONN_STATUS_MODE_SETTED,
78     TDM_OUTPUT_CONN_STATUS_MAX,
79 } tdm_output_conn_status;
80
81 /* bit compatible with the libdrm definitions. */
82 typedef enum
83 {
84     TDM_OUTPUT_TYPE_Unknown,
85     TDM_OUTPUT_TYPE_VGA,
86     TDM_OUTPUT_TYPE_DVII,
87     TDM_OUTPUT_TYPE_DVID,
88     TDM_OUTPUT_TYPE_DVIA,
89     TDM_OUTPUT_TYPE_Composite,
90     TDM_OUTPUT_TYPE_SVIDEO,
91     TDM_OUTPUT_TYPE_LVDS,
92     TDM_OUTPUT_TYPE_Component,
93     TDM_OUTPUT_TYPE_9PinDIN,
94     TDM_OUTPUT_TYPE_DisplayPort,
95     TDM_OUTPUT_TYPE_HDMIA,
96     TDM_OUTPUT_TYPE_HDMIB,
97     TDM_OUTPUT_TYPE_TV,
98     TDM_OUTPUT_TYPE_eDP,
99     TDM_OUTPUT_TYPE_VIRTUAL,
100     TDM_OUTPUT_TYPE_DSI,
101     TDM_OUTPUT_TYPE_MAX,
102 } tdm_output_type;
103
104 /* bit compatible with the drm definitions. */
105 typedef enum
106 {
107     TDM_OUTPUT_DPMS_ON,
108     TDM_OUTPUT_DPMS_STANDBY,
109     TDM_OUTPUT_DPMS_SUSPEND,
110     TDM_OUTPUT_DPMS_OFF,
111     TDM_OUTPUT_DPMS_MAX,
112 } tdm_output_dpms;
113
114 typedef enum
115 {
116     TDM_DISPLAY_CAPABILITY_PP       = (1<<0),
117     TDM_DISPLAY_CAPABILITY_CAPTURE  = (1<<1),
118 } tdm_display_capability;
119
120 typedef enum
121 {
122     TDM_LAYER_CAPABILITY_CURSOR         = (1<<0),
123     TDM_LAYER_CAPABILITY_PRIMARY        = (1<<1),
124     TDM_LAYER_CAPABILITY_OVERLAY        = (1<<2),
125     TDM_LAYER_CAPABILITY_SCALE          = (1<<4),
126     TDM_LAYER_CAPABILITY_TRANSFORM      = (1<<5),
127     TDM_LAYER_CAPABILITY_GRAPHIC        = (1<<8),
128     TDM_LAYER_CAPABILITY_VIDEO          = (1<<9),
129 } tdm_layer_capability;
130
131 typedef enum
132 {
133     TDM_PP_CAPABILITY_SYNC           = (1<<0),
134     TDM_PP_CAPABILITY_ASYNC          = (1<<1),
135     TDM_PP_CAPABILITY_SCALE          = (1<<4),
136     TDM_PP_CAPABILITY_TRANSFORM      = (1<<5),
137 } tdm_pp_capability;
138
139 typedef enum
140 {
141     TDM_CAPTURE_CAPABILITY_OUTPUT    = (1<<0),
142     TDM_CAPTURE_CAPABILITY_LAYER     = (1<<1),
143     TDM_CAPTURE_CAPABILITY_SCALE     = (1<<4),
144     TDM_CAPTURE_CAPABILITY_TRANSFORM = (1<<5),
145 } tdm_capture_capability;
146
147 /* bit compatible with the drm definitions. */
148 typedef enum
149 {
150     TDM_OUTPUT_MODE_TYPE_BUILTIN    = (1<<0),
151     TDM_OUTPUT_MODE_TYPE_CLOCK_C    = ((1<<1) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
152     TDM_OUTPUT_MODE_TYPE_CRTC_C     = ((1<<2) | TDM_OUTPUT_MODE_TYPE_BUILTIN),
153     TDM_OUTPUT_MODE_TYPE_PREFERRED  = (1<<3),
154     TDM_OUTPUT_MODE_TYPE_DEFAULT    = (1<<4),
155     TDM_OUTPUT_MODE_TYPE_USERDEF    = (1<<5),
156     TDM_OUTPUT_MODE_TYPE_DRIVER     = (1<<6),
157 } tdm_output_mode_type;
158
159 /* bit compatible with the drm definitions. */
160 typedef enum
161 {
162     TDM_OUTPUT_MODE_FLAG_PHSYNC     = (1<<0),
163     TDM_OUTPUT_MODE_FLAG_NHSYNC     = (1<<1),
164     TDM_OUTPUT_MODE_FLAG_PVSYNC     = (1<<2),
165     TDM_OUTPUT_MODE_FLAG_NVSYNC     = (1<<3),
166     TDM_OUTPUT_MODE_FLAG_INTERLACE  = (1<<4),
167     TDM_OUTPUT_MODE_FLAG_DBLSCAN    = (1<<5),
168     TDM_OUTPUT_MODE_FLAG_CSYNC      = (1<<6),
169     TDM_OUTPUT_MODE_FLAG_PCSYNC     = (1<<7),
170     TDM_OUTPUT_MODE_FLAG_NCSYNC     = (1<<8),
171     TDM_OUTPUT_MODE_FLAG_HSKEW      = (1<<9), /* hskew provided */
172     TDM_OUTPUT_MODE_FLAG_BCAST      = (1<<10),
173     TDM_OUTPUT_MODE_FLAG_PIXMUX     = (1<<11),
174     TDM_OUTPUT_MODE_FLAG_DBLCLK     = (1<<12),
175     TDM_OUTPUT_MODE_FLAG_CLKDIV2    = (1<<13),
176 } tdm_output_mode_flag;
177
178 typedef struct _tdm_output_mode
179 {
180     unsigned int width;
181     unsigned int height;
182     unsigned int refresh;
183     unsigned int flags;
184     unsigned int type;
185     char name[TDM_NAME_LEN];
186 } tdm_output_mode;
187
188 typedef struct _tdm_prop
189 {
190     unsigned int id;
191     char name[TDM_NAME_LEN];
192 } tdm_prop;
193
194 typedef struct _tdm_size {
195     unsigned int h;
196     unsigned int v;
197 } tdm_size;
198
199 typedef struct _tdm_pos
200 {
201     unsigned int x;
202     unsigned int y;
203     unsigned int w;
204     unsigned int h;
205 } tdm_pos;
206
207 typedef union
208 {
209     void         *ptr;
210     int32_t  s32;
211     uint32_t u32;
212     int64_t  s64;
213     uint64_t u64;
214 } tdm_value;
215
216 typedef struct _tdm_info_config
217 {
218     tdm_size size;
219     tdm_pos pos;
220     tbm_format format;
221 } tdm_info_config;
222
223 typedef struct _tdm_info_layer
224 {
225     tdm_info_config src_config;
226     tdm_pos dst_pos;
227     tdm_transform transform;
228 } tdm_info_layer;
229
230 typedef struct _tdm_info_pp
231 {
232     tdm_info_config src_config;
233     tdm_info_config dst_config;
234     tdm_transform transform;
235     int sync;
236 } tdm_info_pp;
237
238 typedef struct _tdm_info_capture
239 {
240     tdm_info_config dst_config;
241     tdm_transform transform;
242     int oneshot;
243     int frequency;
244 } tdm_info_capture;
245
246 typedef void tdm_display;
247 typedef void tdm_output;
248 typedef void tdm_layer;
249 typedef void tdm_buffer;
250 typedef void tdm_capture;
251 typedef void tdm_pp;
252
253 typedef void (*tdm_output_vblank_handler)(tdm_output *output, unsigned int sequence,
254                                           unsigned int tv_sec, unsigned int tv_usec, void *user_data);
255 typedef void (*tdm_output_commit_handler)(tdm_output *output, unsigned int sequence,
256                                           unsigned int tv_sec, unsigned int tv_usec, void *user_data);
257
258
259 #ifdef __cplusplus
260 }
261 #endif
262
263 #endif /* _TDM_TYPES_H_ */