halapi: Add new get_backend and put_backend with specific library name
[platform/hal/api/common.git] / include / hal-common.h
1 /*
2  * HAL (Hardware Abstract Layer) Common API
3  *
4  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the License);
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 #ifndef __HAL_COMMON__
20 #define __HAL_COMMON__
21
22 #include "hal-common-interface.h"
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
28 enum hal_license {
29         HAL_LICENSE_UNKNOWN = 0,
30         HAL_LICENSE_APACHE_2_0,
31         HAL_LICENSE_FLORA,
32         HAL_LICENSE_MIT,
33         HAL_LICENSE_END,
34 };
35
36 enum hal_group {
37         HAL_GROUP_UNKNOWN = 0,
38         HAL_GROUP_GRAPHICS,
39         HAL_GROUP_MULTIMEDIA,
40         HAL_GROUP_CONNECTIVITY,
41         HAL_GROUP_TELEPHONY,
42         HAL_GROUP_LOCATION,
43         HAL_GROUP_SYSTEM,
44         HAL_GROUP_END,
45 };
46
47 static const char *const hal_group_string[] = {
48         [HAL_GROUP_UNKNOWN] = "HAL_GROUP_UNKNOWN",
49         [HAL_GROUP_GRAPHICS] = "HAL_GROUP_GRAPHICS",
50         [HAL_GROUP_MULTIMEDIA] = "HAL_GROUP_MULTIMEDIA",
51         [HAL_GROUP_CONNECTIVITY] = "HAL_GROUP_CONNECTIVITY",
52         [HAL_GROUP_TELEPHONY] = "HAL_GROUP_TELEPHONY",
53         [HAL_GROUP_LOCATION] = "HAL_GROUP_LOCATION",
54         [HAL_GROUP_SYSTEM] = "HAL_GROUP_SYSTEM",
55 };
56
57 enum hal_module {
58         HAL_MODULE_UNKNOWN = 0,
59
60         /* HAL_GROUP_GRAPHICS */
61         HAL_MODULE_TBM,
62         HAL_MODULE_TDM,
63         HAL_MODULE_COREGL,
64         HAL_MODULE_INPUT,
65
66         /* HAL_GROUP_MULTIMEDIA */
67         HAL_MODULE_AUDIO,
68         HAL_MODULE_CAMERA,
69         HAL_MODULE_RADIO,
70         HAL_MODULE_CODEC,
71         HAL_MODULE_USB_AUDIO,
72         HAL_MODULE_ALSAUCM,
73
74         /* HAL_GROUP_CONNECTIVITY */
75         HAL_MODULE_BLUETOOTH,
76         HAL_MODULE_WIFI,
77         HAL_MODULE_NAN,
78         HAL_MODULE_NFC,
79         HAL_MODULE_ZIGBEE,
80         HAL_MODULE_UWB,
81         HAL_MODULE_MTP,
82
83         /* HAL_GROUP_TELEPHONY */
84         HAL_MODULE_TELEPHONY,
85
86         /* HAL_GROUP_LOCATION */
87         HAL_MODULE_LOCATION,
88
89         /* HAL_GROUP_SYSTEM */
90         HAL_MODULE_COMMON,
91         HAL_MODULE_POWER,
92         HAL_MODULE_SENSOR,
93         HAL_MODULE_PERIPHERAL,
94         HAL_MODULE_DEVICE_BATTERY,
95         HAL_MODULE_DEVICE_BEZEL,
96         HAL_MODULE_DEVICE_DISPLAY,
97         HAL_MODULE_DEVICE_IR,
98         HAL_MODULE_DEVICE_TOUCHSCREEN,
99         HAL_MODULE_DEVICE_LED,
100         HAL_MODULE_DEVICE_BOARD,
101         HAL_MODULE_DEVICE_EXTERNAL_CONNECTION,
102         HAL_MODULE_DEVICE_THERMAL,
103         HAL_MODULE_DEVICE_USB_GADGET,
104         HAL_MODULE_DEVICE_HAPTIC,
105         HAL_MODULE_DEVICE_MEMORY,
106
107         /*
108          * TODO: If need to add new module, have to add it below
109          * without modifying already defined module id.
110          */
111
112         HAL_MODULE_END,
113 };
114
115 static const char *const hal_module_string[] = {
116         [HAL_MODULE_UNKNOWN] = "HAL_MODULE_UNKNOWN",
117
118         /* HAL_GROUP_GRAPHICS */
119         [HAL_MODULE_TBM] = "HAL_MODULE_TBM",
120         [HAL_MODULE_TDM] = "HAL_MODULE_TDM",
121         [HAL_MODULE_COREGL] = "HAL_MODULE_COREGL",
122         [HAL_MODULE_INPUT] = "HAL_MODULE_INPUT",
123
124         /* HAL_GROUP_MULTIMEDIA */
125         [HAL_MODULE_AUDIO] = "HAL_MODULE_AUDIO",
126         [HAL_MODULE_CAMERA] = "HAL_MODULE_CAMERA",
127         [HAL_MODULE_RADIO] = "HAL_MODULE_RADIO",
128         [HAL_MODULE_CODEC] = "HAL_MODULE_CODEC",
129         [HAL_MODULE_USB_AUDIO] = "HAL_MODULE_USB_AUDIO",
130         [HAL_MODULE_ALSAUCM] = "HAL_MODULE_ALSAUCM",
131
132         /* HAL_GROUP_CONNECTIVITY */
133         [HAL_MODULE_BLUETOOTH] = "HAL_MODULE_BLUETOOTH",
134         [HAL_MODULE_WIFI] = "HAL_MODULE_WIFI",
135         [HAL_MODULE_NAN] = "HAL_MODULE_NAN",
136         [HAL_MODULE_NFC] = "HAL_MODULE_NFC",
137         [HAL_MODULE_ZIGBEE] = "HAL_MODULE_ZIGBEE",
138         [HAL_MODULE_UWB] = "HAL_MODULE_UWB",
139         [HAL_MODULE_MTP] = "HAL_MODULE_MTP",
140
141         /* HAL_GROUP_TELEPHONY */
142         [HAL_MODULE_TELEPHONY] = "HAL_MODULE_TELEPHONY",
143
144         /* HAL_GROUP_LOCATION */
145         [HAL_MODULE_LOCATION] = "HAL_MODULE_LOCATION",
146
147         /* HAL_GROUP_SYSTEM */
148         [HAL_MODULE_COMMON] = "HAL_MODULE_COMMON",
149         [HAL_MODULE_POWER] = "HAL_MODULE_POWER",
150         [HAL_MODULE_SENSOR] = "HAL_MODULE_SENSOR",
151         [HAL_MODULE_PERIPHERAL] = "HAL_MODULE_PERIPHERAL",
152         [HAL_MODULE_DEVICE_BATTERY] = "HAL_MODULE_DEVICE_BATTERY",
153         [HAL_MODULE_DEVICE_BEZEL] = "HAL_MODULE_DEVICE_BEZEL",
154         [HAL_MODULE_DEVICE_DISPLAY] = "HAL_MODULE_DEVICE_DISPLAY",
155         [HAL_MODULE_DEVICE_IR] = "HAL_MODULE_DEVICE_IR",
156         [HAL_MODULE_DEVICE_TOUCHSCREEN] = "HAL_MODULE_DEVICE_TOUCHSCREEN",
157         [HAL_MODULE_DEVICE_LED] = "HAL_MODULE_DEVICE_LED",
158         [HAL_MODULE_DEVICE_BOARD] = "HAL_MODULE_DEVICE_BOARD",
159         [HAL_MODULE_DEVICE_EXTERNAL_CONNECTION] = "HAL_MODULE_DEVICE_EXTERNAL_CONNECTION",
160         [HAL_MODULE_DEVICE_THERMAL] = "HAL_MODULE_DEVICE_THERMAL",
161         [HAL_MODULE_DEVICE_USB_GADGET] = "HAL_MODULE_DEVICE_USB_GADGET",
162         [HAL_MODULE_DEVICE_HAPTIC] = "HAL_MODULE_DEVICE_HAPTIC",
163         [HAL_MODULE_DEVICE_MEMORY] = "HAL_MODULE_DEVICE_MEMORY",
164
165         [HAL_MODULE_END] = "HAL_MODULE_END",
166 };
167
168 /**
169  * @brief Get the backend library name according to the type of HAL module
170  * @param[in] HAL module id among enum hal_moudle
171  * @param[out] Backend Library name of HAL module
172  * @param[in] Arrary size of name[]
173  * @return @c 0 on success, otherwise a negative error value
174  */
175 int hal_common_get_backend_library_name(enum hal_module module, char *name, int size);
176
177 /**
178  * @brief Get the backend symbol name according to the type of HAL module
179  * @param[in] HAL module id among enum hal_moudle
180  * @param[out] Backend symbol name of HAL module
181  * @param[in] Arrary size of name[]
182  * @return @c 0 on success, otherwise a negative error value
183  */
184 int hal_common_get_backend_symbol_name(enum hal_module module, char *name, int size);
185
186 /**
187  * @brief Get the backend data according to the type of HAL module
188  * @param[in] HAL module id among enum hal_moudle
189  * @param[out] Data pointer where 'hal_backend_[module]_funcs' instance
190  *             should be stored from HAL backend binary.
191  * @return @c 0 on success, otherwise a negative error value
192  */
193 int hal_common_get_backend(enum hal_module module, void **data);
194
195 /**
196  * @brief Put the backend data according to the type of HAL module
197  * @param[in] HAL module id among enum hal_moudle
198  * @param[in] Data pointer where 'hal_backend_[module]_funcs' instance
199  * @return @c 0 on success, otherwise a negative error value
200  */
201 int hal_common_put_backend(enum hal_module module, void *data);
202
203 /**
204  * @brief Get the backend data with the specific library name according to the type of HAL module
205  * @param[in] HAL module id among enum hal_moudle
206  * @param[out] Data pointer where 'hal_backend_[module]_funcs' instance
207  *             should be stored from HAL backend binary.
208  * @param[in] HAL backend library name which is not default library name
209  * @return @c 0 on success, otherwise a negative error value
210  */
211 int hal_common_get_backend_with_library_name(enum hal_module module,
212                                         void **data, const char *library_name);
213
214 /**
215  * @brief Put the backend data with the specific library name according to the type of HAL module
216  * @param[in] HAL module id among enum hal_moudle
217  * @param[in] Data pointer where 'hal_backend_[module]_funcs' instance
218  * @param[in] HAL backend library name which is not default library name
219  * @return @c 0 on success, otherwise a negative error value
220  */
221 int hal_common_put_backend_with_library_name(enum hal_module module,
222                                         void *data, const char *library_name);
223
224 /**
225  * @brief Check HAL ABI version whehter is suppored or not on current platform
226  * @param[in] HAL module id among enum hal_moudle
227  * @param[in] HAL ABI version of backend module among enum hal_abi_version
228  * @return @c 0 on success, otherwise a negative error value
229  */
230 int hal_common_check_backend_abi_version(enum hal_module module,
231                                         enum hal_abi_version abi_version);
232
233 #ifdef __cplusplus
234 }
235 #endif
236 #endif /* __HAL_COMMON__ */