1 /**************************************************************************
5 * Copyright 2021 Samsung Electronics co., Ltd. All Rights Reserved.
7 * Contact: SooChan Lim <sc1.lim@samsung.com>,
8 * Junkyeong Kim <jk0430.kim@samsung.com>,
9 * Shawn Lee <shiin.lee@samsung.com>,
10 * Changyeon Lee <cyeon.lee@samsung.com>,
11 * Joonbum Ko <joonbum.ko@samsung.com>
13 * Permission is hereby granted, free of charge, to any person obtaining a
14 * copy of this software and associated documentation files (the
15 * "Software"), to deal in the Software without restriction, including
16 * without limitation the rights to use, copy, modify, merge, publish,
17 * distribute, sub license, and/or sell copies of the Software, and to
18 * permit persons to whom the Software is furnished to do so, subject to
19 * the following conditions:
21 * The above copyright notice and this permission notice (including the
22 * next paragraph) shall be included in all copies or substantial portions
25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
26 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
28 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
29 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
30 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
31 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 **************************************************************************/
41 #include <hal-common.h>
43 #include "hal-tdm-interface.h"
46 #if defined(__GNUC__) && __GNUC__ >= 4
47 #define EXTERN __attribute__ ((visibility("default")))
52 #if defined(__GNUC__) && __GNUC__ >= 4
53 #define INTERN __attribute__ ((visibility("hidden")))
58 #define ARRAY_SIZE(name) (sizeof(name)/sizeof(name[0]))
60 #define DISPLAY_FUNC_ENTRY(__func__) \
61 hal_tdm_display_funcs *display_funcs; \
62 if (!display) return HAL_TDM_ERROR_INVALID_PARAMETER; \
63 if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
64 if (!g_hal_tdm_backend_data->display_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
65 display_funcs = g_hal_tdm_backend_data->display_funcs; \
66 if (!display_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
68 #define DISPLAY_FUNC_ENTRY_NULL(__func__) \
69 hal_tdm_display_funcs *display_funcs; \
70 if (!display) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
71 if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
72 if (!g_hal_tdm_backend_data->display_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
73 display_funcs = g_hal_tdm_backend_data->display_funcs; \
74 if (!display_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
76 #define OUTPUT_FUNC_ENTRY(__func__) \
77 hal_tdm_output_funcs *output_funcs; \
78 if (!output) return HAL_TDM_ERROR_INVALID_PARAMETER; \
79 if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
80 if (!g_hal_tdm_backend_data->output_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
81 output_funcs = g_hal_tdm_backend_data->output_funcs; \
82 if (!output_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
84 #define OUTPUT_FUNC_ENTRY_NULL(__func__) \
85 hal_tdm_output_funcs *output_funcs; \
86 if (!output) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
87 if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
88 if (!g_hal_tdm_backend_data->output_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
89 output_funcs = g_hal_tdm_backend_data->output_funcs; \
90 if (!output_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
92 #define VOUTPUT_FUNC_ENTRY(__func__) \
93 hal_tdm_voutput_funcs *voutput_funcs; \
94 if (!voutput) return HAL_TDM_ERROR_INVALID_PARAMETER; \
95 if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
96 if (!g_hal_tdm_backend_data->voutput_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
97 voutput_funcs = g_hal_tdm_backend_data->voutput_funcs; \
98 if (!voutput_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
100 #define VOUTPUT_FUNC_ENTRY_NULL(__func__) \
101 hal_tdm_voutput_funcs *voutput_funcs; \
102 if (!voutput) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
103 if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
104 if (!g_hal_tdm_backend_data->voutput_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
105 voutput_funcs = g_hal_tdm_backend_data->voutput_funcs; \
106 if (!voutput_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
108 #define HWC_FUNC_ENTRY(__func__) \
109 hal_tdm_hwc_funcs *hwc_funcs; \
110 if (!hwc) return HAL_TDM_ERROR_INVALID_PARAMETER; \
111 if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
112 if (!g_hal_tdm_backend_data->hwc_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
113 hwc_funcs = g_hal_tdm_backend_data->hwc_funcs; \
114 if (!hwc_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
116 #define HWC_FUNC_ENTRY_NULL(__func__) \
117 hal_tdm_hwc_funcs *hwc_funcs; \
118 if (!hwc) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
119 if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
120 if (!g_hal_tdm_backend_data->hwc_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
121 hwc_funcs = g_hal_tdm_backend_data->hwc_funcs; \
122 if (!hwc_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
124 #define HWC_WINDOW_FUNC_ENTRY(__func__) \
125 hal_tdm_hwc_window_funcs *hwc_window_funcs; \
126 if (!hwc_window) return HAL_TDM_ERROR_INVALID_PARAMETER; \
127 if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
128 if (!g_hal_tdm_backend_data->hwc_window_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
129 hwc_window_funcs = g_hal_tdm_backend_data->hwc_window_funcs; \
130 if (!hwc_window_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
132 #define HWC_WINDOW_FUNC_ENTRY_NULL(__func__) \
133 hal_tdm_hwc_window_funcs *hwc_window_funcs; \
134 if (!hwc_window) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
135 if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
136 if (!g_hal_tdm_backend_data->hwc_window_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
137 hwc_window_funcs = g_hal_tdm_backend_data->hwc_window_funcs; \
138 if (!hwc_window_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
140 #define HWC_WINDOW_FUNC_ENTRY_VOID(__func__) \
141 hal_tdm_hwc_window_funcs *hwc_window_funcs; \
142 if (!hwc_window) return; \
143 if (!g_hal_tdm_backend_data) return; \
144 if (!g_hal_tdm_backend_data->hwc_window_funcs) return; \
145 hwc_window_funcs = g_hal_tdm_backend_data->hwc_window_funcs; \
146 if (!hwc_window_funcs->__func__) return;
148 #define PP_FUNC_ENTRY(__func__) \
149 hal_tdm_pp_funcs *pp_funcs; \
150 if (!pp) return HAL_TDM_ERROR_INVALID_PARAMETER; \
151 if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
152 if (!g_hal_tdm_backend_data->pp_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
153 pp_funcs = g_hal_tdm_backend_data->pp_funcs; \
154 if (!pp_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
156 #define PP_FUNC_ENTRY_VOID(__func__) \
157 hal_tdm_pp_funcs *pp_funcs; \
159 if (!g_hal_tdm_backend_data) return; \
160 if (!g_hal_tdm_backend_data->pp_funcs) return; \
161 pp_funcs = g_hal_tdm_backend_data->pp_funcs; \
162 if (!pp_funcs->__func__) return;
164 #define CAPTURE_FUNC_ENTRY(__func__) \
165 hal_tdm_capture_funcs *capture_funcs; \
166 if (!capture) return HAL_TDM_ERROR_INVALID_PARAMETER; \
167 if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
168 if (!g_hal_tdm_backend_data->capture_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
169 capture_funcs = g_hal_tdm_backend_data->capture_funcs; \
170 if (!capture_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
172 #define CAPTURE_FUNC_ENTRY_VOID(__func__) \
173 hal_tdm_capture_funcs *capture_funcs; \
174 if (!capture) return; \
175 if (!g_hal_tdm_backend_data) return; \
176 if (!g_hal_tdm_backend_data->capture_funcs) return; \
177 capture_funcs = g_hal_tdm_backend_data->capture_funcs; \
178 if (!capture_funcs->__func__) return;
180 static hal_tdm_backend_data *g_hal_tdm_backend_data = NULL;
182 EXTERN hal_tdm_backend *
183 hal_tdm_get_backend(hal_tdm_error *error)
185 hal_tdm_backend_data *backend_data;
188 if (g_hal_tdm_backend_data) {
190 *error = HAL_TDM_ERROR_BAD_REQUEST;
194 ret = hal_common_get_backend(HAL_MODULE_TDM, (void **)&backend_data);
196 HAL_TDM_ERR("Failed to get backend\n");
198 *error = HAL_TDM_ERROR_NO_MODULE;
202 g_hal_tdm_backend_data = (hal_tdm_backend_data *)backend_data;
205 *error = HAL_TDM_ERROR_NONE;
207 HAL_TDM_INFO("hal_tdm_get_backend");
209 return (hal_tdm_backend *)backend_data;
213 hal_tdm_put_backend(hal_tdm_backend *backend)
215 hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
218 if (!backend_data && g_hal_tdm_backend_data != backend) {
219 HAL_TDM_ERR("no backend_data\n");
220 return HAL_TDM_ERROR_NO_MODULE;
223 ret = hal_common_put_backend(HAL_MODULE_TDM, backend_data);
225 HAL_TDM_ERR("Failed to put backend\n");
226 return HAL_TDM_ERROR_OPERATION_FAILED;
229 g_hal_tdm_backend_data = NULL;
231 HAL_TDM_INFO("hal_tdm_put_backend");
233 return HAL_TDM_ERROR_NONE;
236 EXTERN hal_tdm_display *
237 hal_tdm_backend_get_display(hal_tdm_backend *backend, hal_tdm_error *error)
239 hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
240 hal_tdm_display *display;
242 if (!backend_data || g_hal_tdm_backend_data != backend) {
243 HAL_TDM_ERR("no backend_data\n");
245 *error = HAL_TDM_ERROR_NO_MODULE;
249 display = backend_data->display;
251 HAL_TDM_ERR("no display\n");
253 *error = HAL_TDM_ERROR_OPERATION_FAILED;
258 *error = HAL_TDM_ERROR_NONE;
264 hal_tdm_backend_has_drm_device(hal_tdm_backend *backend, hal_tdm_error *error)
266 hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
268 if (!backend_data || g_hal_tdm_backend_data != backend) {
269 HAL_TDM_ERR("no backend_data\n");
271 *error = HAL_TDM_ERROR_OPERATION_FAILED;
275 return backend_data->has_drm_device;
279 hal_tdm_backend_get_master_drm_fd(hal_tdm_backend *backend, hal_tdm_error *error)
281 hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
283 if (!backend_data || g_hal_tdm_backend_data != backend) {
284 HAL_TDM_ERR("no backend_data\n");
286 *error = HAL_TDM_ERROR_OPERATION_FAILED;
290 if (!backend_data->drm_info.is_master) {
291 HAL_TDM_INFO("no master_drm_fd");
295 HAL_TDM_INFO("master_drm_fd is %d", backend_data->drm_info.drm_fd);
297 return backend_data->drm_info.drm_fd;
301 hal_tdm_backend_set_master_drm_fd(hal_tdm_backend *backend, hal_tdm_fd master_drm_fd)
303 hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
306 if (!backend_data || g_hal_tdm_backend_data != backend) {
307 HAL_TDM_ERR("no backend_data\n");
308 return HAL_TDM_ERROR_OPERATION_FAILED;
311 if (!backend_data->drm_info.master_drm_fd_func) {
312 HAL_TDM_ERR("no backend_data->drm_info.auth_fd_func\n");
313 return HAL_TDM_ERROR_OPERATION_FAILED;
316 ret = backend_data->drm_info.master_drm_fd_func(master_drm_fd, backend_data->drm_info.user_data);
317 if (ret != HAL_TDM_ERROR_NONE) {
318 HAL_TDM_ERR("backend_data->drm_info.master_drm_fd_func failed\n");
322 return HAL_TDM_ERROR_NONE;
325 EXTERN hal_tdm_event_source **
326 hal_tdm_backend_get_event_sources(hal_tdm_backend *backend, int *num_event_sources, hal_tdm_error *error)
328 hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
329 hal_tdm_event_source **event_source;
331 if (!backend_data || g_hal_tdm_backend_data != backend) {
332 HAL_TDM_ERR("no backend_data\n");
334 *error = HAL_TDM_ERROR_NO_MODULE;
338 event_source = backend_data->event_sources;
339 if (num_event_sources)
340 *num_event_sources = backend_data->num_event_sources;
342 return backend_data->event_sources;
346 hal_tdm_backend_get_name(hal_tdm_backend *backend)
351 name = calloc(HAL_TDM_NAME_LEN, sizeof(char));
353 HAL_TDM_ERR("no memory");
357 ret = hal_common_get_backend_name(HAL_MODULE_TDM, name, HAL_TDM_NAME_LEN);
359 HAL_TDM_ERR("hal_common_get_backend_name failed.\n");
368 hal_tdm_backend_get_vendor(hal_tdm_backend *backend)
373 vendor = calloc(HAL_TDM_NAME_LEN, sizeof(char));
375 HAL_TDM_ERR("no memory");
379 ret = hal_common_get_backend_vendor(HAL_MODULE_TDM, vendor, HAL_TDM_NAME_LEN);
381 HAL_TDM_ERR("hal_common_get_backend_name failed.\n");
389 #define TDM_BACKEND_MINOR_VERSION_MASK 0x0000FFFF
390 #define TDM_BACKEND_MAJOR_VERSION_MASK 0xFFFF0000
391 #define TDM_BACKEND_GET_ABI_MINOR(v) ((v) & TDM_BACKEND_MINOR_VERSION_MASK)
392 #define TDM_BACKEND_GET_ABI_MAJOR(v) (((v) & TDM_BACKEND_MAJOR_VERSION_MASK) >> 16)
393 #define TDM_BACKEND_SET_ABI_VERSION(major, minor) \
394 (((major) << 16) & TDM_BACKEND_MAJOR_VERSION_MASK) | \
395 ((minor) & TDM_BACKEND_MINOR_VERSION_MASK)
398 hal_tdm_backend_get_abi_version(hal_tdm_backend *backend)
400 unsigned long abi_version = 0;
401 unsigned int hal_abi_version;
403 hal_abi_version = hal_common_get_backend_abi_version(HAL_MODULE_TDM);
405 switch (hal_abi_version) {
406 case HAL_ABI_VERSION_TIZEN_6_5:
407 abi_version = TDM_BACKEND_SET_ABI_VERSION(6,5);
417 /* tdm_display_funcs */
419 hal_tdm_display_get_capability(hal_tdm_display *display, hal_tdm_caps_display *caps)
421 DISPLAY_FUNC_ENTRY(display_get_capability);
423 return display_funcs->display_get_capability(display, caps);
427 hal_tdm_display_get_pp_capability(hal_tdm_display *display, hal_tdm_caps_pp *caps)
429 DISPLAY_FUNC_ENTRY(display_get_pp_capability);
431 return display_funcs->display_get_pp_capability(display, caps);
435 hal_tdm_display_get_capture_capability(hal_tdm_display *display, hal_tdm_caps_capture *caps)
437 DISPLAY_FUNC_ENTRY(display_get_capture_capability);
439 return display_funcs->display_get_capture_capability(display, caps);
442 EXTERN hal_tdm_output **
443 hal_tdm_display_get_outputs(hal_tdm_display *display, int *count, hal_tdm_error *error)
445 DISPLAY_FUNC_ENTRY_NULL(display_get_outputs);
447 return display_funcs->display_get_outputs(display, count, error);
451 hal_tdm_display_get_fd(hal_tdm_display *display, int *fd)
453 DISPLAY_FUNC_ENTRY(display_get_fd);
455 return display_funcs->display_get_fd(display, fd);
459 hal_tdm_display_handle_events(hal_tdm_display *display)
461 DISPLAY_FUNC_ENTRY(display_handle_events);
463 return display_funcs->display_handle_events(display);
467 hal_tdm_display_create_pp(hal_tdm_display *display, hal_tdm_error *error)
469 DISPLAY_FUNC_ENTRY_NULL(display_create_pp);
471 return display_funcs->display_create_pp(display, error);
474 EXTERN hal_tdm_voutput *
475 hal_tdm_display_voutput_create(hal_tdm_display *display, const char *name, hal_tdm_error *error)
477 DISPLAY_FUNC_ENTRY_NULL(display_voutput_create);
479 return display_funcs->display_voutput_create(display, name, error);
485 hal_tdm_output_get_capability(hal_tdm_output *output, hal_tdm_caps_output *caps)
487 OUTPUT_FUNC_ENTRY(output_get_capability);
489 return output_funcs->output_get_capability(output, caps);
493 hal_tdm_output_set_property(hal_tdm_output *output, unsigned int id, hal_tdm_value value)
495 OUTPUT_FUNC_ENTRY(output_set_property);
497 return output_funcs->output_set_property(output, id, value);
501 hal_tdm_output_get_property(hal_tdm_output *output, unsigned int id, hal_tdm_value *value)
503 OUTPUT_FUNC_ENTRY(output_get_property);
505 return output_funcs->output_get_property(output, id, value);
509 hal_tdm_output_wait_vblank(hal_tdm_output *output, int interval, int sync, void *user_data)
511 OUTPUT_FUNC_ENTRY(output_wait_vblank);
513 return output_funcs->output_wait_vblank(output, interval, sync, user_data);
517 hal_tdm_output_set_vblank_handler(hal_tdm_output *output, hal_tdm_output_vblank_handler func)
519 OUTPUT_FUNC_ENTRY(output_set_vblank_handler);
521 return output_funcs->output_set_vblank_handler(output, func);
524 // TODO: DEPRECATED. NOT SUPPORTED~!!!!
526 hal_tdm_output_commit(hal_tdm_output *output, int sync, void *user_data)
528 return HAL_TDM_ERROR_BAD_REQUEST;
531 // TODO: DEPRECATED. NOT SUPPORTED~!!!!
533 hal_tdm_output_set_commit_handler(hal_tdm_output *output, hal_tdm_output_commit_handler func)
535 return HAL_TDM_ERROR_BAD_REQUEST;
539 hal_tdm_output_set_dpms(hal_tdm_output *output, hal_tdm_output_dpms dpms_value)
541 OUTPUT_FUNC_ENTRY(output_set_dpms);
543 return output_funcs->output_set_dpms(output, dpms_value);
547 hal_tdm_output_get_dpms(hal_tdm_output *output, hal_tdm_output_dpms *dpms_value)
549 OUTPUT_FUNC_ENTRY(output_get_dpms);
551 return output_funcs->output_get_dpms(output, dpms_value);
555 hal_tdm_output_set_mode(hal_tdm_output *output, const hal_tdm_output_mode *mode)
557 OUTPUT_FUNC_ENTRY(output_set_mode);
559 return output_funcs->output_set_mode(output, mode);
563 hal_tdm_output_get_mode(hal_tdm_output *output, const hal_tdm_output_mode **mode)
565 OUTPUT_FUNC_ENTRY(output_get_mode);
567 return output_funcs->output_get_mode(output, mode);
570 EXTERN hal_tdm_capture *
571 hal_tdm_output_create_capture(hal_tdm_output *output, hal_tdm_error *error)
573 OUTPUT_FUNC_ENTRY_NULL(output_create_capture);
575 return output_funcs->output_create_capture(output, error);
579 hal_tdm_output_set_status_handler(hal_tdm_output *output, hal_tdm_output_status_handler func, void *user_data)
581 OUTPUT_FUNC_ENTRY(output_set_status_handler);
583 return output_funcs->output_set_status_handler(output, func, user_data);
587 hal_tdm_output_set_dpms_handler(hal_tdm_output *output, hal_tdm_output_dpms_handler func, void *user_data)
589 OUTPUT_FUNC_ENTRY(output_set_dpms_handler);
591 return output_funcs->output_set_dpms_handler(output, func, user_data);
595 hal_tdm_output_set_dpms_async(hal_tdm_output *output, hal_tdm_output_dpms dpms_value, int *sync)
597 OUTPUT_FUNC_ENTRY(output_set_dpms_async);
599 return output_funcs->output_set_dpms_async(output, dpms_value, sync);
603 hal_tdm_output_get_hwc(hal_tdm_output *output, hal_tdm_error *error)
605 OUTPUT_FUNC_ENTRY_NULL(output_get_hwc);
607 return output_funcs->output_get_hwc(output, error);
611 hal_tdm_output_set_mirror(hal_tdm_output *output, hal_tdm_output *src_output, hal_tdm_transform transform)
613 OUTPUT_FUNC_ENTRY(output_set_mirror);
615 return output_funcs->output_set_mirror(output, src_output, transform);
619 hal_tdm_output_unset_mirror(hal_tdm_output *output)
621 OUTPUT_FUNC_ENTRY(output_unset_mirror);
623 return output_funcs->output_unset_mirror(output);
629 hal_tdm_voutput_destroy(hal_tdm_voutput *voutput)
631 VOUTPUT_FUNC_ENTRY(voutput_destroy);
633 return voutput_funcs->voutput_destroy(voutput);
637 hal_tdm_voutput_set_available_mode(hal_tdm_voutput *voutput, const hal_tdm_output_mode *modes, int count)
639 VOUTPUT_FUNC_ENTRY(voutput_set_available_mode);
641 return voutput_funcs->voutput_set_available_mode(voutput, modes, count);
645 hal_tdm_voutput_set_physical_size(hal_tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight)
647 VOUTPUT_FUNC_ENTRY(voutput_set_physical_size);
649 return voutput_funcs->voutput_set_physical_size(voutput, mmwidth, mmheight);
653 hal_tdm_voutput_connect(hal_tdm_voutput *voutput)
655 VOUTPUT_FUNC_ENTRY(voutput_connect);
657 return voutput_funcs->voutput_connect(voutput);
661 hal_tdm_voutput_disconnect(hal_tdm_voutput *voutput)
663 VOUTPUT_FUNC_ENTRY(voutput_disconnect);
665 return voutput_funcs->voutput_disconnect(voutput);
668 EXTERN hal_tdm_output *
669 hal_tdm_voutput_get_output(hal_tdm_voutput *voutput, hal_tdm_error *error)
671 VOUTPUT_FUNC_ENTRY_NULL(voutput_get_output);
673 return voutput_funcs->voutput_get_output(voutput, error);
677 hal_tdm_voutput_set_commit_func(hal_tdm_voutput *voutput, hal_tdm_voutput_commit_handler commit_func)
679 VOUTPUT_FUNC_ENTRY(voutput_set_commit_func);
681 return voutput_funcs->voutput_set_commit_func(voutput, commit_func);
685 hal_tdm_voutput_commit_done(hal_tdm_voutput *voutput)
687 VOUTPUT_FUNC_ENTRY(voutput_commit_done);
689 return voutput_funcs->voutput_commit_done(voutput);
693 hal_tdm_voutput_set_target_buffer_queue_flag(hal_tdm_voutput *voutput, int flags)
695 VOUTPUT_FUNC_ENTRY(voutput_set_target_buffer_queue_flag);
697 return voutput_funcs->voutput_set_target_buffer_queue_flag(voutput, flags);
702 EXTERN hal_tdm_hwc_window *
703 hal_tdm_hwc_create_window(hal_tdm_hwc *hwc, hal_tdm_error *error)
705 HWC_FUNC_ENTRY_NULL(hwc_create_window);
707 return hwc_funcs->hwc_create_window(hwc, error);
711 hal_tdm_hwc_get_video_supported_formats(hal_tdm_hwc *hwc, const tbm_format **formats, int *count)
713 HWC_FUNC_ENTRY(hwc_get_video_supported_formats);
715 return hwc_funcs->hwc_get_video_supported_formats(hwc, formats, count);
719 hal_tdm_hwc_get_video_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count)
721 HWC_FUNC_ENTRY(hwc_get_video_available_properties);
723 return hwc_funcs->hwc_get_video_available_properties(hwc, props, count);
727 hal_tdm_hwc_get_capabilities(hal_tdm_hwc *hwc, hal_tdm_hwc_capability *capabilities)
729 HWC_FUNC_ENTRY(hwc_get_capabilities);
731 return hwc_funcs->hwc_get_capabilities(hwc, capabilities);
735 hal_tdm_hwc_get_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count)
737 HWC_FUNC_ENTRY(hwc_get_available_properties);
739 return hwc_funcs->hwc_get_available_properties(hwc, props, count);
742 EXTERN tbm_surface_queue_h
743 hal_tdm_hwc_get_client_target_buffer_queue(hal_tdm_hwc *hwc, hal_tdm_error *error)
745 HWC_FUNC_ENTRY_NULL(hwc_get_client_target_buffer_queue);
747 return hwc_funcs->hwc_get_client_target_buffer_queue(hwc, error);
751 hal_tdm_hwc_set_client_target_buffer(hal_tdm_hwc *hwc, tbm_surface_h target_buffer, hal_tdm_region damage)
753 HWC_FUNC_ENTRY(hwc_set_client_target_buffer);
755 return hwc_funcs->hwc_set_client_target_buffer(hwc, target_buffer, damage);
759 hal_tdm_hwc_set_client_target_acquire_fence(hal_tdm_hwc *hwc, int acquire_fence)
761 HWC_FUNC_ENTRY(hwc_set_client_target_acquire_fence);
763 return hwc_funcs->hwc_set_client_target_acquire_fence(hwc, acquire_fence);
767 hal_tdm_hwc_validate(hal_tdm_hwc *hwc, hal_tdm_hwc_window **composited_wnds, uint32_t num_wnds, uint32_t *num_types)
769 HWC_FUNC_ENTRY(hwc_validate);
771 return hwc_funcs->hwc_validate(hwc, composited_wnds, num_wnds, num_types);
775 hal_tdm_hwc_get_changed_composition_types(hal_tdm_hwc *hwc, uint32_t *num_elements, hal_tdm_hwc_window **hwc_window, hal_tdm_hwc_window_composition *composition_types)
777 HWC_FUNC_ENTRY(hwc_get_changed_composition_types);
779 return hwc_funcs->hwc_get_changed_composition_types(hwc, num_elements, hwc_window, composition_types);
783 hal_tdm_hwc_accept_validation(hal_tdm_hwc *hwc)
785 HWC_FUNC_ENTRY(hwc_accept_validation);
787 return hwc_funcs->hwc_accept_validation(hwc);
791 hal_tdm_hwc_commit(hal_tdm_hwc *hwc, int sync, void *user_data)
793 HWC_FUNC_ENTRY(hwc_commit);
795 return hwc_funcs->hwc_commit(hwc, sync, user_data);
799 hal_tdm_hwc_set_commit_handler(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_handler func)
801 HWC_FUNC_ENTRY(hwc_set_commit_handler);
803 return hwc_funcs->hwc_set_commit_handler(hwc, func);
807 hal_tdm_hwc_get_commit_fence(hal_tdm_hwc *hwc, int *commit_fence)
809 HWC_FUNC_ENTRY(hwc_get_commit_fence);
811 return hwc_funcs->hwc_get_commit_fence(hwc, commit_fence);
815 hal_tdm_hwc_get_release_fences(hal_tdm_hwc *hwc, uint32_t *num_elements, hal_tdm_hwc_window **hwc_windows, int *release_fences)
817 HWC_FUNC_ENTRY(hwc_get_release_fences);
819 return hwc_funcs->hwc_get_release_fences(hwc, num_elements, hwc_windows, release_fences);
823 hal_tdm_hwc_set_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value value)
825 HWC_FUNC_ENTRY(hwc_set_property);
827 return hwc_funcs->hwc_set_property(hwc, id, value);
831 hal_tdm_hwc_get_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value *value)
833 HWC_FUNC_ENTRY(hwc_get_property);
835 return hwc_funcs->hwc_get_property(hwc, id, value);
839 hal_tdm_hwc_get_commit_interval(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_interval *interval)
841 HWC_FUNC_ENTRY(hwc_get_commit_interval);
843 return hwc_funcs->hwc_get_commit_interval(hwc, interval);
847 /* hwc_window_funcs */
849 hal_tdm_hwc_window_destroy(hal_tdm_hwc_window *hwc_window)
851 HWC_WINDOW_FUNC_ENTRY_VOID(hwc_window_destroy);
853 hwc_window_funcs->hwc_window_destroy(hwc_window);
856 EXTERN tbm_surface_queue_h
857 hal_tdm_hwc_window_acquire_buffer_queue(hal_tdm_hwc_window *hwc_window, hal_tdm_error *error)
859 HWC_WINDOW_FUNC_ENTRY_NULL(hwc_window_acquire_buffer_queue);
861 return hwc_window_funcs->hwc_window_acquire_buffer_queue(hwc_window, error);
865 hal_tdm_hwc_window_release_buffer_queue(hal_tdm_hwc_window *hwc_window, tbm_surface_queue_h queue)
867 HWC_WINDOW_FUNC_ENTRY_VOID(hwc_window_release_buffer_queue);
869 hwc_window_funcs->hwc_window_release_buffer_queue(hwc_window, queue);
873 hal_tdm_hwc_window_set_composition_type(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_composition composition_type)
875 HWC_WINDOW_FUNC_ENTRY(hwc_window_set_composition_type);
877 return hwc_window_funcs->hwc_window_set_composition_type(hwc_window, composition_type);
881 hal_tdm_hwc_window_set_buffer_damage(hal_tdm_hwc_window *hwc_window, hal_tdm_region damage)
883 HWC_WINDOW_FUNC_ENTRY(hwc_window_set_buffer_damage);
885 return hwc_window_funcs->hwc_window_set_buffer_damage(hwc_window, damage);
889 hal_tdm_hwc_window_set_info(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_info *info)
891 HWC_WINDOW_FUNC_ENTRY(hwc_window_set_info);
893 return hwc_window_funcs->hwc_window_set_info(hwc_window, info);
897 hal_tdm_hwc_window_set_buffer(hal_tdm_hwc_window *hwc_window, tbm_surface_h buffer)
899 HWC_WINDOW_FUNC_ENTRY(hwc_window_set_buffer);
901 return hwc_window_funcs->hwc_window_set_buffer(hwc_window, buffer);
905 hal_tdm_hwc_window_set_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value value)
907 HWC_WINDOW_FUNC_ENTRY(hwc_window_set_property);
909 return hwc_window_funcs->hwc_window_set_property(hwc_window, id, value);
913 hal_tdm_hwc_window_get_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value *value)
915 HWC_WINDOW_FUNC_ENTRY(hwc_window_get_property);
917 return hwc_window_funcs->hwc_window_get_property(hwc_window, id, value);
921 hal_tdm_hwc_window_get_constraints(hal_tdm_hwc_window *hwc_window, int *constraints)
923 HWC_WINDOW_FUNC_ENTRY(hwc_window_get_constraints);
925 return hwc_window_funcs->hwc_window_get_constraints(hwc_window, constraints);
929 hal_tdm_hwc_window_set_name(hal_tdm_hwc_window *hwc_window, const char *name)
931 HWC_WINDOW_FUNC_ENTRY(hwc_window_set_name);
933 return hwc_window_funcs->hwc_window_set_name(hwc_window, name);
937 hal_tdm_hwc_window_set_cursor_image(hal_tdm_hwc_window *hwc_window, int width, int height, int stride, void *ptr)
939 HWC_WINDOW_FUNC_ENTRY(hwc_window_set_cursor_image);
941 return hwc_window_funcs->hwc_window_set_cursor_image(hwc_window, width, height, stride, ptr);
945 hal_tdm_hwc_window_set_acquire_fence(hal_tdm_hwc_window *hwc_window, int acquire_fence)
947 HWC_WINDOW_FUNC_ENTRY(hwc_window_set_acquire_fence);
949 return hwc_window_funcs->hwc_window_set_acquire_fence(hwc_window, acquire_fence);
955 hal_tdm_pp_destroy(hal_tdm_pp *pp)
957 PP_FUNC_ENTRY_VOID(pp_destroy);
958 pp_funcs->pp_destroy(pp);
962 hal_tdm_pp_set_info(hal_tdm_pp *pp, hal_tdm_info_pp *info)
964 PP_FUNC_ENTRY(pp_set_info);
966 return pp_funcs->pp_set_info(pp, info);
970 hal_tdm_pp_attach(hal_tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst)
972 PP_FUNC_ENTRY(pp_attach);
974 return pp_funcs->pp_attach(pp, src, dst);
978 hal_tdm_pp_commit(hal_tdm_pp *pp)
980 PP_FUNC_ENTRY(pp_commit);
982 return pp_funcs->pp_commit(pp);
986 hal_tdm_pp_set_done_handler(hal_tdm_pp *pp, hal_tdm_pp_done_handler func, void *user_data)
988 PP_FUNC_ENTRY(pp_set_done_handler);
990 return pp_funcs->pp_set_done_handler(pp, func, user_data);
996 hal_tdm_capture_destroy(hal_tdm_capture *capture)
998 CAPTURE_FUNC_ENTRY_VOID(capture_destroy);
999 capture_funcs->capture_destroy(capture);
1002 EXTERN hal_tdm_error
1003 hal_tdm_capture_set_info(hal_tdm_capture *capture, hal_tdm_info_capture *info)
1005 CAPTURE_FUNC_ENTRY(capture_set_info);
1007 return capture_funcs->capture_set_info(capture, info);
1010 EXTERN hal_tdm_error
1011 hal_tdm_capture_attach(hal_tdm_capture *capture, tbm_surface_h buffer)
1013 CAPTURE_FUNC_ENTRY(capture_attach);
1015 return capture_funcs->capture_attach(capture, buffer);
1018 EXTERN hal_tdm_error
1019 hal_tdm_capture_commit(hal_tdm_capture *capture)
1021 CAPTURE_FUNC_ENTRY(capture_commit);
1023 return capture_funcs->capture_commit(capture);
1026 EXTERN hal_tdm_error
1027 hal_tdm_capture_set_done_handler(hal_tdm_capture *capture, hal_tdm_capture_done_handler func, void *user_data)
1029 CAPTURE_FUNC_ENTRY(capture_set_done_handler);
1031 return capture_funcs->capture_set_done_handler(capture, func, user_data);