Xuyi Wang / wolfSSL

Dependents:   OS

Committer:
wolfSSL
Date:
Fri Jun 26 00:39:20 2015 +0000
Revision:
0:d92f9d21154c
wolfSSL 3.6.0

Who changed what in which revision?

UserRevisionLine numberNew 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(&params);
wolfSSL 0:d92f9d21154c 362 params.mode = Semaphore_Mode_BINARY;
wolfSSL 0:d92f9d21154c 363
wolfSSL 0:d92f9d21154c 364 *m = Semaphore_create(1, &params, 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