1 /**************************************************************************
5 Copyright 2015 Samsung Electronics co., Ltd. All Rights Reserved.
7 Contact: Eunchul Kim <chulspro.kim@samsung.com>,
8 JinYoung Jeon <jy0.jeon@samsung.com>,
9 Taeheon Kim <th908.kim@samsung.com>,
10 YoungJun Cho <yj44.cho@samsung.com>,
11 SooChan Lim <sc1.lim@samsung.com>,
12 Boram Park <sc1.lim@samsung.com>
14 Permission is hereby granted, free of charge, to any person obtaining a
15 copy of this software and associated documentation files (the
16 "Software"), to deal in the Software without restriction, including
17 without limitation the rights to use, copy, modify, merge, publish,
18 distribute, sub license, and/or sell copies of the Software, and to
19 permit persons to whom the Software is furnished to do so, subject to
20 the following conditions:
22 The above copyright notice and this permission notice (including the
23 next paragraph) shall be included in all copies or substantial portions
26 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
29 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
30 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
31 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
32 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34 **************************************************************************/
41 #include "tdm_backend.h"
42 #include "tdm_private.h"
44 #define BACKEND_FUNC_ENTRY() \
45 tdm_private_display *private_display; \
46 TDM_RETURN_VAL_IF_FAIL(dpy != NULL, TDM_ERROR_INVALID_PARAMETER); \
47 private_display = (tdm_private_display*)dpy;
50 _check_abi_version(tdm_backend_module *module, int abimaj, int abimin)
52 int major = TDM_BACKEND_GET_ABI_MAJOR(module->abi_version);
53 int minor = TDM_BACKEND_GET_ABI_MINOR(module->abi_version);
55 if (major < abimaj) goto failed;
56 if (major > abimaj) return 1;
57 if (minor < abimin) goto failed;
60 TDM_ERR("The ABI version(%d.%d) of '%s' is less than %d.%d",
61 major, minor, module->name ? module->name : "unknown",
67 tdm_backend_register_func_display(tdm_display *dpy,
68 tdm_func_display *func_display)
70 tdm_backend_module *module;
74 TDM_RETURN_VAL_IF_FAIL(func_display != NULL, TDM_ERROR_INVALID_PARAMETER);
76 /* the ABI version of backend module should be more than 1.1 */
77 module = private_display->module_data;
78 if (_check_abi_version(module, 1, 1) < 0)
79 return TDM_ERROR_BAD_MODULE;
81 _pthread_mutex_lock(&private_display->lock);
82 private_display->func_display = *func_display;
83 _pthread_mutex_unlock(&private_display->lock);
85 return TDM_ERROR_NONE;
89 tdm_backend_register_func_output(tdm_display *dpy, tdm_func_output *func_output)
91 tdm_backend_module *module;
95 TDM_RETURN_VAL_IF_FAIL(func_output != NULL, TDM_ERROR_INVALID_PARAMETER);
97 /* the ABI version of backend module should be more than 1.1 */
98 module = private_display->module_data;
99 if (_check_abi_version(module, 1, 1) < 0)
100 return TDM_ERROR_BAD_MODULE;
102 _pthread_mutex_lock(&private_display->lock);
103 private_display->func_output = *func_output;
104 _pthread_mutex_unlock(&private_display->lock);
106 return TDM_ERROR_NONE;
110 tdm_backend_register_func_layer(tdm_display *dpy, tdm_func_layer *func_layer)
112 tdm_backend_module *module;
114 BACKEND_FUNC_ENTRY();
116 TDM_RETURN_VAL_IF_FAIL(func_layer != NULL, TDM_ERROR_INVALID_PARAMETER);
118 /* the ABI version of backend module should be more than 1.1 */
119 module = private_display->module_data;
120 if (_check_abi_version(module, 1, 1) < 0)
121 return TDM_ERROR_BAD_MODULE;
123 _pthread_mutex_lock(&private_display->lock);
124 private_display->func_layer = *func_layer;
125 _pthread_mutex_unlock(&private_display->lock);
127 return TDM_ERROR_NONE;
131 tdm_backend_register_func_pp(tdm_display *dpy, tdm_func_pp *func_pp)
133 BACKEND_FUNC_ENTRY();
136 return TDM_ERROR_NONE;
138 _pthread_mutex_lock(&private_display->lock);
139 private_display->capabilities |= TDM_DISPLAY_CAPABILITY_PP;
140 private_display->func_pp = *func_pp;
141 _pthread_mutex_unlock(&private_display->lock);
143 return TDM_ERROR_NONE;
147 tdm_backend_register_func_capture(tdm_display *dpy,
148 tdm_func_capture *func_capture)
150 BACKEND_FUNC_ENTRY();
153 return TDM_ERROR_NONE;
155 _pthread_mutex_lock(&private_display->lock);
156 private_display->capabilities |= TDM_DISPLAY_CAPABILITY_CAPTURE;
157 private_display->func_capture = *func_capture;
158 _pthread_mutex_unlock(&private_display->lock);
160 return TDM_ERROR_NONE;