add external functions to get the backend information
[platform/hal/api/tdm.git] / include / hal-tdm.h
1 /**************************************************************************
2  *
3  * hal-api-tdm
4  *
5  * Copyright 2021 Samsung Electronics co., Ltd. All Rights Reserved.
6  *
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>
12  *
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:
20  *
21  * The above copyright notice and this permission notice (including the
22  * next paragraph) shall be included in all copies or substantial portions
23  * of the Software.
24  *
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.
32  *
33 **************************************************************************/
34
35 #ifndef __HAL_TDM__
36 #define __HAL_TDM__
37
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41
42 #include <tbm_surface.h>
43 #include <tbm_surface_queue.h>
44 #include "hal-tdm-types.h"
45
46 /* hal_tdm */
47 hal_tdm_backend   *hal_tdm_get_backend(hal_tdm_error *error);
48 hal_tdm_error      hal_tdm_put_backend(hal_tdm_backend *backend);
49
50 /* tdm_backend_data */
51 hal_tdm_display        *hal_tdm_backend_get_display(hal_tdm_backend *backend, hal_tdm_error *error);
52 int                     hal_tdm_backend_has_drm_device(hal_tdm_backend *backend, hal_tdm_error *error);
53 hal_tdm_fd              hal_tdm_backend_get_master_drm_fd(hal_tdm_backend *backend, hal_tdm_error *error);
54 hal_tdm_error           hal_tdm_backend_set_master_drm_fd(hal_tdm_backend *backend, hal_tdm_fd master_drm_fd);
55 hal_tdm_event_source  **hal_tdm_backend_get_event_sources(hal_tdm_backend *backend, int *num_event_sources, hal_tdm_error *error);
56 char                   *hal_tdm_backend_get_name(hal_tdm_backend *backend);
57 char                   *hal_tdm_backend_get_vendor(hal_tdm_backend *backend);
58 unsigned long           hal_tdm_backend_get_abi_version(hal_tdm_backend *backend);
59
60 /* tdm_display_funcs */
61 hal_tdm_error    hal_tdm_display_get_capability(hal_tdm_display *display, hal_tdm_caps_display *caps);
62 hal_tdm_error    hal_tdm_display_get_pp_capability(hal_tdm_display *display, hal_tdm_caps_pp *caps);
63 hal_tdm_error    hal_tdm_display_get_capture_capability(hal_tdm_display *display, hal_tdm_caps_capture *caps);
64 hal_tdm_output **hal_tdm_display_get_outputs(hal_tdm_display *display, int *count, hal_tdm_error *error);
65 hal_tdm_error    hal_tdm_display_get_fd(hal_tdm_display *display, int *fd);
66 hal_tdm_error    hal_tdm_display_handle_events(hal_tdm_display *display);
67 hal_tdm_pp      *hal_tdm_display_create_pp(hal_tdm_display *display, hal_tdm_error *error);
68 hal_tdm_voutput *hal_tdm_display_voutput_create(hal_tdm_display *display, const char *name, hal_tdm_error *error);
69
70 /* output_funcs */
71 hal_tdm_error    hal_tdm_output_get_capability(hal_tdm_output *output, hal_tdm_caps_output *caps);
72 hal_tdm_error    hal_tdm_output_set_property(hal_tdm_output *output, unsigned int id, hal_tdm_value value);
73 hal_tdm_error    hal_tdm_output_get_property(hal_tdm_output *output, unsigned int id, hal_tdm_value *value);
74 hal_tdm_error    hal_tdm_output_wait_vblank(hal_tdm_output *output, int interval, int sync, void *user_data);
75 hal_tdm_error    hal_tdm_output_set_vblank_handler(hal_tdm_output *output, hal_tdm_output_vblank_handler func);
76 hal_tdm_error    hal_tdm_output_commit(hal_tdm_output *output, int sync, void *user_data); // TODO: DEPRECATED. NOT SUPPORTED~!!!!
77 hal_tdm_error    hal_tdm_output_set_commit_handler(hal_tdm_output *output, hal_tdm_output_commit_handler func); // TODO: DEPRECATED. NOT SUPPORTED~!!!!
78 hal_tdm_error    hal_tdm_output_set_dpms(hal_tdm_output *output, hal_tdm_output_dpms dpms_value);
79 hal_tdm_error    hal_tdm_output_get_dpms(hal_tdm_output *output, hal_tdm_output_dpms *dpms_value);
80 hal_tdm_error    hal_tdm_output_set_mode(hal_tdm_output *output, const hal_tdm_output_mode *mode);
81 hal_tdm_error    hal_tdm_output_get_mode(hal_tdm_output *output, const hal_tdm_output_mode **mode);
82 hal_tdm_capture *hal_tdm_output_create_capture(hal_tdm_output *output, hal_tdm_error *error);
83 hal_tdm_error    hal_tdm_output_set_status_handler(hal_tdm_output *output, hal_tdm_output_status_handler func, void *user_data);
84 hal_tdm_error    hal_tdm_output_set_dpms_handler(hal_tdm_output *output, hal_tdm_output_dpms_handler func, void *user_data);
85 hal_tdm_error    hal_tdm_output_set_dpms_async(hal_tdm_output *output, hal_tdm_output_dpms dpms_value, int *sync);
86 hal_tdm_hwc     *hal_tdm_output_get_hwc(hal_tdm_output *output, hal_tdm_error *error);
87 hal_tdm_error    hal_tdm_output_set_mirror(hal_tdm_output *output, hal_tdm_output *src_output, hal_tdm_transform transform);
88 hal_tdm_error    hal_tdm_output_unset_mirror(hal_tdm_output *output);
89
90 /* voutput_funcs */
91 hal_tdm_error   hal_tdm_voutput_destroy(hal_tdm_voutput *voutput);
92 hal_tdm_error   hal_tdm_voutput_set_available_mode(hal_tdm_voutput *voutput, const hal_tdm_output_mode *modes, int count);
93 hal_tdm_error   hal_tdm_voutput_set_physical_size(hal_tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight);
94 hal_tdm_error   hal_tdm_voutput_connect(hal_tdm_voutput *voutput);
95 hal_tdm_error   hal_tdm_voutput_disconnect(hal_tdm_voutput *voutput);
96 hal_tdm_output *hal_tdm_voutput_get_output(hal_tdm_voutput *voutput, hal_tdm_error *error);
97 hal_tdm_error   hal_tdm_voutput_set_commit_func(hal_tdm_voutput *voutput, hal_tdm_voutput_commit_handler commit_func);
98 hal_tdm_error   hal_tdm_voutput_commit_done(hal_tdm_voutput *voutput);
99 hal_tdm_error   hal_tdm_voutput_set_target_buffer_queue_flag(hal_tdm_voutput *voutput, int flags);
100
101 /* hwc_funcs */
102 hal_tdm_hwc_window *hal_tdm_hwc_create_window(hal_tdm_hwc *hwc, hal_tdm_error *error);
103 hal_tdm_error       hal_tdm_hwc_get_video_supported_formats(hal_tdm_hwc *hwc, const tbm_format **formats, int *count);
104 hal_tdm_error       hal_tdm_hwc_get_video_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count);
105 hal_tdm_error       hal_tdm_hwc_get_capabilities(hal_tdm_hwc *hwc, hal_tdm_hwc_capability *capabilities);
106 hal_tdm_error       hal_tdm_hwc_get_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count);
107 tbm_surface_queue_h hal_tdm_hwc_get_client_target_buffer_queue(hal_tdm_hwc *hwc, hal_tdm_error *error);
108 hal_tdm_error       hal_tdm_hwc_set_client_target_buffer(hal_tdm_hwc *hwc, tbm_surface_h target_buffer, hal_tdm_region damage);
109 hal_tdm_error       hal_tdm_hwc_set_client_target_acquire_fence(hal_tdm_hwc *hwc, int acquire_fence);
110 hal_tdm_error       hal_tdm_hwc_validate(hal_tdm_hwc *hwc, hal_tdm_hwc_window **composited_wnds, uint32_t num_wnds, uint32_t *num_types);
111 hal_tdm_error       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);
112 hal_tdm_error       hal_tdm_hwc_accept_validation(hal_tdm_hwc *hwc);
113 hal_tdm_error       hal_tdm_hwc_commit(hal_tdm_hwc *hwc, int sync, void *user_data);
114 hal_tdm_error       hal_tdm_hwc_set_commit_handler(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_handler func);
115 hal_tdm_error       hal_tdm_hwc_get_commit_fence(hal_tdm_hwc *hwc, int *commit_fence);
116 hal_tdm_error       hal_tdm_hwc_get_release_fences(hal_tdm_hwc *hwc, uint32_t *num_elements, hal_tdm_hwc_window **hwc_windows, int *release_fences);
117 hal_tdm_error       hal_tdm_hwc_set_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value value);
118 hal_tdm_error       hal_tdm_hwc_get_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value *value);
119 hal_tdm_error       hal_tdm_hwc_get_commit_interval(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_interval *interval);
120
121 /* hwc_window_funcs */
122 void                hal_tdm_hwc_window_destroy(hal_tdm_hwc_window *hwc_window);
123 tbm_surface_queue_h hal_tdm_hwc_window_acquire_buffer_queue(hal_tdm_hwc_window *hwc_window, hal_tdm_error *error);
124 void                hal_tdm_hwc_window_release_buffer_queue(hal_tdm_hwc_window *hwc_window, tbm_surface_queue_h queue);
125 hal_tdm_error       hal_tdm_hwc_window_set_composition_type(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_composition composition_type);
126 hal_tdm_error       hal_tdm_hwc_window_set_buffer_damage(hal_tdm_hwc_window *hwc_window, hal_tdm_region damage);
127 hal_tdm_error       hal_tdm_hwc_window_set_info(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_info *info);
128 hal_tdm_error       hal_tdm_hwc_window_set_buffer(hal_tdm_hwc_window *hwc_window, tbm_surface_h buffer);
129 hal_tdm_error       hal_tdm_hwc_window_set_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value value);
130 hal_tdm_error       hal_tdm_hwc_window_get_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value *value);
131 hal_tdm_error       hal_tdm_hwc_window_get_constraints(hal_tdm_hwc_window *hwc_window, int *constraints);
132 hal_tdm_error       hal_tdm_hwc_window_set_name(hal_tdm_hwc_window *hwc_window, const char *name);
133 hal_tdm_error       hal_tdm_hwc_window_set_cursor_image(hal_tdm_hwc_window *hwc_window, int width, int height, int stride, void *ptr);
134 hal_tdm_error       hal_tdm_hwc_window_set_acquire_fence(hal_tdm_hwc_window *hwc_window, int acquire_fence);
135
136 /* pp_funcs */
137 void          hal_tdm_pp_destroy(hal_tdm_pp *pp);
138 hal_tdm_error hal_tdm_pp_set_info(hal_tdm_pp *pp, hal_tdm_info_pp *info);
139 hal_tdm_error hal_tdm_pp_attach(hal_tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst);
140 hal_tdm_error hal_tdm_pp_commit(hal_tdm_pp *pp);
141 hal_tdm_error hal_tdm_pp_set_done_handler(hal_tdm_pp *pp, hal_tdm_pp_done_handler func, void *user_data);
142
143 /* capture_funcs */
144 void          hal_tdm_capture_destroy(hal_tdm_capture *capture);
145 hal_tdm_error hal_tdm_capture_set_info(hal_tdm_capture *capture, hal_tdm_info_capture *info);
146 hal_tdm_error hal_tdm_capture_attach(hal_tdm_capture *capture, tbm_surface_h buffer);
147 hal_tdm_error hal_tdm_capture_commit(hal_tdm_capture *capture);
148 hal_tdm_error hal_tdm_capture_set_done_handler(hal_tdm_capture *capture, hal_tdm_capture_done_handler func, void *user_data);
149
150 #ifdef __cplusplus
151 }
152 #endif
153 #endif /* __HAL_TDM__ */