• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 /**
17  * @addtogroup Ffrt
18  * @{
19  *
20  * @brief ffrt provides APIs.
21  *
22  *
23  * @syscap SystemCapability.Resourceschedule.Ffrt.Core
24  *
25  * @since 10
26  */
27 
28  /**
29  * @file type_def.h
30  * @kit FunctionFlowRuntimeKit
31  *
32  * @brief Declares common types.
33  * @library libffrt.z.so
34  * @syscap SystemCapability.Resourceschedule.Ffrt.Core
35  * @since 10
36  * @version 1.0
37  */
38 #ifndef FFRT_API_C_TYPE_DEF_H
39 #define FFRT_API_C_TYPE_DEF_H
40 #include <stdint.h>
41 #include <errno.h>
42 
43 #ifdef __cplusplus
44 #define FFRT_C_API  extern "C"
45 #else
46 #define FFRT_C_API
47 #endif
48 
49 /**
50  * @brief Enumerates the task priority types.
51  *
52  * @since 12
53  */
54 typedef enum {
55     /** should be distributed at once if possible, handle time equals to send time, prior to high level */
56     ffrt_queue_priority_immediate = 0,
57     /** high priority, sorted by handle time, prior to low level. */
58     ffrt_queue_priority_high,
59     /** low priority, sorted by handle time, prior to idle level. */
60     ffrt_queue_priority_low,
61     /** lowest priority, sorted by handle time, only distribute when there is no other level inside queue. */
62     ffrt_queue_priority_idle,
63 } ffrt_queue_priority_t;
64 
65 /**
66  * @brief Enumerates the task QoS types.
67  *
68  * @since 10
69  */
70 typedef enum {
71     /** Inheritance. */
72     ffrt_qos_inherit = -1,
73     /** Background task. */
74     ffrt_qos_background,
75     /** Real-time tool. */
76     ffrt_qos_utility,
77     /** Default type. */
78     ffrt_qos_default,
79     /** User initiated. */
80     ffrt_qos_user_initiated,
81 } ffrt_qos_default_t;
82 typedef int ffrt_qos_t;
83 
84 typedef void(*ffrt_function_t)(void*);
85 
86 /**
87  * @brief Defines a task executor.
88  *
89  * @since 10
90  */
91 typedef struct {
92     /** Function used to execute a task. */
93     ffrt_function_t exec;
94     /** Function used to destroy a task. */
95     ffrt_function_t destroy;
96     /** Need to be set to 0. */
97     uint64_t reserve[2];
98 } ffrt_function_header_t;
99 
100 /**
101  * @brief Defines the storage size of multiple types of structs.
102  *
103  * @since 10
104  */
105 typedef enum {
106     /** Task attribute storage size. */
107     ffrt_task_attr_storage_size = 128,
108     /** Task executor storage size. */
109     ffrt_auto_managed_function_storage_size = 64 + sizeof(ffrt_function_header_t),
110     /* Mutex storage size. */
111     ffrt_mutex_storage_size = 64,
112     /** Condition variable storage size. */
113     ffrt_cond_storage_size = 64,
114     /** Queue storage size. */
115     ffrt_queue_attr_storage_size = 128,
116 } ffrt_storage_size_t;
117 
118 /**
119  * @brief Enumerates the task types.
120  *
121  * @since 10
122  */
123 typedef enum {
124     /** General task. */
125     ffrt_function_kind_general,
126     /** Queue task. */
127     ffrt_function_kind_queue,
128 } ffrt_function_kind_t;
129 
130 /**
131  * @brief dependency type.
132  *
133  * @since 10
134  */
135 typedef enum {
136     /** Data dependency type. */
137     ffrt_dependence_data,
138     /** Task dependency type. */
139     ffrt_dependence_task,
140 } ffrt_dependence_type_t;
141 
142 /**
143  * @brief dependency data structure.
144  *
145  * @since 10
146  */
147 typedef struct {
148     /** Dependency type. */
149     ffrt_dependence_type_t type;
150     /** Dependency pointer. */
151     const void* ptr;
152 } ffrt_dependence_t;
153 
154 /**
155  * @brief Defines the dependency struct.
156  *
157  * @since 10
158  */
159 typedef struct {
160     /** Number of dependencies. */
161     uint32_t len;
162     /** Dependent data. */
163     const ffrt_dependence_t* items;
164 } ffrt_deps_t;
165 
166 typedef struct {
167     uint32_t storage[(ffrt_task_attr_storage_size + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
168 } ffrt_task_attr_t;
169 
170 typedef struct {
171     uint32_t storage[(ffrt_queue_attr_storage_size + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
172 } ffrt_queue_attr_t;
173 
174 typedef void* ffrt_task_handle_t;
175 
176 typedef enum {
177     ffrt_error = -1,
178     ffrt_success = 0,
179     ffrt_error_nomem = ENOMEM,
180     ffrt_error_timedout = ETIMEDOUT,
181     ffrt_error_busy = EBUSY,
182     ffrt_error_inval = EINVAL
183 } ffrt_error_t;
184 
185 typedef struct {
186     long storage;
187 } ffrt_condattr_t;
188 
189 typedef struct {
190     long storage;
191 } ffrt_mutexattr_t;
192 
193 /**
194  * @brief ffrt mutex type enum
195  *
196  * Describes the mutex type, ffrt_mutex_normal is normal mutex;
197  * ffrt_mutex_recursive is recursive mutex, ffrt_mutex_default is normal mutex.
198  *
199  * @since 12
200  */
201 typedef enum {
202     /** ffrt normal mutex type */
203     ffrt_mutex_normal = 0,
204     /** ffrt recursive mutex type */
205     ffrt_mutex_recursive = 2,
206     /** ffrt default mutex type */
207     ffrt_mutex_default = ffrt_mutex_normal
208 } ffrt_mutex_type;
209 
210 typedef struct {
211     uint32_t storage[(ffrt_mutex_storage_size + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
212 } ffrt_mutex_t;
213 
214 typedef struct {
215     uint32_t storage[(ffrt_cond_storage_size + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
216 } ffrt_cond_t;
217 
218 /**
219  * @brief poller callback.
220  *
221  * @since 12
222  */
223 typedef void (*ffrt_poller_cb)(void* data, uint32_t event);
224 
225 /**
226  * @brief timer callback.
227  *
228  * @since 12
229  */
230 typedef void (*ffrt_timer_cb)(void* data);
231 
232 /**
233  * @brief timer handler.
234  *
235  * @since 12
236  */
237 typedef int ffrt_timer_t;
238 
239 
240 #ifdef __cplusplus
241 namespace ffrt {
242 enum qos_default {
243     qos_inherit = ffrt_qos_inherit,
244     qos_background = ffrt_qos_background,
245     qos_utility = ffrt_qos_utility,
246     qos_default = ffrt_qos_default,
247     qos_user_initiated = ffrt_qos_user_initiated,
248 };
249 using qos = int;
250 
251 }
252 #endif
253 #endif
254 /** @} */