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