• 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  *
31  * @brief Declares common types.
32  *
33  * @syscap SystemCapability.Resourceschedule.Ffrt.Core
34  * @since 10
35  * @version 1.0
36  */
37 #ifndef FFRT_API_C_TYPE_DEF_H
38 #define FFRT_API_C_TYPE_DEF_H
39 #include <stdint.h>
40 #include <errno.h>
41 
42 #ifdef __cplusplus
43 #define FFRT_C_API  extern "C"
44 #else
45 #define FFRT_C_API
46 #endif
47 
48 /**
49  * @brief Enumerates the task QoS types.
50  *
51  */
52 typedef enum {
53     /** Inheritance. */
54     ffrt_qos_inherit = -1,
55     /** Background task. */
56     ffrt_qos_background,
57     /** Real-time tool. */
58     ffrt_qos_utility,
59     /** Default type. */
60     ffrt_qos_default,
61     /** User initiated. */
62     ffrt_qos_user_initiated,
63 } ffrt_qos_default_t;
64 typedef int ffrt_qos_t;
65 
66 typedef void(*ffrt_function_t)(void*);
67 
68 /**
69  * @brief Defines a task executor.
70  *
71  */
72 typedef struct {
73     /** Function used to execute a task. */
74     ffrt_function_t exec;
75     /** Function used to destroy a task. */
76     ffrt_function_t destroy;
77     /** Need to be set to 0. */
78     uint64_t reserve[2];
79 } ffrt_function_header_t;
80 
81 /**
82  * @brief Defines the storage size of multiple types of structs.
83  *
84  */
85 typedef enum {
86     /** Task attribute storage size. */
87     ffrt_task_attr_storage_size = 128,
88     /** Task executor storage size. */
89     ffrt_auto_managed_function_storage_size = 64 + sizeof(ffrt_function_header_t),
90     /* Mutex storage size. */
91     ffrt_mutex_storage_size = 64,
92     /** Condition variable storage size. */
93     ffrt_cond_storage_size = 64,
94     /** Queue storage size. */
95     ffrt_queue_attr_storage_size = 128,
96 } ffrt_storage_size_t;
97 
98 /**
99  * @brief Enumerates the task types.
100  *
101  */
102 typedef enum {
103     /** General task. */
104     ffrt_function_kind_general,
105     /** Queue task. */
106     ffrt_function_kind_queue
107 } ffrt_function_kind_t;
108 
109 /**
110  * @brief dependency type.
111  *
112  */
113 typedef enum {
114     /** Data dependency type. */
115     ffrt_dependence_data,
116     /** Task dependency type. */
117     ffrt_dependence_task,
118 } ffrt_dependence_type_t;
119 
120 /**
121  * @brief dependency data structure.
122  *
123  */
124 typedef struct {
125     /** Dependency type. */
126     ffrt_dependence_type_t type;
127     /** Dependency pointer. */
128     const void* ptr;
129 } ffrt_dependence_t;
130 
131 /**
132  * @brief Defines the dependency struct.
133  *
134  */
135 typedef struct {
136     /** Number of dependencies. */
137     uint32_t len;
138     /** Dependent data. */
139     const ffrt_dependence_t* items;
140 } ffrt_deps_t;
141 
142 typedef struct {
143     uint32_t storage[(ffrt_task_attr_storage_size + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
144 } ffrt_task_attr_t;
145 
146 typedef struct {
147     uint32_t storage[(ffrt_queue_attr_storage_size + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
148 } ffrt_queue_attr_t;
149 
150 typedef void* ffrt_task_handle_t;
151 
152 typedef enum {
153     ffrt_error = -1,
154     ffrt_success = 0,
155     ffrt_error_nomem = ENOMEM,
156     ffrt_error_timedout = ETIMEDOUT,
157     ffrt_error_busy = EBUSY,
158     ffrt_error_inval = EINVAL
159 } ffrt_error_t;
160 
161 typedef struct {
162     long storage;
163 } ffrt_condattr_t;
164 
165 typedef struct {
166     long storage;
167 } ffrt_mutexattr_t;
168 
169 typedef struct {
170     uint32_t storage[(ffrt_mutex_storage_size + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
171 } ffrt_mutex_t;
172 
173 typedef struct {
174     uint32_t storage[(ffrt_cond_storage_size + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
175 } ffrt_cond_t;
176 
177 #ifdef __cplusplus
178 namespace ffrt {
179 enum qos_default {
180     qos_inherit = ffrt_qos_inherit,
181     qos_background = ffrt_qos_background,
182     qos_utility = ffrt_qos_utility,
183     qos_default = ffrt_qos_default,
184     qos_user_initiated = ffrt_qos_user_initiated,
185 };
186 using qos = int;
187 }
188 #endif
189 #endif
190