Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
wolfcrypt/src/wc_port.c@0:d92f9d21154c, 2015-06-26 (annotated)
- Committer:
- wolfSSL
- Date:
- Fri Jun 26 00:39:20 2015 +0000
- Revision:
- 0:d92f9d21154c
wolfSSL 3.6.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wolfSSL | 0:d92f9d21154c | 1 | /* port.c |
wolfSSL | 0:d92f9d21154c | 2 | * |
wolfSSL | 0:d92f9d21154c | 3 | * Copyright (C) 2006-2015 wolfSSL Inc. |
wolfSSL | 0:d92f9d21154c | 4 | * |
wolfSSL | 0:d92f9d21154c | 5 | * This file is part of wolfSSL. (formerly known as CyaSSL) |
wolfSSL | 0:d92f9d21154c | 6 | * |
wolfSSL | 0:d92f9d21154c | 7 | * wolfSSL is free software; you can redistribute it and/or modify |
wolfSSL | 0:d92f9d21154c | 8 | * it under the terms of the GNU General Public License as published by |
wolfSSL | 0:d92f9d21154c | 9 | * the Free Software Foundation; either version 2 of the License, or |
wolfSSL | 0:d92f9d21154c | 10 | * (at your option) any later version. |
wolfSSL | 0:d92f9d21154c | 11 | * |
wolfSSL | 0:d92f9d21154c | 12 | * wolfSSL is distributed in the hope that it will be useful, |
wolfSSL | 0:d92f9d21154c | 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
wolfSSL | 0:d92f9d21154c | 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
wolfSSL | 0:d92f9d21154c | 15 | * GNU General Public License for more details. |
wolfSSL | 0:d92f9d21154c | 16 | * |
wolfSSL | 0:d92f9d21154c | 17 | * You should have received a copy of the GNU General Public License |
wolfSSL | 0:d92f9d21154c | 18 | * along with this program; if not, write to the Free Software |
wolfSSL | 0:d92f9d21154c | 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA |
wolfSSL | 0:d92f9d21154c | 20 | */ |
wolfSSL | 0:d92f9d21154c | 21 | |
wolfSSL | 0:d92f9d21154c | 22 | #ifdef HAVE_CONFIG_H |
wolfSSL | 0:d92f9d21154c | 23 | #include <config.h> |
wolfSSL | 0:d92f9d21154c | 24 | #endif |
wolfSSL | 0:d92f9d21154c | 25 | |
wolfSSL | 0:d92f9d21154c | 26 | #include <wolfssl/wolfcrypt/settings.h> |
wolfSSL | 0:d92f9d21154c | 27 | #include <wolfssl/wolfcrypt/types.h> |
wolfSSL | 0:d92f9d21154c | 28 | #include <wolfssl/wolfcrypt/error-crypt.h> |
wolfSSL | 0:d92f9d21154c | 29 | |
wolfSSL | 0:d92f9d21154c | 30 | |
wolfSSL | 0:d92f9d21154c | 31 | #ifdef _MSC_VER |
wolfSSL | 0:d92f9d21154c | 32 | /* 4996 warning to use MS extensions e.g., strcpy_s instead of strncpy */ |
wolfSSL | 0:d92f9d21154c | 33 | #pragma warning(disable: 4996) |
wolfSSL | 0:d92f9d21154c | 34 | #endif |
wolfSSL | 0:d92f9d21154c | 35 | |
wolfSSL | 0:d92f9d21154c | 36 | |
wolfSSL | 0:d92f9d21154c | 37 | |
wolfSSL | 0:d92f9d21154c | 38 | #ifdef SINGLE_THREADED |
wolfSSL | 0:d92f9d21154c | 39 | |
wolfSSL | 0:d92f9d21154c | 40 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 41 | { |
wolfSSL | 0:d92f9d21154c | 42 | (void)m; |
wolfSSL | 0:d92f9d21154c | 43 | return 0; |
wolfSSL | 0:d92f9d21154c | 44 | } |
wolfSSL | 0:d92f9d21154c | 45 | |
wolfSSL | 0:d92f9d21154c | 46 | |
wolfSSL | 0:d92f9d21154c | 47 | int FreeMutex(wolfSSL_Mutex *m) |
wolfSSL | 0:d92f9d21154c | 48 | { |
wolfSSL | 0:d92f9d21154c | 49 | (void)m; |
wolfSSL | 0:d92f9d21154c | 50 | return 0; |
wolfSSL | 0:d92f9d21154c | 51 | } |
wolfSSL | 0:d92f9d21154c | 52 | |
wolfSSL | 0:d92f9d21154c | 53 | |
wolfSSL | 0:d92f9d21154c | 54 | int LockMutex(wolfSSL_Mutex *m) |
wolfSSL | 0:d92f9d21154c | 55 | { |
wolfSSL | 0:d92f9d21154c | 56 | (void)m; |
wolfSSL | 0:d92f9d21154c | 57 | return 0; |
wolfSSL | 0:d92f9d21154c | 58 | } |
wolfSSL | 0:d92f9d21154c | 59 | |
wolfSSL | 0:d92f9d21154c | 60 | |
wolfSSL | 0:d92f9d21154c | 61 | int UnLockMutex(wolfSSL_Mutex *m) |
wolfSSL | 0:d92f9d21154c | 62 | { |
wolfSSL | 0:d92f9d21154c | 63 | (void)m; |
wolfSSL | 0:d92f9d21154c | 64 | return 0; |
wolfSSL | 0:d92f9d21154c | 65 | } |
wolfSSL | 0:d92f9d21154c | 66 | |
wolfSSL | 0:d92f9d21154c | 67 | #else /* MULTI_THREAD */ |
wolfSSL | 0:d92f9d21154c | 68 | |
wolfSSL | 0:d92f9d21154c | 69 | #if defined(FREERTOS) |
wolfSSL | 0:d92f9d21154c | 70 | |
wolfSSL | 0:d92f9d21154c | 71 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 72 | { |
wolfSSL | 0:d92f9d21154c | 73 | int iReturn; |
wolfSSL | 0:d92f9d21154c | 74 | |
wolfSSL | 0:d92f9d21154c | 75 | *m = ( wolfSSL_Mutex ) xSemaphoreCreateMutex(); |
wolfSSL | 0:d92f9d21154c | 76 | if( *m != NULL ) |
wolfSSL | 0:d92f9d21154c | 77 | iReturn = 0; |
wolfSSL | 0:d92f9d21154c | 78 | else |
wolfSSL | 0:d92f9d21154c | 79 | iReturn = BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 80 | |
wolfSSL | 0:d92f9d21154c | 81 | return iReturn; |
wolfSSL | 0:d92f9d21154c | 82 | } |
wolfSSL | 0:d92f9d21154c | 83 | |
wolfSSL | 0:d92f9d21154c | 84 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 85 | { |
wolfSSL | 0:d92f9d21154c | 86 | vSemaphoreDelete( *m ); |
wolfSSL | 0:d92f9d21154c | 87 | return 0; |
wolfSSL | 0:d92f9d21154c | 88 | } |
wolfSSL | 0:d92f9d21154c | 89 | |
wolfSSL | 0:d92f9d21154c | 90 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 91 | { |
wolfSSL | 0:d92f9d21154c | 92 | /* Assume an infinite block, or should there be zero block? */ |
wolfSSL | 0:d92f9d21154c | 93 | xSemaphoreTake( *m, portMAX_DELAY ); |
wolfSSL | 0:d92f9d21154c | 94 | return 0; |
wolfSSL | 0:d92f9d21154c | 95 | } |
wolfSSL | 0:d92f9d21154c | 96 | |
wolfSSL | 0:d92f9d21154c | 97 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 98 | { |
wolfSSL | 0:d92f9d21154c | 99 | xSemaphoreGive( *m ); |
wolfSSL | 0:d92f9d21154c | 100 | return 0; |
wolfSSL | 0:d92f9d21154c | 101 | } |
wolfSSL | 0:d92f9d21154c | 102 | |
wolfSSL | 0:d92f9d21154c | 103 | #elif defined(WOLFSSL_SAFERTOS) |
wolfSSL | 0:d92f9d21154c | 104 | |
wolfSSL | 0:d92f9d21154c | 105 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 106 | { |
wolfSSL | 0:d92f9d21154c | 107 | vSemaphoreCreateBinary(m->mutexBuffer, m->mutex); |
wolfSSL | 0:d92f9d21154c | 108 | if (m->mutex == NULL) |
wolfSSL | 0:d92f9d21154c | 109 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 110 | |
wolfSSL | 0:d92f9d21154c | 111 | return 0; |
wolfSSL | 0:d92f9d21154c | 112 | } |
wolfSSL | 0:d92f9d21154c | 113 | |
wolfSSL | 0:d92f9d21154c | 114 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 115 | { |
wolfSSL | 0:d92f9d21154c | 116 | (void)m; |
wolfSSL | 0:d92f9d21154c | 117 | return 0; |
wolfSSL | 0:d92f9d21154c | 118 | } |
wolfSSL | 0:d92f9d21154c | 119 | |
wolfSSL | 0:d92f9d21154c | 120 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 121 | { |
wolfSSL | 0:d92f9d21154c | 122 | /* Assume an infinite block */ |
wolfSSL | 0:d92f9d21154c | 123 | xSemaphoreTake(m->mutex, portMAX_DELAY); |
wolfSSL | 0:d92f9d21154c | 124 | return 0; |
wolfSSL | 0:d92f9d21154c | 125 | } |
wolfSSL | 0:d92f9d21154c | 126 | |
wolfSSL | 0:d92f9d21154c | 127 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 128 | { |
wolfSSL | 0:d92f9d21154c | 129 | xSemaphoreGive(m->mutex); |
wolfSSL | 0:d92f9d21154c | 130 | return 0; |
wolfSSL | 0:d92f9d21154c | 131 | } |
wolfSSL | 0:d92f9d21154c | 132 | |
wolfSSL | 0:d92f9d21154c | 133 | |
wolfSSL | 0:d92f9d21154c | 134 | #elif defined(USE_WINDOWS_API) |
wolfSSL | 0:d92f9d21154c | 135 | |
wolfSSL | 0:d92f9d21154c | 136 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 137 | { |
wolfSSL | 0:d92f9d21154c | 138 | InitializeCriticalSection(m); |
wolfSSL | 0:d92f9d21154c | 139 | return 0; |
wolfSSL | 0:d92f9d21154c | 140 | } |
wolfSSL | 0:d92f9d21154c | 141 | |
wolfSSL | 0:d92f9d21154c | 142 | |
wolfSSL | 0:d92f9d21154c | 143 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 144 | { |
wolfSSL | 0:d92f9d21154c | 145 | DeleteCriticalSection(m); |
wolfSSL | 0:d92f9d21154c | 146 | return 0; |
wolfSSL | 0:d92f9d21154c | 147 | } |
wolfSSL | 0:d92f9d21154c | 148 | |
wolfSSL | 0:d92f9d21154c | 149 | |
wolfSSL | 0:d92f9d21154c | 150 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 151 | { |
wolfSSL | 0:d92f9d21154c | 152 | EnterCriticalSection(m); |
wolfSSL | 0:d92f9d21154c | 153 | return 0; |
wolfSSL | 0:d92f9d21154c | 154 | } |
wolfSSL | 0:d92f9d21154c | 155 | |
wolfSSL | 0:d92f9d21154c | 156 | |
wolfSSL | 0:d92f9d21154c | 157 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 158 | { |
wolfSSL | 0:d92f9d21154c | 159 | LeaveCriticalSection(m); |
wolfSSL | 0:d92f9d21154c | 160 | return 0; |
wolfSSL | 0:d92f9d21154c | 161 | } |
wolfSSL | 0:d92f9d21154c | 162 | |
wolfSSL | 0:d92f9d21154c | 163 | #elif defined(WOLFSSL_PTHREADS) |
wolfSSL | 0:d92f9d21154c | 164 | |
wolfSSL | 0:d92f9d21154c | 165 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 166 | { |
wolfSSL | 0:d92f9d21154c | 167 | if (pthread_mutex_init(m, 0) == 0) |
wolfSSL | 0:d92f9d21154c | 168 | return 0; |
wolfSSL | 0:d92f9d21154c | 169 | else |
wolfSSL | 0:d92f9d21154c | 170 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 171 | } |
wolfSSL | 0:d92f9d21154c | 172 | |
wolfSSL | 0:d92f9d21154c | 173 | |
wolfSSL | 0:d92f9d21154c | 174 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 175 | { |
wolfSSL | 0:d92f9d21154c | 176 | if (pthread_mutex_destroy(m) == 0) |
wolfSSL | 0:d92f9d21154c | 177 | return 0; |
wolfSSL | 0:d92f9d21154c | 178 | else |
wolfSSL | 0:d92f9d21154c | 179 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 180 | } |
wolfSSL | 0:d92f9d21154c | 181 | |
wolfSSL | 0:d92f9d21154c | 182 | |
wolfSSL | 0:d92f9d21154c | 183 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 184 | { |
wolfSSL | 0:d92f9d21154c | 185 | if (pthread_mutex_lock(m) == 0) |
wolfSSL | 0:d92f9d21154c | 186 | return 0; |
wolfSSL | 0:d92f9d21154c | 187 | else |
wolfSSL | 0:d92f9d21154c | 188 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 189 | } |
wolfSSL | 0:d92f9d21154c | 190 | |
wolfSSL | 0:d92f9d21154c | 191 | |
wolfSSL | 0:d92f9d21154c | 192 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 193 | { |
wolfSSL | 0:d92f9d21154c | 194 | if (pthread_mutex_unlock(m) == 0) |
wolfSSL | 0:d92f9d21154c | 195 | return 0; |
wolfSSL | 0:d92f9d21154c | 196 | else |
wolfSSL | 0:d92f9d21154c | 197 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 198 | } |
wolfSSL | 0:d92f9d21154c | 199 | |
wolfSSL | 0:d92f9d21154c | 200 | #elif defined(THREADX) |
wolfSSL | 0:d92f9d21154c | 201 | |
wolfSSL | 0:d92f9d21154c | 202 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 203 | { |
wolfSSL | 0:d92f9d21154c | 204 | if (tx_mutex_create(m, "wolfSSL Mutex", TX_NO_INHERIT) == 0) |
wolfSSL | 0:d92f9d21154c | 205 | return 0; |
wolfSSL | 0:d92f9d21154c | 206 | else |
wolfSSL | 0:d92f9d21154c | 207 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 208 | } |
wolfSSL | 0:d92f9d21154c | 209 | |
wolfSSL | 0:d92f9d21154c | 210 | |
wolfSSL | 0:d92f9d21154c | 211 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 212 | { |
wolfSSL | 0:d92f9d21154c | 213 | if (tx_mutex_delete(m) == 0) |
wolfSSL | 0:d92f9d21154c | 214 | return 0; |
wolfSSL | 0:d92f9d21154c | 215 | else |
wolfSSL | 0:d92f9d21154c | 216 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 217 | } |
wolfSSL | 0:d92f9d21154c | 218 | |
wolfSSL | 0:d92f9d21154c | 219 | |
wolfSSL | 0:d92f9d21154c | 220 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 221 | { |
wolfSSL | 0:d92f9d21154c | 222 | if (tx_mutex_get(m, TX_WAIT_FOREVER) == 0) |
wolfSSL | 0:d92f9d21154c | 223 | return 0; |
wolfSSL | 0:d92f9d21154c | 224 | else |
wolfSSL | 0:d92f9d21154c | 225 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 226 | } |
wolfSSL | 0:d92f9d21154c | 227 | |
wolfSSL | 0:d92f9d21154c | 228 | |
wolfSSL | 0:d92f9d21154c | 229 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 230 | { |
wolfSSL | 0:d92f9d21154c | 231 | if (tx_mutex_put(m) == 0) |
wolfSSL | 0:d92f9d21154c | 232 | return 0; |
wolfSSL | 0:d92f9d21154c | 233 | else |
wolfSSL | 0:d92f9d21154c | 234 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 235 | } |
wolfSSL | 0:d92f9d21154c | 236 | |
wolfSSL | 0:d92f9d21154c | 237 | #elif defined(MICRIUM) |
wolfSSL | 0:d92f9d21154c | 238 | |
wolfSSL | 0:d92f9d21154c | 239 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 240 | { |
wolfSSL | 0:d92f9d21154c | 241 | #if (NET_SECURE_MGR_CFG_EN == DEF_ENABLED) |
wolfSSL | 0:d92f9d21154c | 242 | if (NetSecure_OS_MutexCreate(m) == 0) |
wolfSSL | 0:d92f9d21154c | 243 | return 0; |
wolfSSL | 0:d92f9d21154c | 244 | else |
wolfSSL | 0:d92f9d21154c | 245 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 246 | #else |
wolfSSL | 0:d92f9d21154c | 247 | return 0; |
wolfSSL | 0:d92f9d21154c | 248 | #endif |
wolfSSL | 0:d92f9d21154c | 249 | } |
wolfSSL | 0:d92f9d21154c | 250 | |
wolfSSL | 0:d92f9d21154c | 251 | |
wolfSSL | 0:d92f9d21154c | 252 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 253 | { |
wolfSSL | 0:d92f9d21154c | 254 | #if (NET_SECURE_MGR_CFG_EN == DEF_ENABLED) |
wolfSSL | 0:d92f9d21154c | 255 | if (NetSecure_OS_FreeMutex(m) == 0) |
wolfSSL | 0:d92f9d21154c | 256 | return 0; |
wolfSSL | 0:d92f9d21154c | 257 | else |
wolfSSL | 0:d92f9d21154c | 258 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 259 | #else |
wolfSSL | 0:d92f9d21154c | 260 | return 0; |
wolfSSL | 0:d92f9d21154c | 261 | #endif |
wolfSSL | 0:d92f9d21154c | 262 | } |
wolfSSL | 0:d92f9d21154c | 263 | |
wolfSSL | 0:d92f9d21154c | 264 | |
wolfSSL | 0:d92f9d21154c | 265 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 266 | { |
wolfSSL | 0:d92f9d21154c | 267 | #if (NET_SECURE_MGR_CFG_EN == DEF_ENABLED) |
wolfSSL | 0:d92f9d21154c | 268 | if (NetSecure_OS_LockMutex(m) == 0) |
wolfSSL | 0:d92f9d21154c | 269 | return 0; |
wolfSSL | 0:d92f9d21154c | 270 | else |
wolfSSL | 0:d92f9d21154c | 271 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 272 | #else |
wolfSSL | 0:d92f9d21154c | 273 | return 0; |
wolfSSL | 0:d92f9d21154c | 274 | #endif |
wolfSSL | 0:d92f9d21154c | 275 | } |
wolfSSL | 0:d92f9d21154c | 276 | |
wolfSSL | 0:d92f9d21154c | 277 | |
wolfSSL | 0:d92f9d21154c | 278 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 279 | { |
wolfSSL | 0:d92f9d21154c | 280 | #if (NET_SECURE_MGR_CFG_EN == DEF_ENABLED) |
wolfSSL | 0:d92f9d21154c | 281 | if (NetSecure_OS_UnLockMutex(m) == 0) |
wolfSSL | 0:d92f9d21154c | 282 | return 0; |
wolfSSL | 0:d92f9d21154c | 283 | else |
wolfSSL | 0:d92f9d21154c | 284 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 285 | #else |
wolfSSL | 0:d92f9d21154c | 286 | return 0; |
wolfSSL | 0:d92f9d21154c | 287 | #endif |
wolfSSL | 0:d92f9d21154c | 288 | |
wolfSSL | 0:d92f9d21154c | 289 | } |
wolfSSL | 0:d92f9d21154c | 290 | |
wolfSSL | 0:d92f9d21154c | 291 | #elif defined(EBSNET) |
wolfSSL | 0:d92f9d21154c | 292 | |
wolfSSL | 0:d92f9d21154c | 293 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 294 | { |
wolfSSL | 0:d92f9d21154c | 295 | if (rtp_sig_mutex_alloc(m, "wolfSSL Mutex") == -1) |
wolfSSL | 0:d92f9d21154c | 296 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 297 | else |
wolfSSL | 0:d92f9d21154c | 298 | return 0; |
wolfSSL | 0:d92f9d21154c | 299 | } |
wolfSSL | 0:d92f9d21154c | 300 | |
wolfSSL | 0:d92f9d21154c | 301 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 302 | { |
wolfSSL | 0:d92f9d21154c | 303 | rtp_sig_mutex_free(*m); |
wolfSSL | 0:d92f9d21154c | 304 | return 0; |
wolfSSL | 0:d92f9d21154c | 305 | } |
wolfSSL | 0:d92f9d21154c | 306 | |
wolfSSL | 0:d92f9d21154c | 307 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 308 | { |
wolfSSL | 0:d92f9d21154c | 309 | if (rtp_sig_mutex_claim_timed(*m, RTIP_INF) == 0) |
wolfSSL | 0:d92f9d21154c | 310 | return 0; |
wolfSSL | 0:d92f9d21154c | 311 | else |
wolfSSL | 0:d92f9d21154c | 312 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 313 | } |
wolfSSL | 0:d92f9d21154c | 314 | |
wolfSSL | 0:d92f9d21154c | 315 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 316 | { |
wolfSSL | 0:d92f9d21154c | 317 | rtp_sig_mutex_release(*m); |
wolfSSL | 0:d92f9d21154c | 318 | return 0; |
wolfSSL | 0:d92f9d21154c | 319 | } |
wolfSSL | 0:d92f9d21154c | 320 | |
wolfSSL | 0:d92f9d21154c | 321 | #elif defined(FREESCALE_MQX) |
wolfSSL | 0:d92f9d21154c | 322 | |
wolfSSL | 0:d92f9d21154c | 323 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 324 | { |
wolfSSL | 0:d92f9d21154c | 325 | if (_mutex_init(m, NULL) == MQX_EOK) |
wolfSSL | 0:d92f9d21154c | 326 | return 0; |
wolfSSL | 0:d92f9d21154c | 327 | else |
wolfSSL | 0:d92f9d21154c | 328 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 329 | } |
wolfSSL | 0:d92f9d21154c | 330 | |
wolfSSL | 0:d92f9d21154c | 331 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 332 | { |
wolfSSL | 0:d92f9d21154c | 333 | if (_mutex_destroy(m) == MQX_EOK) |
wolfSSL | 0:d92f9d21154c | 334 | return 0; |
wolfSSL | 0:d92f9d21154c | 335 | else |
wolfSSL | 0:d92f9d21154c | 336 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 337 | } |
wolfSSL | 0:d92f9d21154c | 338 | |
wolfSSL | 0:d92f9d21154c | 339 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 340 | { |
wolfSSL | 0:d92f9d21154c | 341 | if (_mutex_lock(m) == MQX_EOK) |
wolfSSL | 0:d92f9d21154c | 342 | return 0; |
wolfSSL | 0:d92f9d21154c | 343 | else |
wolfSSL | 0:d92f9d21154c | 344 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 345 | } |
wolfSSL | 0:d92f9d21154c | 346 | |
wolfSSL | 0:d92f9d21154c | 347 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 348 | { |
wolfSSL | 0:d92f9d21154c | 349 | if (_mutex_unlock(m) == MQX_EOK) |
wolfSSL | 0:d92f9d21154c | 350 | return 0; |
wolfSSL | 0:d92f9d21154c | 351 | else |
wolfSSL | 0:d92f9d21154c | 352 | return BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 353 | } |
wolfSSL | 0:d92f9d21154c | 354 | |
wolfSSL | 0:d92f9d21154c | 355 | #elif defined (WOLFSSL_TIRTOS) |
wolfSSL | 0:d92f9d21154c | 356 | |
wolfSSL | 0:d92f9d21154c | 357 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 358 | { |
wolfSSL | 0:d92f9d21154c | 359 | Semaphore_Params params; |
wolfSSL | 0:d92f9d21154c | 360 | |
wolfSSL | 0:d92f9d21154c | 361 | Semaphore_Params_init(¶ms); |
wolfSSL | 0:d92f9d21154c | 362 | params.mode = Semaphore_Mode_BINARY; |
wolfSSL | 0:d92f9d21154c | 363 | |
wolfSSL | 0:d92f9d21154c | 364 | *m = Semaphore_create(1, ¶ms, NULL); |
wolfSSL | 0:d92f9d21154c | 365 | |
wolfSSL | 0:d92f9d21154c | 366 | return 0; |
wolfSSL | 0:d92f9d21154c | 367 | } |
wolfSSL | 0:d92f9d21154c | 368 | |
wolfSSL | 0:d92f9d21154c | 369 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 370 | { |
wolfSSL | 0:d92f9d21154c | 371 | Semaphore_delete(m); |
wolfSSL | 0:d92f9d21154c | 372 | |
wolfSSL | 0:d92f9d21154c | 373 | return 0; |
wolfSSL | 0:d92f9d21154c | 374 | } |
wolfSSL | 0:d92f9d21154c | 375 | |
wolfSSL | 0:d92f9d21154c | 376 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 377 | { |
wolfSSL | 0:d92f9d21154c | 378 | Semaphore_pend(*m, BIOS_WAIT_FOREVER); |
wolfSSL | 0:d92f9d21154c | 379 | |
wolfSSL | 0:d92f9d21154c | 380 | return 0; |
wolfSSL | 0:d92f9d21154c | 381 | } |
wolfSSL | 0:d92f9d21154c | 382 | |
wolfSSL | 0:d92f9d21154c | 383 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 384 | { |
wolfSSL | 0:d92f9d21154c | 385 | Semaphore_post(*m); |
wolfSSL | 0:d92f9d21154c | 386 | |
wolfSSL | 0:d92f9d21154c | 387 | return 0; |
wolfSSL | 0:d92f9d21154c | 388 | } |
wolfSSL | 0:d92f9d21154c | 389 | |
wolfSSL | 0:d92f9d21154c | 390 | #elif defined(WOLFSSL_uITRON4) |
wolfSSL | 0:d92f9d21154c | 391 | #include "kernel.h" |
wolfSSL | 0:d92f9d21154c | 392 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 393 | { |
wolfSSL | 0:d92f9d21154c | 394 | int iReturn; |
wolfSSL | 0:d92f9d21154c | 395 | m->sem.sematr = TA_TFIFO ; |
wolfSSL | 0:d92f9d21154c | 396 | m->sem.isemcnt = 1 ; |
wolfSSL | 0:d92f9d21154c | 397 | m->sem.maxsem = 1 ; |
wolfSSL | 0:d92f9d21154c | 398 | m->sem.name = NULL ; |
wolfSSL | 0:d92f9d21154c | 399 | |
wolfSSL | 0:d92f9d21154c | 400 | m->id = acre_sem(&m->sem); |
wolfSSL | 0:d92f9d21154c | 401 | if( m->id != NULL ) |
wolfSSL | 0:d92f9d21154c | 402 | iReturn = 0; |
wolfSSL | 0:d92f9d21154c | 403 | else |
wolfSSL | 0:d92f9d21154c | 404 | iReturn = BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 405 | |
wolfSSL | 0:d92f9d21154c | 406 | return iReturn; |
wolfSSL | 0:d92f9d21154c | 407 | } |
wolfSSL | 0:d92f9d21154c | 408 | |
wolfSSL | 0:d92f9d21154c | 409 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 410 | { |
wolfSSL | 0:d92f9d21154c | 411 | del_sem( m->id ); |
wolfSSL | 0:d92f9d21154c | 412 | return 0; |
wolfSSL | 0:d92f9d21154c | 413 | } |
wolfSSL | 0:d92f9d21154c | 414 | |
wolfSSL | 0:d92f9d21154c | 415 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 416 | { |
wolfSSL | 0:d92f9d21154c | 417 | wai_sem(m->id); |
wolfSSL | 0:d92f9d21154c | 418 | return 0; |
wolfSSL | 0:d92f9d21154c | 419 | } |
wolfSSL | 0:d92f9d21154c | 420 | |
wolfSSL | 0:d92f9d21154c | 421 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 422 | { |
wolfSSL | 0:d92f9d21154c | 423 | sig_sem(m->id); |
wolfSSL | 0:d92f9d21154c | 424 | return 0; |
wolfSSL | 0:d92f9d21154c | 425 | } |
wolfSSL | 0:d92f9d21154c | 426 | |
wolfSSL | 0:d92f9d21154c | 427 | /**** uITRON malloc/free ***/ |
wolfSSL | 0:d92f9d21154c | 428 | static ID ID_wolfssl_MPOOL = 0 ; |
wolfSSL | 0:d92f9d21154c | 429 | static T_CMPL wolfssl_MPOOL = {TA_TFIFO, 0, NULL, "wolfSSL_MPOOL"}; |
wolfSSL | 0:d92f9d21154c | 430 | |
wolfSSL | 0:d92f9d21154c | 431 | int uITRON4_minit(size_t poolsz) { |
wolfSSL | 0:d92f9d21154c | 432 | ER ercd; |
wolfSSL | 0:d92f9d21154c | 433 | wolfssl_MPOOL.mplsz = poolsz ; |
wolfSSL | 0:d92f9d21154c | 434 | ercd = acre_mpl(&wolfssl_MPOOL); |
wolfSSL | 0:d92f9d21154c | 435 | if (ercd > 0) { |
wolfSSL | 0:d92f9d21154c | 436 | ID_wolfssl_MPOOL = ercd; |
wolfSSL | 0:d92f9d21154c | 437 | return 0; |
wolfSSL | 0:d92f9d21154c | 438 | } else { |
wolfSSL | 0:d92f9d21154c | 439 | return -1; |
wolfSSL | 0:d92f9d21154c | 440 | } |
wolfSSL | 0:d92f9d21154c | 441 | } |
wolfSSL | 0:d92f9d21154c | 442 | |
wolfSSL | 0:d92f9d21154c | 443 | void *uITRON4_malloc(size_t sz) { |
wolfSSL | 0:d92f9d21154c | 444 | ER ercd; |
wolfSSL | 0:d92f9d21154c | 445 | void *p ; |
wolfSSL | 0:d92f9d21154c | 446 | ercd = get_mpl(ID_wolfssl_MPOOL, sz, (VP)&p); |
wolfSSL | 0:d92f9d21154c | 447 | if (ercd == E_OK) { |
wolfSSL | 0:d92f9d21154c | 448 | return p; |
wolfSSL | 0:d92f9d21154c | 449 | } else { |
wolfSSL | 0:d92f9d21154c | 450 | return 0 ; |
wolfSSL | 0:d92f9d21154c | 451 | } |
wolfSSL | 0:d92f9d21154c | 452 | } |
wolfSSL | 0:d92f9d21154c | 453 | |
wolfSSL | 0:d92f9d21154c | 454 | void *uITRON4_realloc(void *p, size_t sz) { |
wolfSSL | 0:d92f9d21154c | 455 | ER ercd; |
wolfSSL | 0:d92f9d21154c | 456 | void *newp ; |
wolfSSL | 0:d92f9d21154c | 457 | if(p) { |
wolfSSL | 0:d92f9d21154c | 458 | ercd = get_mpl(ID_wolfssl_MPOOL, sz, (VP)&newp); |
wolfSSL | 0:d92f9d21154c | 459 | if (ercd == E_OK) { |
wolfSSL | 0:d92f9d21154c | 460 | memcpy(newp, p, sz) ; |
wolfSSL | 0:d92f9d21154c | 461 | ercd = rel_mpl(ID_wolfssl_MPOOL, (VP)p); |
wolfSSL | 0:d92f9d21154c | 462 | if (ercd == E_OK) { |
wolfSSL | 0:d92f9d21154c | 463 | return newp; |
wolfSSL | 0:d92f9d21154c | 464 | } |
wolfSSL | 0:d92f9d21154c | 465 | } |
wolfSSL | 0:d92f9d21154c | 466 | } |
wolfSSL | 0:d92f9d21154c | 467 | return 0 ; |
wolfSSL | 0:d92f9d21154c | 468 | } |
wolfSSL | 0:d92f9d21154c | 469 | |
wolfSSL | 0:d92f9d21154c | 470 | void uITRON4_free(void *p) { |
wolfSSL | 0:d92f9d21154c | 471 | ER ercd; |
wolfSSL | 0:d92f9d21154c | 472 | ercd = rel_mpl(ID_wolfssl_MPOOL, (VP)p); |
wolfSSL | 0:d92f9d21154c | 473 | if (ercd == E_OK) { |
wolfSSL | 0:d92f9d21154c | 474 | return ; |
wolfSSL | 0:d92f9d21154c | 475 | } else { |
wolfSSL | 0:d92f9d21154c | 476 | return ; |
wolfSSL | 0:d92f9d21154c | 477 | } |
wolfSSL | 0:d92f9d21154c | 478 | } |
wolfSSL | 0:d92f9d21154c | 479 | |
wolfSSL | 0:d92f9d21154c | 480 | #elif defined(WOLFSSL_uTKERNEL2) |
wolfSSL | 0:d92f9d21154c | 481 | #include "tk/tkernel.h" |
wolfSSL | 0:d92f9d21154c | 482 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 483 | { |
wolfSSL | 0:d92f9d21154c | 484 | int iReturn; |
wolfSSL | 0:d92f9d21154c | 485 | m->sem.sematr = TA_TFIFO ; |
wolfSSL | 0:d92f9d21154c | 486 | m->sem.isemcnt = 1 ; |
wolfSSL | 0:d92f9d21154c | 487 | m->sem.maxsem = 1 ; |
wolfSSL | 0:d92f9d21154c | 488 | |
wolfSSL | 0:d92f9d21154c | 489 | m->id = tk_cre_sem(&m->sem); |
wolfSSL | 0:d92f9d21154c | 490 | if( m->id != NULL ) |
wolfSSL | 0:d92f9d21154c | 491 | iReturn = 0; |
wolfSSL | 0:d92f9d21154c | 492 | else |
wolfSSL | 0:d92f9d21154c | 493 | iReturn = BAD_MUTEX_E; |
wolfSSL | 0:d92f9d21154c | 494 | |
wolfSSL | 0:d92f9d21154c | 495 | return iReturn; |
wolfSSL | 0:d92f9d21154c | 496 | } |
wolfSSL | 0:d92f9d21154c | 497 | |
wolfSSL | 0:d92f9d21154c | 498 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 499 | { |
wolfSSL | 0:d92f9d21154c | 500 | tk_del_sem( m->id ); |
wolfSSL | 0:d92f9d21154c | 501 | return 0; |
wolfSSL | 0:d92f9d21154c | 502 | } |
wolfSSL | 0:d92f9d21154c | 503 | |
wolfSSL | 0:d92f9d21154c | 504 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 505 | { |
wolfSSL | 0:d92f9d21154c | 506 | tk_wai_sem(m->id, 1, TMO_FEVR); |
wolfSSL | 0:d92f9d21154c | 507 | return 0; |
wolfSSL | 0:d92f9d21154c | 508 | } |
wolfSSL | 0:d92f9d21154c | 509 | |
wolfSSL | 0:d92f9d21154c | 510 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 511 | { |
wolfSSL | 0:d92f9d21154c | 512 | tk_sig_sem(m->id, 1); |
wolfSSL | 0:d92f9d21154c | 513 | return 0; |
wolfSSL | 0:d92f9d21154c | 514 | } |
wolfSSL | 0:d92f9d21154c | 515 | |
wolfSSL | 0:d92f9d21154c | 516 | /**** uT-Kernel malloc/free ***/ |
wolfSSL | 0:d92f9d21154c | 517 | static ID ID_wolfssl_MPOOL = 0 ; |
wolfSSL | 0:d92f9d21154c | 518 | static T_CMPL wolfssl_MPOOL = |
wolfSSL | 0:d92f9d21154c | 519 | {(void *)NULL, |
wolfSSL | 0:d92f9d21154c | 520 | TA_TFIFO , 0, "wolfSSL_MPOOL"}; |
wolfSSL | 0:d92f9d21154c | 521 | |
wolfSSL | 0:d92f9d21154c | 522 | int uTKernel_init_mpool(unsigned int sz) { |
wolfSSL | 0:d92f9d21154c | 523 | ER ercd; |
wolfSSL | 0:d92f9d21154c | 524 | wolfssl_MPOOL.mplsz = sz ; |
wolfSSL | 0:d92f9d21154c | 525 | ercd = tk_cre_mpl(&wolfssl_MPOOL); |
wolfSSL | 0:d92f9d21154c | 526 | if (ercd > 0) { |
wolfSSL | 0:d92f9d21154c | 527 | ID_wolfssl_MPOOL = ercd; |
wolfSSL | 0:d92f9d21154c | 528 | return 0; |
wolfSSL | 0:d92f9d21154c | 529 | } else { |
wolfSSL | 0:d92f9d21154c | 530 | return -1; |
wolfSSL | 0:d92f9d21154c | 531 | } |
wolfSSL | 0:d92f9d21154c | 532 | } |
wolfSSL | 0:d92f9d21154c | 533 | |
wolfSSL | 0:d92f9d21154c | 534 | void *uTKernel_malloc(unsigned int sz) { |
wolfSSL | 0:d92f9d21154c | 535 | ER ercd; |
wolfSSL | 0:d92f9d21154c | 536 | void *p ; |
wolfSSL | 0:d92f9d21154c | 537 | ercd = tk_get_mpl(ID_wolfssl_MPOOL, sz, (VP)&p, TMO_FEVR); |
wolfSSL | 0:d92f9d21154c | 538 | if (ercd == E_OK) { |
wolfSSL | 0:d92f9d21154c | 539 | return p; |
wolfSSL | 0:d92f9d21154c | 540 | } else { |
wolfSSL | 0:d92f9d21154c | 541 | return 0 ; |
wolfSSL | 0:d92f9d21154c | 542 | } |
wolfSSL | 0:d92f9d21154c | 543 | } |
wolfSSL | 0:d92f9d21154c | 544 | |
wolfSSL | 0:d92f9d21154c | 545 | void *uTKernel_realloc(void *p, unsigned int sz) { |
wolfSSL | 0:d92f9d21154c | 546 | ER ercd; |
wolfSSL | 0:d92f9d21154c | 547 | void *newp ; |
wolfSSL | 0:d92f9d21154c | 548 | if(p) { |
wolfSSL | 0:d92f9d21154c | 549 | ercd = tk_get_mpl(ID_wolfssl_MPOOL, sz, (VP)&newp, TMO_FEVR); |
wolfSSL | 0:d92f9d21154c | 550 | if (ercd == E_OK) { |
wolfSSL | 0:d92f9d21154c | 551 | memcpy(newp, p, sz) ; |
wolfSSL | 0:d92f9d21154c | 552 | ercd = tk_rel_mpl(ID_wolfssl_MPOOL, (VP)p); |
wolfSSL | 0:d92f9d21154c | 553 | if (ercd == E_OK) { |
wolfSSL | 0:d92f9d21154c | 554 | return newp; |
wolfSSL | 0:d92f9d21154c | 555 | } |
wolfSSL | 0:d92f9d21154c | 556 | } |
wolfSSL | 0:d92f9d21154c | 557 | } |
wolfSSL | 0:d92f9d21154c | 558 | return 0 ; |
wolfSSL | 0:d92f9d21154c | 559 | } |
wolfSSL | 0:d92f9d21154c | 560 | |
wolfSSL | 0:d92f9d21154c | 561 | void uTKernel_free(void *p) { |
wolfSSL | 0:d92f9d21154c | 562 | ER ercd; |
wolfSSL | 0:d92f9d21154c | 563 | ercd = tk_rel_mpl(ID_wolfssl_MPOOL, (VP)p); |
wolfSSL | 0:d92f9d21154c | 564 | if (ercd == E_OK) { |
wolfSSL | 0:d92f9d21154c | 565 | return ; |
wolfSSL | 0:d92f9d21154c | 566 | } else { |
wolfSSL | 0:d92f9d21154c | 567 | return ; |
wolfSSL | 0:d92f9d21154c | 568 | } |
wolfSSL | 0:d92f9d21154c | 569 | } |
wolfSSL | 0:d92f9d21154c | 570 | |
wolfSSL | 0:d92f9d21154c | 571 | #elif defined(WOLFSSL_MDK_ARM)|| defined(WOLFSSL_CMSIS_RTOS) |
wolfSSL | 0:d92f9d21154c | 572 | |
wolfSSL | 0:d92f9d21154c | 573 | #if defined(WOLFSSL_CMSIS_RTOS) |
wolfSSL | 0:d92f9d21154c | 574 | #include "cmsis_os.h" |
wolfSSL | 0:d92f9d21154c | 575 | #define CMSIS_NMUTEX 10 |
wolfSSL | 0:d92f9d21154c | 576 | osMutexDef(wolfSSL_mt0) ; osMutexDef(wolfSSL_mt1) ; osMutexDef(wolfSSL_mt2) ; |
wolfSSL | 0:d92f9d21154c | 577 | osMutexDef(wolfSSL_mt3) ; osMutexDef(wolfSSL_mt4) ; osMutexDef(wolfSSL_mt5) ; |
wolfSSL | 0:d92f9d21154c | 578 | osMutexDef(wolfSSL_mt6) ; osMutexDef(wolfSSL_mt7) ; osMutexDef(wolfSSL_mt8) ; |
wolfSSL | 0:d92f9d21154c | 579 | osMutexDef(wolfSSL_mt9) ; |
wolfSSL | 0:d92f9d21154c | 580 | |
wolfSSL | 0:d92f9d21154c | 581 | static const osMutexDef_t *CMSIS_mutex[] = { osMutex(wolfSSL_mt0), |
wolfSSL | 0:d92f9d21154c | 582 | osMutex(wolfSSL_mt1), osMutex(wolfSSL_mt2), osMutex(wolfSSL_mt3), |
wolfSSL | 0:d92f9d21154c | 583 | osMutex(wolfSSL_mt4), osMutex(wolfSSL_mt5), osMutex(wolfSSL_mt6), |
wolfSSL | 0:d92f9d21154c | 584 | osMutex(wolfSSL_mt7), osMutex(wolfSSL_mt8), osMutex(wolfSSL_mt9) } ; |
wolfSSL | 0:d92f9d21154c | 585 | |
wolfSSL | 0:d92f9d21154c | 586 | static osMutexId CMSIS_mutexID[CMSIS_NMUTEX] = {0} ; |
wolfSSL | 0:d92f9d21154c | 587 | |
wolfSSL | 0:d92f9d21154c | 588 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 589 | { |
wolfSSL | 0:d92f9d21154c | 590 | int i ; |
wolfSSL | 0:d92f9d21154c | 591 | for (i=0; i<CMSIS_NMUTEX; i++) { |
wolfSSL | 0:d92f9d21154c | 592 | if(CMSIS_mutexID[i] == 0) { |
wolfSSL | 0:d92f9d21154c | 593 | CMSIS_mutexID[i] = osMutexCreate(CMSIS_mutex[i]) ; |
wolfSSL | 0:d92f9d21154c | 594 | (*m) = CMSIS_mutexID[i] ; |
wolfSSL | 0:d92f9d21154c | 595 | return 0 ; |
wolfSSL | 0:d92f9d21154c | 596 | } |
wolfSSL | 0:d92f9d21154c | 597 | } |
wolfSSL | 0:d92f9d21154c | 598 | return -1 ; |
wolfSSL | 0:d92f9d21154c | 599 | } |
wolfSSL | 0:d92f9d21154c | 600 | |
wolfSSL | 0:d92f9d21154c | 601 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 602 | { |
wolfSSL | 0:d92f9d21154c | 603 | int i ; |
wolfSSL | 0:d92f9d21154c | 604 | osMutexDelete (*m) ; |
wolfSSL | 0:d92f9d21154c | 605 | for (i=0; i<CMSIS_NMUTEX; i++) { |
wolfSSL | 0:d92f9d21154c | 606 | if(CMSIS_mutexID[i] == (*m)) { |
wolfSSL | 0:d92f9d21154c | 607 | CMSIS_mutexID[i] = 0 ; |
wolfSSL | 0:d92f9d21154c | 608 | return(0) ; |
wolfSSL | 0:d92f9d21154c | 609 | } |
wolfSSL | 0:d92f9d21154c | 610 | } |
wolfSSL | 0:d92f9d21154c | 611 | return(-1) ; |
wolfSSL | 0:d92f9d21154c | 612 | } |
wolfSSL | 0:d92f9d21154c | 613 | |
wolfSSL | 0:d92f9d21154c | 614 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 615 | { |
wolfSSL | 0:d92f9d21154c | 616 | osMutexWait(*m, osWaitForever) ; |
wolfSSL | 0:d92f9d21154c | 617 | return(0) ; |
wolfSSL | 0:d92f9d21154c | 618 | } |
wolfSSL | 0:d92f9d21154c | 619 | |
wolfSSL | 0:d92f9d21154c | 620 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 621 | { |
wolfSSL | 0:d92f9d21154c | 622 | osMutexRelease (*m); |
wolfSSL | 0:d92f9d21154c | 623 | return 0; |
wolfSSL | 0:d92f9d21154c | 624 | } |
wolfSSL | 0:d92f9d21154c | 625 | #else |
wolfSSL | 0:d92f9d21154c | 626 | int InitMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 627 | { |
wolfSSL | 0:d92f9d21154c | 628 | os_mut_init (m); |
wolfSSL | 0:d92f9d21154c | 629 | return 0; |
wolfSSL | 0:d92f9d21154c | 630 | } |
wolfSSL | 0:d92f9d21154c | 631 | |
wolfSSL | 0:d92f9d21154c | 632 | int FreeMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 633 | { |
wolfSSL | 0:d92f9d21154c | 634 | return(0) ; |
wolfSSL | 0:d92f9d21154c | 635 | } |
wolfSSL | 0:d92f9d21154c | 636 | |
wolfSSL | 0:d92f9d21154c | 637 | int LockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 638 | { |
wolfSSL | 0:d92f9d21154c | 639 | os_mut_wait (m, 0xffff); |
wolfSSL | 0:d92f9d21154c | 640 | return(0) ; |
wolfSSL | 0:d92f9d21154c | 641 | } |
wolfSSL | 0:d92f9d21154c | 642 | |
wolfSSL | 0:d92f9d21154c | 643 | int UnLockMutex(wolfSSL_Mutex* m) |
wolfSSL | 0:d92f9d21154c | 644 | { |
wolfSSL | 0:d92f9d21154c | 645 | os_mut_release (m); |
wolfSSL | 0:d92f9d21154c | 646 | return 0; |
wolfSSL | 0:d92f9d21154c | 647 | } |
wolfSSL | 0:d92f9d21154c | 648 | #endif |
wolfSSL | 0:d92f9d21154c | 649 | #endif /* USE_WINDOWS_API */ |
wolfSSL | 0:d92f9d21154c | 650 | |
wolfSSL | 0:d92f9d21154c | 651 | #endif /* SINGLE_THREADED */ |
wolfSSL | 0:d92f9d21154c | 652 | |
wolfSSL | 0:d92f9d21154c | 653 | #if defined(WOLFSSL_TI_CRYPT) || defined(WOLFSSL_TI_HASH) |
wolfSSL | 0:d92f9d21154c | 654 | #include <wolfcrypt/src/port/ti/ti-ccm.c> /* initialize and Mutex for TI Crypt Engine */ |
wolfSSL | 0:d92f9d21154c | 655 | #include <wolfcrypt/src/port/ti/ti-hash.c> /* md5, sha1, sha224, sha256 */ |
wolfSSL | 0:d92f9d21154c | 656 | #endif |
wolfSSL | 0:d92f9d21154c | 657 |