9c5d696a073d6094a13fd486af5bb29eb26b564d
[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
57 /* tdm_display_funcs */
58 hal_tdm_error    hal_tdm_display_get_capability(hal_tdm_display *display, hal_tdm_caps_display *caps);
59 hal_tdm_error    hal_tdm_display_get_pp_capability(hal_tdm_display *display, hal_tdm_caps_pp *caps);
60 hal_tdm_error    hal_tdm_display_get_capture_capability(hal_tdm_display *display, hal_tdm_caps_capture *caps);
61 hal_tdm_output **hal_tdm_display_get_outputs(hal_tdm_display *display, int *count, hal_tdm_error *error);
62 hal_tdm_error    hal_tdm_display_get_fd(hal_tdm_display *display, int *fd);
63 hal_tdm_error    hal_tdm_display_handle_events(hal_tdm_display *display);
64 hal_tdm_pp      *hal_tdm_display_create_pp(hal_tdm_display *display, hal_tdm_error *error);
65 hal_tdm_voutput *hal_tdm_display_voutput_create(hal_tdm_display *display, const char *name, hal_tdm_error *error);
66
67 /* output_funcs */
68 hal_tdm_error    hal_tdm_output_get_capability(hal_tdm_output *output, hal_tdm_caps_output *caps);
69 hal_tdm_error    hal_tdm_output_set_property(hal_tdm_output *output, unsigned int id, hal_tdm_value value);
70 hal_tdm_error    hal_tdm_output_get_property(hal_tdm_output *output, unsigned int id, hal_tdm_value *value);
71 hal_tdm_error    hal_tdm_output_wait_vblank(hal_tdm_output *output, int interval, int sync, void *user_data);
72 hal_tdm_error    hal_tdm_output_set_vblank_handler(hal_tdm_output *output, hal_tdm_output_vblank_handler func);
73 hal_tdm_error    hal_tdm_output_commit(hal_tdm_output *output, int sync, void *user_data); // TODO: DEPRECATED. NOT SUPPORTED~!!!!
74 hal_tdm_error    hal_tdm_output_set_commit_handler(hal_tdm_output *output, hal_tdm_output_commit_handler func); // TODO: DEPRECATED. NOT SUPPORTED~!!!!
75 hal_tdm_error    hal_tdm_output_set_dpms(hal_tdm_output *output, hal_tdm_output_dpms dpms_value);
76 hal_tdm_error    hal_tdm_output_get_dpms(hal_tdm_output *output, hal_tdm_output_dpms *dpms_value);
77 hal_tdm_error    hal_tdm_output_set_mode(hal_tdm_output *output, const hal_tdm_output_mode *mode);
78 hal_tdm_error    hal_tdm_output_get_mode(hal_tdm_output *output, const hal_tdm_output_mode **mode);
79 hal_tdm_capture *hal_tdm_output_create_capture(hal_tdm_output *output, hal_tdm_error *error);
80 hal_tdm_error    hal_tdm_output_set_status_handler(hal_tdm_output *output, hal_tdm_output_status_handler func, void *user_data);
81 hal_tdm_error    hal_tdm_output_set_dpms_handler(hal_tdm_output *output, hal_tdm_output_dpms_handler func, void *user_data);
82 hal_tdm_error    hal_tdm_output_set_dpms_async(hal_tdm_output *output, hal_tdm_output_dpms dpms_value, int *sync);
83 hal_tdm_hwc     *hal_tdm_output_get_hwc(hal_tdm_output *output, hal_tdm_error *error);
84 hal_tdm_error    hal_tdm_output_set_mirror(hal_tdm_output *output, hal_tdm_output *src_output, hal_tdm_transform transform);
85 hal_tdm_error    hal_tdm_output_unset_mirror(hal_tdm_output *output);
86
87 /* voutput_funcs */
88 hal_tdm_error   hal_tdm_voutput_destroy(hal_tdm_voutput *voutput);
89 hal_tdm_error   hal_tdm_voutput_set_available_mode(hal_tdm_voutput *voutput, const hal_tdm_output_mode *modes, int count);
90 hal_tdm_error   hal_tdm_voutput_set_physical_size(hal_tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight);
91 hal_tdm_error   hal_tdm_voutput_connect(hal_tdm_voutput *voutput);
92 hal_tdm_error   hal_tdm_voutput_disconnect(hal_tdm_voutput *voutput);
93 hal_tdm_output *hal_tdm_voutput_get_output(hal_tdm_voutput *voutput, hal_tdm_error *error);
94 hal_tdm_error   hal_tdm_voutput_set_commit_func(hal_tdm_voutput *voutput, hal_tdm_voutput_commit_handler commit_func);
95 hal_tdm_error   hal_tdm_voutput_commit_done(hal_tdm_voutput *voutput);
96 hal_tdm_error   hal_tdm_voutput_set_target_buffer_queue_flag(hal_tdm_voutput *voutput, int flags);
97
98 /* hwc_funcs */
99 hal_tdm_hwc_window *hal_tdm_hwc_create_window(hal_tdm_hwc *hwc, hal_tdm_error *error);
100 hal_tdm_error       hal_tdm_hwc_get_video_supported_formats(hal_tdm_hwc *hwc, const tbm_format **formats, int *count);
101 hal_tdm_error       hal_tdm_hwc_get_video_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count);
102 hal_tdm_error       hal_tdm_hwc_get_capabilities(hal_tdm_hwc *hwc, hal_tdm_hwc_capability *capabilities);
103 hal_tdm_error       hal_tdm_hwc_get_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count);
104 tbm_surface_queue_h hal_tdm_hwc_get_client_target_buffer_queue(hal_tdm_hwc *hwc, hal_tdm_error *error);
105 hal_tdm_error       hal_tdm_hwc_set_client_target_buffer(hal_tdm_hwc *hwc, tbm_surface_h target_buffer, hal_tdm_region damage);
106 hal_tdm_error       hal_tdm_hwc_set_client_target_acquire_fence(hal_tdm_hwc *hwc, int acquire_fence);
107 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);
108 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);
109 hal_tdm_error       hal_tdm_hwc_accept_validation(hal_tdm_hwc *hwc);
110 hal_tdm_error       hal_tdm_hwc_commit(hal_tdm_hwc *hwc, int sync, void *user_data);
111 hal_tdm_error       hal_tdm_hwc_set_commit_handler(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_handler func);
112 hal_tdm_error       hal_tdm_hwc_get_commit_fence(hal_tdm_hwc *hwc, int *commit_fence);
113 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);
114 hal_tdm_error       hal_tdm_hwc_set_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value value);
115 hal_tdm_error       hal_tdm_hwc_get_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value *value);
116 hal_tdm_error       hal_tdm_hwc_get_commit_interval(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_interval *interval);
117
118 /* hwc_window_funcs */
119 void                hal_tdm_hwc_window_destroy(hal_tdm_hwc_window *hwc_window);
120 tbm_surface_queue_h hal_tdm_hwc_window_acquire_buffer_queue(hal_tdm_hwc_window *hwc_window, hal_tdm_error *error);
121 void                hal_tdm_hwc_window_release_buffer_queue(hal_tdm_hwc_window *hwc_window, tbm_surface_queue_h queue);
122 hal_tdm_error       hal_tdm_hwc_window_set_composition_type(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_composition composition_type);
123 hal_tdm_error       hal_tdm_hwc_window_set_buffer_damage(hal_tdm_hwc_window *hwc_window, hal_tdm_region damage);
124 hal_tdm_error       hal_tdm_hwc_window_set_info(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_info *info);
125 hal_tdm_error       hal_tdm_hwc_window_set_buffer(hal_tdm_hwc_window *hwc_window, tbm_surface_h buffer);
126 hal_tdm_error       hal_tdm_hwc_window_set_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value value);
127 hal_tdm_error       hal_tdm_hwc_window_get_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value *value);
128 hal_tdm_error       hal_tdm_hwc_window_get_constraints(hal_tdm_hwc_window *hwc_window, int *constraints);
129 hal_tdm_error       hal_tdm_hwc_window_set_name(hal_tdm_hwc_window *hwc_window, const char *name);
130 hal_tdm_error       hal_tdm_hwc_window_set_cursor_image(hal_tdm_hwc_window *hwc_window, int width, int height, int stride, void *ptr);
131 hal_tdm_error       hal_tdm_hwc_window_set_acquire_fence(hal_tdm_hwc_window *hwc_window, int acquire_fence);
132
133 /* pp_funcs */
134 void          hal_tdm_pp_destroy(hal_tdm_pp *pp);
135 hal_tdm_error hal_tdm_pp_set_info(hal_tdm_pp *pp, hal_tdm_info_pp *info);
136 hal_tdm_error hal_tdm_pp_attach(hal_tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst);
137 hal_tdm_error hal_tdm_pp_commit(hal_tdm_pp *pp);
138 hal_tdm_error hal_tdm_pp_set_done_handler(hal_tdm_pp *pp, hal_tdm_pp_done_handler func, void *user_data);
139
140 /* capture_funcs */
141 void          hal_tdm_capture_destroy(hal_tdm_capture *capture);
142 hal_tdm_error hal_tdm_capture_set_info(hal_tdm_capture *capture, hal_tdm_info_capture *info);
143 hal_tdm_error hal_tdm_capture_attach(hal_tdm_capture *capture, tbm_surface_h buffer);
144 hal_tdm_error hal_tdm_capture_commit(hal_tdm_capture *capture);
145 hal_tdm_error hal_tdm_capture_set_done_handler(hal_tdm_capture *capture, hal_tdm_capture_done_handler func, void *user_data);
146
147 #ifdef __cplusplus
148 }
149 #endif
150 #endif /* __HAL_TDM__ */