#ifndef __HAL_TDM_INTERFACE__
#define __HAL_TDM_INTERFACE__
-#include <hal/hal-common-interface.h>
+#include <hal-common-interface.h>
#include <tbm_surface.h>
#include <tbm_surface_queue.h>
extern "C" {
#endif
-typedef struct _hal_tdm_func_display {
- hal_tdm_error (*display_get_capability)(hal_tdm_backend_data *bdata, hal_tdm_caps_display *caps);
- hal_tdm_error (*display_get_pp_capability)(hal_tdm_backend_data *bdata, hal_tdm_caps_pp *caps);
- hal_tdm_error (*display_get_capture_capability)(hal_tdm_backend_data *bdata, hal_tdm_caps_capture *caps);
- hal_tdm_output **(*display_get_outputs)(hal_tdm_backend_data *bdata, int *count, hal_tdm_error *error);
- hal_tdm_error (*display_get_fd)(hal_tdm_backend_data *bdata, int *fd);
- hal_tdm_error (*display_handle_events)(hal_tdm_backend_data *bdata);
- hal_tdm_pp *(*display_create_pp)(hal_tdm_backend_data *bdata, hal_tdm_error *error);
- hal_tdm_voutput *(*display_voutput_create)(hal_tdm_backend_data *bdata, const char *name, hal_tdm_error *error);
-} hal_tdm_func_display;
-
-typedef struct _hal_tdm_func_output {
+typedef struct _hal_tdm_backend_data hal_tdm_backend_data;
+
+typedef struct _hal_tdm_display_funcs hal_tdm_display_funcs;
+typedef struct _hal_tdm_output_funcs hal_tdm_output_funcs;
+typedef struct _hal_tdm_hwc_funcs hal_tdm_hwc_funcs;
+typedef struct _hal_tdm_hwc_window_funcs hal_tdm_hwc_window_funcs;
+typedef struct _hal_tdm_pp_funcs hal_tdm_pp_funcs;
+typedef struct _hal_tdm_capture_funcs hal_tdm_capture_funcs;
+typedef struct _hal_tdm_voutput_funcs hal_tdm_voutput_funcs;
+
+#define HAL_TDM_EVENT_SOURCE_MAX 3
+
+struct _hal_tdm_backend_data {
+ hal_tdm_display *display; // handle
+
+ int num_event_sources;
+ hal_tdm_event_source *event_sources[HAL_TDM_EVENT_SOURCE_MAX];
+
+ hal_tdm_display_funcs *display_funcs;
+ hal_tdm_output_funcs *output_funcs;
+ hal_tdm_hwc_funcs *hwc_funcs;
+ hal_tdm_hwc_window_funcs *hwc_window_funcs;
+ hal_tdm_pp_funcs *pp_funcs;
+ hal_tdm_capture_funcs *capture_funcs;
+ hal_tdm_voutput_funcs *voutput_funcs;
+};
+
+struct _hal_tdm_display_funcs {
+ hal_tdm_error (*display_get_capability)(hal_tdm_display *display, hal_tdm_caps_display *caps);
+ hal_tdm_error (*display_get_pp_capability)(hal_tdm_display *display, hal_tdm_caps_pp *caps);
+ hal_tdm_error (*display_get_capture_capability)(hal_tdm_display *display, hal_tdm_caps_capture *caps);
+ hal_tdm_output **(*display_get_outputs)(hal_tdm_display *display, int *count, hal_tdm_error *error);
+ hal_tdm_error (*display_get_fd)(hal_tdm_display *display, int *fd);
+ hal_tdm_error (*display_handle_events)(hal_tdm_display *display);
+ hal_tdm_pp *(*display_create_pp)(hal_tdm_display *display, hal_tdm_error *error);
+ hal_tdm_voutput *(*display_voutput_create)(hal_tdm_display *display, const char *name, hal_tdm_error *error);
+};
+
+struct _hal_tdm_output_funcs {
hal_tdm_error (*output_get_capability)(hal_tdm_output *output, hal_tdm_caps_output *caps);
hal_tdm_error (*output_set_property)(hal_tdm_output *output, unsigned int id, hal_tdm_value value);
hal_tdm_error (*output_get_property)(hal_tdm_output *output, unsigned int id, hal_tdm_value *value);
hal_tdm_hwc *(*output_get_hwc)(hal_tdm_output *output, hal_tdm_error *error);
hal_tdm_error (*output_set_mirror)(hal_tdm_output *output, hal_tdm_output *src_output, hal_tdm_transform transform);
hal_tdm_error (*output_unset_mirror)(hal_tdm_output *output);
-} hal_tdm_func_output;
+};
-typedef struct _hal_tdm_func_voutput {
+struct _hal_tdm_voutput_funcs {
hal_tdm_error (*voutput_destroy)(hal_tdm_voutput *voutput);
hal_tdm_error (*voutput_set_available_mode)(hal_tdm_voutput *voutput, const hal_tdm_output_mode *modes, int count);
hal_tdm_error (*voutput_set_physical_size)(hal_tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight);
hal_tdm_error (*voutput_set_commit_func)(hal_tdm_voutput *voutput, hal_tdm_voutput_commit_handler commit_func);
hal_tdm_error (*voutput_commit_done)(hal_tdm_voutput *voutput);
hal_tdm_error (*voutput_set_target_buffer_queue_flag)(hal_tdm_voutput *voutput, int flags);
-} hal_tdm_func_voutput;
+};
-typedef struct _hal_tdm_func_hwc {
+struct _hal_tdm_hwc_funcs {
hal_tdm_hwc_window *(*hwc_create_window)(hal_tdm_hwc *hwc, hal_tdm_error *error);
hal_tdm_error (*hwc_get_video_supported_formats)(hal_tdm_hwc *hwc, const tbm_format **formats, int *count);
hal_tdm_error (*hwc_get_video_available_properties)(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count);
hal_tdm_error (*hwc_set_property)(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value value);
hal_tdm_error (*hwc_get_property)(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value *value);
hal_tdm_error (*hwc_get_commit_interval)(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_interval *interval);
-} hal_tdm_func_hwc;
+};
-typedef struct _hal_tdm_func_hwc_window {
+struct _hal_tdm_hwc_window_funcs {
void (*hwc_window_destroy)(hal_tdm_hwc_window *hwc_window);
tbm_surface_queue_h (*hwc_window_acquire_buffer_queue)(hal_tdm_hwc_window *hwc_window, hal_tdm_error *error);
void (*hwc_window_release_buffer_queue)(hal_tdm_hwc_window *hwc_window, tbm_surface_queue_h queue);
hal_tdm_error (*hwc_window_set_name)(hal_tdm_hwc_window *hwc_window, const char *name);
hal_tdm_error (*hwc_window_set_cursor_image)(hal_tdm_hwc_window *hwc_window, int width, int height, int stride, void *ptr);
hal_tdm_error (*hwc_window_set_acquire_fence)(hal_tdm_hwc_window *hwc_window, int acquire_fence);
-} hal_tdm_func_hwc_window;
+};
-typedef struct _hal_tdm_func_pp {
+struct _hal_tdm_pp_funcs {
void (*pp_destroy)(hal_tdm_pp *pp);
hal_tdm_error (*pp_set_info)(hal_tdm_pp *pp, hal_tdm_info_pp *info);
hal_tdm_error (*pp_attach)(hal_tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst);
hal_tdm_error (*pp_commit)(hal_tdm_pp *pp);
hal_tdm_error (*pp_set_done_handler)(hal_tdm_pp *pp, hal_tdm_pp_done_handler func, void *user_data);
-} hal_tdm_func_pp;
+};
-typedef struct _hal_tdm_func_capture {
+typedef struct _hal_tdm_capture_funcs {
void (*capture_destroy)(hal_tdm_capture *capture);
hal_tdm_error (*capture_set_info)(hal_tdm_capture *capture, hal_tdm_info_capture *info);
hal_tdm_error (*capture_attach)(hal_tdm_capture *capture, tbm_surface_h buffer);
hal_tdm_error (*capture_commit)(hal_tdm_capture *capture);
hal_tdm_error (*capture_set_done_handler)(hal_tdm_capture *capture, hal_tdm_capture_done_handler func, void *user_data);
-} hal_tdm_func_capture;
-
-typedef struct _hal_backend_tdm_funcs {
- hal_tdm_func_display *tdm_func_display;
- hal_tdm_func_output *tdm_func_output;
- hal_tdm_func_voutput *tdm_func_voutput;
- hal_tdm_func_hwc *tdm_func_hwc;
- hal_tdm_func_hwc_window *tdm_func_hwc_window;
- hal_tdm_func_pp *tdm_func_pp;
- hal_tdm_func_capture *tdm_func_capture;
-} hal_backend_tdm_funcs;
-
-hal_tdm_error hal_tdm_backend_register_func_display(hal_tdm_display *dpy, hal_tdm_func_display *func_display);
-hal_tdm_error hal_tdm_backend_register_func_output(hal_tdm_display *dpy, hal_tdm_func_output *func_output);
-hal_tdm_error hal_tdm_backend_register_func_voutput(hal_tdm_display *dpy, hal_tdm_func_voutput *func_voutput);
-hal_tdm_error hal_tdm_backend_register_func_hwc(hal_tdm_display *dpy, hal_tdm_func_hwc *func_hwc);
-hal_tdm_error hal_tdm_backend_register_func_hwc_window(hal_tdm_display *dpy, hal_tdm_func_hwc_window *func_hwc_window);
-hal_tdm_error hal_tdm_backend_register_func_pp(hal_tdm_display *dpy, hal_tdm_func_pp *func_pp);
-hal_tdm_error hal_tdm_backend_register_func_capture(hal_tdm_display *dpy, hal_tdm_func_capture *func_capture);
-
-typedef void hal_tdm_event_loop_source;
-typedef hal_tdm_error (*hal_tdm_event_loop_fd_handler)(int fd, hal_tdm_event_loop_mask mask, void *user_data);
-typedef hal_tdm_error (*hal_tdm_event_loop_timer_handler)(void *user_data);
+} hal_tdm_capture_funcs;
+
+hal_tdm_error hal_tdm_backend_register_display_funcs(hal_tdm_display *dpy, hal_tdm_display_funcs *display_funcs);
+hal_tdm_error hal_tdm_backend_register_output_funcs(hal_tdm_display *dpy, hal_tdm_output_funcs *output_funcs);
+hal_tdm_error hal_tdm_backend_register_voutput_funcs(hal_tdm_display *dpy, hal_tdm_voutput_funcs *voutput_funcs);
+hal_tdm_error hal_tdm_backend_register_hwc_funcs(hal_tdm_display *dpy, hal_tdm_hwc_funcs *hwc_funcs);
+hal_tdm_error hal_tdm_backend_register_hwc_window_funcs(hal_tdm_display *dpy, hal_tdm_hwc_window_funcs *hwc_window_funcs);
+hal_tdm_error hal_tdm_backend_register_pp_funcs(hal_tdm_display *dpy, hal_tdm_pp_funcs *pp_funcs);
+hal_tdm_error hal_tdm_backend_register_capture_funcs(hal_tdm_display *dpy, hal_tdm_capture_funcs *capture_funcs);
tbm_surface_h hal_tdm_buffer_ref_backend(tbm_surface_h buffer);
-void hal_tdm_buffer_unref_backend(tbm_surface_h buffer);
+void hal_tdm_buffer_unref_backend(tbm_surface_h buffer);
typedef void (*hal_tdm_buffer_destroy_handler)(tbm_surface_h buffer, void *user_data);
hal_tdm_error hal_tdm_buffer_add_destroy_handler(tbm_surface_h buffer, hal_tdm_buffer_destroy_handler func, void *user_data);
-void hal_tdm_buffer_remove_destroy_handler(tbm_surface_h buffer, hal_tdm_buffer_destroy_handler func, void *user_data);
-hal_tdm_event_loop_source *hal_tdm_event_loop_add_fd_handler(hal_tdm_display *dpy, int fd, hal_tdm_event_loop_mask mask,
- hal_tdm_event_loop_fd_handler func, void *user_data, hal_tdm_error *error);
-hal_tdm_event_loop_source *hal_tdm_event_loop_add_timer_handler(hal_tdm_display *dpy, hal_tdm_event_loop_timer_handler func,
- void *user_data, hal_tdm_error *error);
-hal_tdm_error hal_tdm_event_loop_source_timer_update(hal_tdm_event_loop_source *source, unsigned int ms_delay);
-void hal_tdm_event_loop_source_remove(hal_tdm_event_loop_source *source);
+void hal_tdm_buffer_remove_destroy_handler(tbm_surface_h buffer, hal_tdm_buffer_destroy_handler func, void *user_data);
#ifdef __cplusplus
}
extern "C" {
#endif
+#include <tbm_surface.h>
+#include <tbm_surface_queue.h>
#include "hal-tdm-types.h"
-hal_tdm_error hal_tdm_get_backend(hal_tdm_display *dpy);
-void hal_tdm_put_backend(void);
+/* hal_tdm */
+hal_tdm_backend *hal_tdm_get_backend(hal_tdm_error *error);
+hal_tdm_error hal_tdm_put_backend(hal_tdm_backend *backend);
-/* tdm_func_display */
-hal_tdm_error hal_tdm_display_get_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_display *caps);
-hal_tdm_error hal_tdm_display_get_pp_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_pp *caps);
-hal_tdm_error hal_tdm_display_get_capture_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_capture *caps);
-hal_tdm_output **hal_tdm_display_get_outputs(hal_tdm_backend_data *bdata, int *count, hal_tdm_error *error);
-hal_tdm_error hal_tdm_display_get_fd(hal_tdm_backend_data *bdata, int *fd);
-hal_tdm_error hal_tdm_display_handle_events(hal_tdm_backend_data *bdata);
-hal_tdm_pp *hal_tdm_display_create_pp(hal_tdm_backend_data *bdata, hal_tdm_error *error);
-hal_tdm_voutput *hal_tdm_display_voutput_create(hal_tdm_backend_data *bdata, const char *name, hal_tdm_error *error);
+/* tdm_backend_data */
+hal_tdm_display *hal_tdm_backend_get_display(hal_tdm_backend *backend, hal_tdm_error *error);
+hal_tdm_event_source **hal_tdm_backend_get_event_sources(hal_tdm_backend *backend, int num_event_sources, hal_tdm_error *error);
-/* tdm_func_output */
-hal_tdm_error hal_tdm_output_get_capability(hal_tdm_output *output, hal_tdm_caps_output *caps);
-hal_tdm_error hal_tdm_output_set_property(hal_tdm_output *output, unsigned int id, hal_tdm_value value);
-hal_tdm_error hal_tdm_output_get_property(hal_tdm_output *output, unsigned int id, hal_tdm_value *value);
-hal_tdm_error hal_tdm_output_wait_vblank(hal_tdm_output *output, int interval, int sync, void *user_data);
-hal_tdm_error hal_tdm_output_set_vblank_handler(hal_tdm_output *output, hal_tdm_output_vblank_handler func);
-hal_tdm_error hal_tdm_output_commit(hal_tdm_output *output, int sync, void *user_data);
-hal_tdm_error hal_tdm_output_set_commit_handler(hal_tdm_output *output, hal_tdm_output_commit_handler func);
-hal_tdm_error hal_tdm_output_set_dpms(hal_tdm_output *output, hal_tdm_output_dpms dpms_value);
-hal_tdm_error hal_tdm_output_get_dpms(hal_tdm_output *output, hal_tdm_output_dpms *dpms_value);
-hal_tdm_error hal_tdm_output_set_mode(hal_tdm_output *output, const hal_tdm_output_mode *mode);
-hal_tdm_error hal_tdm_output_get_mode(hal_tdm_output *output, const hal_tdm_output_mode **mode);
+/* tdm_display_funcs */
+hal_tdm_error hal_tdm_display_get_capability(hal_tdm_display *display, hal_tdm_caps_display *caps);
+hal_tdm_error hal_tdm_display_get_pp_capability(hal_tdm_display *display, hal_tdm_caps_pp *caps);
+hal_tdm_error hal_tdm_display_get_capture_capability(hal_tdm_display *display, hal_tdm_caps_capture *caps);
+hal_tdm_output **hal_tdm_display_get_outputs(hal_tdm_display *display, int *count, hal_tdm_error *error);
+hal_tdm_error hal_tdm_display_get_fd(hal_tdm_display *display, int *fd);
+hal_tdm_error hal_tdm_display_handle_events(hal_tdm_display *display);
+hal_tdm_pp *hal_tdm_display_create_pp(hal_tdm_display *display, hal_tdm_error *error);
+hal_tdm_voutput *hal_tdm_display_voutput_create(hal_tdm_display *display, const char *name, hal_tdm_error *error);
+
+/* output_funcs */
+hal_tdm_error hal_tdm_output_get_capability(hal_tdm_output *output, hal_tdm_caps_output *caps);
+hal_tdm_error hal_tdm_output_set_property(hal_tdm_output *output, unsigned int id, hal_tdm_value value);
+hal_tdm_error hal_tdm_output_get_property(hal_tdm_output *output, unsigned int id, hal_tdm_value *value);
+hal_tdm_error hal_tdm_output_wait_vblank(hal_tdm_output *output, int interval, int sync, void *user_data);
+hal_tdm_error hal_tdm_output_set_vblank_handler(hal_tdm_output *output, hal_tdm_output_vblank_handler func);
+hal_tdm_error hal_tdm_output_commit(hal_tdm_output *output, int sync, void *user_data);
+hal_tdm_error hal_tdm_output_set_commit_handler(hal_tdm_output *output, hal_tdm_output_commit_handler func);
+hal_tdm_error hal_tdm_output_set_dpms(hal_tdm_output *output, hal_tdm_output_dpms dpms_value);
+hal_tdm_error hal_tdm_output_get_dpms(hal_tdm_output *output, hal_tdm_output_dpms *dpms_value);
+hal_tdm_error hal_tdm_output_set_mode(hal_tdm_output *output, const hal_tdm_output_mode *mode);
+hal_tdm_error hal_tdm_output_get_mode(hal_tdm_output *output, const hal_tdm_output_mode **mode);
hal_tdm_capture *hal_tdm_output_create_capture(hal_tdm_output *output, hal_tdm_error *error);
-hal_tdm_error hal_tdm_output_set_status_handler(hal_tdm_output *output, hal_tdm_output_status_handler func, void *user_data);
-hal_tdm_error hal_tdm_output_set_dpms_handler(hal_tdm_output *output, hal_tdm_output_dpms_handler func, void *user_data);
-hal_tdm_error hal_tdm_output_set_dpms_async(hal_tdm_output *output, hal_tdm_output_dpms dpms_value, int *sync);
-hal_tdm_hwc *hal_tdm_output_get_hwc(hal_tdm_output *output, hal_tdm_error *error);
-hal_tdm_error hal_tdm_output_set_mirror(hal_tdm_output *output, hal_tdm_output *src_output, hal_tdm_transform transform);
-hal_tdm_error hal_tdm_output_unset_mirror(hal_tdm_output *output);
+hal_tdm_error hal_tdm_output_set_status_handler(hal_tdm_output *output, hal_tdm_output_status_handler func, void *user_data);
+hal_tdm_error hal_tdm_output_set_dpms_handler(hal_tdm_output *output, hal_tdm_output_dpms_handler func, void *user_data);
+hal_tdm_error hal_tdm_output_set_dpms_async(hal_tdm_output *output, hal_tdm_output_dpms dpms_value, int *sync);
+hal_tdm_hwc *hal_tdm_output_get_hwc(hal_tdm_output *output, hal_tdm_error *error);
+hal_tdm_error hal_tdm_output_set_mirror(hal_tdm_output *output, hal_tdm_output *src_output, hal_tdm_transform transform);
+hal_tdm_error hal_tdm_output_unset_mirror(hal_tdm_output *output);
-/* tdm_func_voutput */
-hal_tdm_error hal_tdm_voutput_destroy(hal_tdm_voutput *voutput);
-hal_tdm_error hal_tdm_voutput_set_available_mode(hal_tdm_voutput *voutput, const hal_tdm_output_mode *modes, int count);
-hal_tdm_error hal_tdm_voutput_set_physical_size(hal_tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight);
-hal_tdm_error hal_tdm_voutput_connect(hal_tdm_voutput *voutput);
-hal_tdm_error hal_tdm_voutput_disconnect(hal_tdm_voutput *voutput);
+/* voutput_funcs */
+hal_tdm_error hal_tdm_voutput_destroy(hal_tdm_voutput *voutput);
+hal_tdm_error hal_tdm_voutput_set_available_mode(hal_tdm_voutput *voutput, const hal_tdm_output_mode *modes, int count);
+hal_tdm_error hal_tdm_voutput_set_physical_size(hal_tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight);
+hal_tdm_error hal_tdm_voutput_connect(hal_tdm_voutput *voutput);
+hal_tdm_error hal_tdm_voutput_disconnect(hal_tdm_voutput *voutput);
hal_tdm_output *hal_tdm_voutput_get_output(hal_tdm_voutput *voutput, hal_tdm_error *error);
-hal_tdm_error hal_tdm_voutput_set_commit_func(hal_tdm_voutput *voutput, hal_tdm_voutput_commit_handler commit_func);
-hal_tdm_error hal_tdm_voutput_commit_done(hal_tdm_voutput *voutput);
-hal_tdm_error hal_tdm_voutput_set_target_buffer_queue_flag(hal_tdm_voutput *voutput, int flags);
+hal_tdm_error hal_tdm_voutput_set_commit_func(hal_tdm_voutput *voutput, hal_tdm_voutput_commit_handler commit_func);
+hal_tdm_error hal_tdm_voutput_commit_done(hal_tdm_voutput *voutput);
+hal_tdm_error hal_tdm_voutput_set_target_buffer_queue_flag(hal_tdm_voutput *voutput, int flags);
-/* tdm_func_hwc */
+/* hwc_funcs */
hal_tdm_hwc_window *hal_tdm_hwc_create_window(hal_tdm_hwc *hwc, hal_tdm_error *error);
-hal_tdm_error hal_tdm_hwc_get_video_supported_formats(hal_tdm_hwc *hwc, const tbm_format **formats, int *count);
-hal_tdm_error hal_tdm_hwc_get_video_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count);
-hal_tdm_error hal_tdm_hwc_get_capabilities(hal_tdm_hwc *hwc, hal_tdm_hwc_capability *capabilities);
-hal_tdm_error hal_tdm_hwc_get_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count);
+hal_tdm_error hal_tdm_hwc_get_video_supported_formats(hal_tdm_hwc *hwc, const tbm_format **formats, int *count);
+hal_tdm_error hal_tdm_hwc_get_video_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count);
+hal_tdm_error hal_tdm_hwc_get_capabilities(hal_tdm_hwc *hwc, hal_tdm_hwc_capability *capabilities);
+hal_tdm_error hal_tdm_hwc_get_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count);
tbm_surface_queue_h hal_tdm_hwc_get_client_target_buffer_queue(hal_tdm_hwc *hwc, hal_tdm_error *error);
-hal_tdm_error hal_tdm_hwc_set_client_target_buffer(hal_tdm_hwc *hwc, tbm_surface_h target_buffer, hal_tdm_region damage);
-hal_tdm_error hal_tdm_hwc_set_client_target_acquire_fence(hal_tdm_hwc *hwc, int acquire_fence);
-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);
-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);
-hal_tdm_error hal_tdm_hwc_accept_validation(hal_tdm_hwc *hwc);
-hal_tdm_error hal_tdm_hwc_commit(hal_tdm_hwc *hwc, int sync, void *user_data);
-hal_tdm_error hal_tdm_hwc_set_commit_handler(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_handler func);
-hal_tdm_error hal_tdm_hwc_get_commit_fence(hal_tdm_hwc *hwc, int *commit_fence);
-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);
-hal_tdm_error hal_tdm_hwc_set_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value value);
-hal_tdm_error hal_tdm_hwc_get_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value *value);
-hal_tdm_error hal_tdm_hwc_get_commit_interval(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_interval *interval);
+hal_tdm_error hal_tdm_hwc_set_client_target_buffer(hal_tdm_hwc *hwc, tbm_surface_h target_buffer, hal_tdm_region damage);
+hal_tdm_error hal_tdm_hwc_set_client_target_acquire_fence(hal_tdm_hwc *hwc, int acquire_fence);
+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);
+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);
+hal_tdm_error hal_tdm_hwc_accept_validation(hal_tdm_hwc *hwc);
+hal_tdm_error hal_tdm_hwc_commit(hal_tdm_hwc *hwc, int sync, void *user_data);
+hal_tdm_error hal_tdm_hwc_set_commit_handler(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_handler func);
+hal_tdm_error hal_tdm_hwc_get_commit_fence(hal_tdm_hwc *hwc, int *commit_fence);
+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);
+hal_tdm_error hal_tdm_hwc_set_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value value);
+hal_tdm_error hal_tdm_hwc_get_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value *value);
+hal_tdm_error hal_tdm_hwc_get_commit_interval(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_interval *interval);
-/* tdm_func_hwc_window */
-void hal_tdm_hwc_window_destroy(hal_tdm_hwc_window *hwc_window);
+/* hwc_window_funcs */
+void hal_tdm_hwc_window_destroy(hal_tdm_hwc_window *hwc_window);
tbm_surface_queue_h hal_tdm_hwc_window_acquire_buffer_queue(hal_tdm_hwc_window *hwc_window, hal_tdm_error *error);
-void hal_tdm_hwc_window_release_buffer_queue(hal_tdm_hwc_window *hwc_window, tbm_surface_queue_h queue);
-hal_tdm_error hal_tdm_hwc_window_set_composition_type(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_composition composition_type);
-hal_tdm_error hal_tdm_hwc_window_set_buffer_damage(hal_tdm_hwc_window *hwc_window, hal_tdm_region damage);
-hal_tdm_error hal_tdm_hwc_window_set_info(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_info *info);
-hal_tdm_error hal_tdm_hwc_window_set_buffer(hal_tdm_hwc_window *hwc_window, tbm_surface_h buffer);
-hal_tdm_error hal_tdm_hwc_window_set_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value value);
-hal_tdm_error hal_tdm_hwc_window_get_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value *value);
-hal_tdm_error hal_tdm_hwc_window_get_constraints(hal_tdm_hwc_window *hwc_window, int *constraints);
-hal_tdm_error hal_tdm_hwc_window_set_name(hal_tdm_hwc_window *hwc_window, const char *name);
-hal_tdm_error hal_tdm_hwc_window_set_cursor_image(hal_tdm_hwc_window *hwc_window, int width, int height, int stride, void *ptr);
-hal_tdm_error hal_tdm_hwc_window_set_acquire_fence(hal_tdm_hwc_window *hwc_window, int acquire_fence);
+void hal_tdm_hwc_window_release_buffer_queue(hal_tdm_hwc_window *hwc_window, tbm_surface_queue_h queue);
+hal_tdm_error hal_tdm_hwc_window_set_composition_type(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_composition composition_type);
+hal_tdm_error hal_tdm_hwc_window_set_buffer_damage(hal_tdm_hwc_window *hwc_window, hal_tdm_region damage);
+hal_tdm_error hal_tdm_hwc_window_set_info(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_info *info);
+hal_tdm_error hal_tdm_hwc_window_set_buffer(hal_tdm_hwc_window *hwc_window, tbm_surface_h buffer);
+hal_tdm_error hal_tdm_hwc_window_set_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value value);
+hal_tdm_error hal_tdm_hwc_window_get_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value *value);
+hal_tdm_error hal_tdm_hwc_window_get_constraints(hal_tdm_hwc_window *hwc_window, int *constraints);
+hal_tdm_error hal_tdm_hwc_window_set_name(hal_tdm_hwc_window *hwc_window, const char *name);
+hal_tdm_error hal_tdm_hwc_window_set_cursor_image(hal_tdm_hwc_window *hwc_window, int width, int height, int stride, void *ptr);
+hal_tdm_error hal_tdm_hwc_window_set_acquire_fence(hal_tdm_hwc_window *hwc_window, int acquire_fence);
-/* tdm_func_pp */
-void hal_tdm_pp_destroy(hal_tdm_pp *pp);
+/* pp_funcs */
+void hal_tdm_pp_destroy(hal_tdm_pp *pp);
hal_tdm_error hal_tdm_pp_set_info(hal_tdm_pp *pp, hal_tdm_info_pp *info);
hal_tdm_error hal_tdm_pp_attach(hal_tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst);
hal_tdm_error hal_tdm_pp_commit(hal_tdm_pp *pp);
hal_tdm_error hal_tdm_pp_set_done_handler(hal_tdm_pp *pp, hal_tdm_pp_done_handler func, void *user_data);
-/* tdm_func_capture */
-void hal_tdm_capture_destroy(hal_tdm_capture *capture);
+/* capture_funcs */
+void hal_tdm_capture_destroy(hal_tdm_capture *capture);
hal_tdm_error hal_tdm_capture_set_info(hal_tdm_capture *capture, hal_tdm_info_capture *info);
hal_tdm_error hal_tdm_capture_attach(hal_tdm_capture *capture, tbm_surface_h buffer);
hal_tdm_error hal_tdm_capture_commit(hal_tdm_capture *capture);
#include <dlfcn.h>
#include <dlog.h>
-#include <hal/hal-common.h>
-#include "hal-tdm-interface.h"
+#include <hal-common.h>
#include "hal-tdm.h"
+#include "hal-tdm-interface.h"
#include "common.h"
#if defined(__GNUC__) && __GNUC__ >= 4
#define ARRAY_SIZE(name) (sizeof(name)/sizeof(name[0]))
#define DISPLAY_FUNC_ENTRY(__func__) \
- hal_tdm_func_display *func_display; \
- if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \
- if (!g_tdm_funcs->tdm_func_display) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
- func_display = g_tdm_funcs->tdm_func_display; \
- if (!func_display->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
+ hal_tdm_display_funcs *display_funcs; \
+ if (!display) return HAL_TDM_ERROR_INVALID_PARAMETER; \
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
+ if (!g_hal_tdm_backend_data->display_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
+ display_funcs = g_hal_tdm_backend_data->display_funcs; \
+ if (!display_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
#define DISPLAY_FUNC_ENTRY_NULL(__func__) \
- hal_tdm_func_display *func_display; \
- if (!g_tdm_funcs) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
- if (!g_tdm_funcs->tdm_func_display) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
- func_display = g_tdm_funcs->tdm_func_display; \
- if (!func_display->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
+ hal_tdm_display_funcs *display_funcs; \
+ if (!display) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
+ if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
+ if (!g_hal_tdm_backend_data->display_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
+ display_funcs = g_hal_tdm_backend_data->display_funcs; \
+ if (!display_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
#define OUTPUT_FUNC_ENTRY(__func__) \
- hal_tdm_func_output *func_output; \
- if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \
- if (!g_tdm_funcs->tdm_func_output) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
- func_output = g_tdm_funcs->tdm_func_output; \
- if (!func_output->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
+ hal_tdm_output_funcs *output_funcs; \
+ if (!output) return HAL_TDM_ERROR_INVALID_PARAMETER; \
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
+ if (!g_hal_tdm_backend_data->output_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
+ output_funcs = g_hal_tdm_backend_data->output_funcs; \
+ if (!output_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
#define OUTPUT_FUNC_ENTRY_NULL(__func__) \
- hal_tdm_func_output *func_output; \
- if (!g_tdm_funcs) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
- if (!g_tdm_funcs->tdm_func_output) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
- func_output = g_tdm_funcs->tdm_func_output; \
- if (!func_output->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
+ hal_tdm_output_funcs *output_funcs; \
+ if (!output) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
+ if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
+ if (!g_hal_tdm_backend_data->output_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
+ output_funcs = g_hal_tdm_backend_data->output_funcs; \
+ if (!output_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
#define VOUTPUT_FUNC_ENTRY(__func__) \
- hal_tdm_func_voutput *func_voutput; \
- if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \
- if (!g_tdm_funcs->tdm_func_voutput) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
- func_voutput = g_tdm_funcs->tdm_func_voutput; \
- if (!func_voutput->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
+ hal_tdm_voutput_funcs *voutput_funcs; \
+ if (!voutput) return HAL_TDM_ERROR_INVALID_PARAMETER; \
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
+ if (!g_hal_tdm_backend_data->voutput_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
+ voutput_funcs = g_hal_tdm_backend_data->voutput_funcs; \
+ if (!voutput_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
#define VOUTPUT_FUNC_ENTRY_NULL(__func__) \
- hal_tdm_func_voutput *func_voutput; \
- if (!g_tdm_funcs) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
- if (!g_tdm_funcs->tdm_func_voutput) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
- func_voutput = g_tdm_funcs->tdm_func_voutput; \
- if (!func_voutput->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
+ hal_tdm_voutput_funcs *voutput_funcs; \
+ if (!voutput) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
+ if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
+ if (!g_hal_tdm_backend_data->voutput_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
+ voutput_funcs = g_hal_tdm_backend_data->voutput_funcs; \
+ if (!voutput_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
#define HWC_FUNC_ENTRY(__func__) \
- hal_tdm_func_hwc *func_hwc; \
- if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \
- if (!g_tdm_funcs->tdm_func_hwc) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
- func_hwc = g_tdm_funcs->tdm_func_hwc; \
- if (!func_hwc->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
+ hal_tdm_hwc_funcs *hwc_funcs; \
+ if (!hwc) return HAL_TDM_ERROR_INVALID_PARAMETER; \
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
+ if (!g_hal_tdm_backend_data->hwc_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
+ hwc_funcs = g_hal_tdm_backend_data->hwc_funcs; \
+ if (!hwc_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
#define HWC_FUNC_ENTRY_NULL(__func__) \
- hal_tdm_func_hwc *func_hwc; \
- if (!g_tdm_funcs) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
- if (!g_tdm_funcs->tdm_func_hwc) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
- func_hwc = g_tdm_funcs->tdm_func_hwc; \
- if (!func_hwc->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
+ hal_tdm_hwc_funcs *hwc_funcs; \
+ if (!hwc) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
+ if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
+ if (!g_hal_tdm_backend_data->hwc_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
+ hwc_funcs = g_hal_tdm_backend_data->hwc_funcs; \
+ if (!hwc_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
#define HWC_WINDOW_FUNC_ENTRY(__func__) \
- hal_tdm_func_hwc_window *func_hwc_window; \
- if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \
- if (!g_tdm_funcs->tdm_func_hwc_window) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
- func_hwc_window = g_tdm_funcs->tdm_func_hwc_window; \
- if (!func_hwc_window->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
+ hal_tdm_hwc_window_funcs *hwc_window_funcs; \
+ if (!hwc_window) return HAL_TDM_ERROR_INVALID_PARAMETER; \
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
+ if (!g_hal_tdm_backend_data->hwc_window_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
+ hwc_window_funcs = g_hal_tdm_backend_data->hwc_window_funcs; \
+ if (!hwc_window_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
#define HWC_WINDOW_FUNC_ENTRY_NULL(__func__) \
- hal_tdm_func_hwc_window *func_hwc_window; \
- if (!g_tdm_funcs) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
- if (!g_tdm_funcs->tdm_func_hwc_window) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
- func_hwc_window = g_tdm_funcs->tdm_func_hwc_window; \
- if (!func_hwc_window->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
+ hal_tdm_hwc_window_funcs *hwc_window_funcs; \
+ if (!hwc_window) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
+ if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \
+ if (!g_hal_tdm_backend_data->hwc_window_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \
+ hwc_window_funcs = g_hal_tdm_backend_data->hwc_window_funcs; \
+ if (!hwc_window_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; };
#define HWC_WINDOW_FUNC_ENTRY_VOID(__func__) \
- hal_tdm_func_hwc_window *func_hwc_window; \
- if (!g_tdm_funcs) return; \
- if (!g_tdm_funcs->tdm_func_hwc_window) return; \
- func_hwc_window = g_tdm_funcs->tdm_func_hwc_window; \
- if (!func_hwc_window->__func__) return;
+ hal_tdm_hwc_window_funcs *hwc_window_funcs; \
+ if (!hwc_window) return; \
+ if (!g_hal_tdm_backend_data) return; \
+ if (!g_hal_tdm_backend_data->hwc_window_funcs) return; \
+ hwc_window_funcs = g_hal_tdm_backend_data->hwc_window_funcs; \
+ if (!hwc_window_funcs->__func__) return;
#define PP_FUNC_ENTRY(__func__) \
- hal_tdm_func_pp *func_pp; \
- if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \
- if (!g_tdm_funcs->tdm_func_pp) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
- func_pp = g_tdm_funcs->tdm_func_pp; \
- if (!func_pp->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
+ hal_tdm_pp_funcs *pp_funcs; \
+ if (!pp) return HAL_TDM_ERROR_INVALID_PARAMETER; \
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
+ if (!g_hal_tdm_backend_data->pp_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
+ pp_funcs = g_hal_tdm_backend_data->pp_funcs; \
+ if (!pp_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
#define PP_FUNC_ENTRY_VOID(__func__) \
- hal_tdm_func_pp *func_pp; \
- if (!g_tdm_funcs) return; \
- if (!g_tdm_funcs->tdm_func_pp) return; \
- func_pp = g_tdm_funcs->tdm_func_pp; \
- if (!func_pp->__func__) return;
+ hal_tdm_pp_funcs *pp_funcs; \
+ if (!pp) return; \
+ if (!g_hal_tdm_backend_data) return; \
+ if (!g_hal_tdm_backend_data->pp_funcs) return; \
+ pp_funcs = g_hal_tdm_backend_data->pp_funcs; \
+ if (!pp_funcs->__func__) return;
#define CAPTURE_FUNC_ENTRY(__func__) \
- hal_tdm_func_capture *func_capture; \
- if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \
- if (!g_tdm_funcs->tdm_func_capture) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
- func_capture = g_tdm_funcs->tdm_func_capture; \
- if (!func_capture->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
+ hal_tdm_capture_funcs *capture_funcs; \
+ if (!capture) return HAL_TDM_ERROR_INVALID_PARAMETER; \
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \
+ if (!g_hal_tdm_backend_data->capture_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \
+ capture_funcs = g_hal_tdm_backend_data->capture_funcs; \
+ if (!capture_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED;
#define CAPTURE_FUNC_ENTRY_VOID(__func__) \
- hal_tdm_func_capture *func_capture; \
- if (!g_tdm_funcs) return; \
- if (!g_tdm_funcs->tdm_func_capture) return; \
- func_capture = g_tdm_funcs->tdm_func_capture; \
- if (!func_capture->__func__) return;
+ hal_tdm_capture_funcs *capture_funcs; \
+ if (!capture) return; \
+ if (!g_hal_tdm_backend_data) return; \
+ if (!g_hal_tdm_backend_data->capture_funcs) return; \
+ capture_funcs = g_hal_tdm_backend_data->capture_funcs; \
+ if (!capture_funcs->__func__) return;
-static hal_backend_tdm_funcs *g_tdm_funcs = NULL;
+static hal_tdm_backend_data *g_hal_tdm_backend_data = NULL;
-EXTERN hal_tdm_error
-hal_tdm_get_backend(hal_tdm_display *dpy)
+EXTERN hal_tdm_backend *
+hal_tdm_get_backend(hal_tdm_error *error)
{
+ hal_tdm_backend_data *backend_data;
int ret;
- if (!dpy)
- return HAL_TDM_ERROR_INVALID_PARAMETER;
-
- if (g_tdm_funcs)
- return HAL_TDM_ERROR_BAD_REQUEST;
-
- g_tdm_funcs = calloc(1, sizeof(hal_backend_tdm_funcs));
- if (!g_tdm_funcs)
- return HAL_TDM_ERROR_OUT_OF_MEMORY;
+ if (g_hal_tdm_backend_data) {
+ if (error)
+ *error = HAL_TDM_ERROR_BAD_REQUEST;
+ return NULL;
+ }
- ret = hal_common_get_backend(HAL_MODULE_TDM, (void **)&dpy);
+ ret = hal_common_get_backend(HAL_MODULE_TDM, (void **)&backend_data);
if (ret < 0) {
_E("Failed to get backend\n");
- free(g_tdm_funcs);
- g_tdm_funcs = NULL;
- return HAL_TDM_ERROR_NO_MODULE;
+ if (error)
+ *error = HAL_TDM_ERROR_NO_MODULE;
+ return NULL;
}
+ g_hal_tdm_backend_data = (hal_tdm_backend_data *)backend_data;
+
+ if (error)
+ *error = HAL_TDM_ERROR_NONE;
+
_I("hal_tdm_get_backend");
- return HAL_TDM_ERROR_NONE;
+ return (hal_tdm_backend *)backend_data;
}
-EXTERN void
-hal_tdm_put_backend(void)
+EXTERN hal_tdm_error
+hal_tdm_put_backend(hal_tdm_backend *backend)
{
- if (!g_tdm_funcs)
- return;
+ hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
+ int ret;
- hal_common_put_backend(HAL_MODULE_TDM, NULL);
- free(g_tdm_funcs);
- g_tdm_funcs = NULL;
+ if (!backend_data && g_hal_tdm_backend_data != backend) {
+ _E("no backend_data\n");
+ return HAL_TDM_ERROR_NO_MODULE;
+ }
+
+ ret = hal_common_put_backend(HAL_MODULE_TDM, NULL);
+ if (ret < 0) {
+ _E("Failed to put backend\n");
+ return HAL_TDM_ERROR_OPERATION_FAILED;
+ }
+
+ g_hal_tdm_backend_data = NULL;
_I("hal_tdm_put_backend");
+
+ return HAL_TDM_ERROR_NONE;
+}
+
+EXTERN hal_tdm_display *
+hal_tdm_backend_get_display(hal_tdm_backend *backend, hal_tdm_error *error)
+{
+ hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
+ hal_tdm_display *display;
+
+ if (!backend_data && g_hal_tdm_backend_data != backend) {
+ _E("no backend_data\n");
+ if (error)
+ *error = HAL_TDM_ERROR_NO_MODULE;
+ return NULL;
+ }
+
+ display = backend_data->display;
+ if (!display) {
+ _E("no display\n");
+ if (error)
+ *error = HAL_TDM_ERROR_OPERATION_FAILED;
+ return NULL;
+ }
+
+ if (error)
+ *error = HAL_TDM_ERROR_NONE;
+
+ return display;
}
-/* tdm_func_display */
+EXTERN hal_tdm_event_source **
+hal_tdm_backend_data_get_event_sources(hal_tdm_backend_data *backend_data, int num_event_sources, hal_tdm_error *error)
+{
+ hal_tdm_event_source **event_source;
+
+ if (!backend_data && g_hal_tdm_backend_data != backend_data) {
+ _E("no backend_data\n");
+ if (error)
+ *error = HAL_TDM_ERROR_NO_MODULE;
+ return NULL;
+ }
+
+ event_source = backend_data->event_sources;
+
+ return backend_data->event_sources;
+}
+
+/* tdm_display_funcs */
EXTERN hal_tdm_error
-hal_tdm_display_get_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_display *caps)
+hal_tdm_display_get_capability(hal_tdm_display *display, hal_tdm_caps_display *caps)
{
DISPLAY_FUNC_ENTRY(display_get_capability);
- return func_display->display_get_capability(bdata, caps);
+
+ return display_funcs->display_get_capability(display, caps);
}
EXTERN hal_tdm_error
-hal_tdm_display_get_pp_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_pp *caps)
+hal_tdm_display_get_pp_capability(hal_tdm_display *display, hal_tdm_caps_pp *caps)
{
DISPLAY_FUNC_ENTRY(display_get_pp_capability);
- return func_display->display_get_pp_capability(bdata, caps);
+
+ return display_funcs->display_get_pp_capability(display, caps);
}
EXTERN hal_tdm_error
-hal_tdm_display_get_capture_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_capture *caps)
+hal_tdm_display_get_capture_capability(hal_tdm_display *display, hal_tdm_caps_capture *caps)
{
DISPLAY_FUNC_ENTRY(display_get_capture_capability);
- return func_display->display_get_capture_capability(bdata, caps);
+
+ return display_funcs->display_get_capture_capability(display, caps);
}
EXTERN hal_tdm_output **
-hal_tdm_display_get_outputs(hal_tdm_backend_data *bdata, int *count, hal_tdm_error *error)
+hal_tdm_display_get_outputs(hal_tdm_display *display, int *count, hal_tdm_error *error)
{
DISPLAY_FUNC_ENTRY_NULL(display_get_outputs);
- return func_display->display_get_outputs(bdata, count, error);
+
+ return display_funcs->display_get_outputs(display, count, error);
}
EXTERN hal_tdm_error
-hal_tdm_display_get_fd(hal_tdm_backend_data *bdata, int *fd)
+hal_tdm_display_get_fd(hal_tdm_display *display, int *fd)
{
DISPLAY_FUNC_ENTRY(display_get_fd);
- return func_display->display_get_fd(bdata, fd);
+
+ return display_funcs->display_get_fd(display, fd);
}
EXTERN hal_tdm_error
-hal_tdm_display_handle_events(hal_tdm_backend_data *bdata)
+hal_tdm_display_handle_events(hal_tdm_display *display)
{
DISPLAY_FUNC_ENTRY(display_handle_events);
- return func_display->display_handle_events(bdata);
+
+ return display_funcs->display_handle_events(display);
}
EXTERN hal_tdm_pp *
-hal_tdm_display_create_pp(hal_tdm_backend_data *bdata, hal_tdm_error *error)
+hal_tdm_display_create_pp(hal_tdm_display *display, hal_tdm_error *error)
{
DISPLAY_FUNC_ENTRY_NULL(display_create_pp);
- return func_display->display_create_pp(bdata, error);
+
+ return display_funcs->display_create_pp(display, error);
}
EXTERN hal_tdm_voutput *
-hal_tdm_display_voutput_create(hal_tdm_backend_data *bdata, const char *name, hal_tdm_error *error)
+hal_tdm_display_voutput_create(hal_tdm_display *display, const char *name, hal_tdm_error *error)
{
DISPLAY_FUNC_ENTRY_NULL(display_voutput_create);
- return func_display->display_voutput_create(bdata, name, error);
+
+ return display_funcs->display_voutput_create(display, name, error);
}
-/* tdm_func_output */
+/* output_funcs */
EXTERN hal_tdm_error
hal_tdm_output_get_capability(hal_tdm_output *output, hal_tdm_caps_output *caps)
{
OUTPUT_FUNC_ENTRY(output_get_capability);
- return func_output->output_get_capability(output, caps);
+
+ return output_funcs->output_get_capability(output, caps);
}
EXTERN hal_tdm_error
hal_tdm_output_set_property(hal_tdm_output *output, unsigned int id, hal_tdm_value value)
{
OUTPUT_FUNC_ENTRY(output_set_property);
- return func_output->output_set_property(output, id, value);
+
+ return output_funcs->output_set_property(output, id, value);
}
EXTERN hal_tdm_error
hal_tdm_output_get_property(hal_tdm_output *output, unsigned int id, hal_tdm_value *value)
{
OUTPUT_FUNC_ENTRY(output_get_property);
- return func_output->output_get_property(output, id, value);
+
+ return output_funcs->output_get_property(output, id, value);
}
EXTERN hal_tdm_error
hal_tdm_output_wait_vblank(hal_tdm_output *output, int interval, int sync, void *user_data)
{
OUTPUT_FUNC_ENTRY(output_wait_vblank);
- return func_output->output_wait_vblank(output, interval, sync, user_data);
+
+ return output_funcs->output_wait_vblank(output, interval, sync, user_data);
}
EXTERN hal_tdm_error
hal_tdm_output_set_vblank_handler(hal_tdm_output *output, hal_tdm_output_vblank_handler func)
{
OUTPUT_FUNC_ENTRY(output_set_vblank_handler);
- return func_output->output_set_vblank_handler(output, func);
+
+ return output_funcs->output_set_vblank_handler(output, func);
}
EXTERN hal_tdm_error
hal_tdm_output_commit(hal_tdm_output *output, int sync, void *user_data)
{
OUTPUT_FUNC_ENTRY(output_commit);
- return func_output->output_commit(output, sync, user_data);
+
+ return output_funcs->output_commit(output, sync, user_data);
}
EXTERN hal_tdm_error
hal_tdm_output_set_commit_handler(hal_tdm_output *output, hal_tdm_output_commit_handler func)
{
OUTPUT_FUNC_ENTRY(output_set_commit_handler);
- return func_output->output_set_commit_handler(output, func);
+
+ return output_funcs->output_set_commit_handler(output, func);
}
EXTERN hal_tdm_error
hal_tdm_output_set_dpms(hal_tdm_output *output, hal_tdm_output_dpms dpms_value)
{
OUTPUT_FUNC_ENTRY(output_set_dpms);
- return func_output->output_set_dpms(output, dpms_value);
+
+ return output_funcs->output_set_dpms(output, dpms_value);
}
EXTERN hal_tdm_error
hal_tdm_output_get_dpms(hal_tdm_output *output, hal_tdm_output_dpms *dpms_value)
{
OUTPUT_FUNC_ENTRY(output_get_dpms);
- return func_output->output_get_dpms(output, dpms_value);
+
+ return output_funcs->output_get_dpms(output, dpms_value);
}
EXTERN hal_tdm_error
hal_tdm_output_set_mode(hal_tdm_output *output, const hal_tdm_output_mode *mode)
{
OUTPUT_FUNC_ENTRY(output_set_mode);
- return func_output->output_set_mode(output, mode);
+
+ return output_funcs->output_set_mode(output, mode);
}
EXTERN hal_tdm_error
hal_tdm_output_get_mode(hal_tdm_output *output, const hal_tdm_output_mode **mode)
{
OUTPUT_FUNC_ENTRY(output_get_mode);
- return func_output->output_get_mode(output, mode);
+
+ return output_funcs->output_get_mode(output, mode);
}
EXTERN hal_tdm_capture *
hal_tdm_output_create_capture(hal_tdm_output *output, hal_tdm_error *error)
{
OUTPUT_FUNC_ENTRY_NULL(output_create_capture);
- return func_output->output_create_capture(output, error);
+
+ return output_funcs->output_create_capture(output, error);
}
EXTERN hal_tdm_error
hal_tdm_output_set_status_handler(hal_tdm_output *output, hal_tdm_output_status_handler func, void *user_data)
{
OUTPUT_FUNC_ENTRY(output_set_status_handler);
- return func_output->output_set_status_handler(output, func, user_data);
+
+ return output_funcs->output_set_status_handler(output, func, user_data);
}
EXTERN hal_tdm_error
hal_tdm_output_set_dpms_handler(hal_tdm_output *output, hal_tdm_output_dpms_handler func, void *user_data)
{
OUTPUT_FUNC_ENTRY(output_set_dpms_handler);
- return func_output->output_set_dpms_handler(output, func, user_data);
+
+ return output_funcs->output_set_dpms_handler(output, func, user_data);
}
EXTERN hal_tdm_error
hal_tdm_output_set_dpms_async(hal_tdm_output *output, hal_tdm_output_dpms dpms_value, int *sync)
{
OUTPUT_FUNC_ENTRY(output_set_dpms_async);
- return func_output->output_set_dpms_async(output, dpms_value, sync);
+
+ return output_funcs->output_set_dpms_async(output, dpms_value, sync);
}
EXTERN hal_tdm_hwc *
hal_tdm_output_get_hwc(hal_tdm_output *output, hal_tdm_error *error)
{
OUTPUT_FUNC_ENTRY_NULL(output_get_hwc);
- return func_output->output_get_hwc(output, error);
+
+ return output_funcs->output_get_hwc(output, error);
}
EXTERN hal_tdm_error
hal_tdm_output_set_mirror(hal_tdm_output *output, hal_tdm_output *src_output, hal_tdm_transform transform)
{
OUTPUT_FUNC_ENTRY(output_set_mirror);
- return func_output->output_set_mirror(output, src_output, transform);
+
+ return output_funcs->output_set_mirror(output, src_output, transform);
}
EXTERN hal_tdm_error
hal_tdm_output_unset_mirror(hal_tdm_output *output)
{
OUTPUT_FUNC_ENTRY(output_unset_mirror);
- return func_output->output_unset_mirror(output);
+
+ return output_funcs->output_unset_mirror(output);
}
-/* tdm_func_voutput */
+/* voutput_funcs */
EXTERN hal_tdm_error
hal_tdm_voutput_destroy(hal_tdm_voutput *voutput)
{
VOUTPUT_FUNC_ENTRY(voutput_destroy);
- return func_voutput->voutput_destroy(voutput);
+
+ return voutput_funcs->voutput_destroy(voutput);
}
EXTERN hal_tdm_error
hal_tdm_voutput_set_available_mode(hal_tdm_voutput *voutput, const hal_tdm_output_mode *modes, int count)
{
VOUTPUT_FUNC_ENTRY(voutput_set_available_mode);
- return func_voutput->voutput_set_available_mode(voutput, modes, count);
+
+ return voutput_funcs->voutput_set_available_mode(voutput, modes, count);
}
EXTERN hal_tdm_error
hal_tdm_voutput_set_physical_size(hal_tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight)
{
VOUTPUT_FUNC_ENTRY(voutput_set_physical_size);
- return func_voutput->voutput_set_physical_size(voutput, mmwidth, mmheight);
+
+ return voutput_funcs->voutput_set_physical_size(voutput, mmwidth, mmheight);
}
EXTERN hal_tdm_error
hal_tdm_voutput_connect(hal_tdm_voutput *voutput)
{
VOUTPUT_FUNC_ENTRY(voutput_connect);
- return func_voutput->voutput_connect(voutput);
+
+ return voutput_funcs->voutput_connect(voutput);
}
EXTERN hal_tdm_error
hal_tdm_voutput_disconnect(hal_tdm_voutput *voutput)
{
VOUTPUT_FUNC_ENTRY(voutput_disconnect);
- return func_voutput->voutput_disconnect(voutput);
+
+ return voutput_funcs->voutput_disconnect(voutput);
}
EXTERN hal_tdm_output *
hal_tdm_voutput_get_output(hal_tdm_voutput *voutput, hal_tdm_error *error)
{
VOUTPUT_FUNC_ENTRY_NULL(voutput_get_output);
- return func_voutput->voutput_get_output(voutput, error);
+
+ return voutput_funcs->voutput_get_output(voutput, error);
}
EXTERN hal_tdm_error
hal_tdm_voutput_set_commit_func(hal_tdm_voutput *voutput, hal_tdm_voutput_commit_handler commit_func)
{
VOUTPUT_FUNC_ENTRY(voutput_set_commit_func);
- return func_voutput->voutput_set_commit_func(voutput, commit_func);
+
+ return voutput_funcs->voutput_set_commit_func(voutput, commit_func);
}
EXTERN hal_tdm_error
hal_tdm_voutput_commit_done(hal_tdm_voutput *voutput)
{
VOUTPUT_FUNC_ENTRY(voutput_commit_done);
- return func_voutput->voutput_commit_done(voutput);
+
+ return voutput_funcs->voutput_commit_done(voutput);
}
EXTERN hal_tdm_error
hal_tdm_voutput_set_target_buffer_queue_flag(hal_tdm_voutput *voutput, int flags)
{
VOUTPUT_FUNC_ENTRY(voutput_set_target_buffer_queue_flag);
- return func_voutput->voutput_set_target_buffer_queue_flag(voutput, flags);
+
+ return voutput_funcs->voutput_set_target_buffer_queue_flag(voutput, flags);
}
-/* tdm_func_hwc */
+/* hwc_funcs */
EXTERN hal_tdm_hwc_window *
hal_tdm_hwc_create_window(hal_tdm_hwc *hwc, hal_tdm_error *error)
{
HWC_FUNC_ENTRY_NULL(hwc_create_window);
- return func_hwc->hwc_create_window(hwc, error);
+
+ return hwc_funcs->hwc_create_window(hwc, error);
}
EXTERN hal_tdm_error
hal_tdm_hwc_get_video_supported_formats(hal_tdm_hwc *hwc, const tbm_format **formats, int *count)
{
HWC_FUNC_ENTRY(hwc_get_video_supported_formats);
- return func_hwc->hwc_get_video_supported_formats(hwc, formats, count);
+
+ return hwc_funcs->hwc_get_video_supported_formats(hwc, formats, count);
}
EXTERN hal_tdm_error
hal_tdm_hwc_get_video_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count)
{
HWC_FUNC_ENTRY(hwc_get_video_available_properties);
- return func_hwc->hwc_get_video_available_properties(hwc, props, count);
+
+ return hwc_funcs->hwc_get_video_available_properties(hwc, props, count);
}
EXTERN hal_tdm_error
hal_tdm_hwc_get_capabilities(hal_tdm_hwc *hwc, hal_tdm_hwc_capability *capabilities)
{
HWC_FUNC_ENTRY(hwc_get_capabilities);
- return func_hwc->hwc_get_capabilities(hwc, capabilities);
+
+ return hwc_funcs->hwc_get_capabilities(hwc, capabilities);
}
EXTERN hal_tdm_error
hal_tdm_hwc_get_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count)
{
HWC_FUNC_ENTRY(hwc_get_available_properties);
- return func_hwc->hwc_get_available_properties(hwc, props, count);
+
+ return hwc_funcs->hwc_get_available_properties(hwc, props, count);
}
EXTERN tbm_surface_queue_h
hal_tdm_hwc_get_client_target_buffer_queue(hal_tdm_hwc *hwc, hal_tdm_error *error)
{
HWC_FUNC_ENTRY_NULL(hwc_get_client_target_buffer_queue);
- return func_hwc->hwc_get_client_target_buffer_queue(hwc, error);
+
+ return hwc_funcs->hwc_get_client_target_buffer_queue(hwc, error);
}
EXTERN hal_tdm_error
hal_tdm_hwc_set_client_target_buffer(hal_tdm_hwc *hwc, tbm_surface_h target_buffer, hal_tdm_region damage)
{
HWC_FUNC_ENTRY(hwc_set_client_target_buffer);
- return func_hwc->hwc_set_client_target_buffer(hwc, target_buffer, damage);
+
+ return hwc_funcs->hwc_set_client_target_buffer(hwc, target_buffer, damage);
}
EXTERN hal_tdm_error
hal_tdm_hwc_set_client_target_acquire_fence(hal_tdm_hwc *hwc, int acquire_fence)
{
HWC_FUNC_ENTRY(hwc_set_client_target_acquire_fence);
- return func_hwc->hwc_set_client_target_acquire_fence(hwc, acquire_fence);
+
+ return hwc_funcs->hwc_set_client_target_acquire_fence(hwc, acquire_fence);
}
EXTERN 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)
{
HWC_FUNC_ENTRY(hwc_validate);
- return func_hwc->hwc_validate(hwc, composited_wnds, num_wnds, num_types);
+
+ return hwc_funcs->hwc_validate(hwc, composited_wnds, num_wnds, num_types);
}
EXTERN 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)
{
HWC_FUNC_ENTRY(hwc_get_changed_composition_types);
- return func_hwc->hwc_get_changed_composition_types(hwc, num_elements, hwc_window, composition_types);
+
+ return hwc_funcs->hwc_get_changed_composition_types(hwc, num_elements, hwc_window, composition_types);
}
EXTERN hal_tdm_error
hal_tdm_hwc_accept_validation(hal_tdm_hwc *hwc)
{
HWC_FUNC_ENTRY(hwc_accept_validation);
- return func_hwc->hwc_accept_validation(hwc);
+
+ return hwc_funcs->hwc_accept_validation(hwc);
}
EXTERN hal_tdm_error
hal_tdm_hwc_commit(hal_tdm_hwc *hwc, int sync, void *user_data)
{
HWC_FUNC_ENTRY(hwc_commit);
- return func_hwc->hwc_commit(hwc, sync, user_data);
+
+ return hwc_funcs->hwc_commit(hwc, sync, user_data);
}
EXTERN hal_tdm_error
hal_tdm_hwc_set_commit_handler(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_handler func)
{
HWC_FUNC_ENTRY(hwc_set_commit_handler);
- return func_hwc->hwc_set_commit_handler(hwc, func);
+
+ return hwc_funcs->hwc_set_commit_handler(hwc, func);
}
EXTERN hal_tdm_error
hal_tdm_hwc_get_commit_fence(hal_tdm_hwc *hwc, int *commit_fence)
{
HWC_FUNC_ENTRY(hwc_get_commit_fence);
- return func_hwc->hwc_get_commit_fence(hwc, commit_fence);
+
+ return hwc_funcs->hwc_get_commit_fence(hwc, commit_fence);
}
EXTERN 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)
{
HWC_FUNC_ENTRY(hwc_get_release_fences);
- return func_hwc->hwc_get_release_fences(hwc, num_elements, hwc_windows, release_fences);
+
+ return hwc_funcs->hwc_get_release_fences(hwc, num_elements, hwc_windows, release_fences);
}
EXTERN hal_tdm_error
hal_tdm_hwc_set_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value value)
{
HWC_FUNC_ENTRY(hwc_set_property);
- return func_hwc->hwc_set_property(hwc, id, value);
+
+ return hwc_funcs->hwc_set_property(hwc, id, value);
}
EXTERN hal_tdm_error
hal_tdm_hwc_get_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value *value)
{
HWC_FUNC_ENTRY(hwc_get_property);
- return func_hwc->hwc_get_property(hwc, id, value);
+
+ return hwc_funcs->hwc_get_property(hwc, id, value);
}
EXTERN hal_tdm_error
hal_tdm_hwc_get_commit_interval(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_interval *interval)
{
HWC_FUNC_ENTRY(hwc_get_commit_interval);
- return func_hwc->hwc_get_commit_interval(hwc, interval);
+
+ return hwc_funcs->hwc_get_commit_interval(hwc, interval);
}
-/* tdm_func_hwc_window */
+/* hwc_window_funcs */
EXTERN void
hal_tdm_hwc_window_destroy(hal_tdm_hwc_window *hwc_window)
{
HWC_WINDOW_FUNC_ENTRY_VOID(hwc_window_destroy);
- func_hwc_window->hwc_window_destroy(hwc_window);
+
+ hwc_window_funcs->hwc_window_destroy(hwc_window);
}
EXTERN tbm_surface_queue_h
hal_tdm_hwc_window_acquire_buffer_queue(hal_tdm_hwc_window *hwc_window, hal_tdm_error *error)
{
HWC_WINDOW_FUNC_ENTRY_NULL(hwc_window_acquire_buffer_queue);
- return func_hwc_window->hwc_window_acquire_buffer_queue(hwc_window, error);
+
+ return hwc_window_funcs->hwc_window_acquire_buffer_queue(hwc_window, error);
}
EXTERN void
hal_tdm_hwc_window_release_buffer_queue(hal_tdm_hwc_window *hwc_window, tbm_surface_queue_h queue)
{
HWC_WINDOW_FUNC_ENTRY_VOID(hwc_window_release_buffer_queue);
- func_hwc_window->hwc_window_release_buffer_queue(hwc_window, queue);
+
+ hwc_window_funcs->hwc_window_release_buffer_queue(hwc_window, queue);
}
EXTERN hal_tdm_error
hal_tdm_hwc_window_set_composition_type(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_composition composition_type)
{
HWC_WINDOW_FUNC_ENTRY(hwc_window_set_composition_type);
- return func_hwc_window->hwc_window_set_composition_type(hwc_window, composition_type);
+
+ return hwc_window_funcs->hwc_window_set_composition_type(hwc_window, composition_type);
}
EXTERN hal_tdm_error
hal_tdm_hwc_window_set_buffer_damage(hal_tdm_hwc_window *hwc_window, hal_tdm_region damage)
{
HWC_WINDOW_FUNC_ENTRY(hwc_window_set_buffer_damage);
- return func_hwc_window->hwc_window_set_buffer_damage(hwc_window, damage);
+
+ return hwc_window_funcs->hwc_window_set_buffer_damage(hwc_window, damage);
}
EXTERN hal_tdm_error
hal_tdm_hwc_window_set_info(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_info *info)
{
HWC_WINDOW_FUNC_ENTRY(hwc_window_set_info);
- return func_hwc_window->hwc_window_set_info(hwc_window, info);
+
+ return hwc_window_funcs->hwc_window_set_info(hwc_window, info);
}
EXTERN hal_tdm_error
hal_tdm_hwc_window_set_buffer(hal_tdm_hwc_window *hwc_window, tbm_surface_h buffer)
{
HWC_WINDOW_FUNC_ENTRY(hwc_window_set_buffer);
- return func_hwc_window->hwc_window_set_buffer(hwc_window, buffer);
+
+ return hwc_window_funcs->hwc_window_set_buffer(hwc_window, buffer);
}
EXTERN hal_tdm_error
hal_tdm_hwc_window_set_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value value)
{
HWC_WINDOW_FUNC_ENTRY(hwc_window_set_property);
- return func_hwc_window->hwc_window_set_property(hwc_window, id, value);
+
+ return hwc_window_funcs->hwc_window_set_property(hwc_window, id, value);
}
EXTERN hal_tdm_error
hal_tdm_hwc_window_get_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value *value)
{
HWC_WINDOW_FUNC_ENTRY(hwc_window_get_property);
- return func_hwc_window->hwc_window_get_property(hwc_window, id, value);
+
+ return hwc_window_funcs->hwc_window_get_property(hwc_window, id, value);
}
EXTERN hal_tdm_error
hal_tdm_hwc_window_get_constraints(hal_tdm_hwc_window *hwc_window, int *constraints)
{
HWC_WINDOW_FUNC_ENTRY(hwc_window_get_constraints);
- return func_hwc_window->hwc_window_get_constraints(hwc_window, constraints);
+
+ return hwc_window_funcs->hwc_window_get_constraints(hwc_window, constraints);
}
EXTERN hal_tdm_error
hal_tdm_hwc_window_set_name(hal_tdm_hwc_window *hwc_window, const char *name)
{
HWC_WINDOW_FUNC_ENTRY(hwc_window_set_name);
- return func_hwc_window->hwc_window_set_name(hwc_window, name);
+
+ return hwc_window_funcs->hwc_window_set_name(hwc_window, name);
}
EXTERN hal_tdm_error
hal_tdm_hwc_window_set_cursor_image(hal_tdm_hwc_window *hwc_window, int width, int height, int stride, void *ptr)
{
HWC_WINDOW_FUNC_ENTRY(hwc_window_set_cursor_image);
- return func_hwc_window->hwc_window_set_cursor_image(hwc_window, width, height, stride, ptr);
+
+ return hwc_window_funcs->hwc_window_set_cursor_image(hwc_window, width, height, stride, ptr);
}
EXTERN hal_tdm_error
hal_tdm_hwc_window_set_acquire_fence(hal_tdm_hwc_window *hwc_window, int acquire_fence)
{
HWC_WINDOW_FUNC_ENTRY(hwc_window_set_acquire_fence);
- return func_hwc_window->hwc_window_set_acquire_fence(hwc_window, acquire_fence);
+
+ return hwc_window_funcs->hwc_window_set_acquire_fence(hwc_window, acquire_fence);
}
-/* tdm_func_pp */
+/* pp_funcs */
EXTERN void
hal_tdm_pp_destroy(hal_tdm_pp *pp)
{
PP_FUNC_ENTRY_VOID(pp_destroy);
- func_pp->pp_destroy(pp);
+ pp_funcs->pp_destroy(pp);
}
EXTERN hal_tdm_error
hal_tdm_pp_set_info(hal_tdm_pp *pp, hal_tdm_info_pp *info)
{
PP_FUNC_ENTRY(pp_set_info);
- return func_pp->pp_set_info(pp, info);
+
+ return pp_funcs->pp_set_info(pp, info);
}
EXTERN hal_tdm_error
hal_tdm_pp_attach(hal_tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst)
{
PP_FUNC_ENTRY(pp_attach);
- return func_pp->pp_attach(pp, src, dst);
+
+ return pp_funcs->pp_attach(pp, src, dst);
}
EXTERN hal_tdm_error
hal_tdm_pp_commit(hal_tdm_pp *pp)
{
PP_FUNC_ENTRY(pp_commit);
- return func_pp->pp_commit(pp);
+
+ return pp_funcs->pp_commit(pp);
}
EXTERN hal_tdm_error
hal_tdm_pp_set_done_handler(hal_tdm_pp *pp, hal_tdm_pp_done_handler func, void *user_data)
{
PP_FUNC_ENTRY(pp_set_done_handler);
- return func_pp->pp_set_done_handler(pp, func, user_data);
+
+ return pp_funcs->pp_set_done_handler(pp, func, user_data);
}
-/* tdm_func_capture */
+/* capture_funcs */
EXTERN void
hal_tdm_capture_destroy(hal_tdm_capture *capture)
{
CAPTURE_FUNC_ENTRY_VOID(capture_destroy);
- func_capture->capture_destroy(capture);
+ capture_funcs->capture_destroy(capture);
}
EXTERN hal_tdm_error
hal_tdm_capture_set_info(hal_tdm_capture *capture, hal_tdm_info_capture *info)
{
CAPTURE_FUNC_ENTRY(capture_set_info);
- return func_capture->capture_set_info(capture, info);
+
+ return capture_funcs->capture_set_info(capture, info);
}
EXTERN hal_tdm_error
hal_tdm_capture_attach(hal_tdm_capture *capture, tbm_surface_h buffer)
{
CAPTURE_FUNC_ENTRY(capture_attach);
- return func_capture->capture_attach(capture, buffer);
+
+ return capture_funcs->capture_attach(capture, buffer);
}
EXTERN hal_tdm_error
hal_tdm_capture_commit(hal_tdm_capture *capture)
{
CAPTURE_FUNC_ENTRY(capture_commit);
- return func_capture->capture_commit(capture);
+
+ return capture_funcs->capture_commit(capture);
}
EXTERN hal_tdm_error
hal_tdm_capture_set_done_handler(hal_tdm_capture *capture, hal_tdm_capture_done_handler func, void *user_data)
{
CAPTURE_FUNC_ENTRY(capture_set_done_handler);
- return func_capture->capture_set_done_handler(capture, func, user_data);
+
+ return capture_funcs->capture_set_done_handler(capture, func, user_data);
}
/* tdm_backend_func */
EXTERN hal_tdm_error
-hal_tdm_backend_register_func_display(hal_tdm_display *dpy, hal_tdm_func_display *func_display)
+hal_tdm_backend_register_display_funcs(hal_tdm_display *dpy, hal_tdm_display_funcs *display_funcs)
{
- if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED;
- if (g_tdm_funcs->tdm_func_display) return HAL_TDM_ERROR_BAD_REQUEST;
- if (!dpy || !func_display) return HAL_TDM_ERROR_INVALID_PARAMETER;
- g_tdm_funcs->tdm_func_display = func_display;
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED;
+ if (g_hal_tdm_backend_data->display_funcs) return HAL_TDM_ERROR_BAD_REQUEST;
+ if (!dpy || !display_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER;
+ g_hal_tdm_backend_data->display_funcs = display_funcs;
+
return HAL_TDM_ERROR_NONE;
}
EXTERN hal_tdm_error
-hal_tdm_backend_register_func_output(hal_tdm_display *dpy, hal_tdm_func_output *func_output)
+hal_tdm_backend_register_output_funcs(hal_tdm_display *dpy, hal_tdm_output_funcs *output_funcs)
{
- if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED;
- if (g_tdm_funcs->tdm_func_output) return HAL_TDM_ERROR_BAD_REQUEST;
- if (!dpy || !func_output) return HAL_TDM_ERROR_INVALID_PARAMETER;
- g_tdm_funcs->tdm_func_output = func_output;
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED;
+ if (g_hal_tdm_backend_data->output_funcs) return HAL_TDM_ERROR_BAD_REQUEST;
+ if (!dpy || !output_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER;
+ g_hal_tdm_backend_data->output_funcs = output_funcs;
return HAL_TDM_ERROR_NONE;
}
EXTERN hal_tdm_error
-hal_tdm_backend_register_func_voutput(hal_tdm_display *dpy, hal_tdm_func_voutput *func_voutput)
+hal_tdm_backend_register_voutput_funcs(hal_tdm_display *dpy, hal_tdm_voutput_funcs *voutput_funcs)
{
- if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED;
- if (g_tdm_funcs->tdm_func_voutput) return HAL_TDM_ERROR_BAD_REQUEST;
- if (!dpy || !func_voutput) return HAL_TDM_ERROR_INVALID_PARAMETER;
- g_tdm_funcs->tdm_func_voutput = func_voutput;
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED;
+ if (g_hal_tdm_backend_data->voutput_funcs) return HAL_TDM_ERROR_BAD_REQUEST;
+ if (!dpy || !voutput_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER;
+ g_hal_tdm_backend_data->voutput_funcs = voutput_funcs;
return HAL_TDM_ERROR_NONE;
}
EXTERN hal_tdm_error
-hal_tdm_backend_register_func_hwc(hal_tdm_display *dpy, hal_tdm_func_hwc *func_hwc)
+hal_tdm_backend_register_hwc_funcs(hal_tdm_display *dpy, hal_tdm_hwc_funcs *hwc_funcs)
{
- if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED;
- if (g_tdm_funcs->tdm_func_hwc) return HAL_TDM_ERROR_BAD_REQUEST;
- if (!dpy || !func_hwc) return HAL_TDM_ERROR_INVALID_PARAMETER;
- g_tdm_funcs->tdm_func_hwc = func_hwc;
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED;
+ if (g_hal_tdm_backend_data->hwc_funcs) return HAL_TDM_ERROR_BAD_REQUEST;
+ if (!dpy || !hwc_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER;
+ g_hal_tdm_backend_data->hwc_funcs = hwc_funcs;
return HAL_TDM_ERROR_NONE;
}
EXTERN hal_tdm_error
-hal_tdm_backend_register_func_hwc_window(hal_tdm_display *dpy, hal_tdm_func_hwc_window *func_hwc_window)
+hal_tdm_backend_register_hwc_window_funcs(hal_tdm_display *dpy, hal_tdm_hwc_window_funcs *hwc_window_funcs)
{
- if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED;
- if (g_tdm_funcs->tdm_func_hwc_window) return HAL_TDM_ERROR_BAD_REQUEST;
- if (!dpy || !func_hwc_window) return HAL_TDM_ERROR_INVALID_PARAMETER;
- g_tdm_funcs->tdm_func_hwc_window = func_hwc_window;
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED;
+ if (g_hal_tdm_backend_data->hwc_window_funcs) return HAL_TDM_ERROR_BAD_REQUEST;
+ if (!dpy || !hwc_window_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER;
+ g_hal_tdm_backend_data->hwc_window_funcs = hwc_window_funcs;
return HAL_TDM_ERROR_NONE;
}
EXTERN hal_tdm_error
-hal_tdm_backend_register_func_pp(hal_tdm_display *dpy, hal_tdm_func_pp *func_pp)
+hal_tdm_backend_register_pp_funcs(hal_tdm_display *dpy, hal_tdm_pp_funcs *pp_funcs)
{
- if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED;
- if (g_tdm_funcs->tdm_func_pp) return HAL_TDM_ERROR_BAD_REQUEST;
- if (!dpy || !func_pp) return HAL_TDM_ERROR_INVALID_PARAMETER;
- g_tdm_funcs->tdm_func_pp = func_pp;
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED;
+ if (g_hal_tdm_backend_data->pp_funcs) return HAL_TDM_ERROR_BAD_REQUEST;
+ if (!dpy || !pp_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER;
+ g_hal_tdm_backend_data->pp_funcs = pp_funcs;
return HAL_TDM_ERROR_NONE;
}
EXTERN hal_tdm_error
-hal_tdm_backend_register_func_capture(hal_tdm_display *dpy, hal_tdm_func_capture *func_capture)
+hal_tdm_backend_register_capture_funcs(hal_tdm_display *dpy, hal_tdm_capture_funcs *capture_funcs)
{
- if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED;
- if (g_tdm_funcs->tdm_func_capture) return HAL_TDM_ERROR_BAD_REQUEST;
- if (!dpy || !func_capture) return HAL_TDM_ERROR_INVALID_PARAMETER;
- g_tdm_funcs->tdm_func_capture = func_capture;
+ if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED;
+ if (g_hal_tdm_backend_data->capture_funcs) return HAL_TDM_ERROR_BAD_REQUEST;
+ if (!dpy || !capture_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER;
+ g_hal_tdm_backend_data->capture_funcs = capture_funcs;
return HAL_TDM_ERROR_NONE;
}
{
// tdm_buffer_remove_destroy_handler(buffer, func, user_data);
}
-
-EXTERN hal_tdm_event_loop_source *
-hal_tdm_event_loop_add_fd_handler(hal_tdm_display *dpy, int fd, hal_tdm_event_loop_mask mask,
- hal_tdm_event_loop_fd_handler func, void *user_data, hal_tdm_error *error)
-{
-// return tdm_event_loop_add_fd_handler(dpy, fd, mask, func, user_data, error);
- return NULL;
-}
-
-EXTERN hal_tdm_event_loop_source *
-hal_tdm_event_loop_add_timer_handler(hal_tdm_display *dpy, hal_tdm_event_loop_timer_handler func,
- void *user_data, hal_tdm_error *error)
-{
-// return tdm_event_loop_add_timer_handler(dpy, func, user_data, error);
- return NULL;
-}
-
-EXTERN hal_tdm_error
-hal_tdm_event_loop_source_timer_update(hal_tdm_event_loop_source *source, unsigned int ms_delay)
-{
-// return tdm_event_loop_source_timer_update(source, ms_delay);
- return HAL_TDM_ERROR_NONE;
-}
-
-EXTERN void
-hal_tdm_event_loop_source_remove(hal_tdm_event_loop_source *source)
-{
-// tdm_event_loop_source_remove(source);
-}