A library for setting up Secure Socket Layer (SSL) connections and verifying remote hosts using certificates. Contains only the source files for mbed platform implementation of the library.

Dependents:   HTTPClient-SSL HTTPClient-SSL HTTPClient-SSL HTTPClient-SSL

Committer:
Mike Fiore
Date:
Mon Mar 23 16:51:07 2015 -0500
Revision:
6:cf58d49e1a86
Parent:
0:b86d15c6ba29
fix whitespace in sha512.c

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Vanger 0:b86d15c6ba29 1 /* port.c
Vanger 0:b86d15c6ba29 2 *
Vanger 0:b86d15c6ba29 3 * Copyright (C) 2006-2014 wolfSSL Inc.
Vanger 0:b86d15c6ba29 4 *
Vanger 0:b86d15c6ba29 5 * This file is part of CyaSSL.
Vanger 0:b86d15c6ba29 6 *
Vanger 0:b86d15c6ba29 7 * CyaSSL is free software; you can redistribute it and/or modify
Vanger 0:b86d15c6ba29 8 * it under the terms of the GNU General Public License as published by
Vanger 0:b86d15c6ba29 9 * the Free Software Foundation; either version 2 of the License, or
Vanger 0:b86d15c6ba29 10 * (at your option) any later version.
Vanger 0:b86d15c6ba29 11 *
Vanger 0:b86d15c6ba29 12 * CyaSSL is distributed in the hope that it will be useful,
Vanger 0:b86d15c6ba29 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Vanger 0:b86d15c6ba29 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Vanger 0:b86d15c6ba29 15 * GNU General Public License for more details.
Vanger 0:b86d15c6ba29 16 *
Vanger 0:b86d15c6ba29 17 * You should have received a copy of the GNU General Public License
Vanger 0:b86d15c6ba29 18 * along with this program; if not, write to the Free Software
Vanger 0:b86d15c6ba29 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Vanger 0:b86d15c6ba29 20 */
Vanger 0:b86d15c6ba29 21
Vanger 0:b86d15c6ba29 22 #ifdef HAVE_CONFIG_H
Vanger 0:b86d15c6ba29 23 #include <config.h>
Vanger 0:b86d15c6ba29 24 #endif
Vanger 0:b86d15c6ba29 25
Vanger 0:b86d15c6ba29 26 #include <cyassl/ctaocrypt/settings.h>
Vanger 0:b86d15c6ba29 27 #include <cyassl/ctaocrypt/types.h>
Vanger 0:b86d15c6ba29 28 #include <cyassl/ctaocrypt/error-crypt.h>
Vanger 0:b86d15c6ba29 29
Vanger 0:b86d15c6ba29 30
Vanger 0:b86d15c6ba29 31 #ifdef _MSC_VER
Vanger 0:b86d15c6ba29 32 /* 4996 warning to use MS extensions e.g., strcpy_s instead of strncpy */
Vanger 0:b86d15c6ba29 33 #pragma warning(disable: 4996)
Vanger 0:b86d15c6ba29 34 #endif
Vanger 0:b86d15c6ba29 35
Vanger 0:b86d15c6ba29 36
Vanger 0:b86d15c6ba29 37
Vanger 0:b86d15c6ba29 38 #ifdef SINGLE_THREADED
Vanger 0:b86d15c6ba29 39
Vanger 0:b86d15c6ba29 40 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 41 {
Vanger 0:b86d15c6ba29 42 (void)m;
Vanger 0:b86d15c6ba29 43 return 0;
Vanger 0:b86d15c6ba29 44 }
Vanger 0:b86d15c6ba29 45
Vanger 0:b86d15c6ba29 46
Vanger 0:b86d15c6ba29 47 int FreeMutex(CyaSSL_Mutex *m)
Vanger 0:b86d15c6ba29 48 {
Vanger 0:b86d15c6ba29 49 (void)m;
Vanger 0:b86d15c6ba29 50 return 0;
Vanger 0:b86d15c6ba29 51 }
Vanger 0:b86d15c6ba29 52
Vanger 0:b86d15c6ba29 53
Vanger 0:b86d15c6ba29 54 int LockMutex(CyaSSL_Mutex *m)
Vanger 0:b86d15c6ba29 55 {
Vanger 0:b86d15c6ba29 56 (void)m;
Vanger 0:b86d15c6ba29 57 return 0;
Vanger 0:b86d15c6ba29 58 }
Vanger 0:b86d15c6ba29 59
Vanger 0:b86d15c6ba29 60
Vanger 0:b86d15c6ba29 61 int UnLockMutex(CyaSSL_Mutex *m)
Vanger 0:b86d15c6ba29 62 {
Vanger 0:b86d15c6ba29 63 (void)m;
Vanger 0:b86d15c6ba29 64 return 0;
Vanger 0:b86d15c6ba29 65 }
Vanger 0:b86d15c6ba29 66
Vanger 0:b86d15c6ba29 67 #else /* MULTI_THREAD */
Vanger 0:b86d15c6ba29 68
Vanger 0:b86d15c6ba29 69 #if defined(FREERTOS)
Vanger 0:b86d15c6ba29 70
Vanger 0:b86d15c6ba29 71 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 72 {
Vanger 0:b86d15c6ba29 73 int iReturn;
Vanger 0:b86d15c6ba29 74
Vanger 0:b86d15c6ba29 75 *m = ( CyaSSL_Mutex ) xSemaphoreCreateMutex();
Vanger 0:b86d15c6ba29 76 if( *m != NULL )
Vanger 0:b86d15c6ba29 77 iReturn = 0;
Vanger 0:b86d15c6ba29 78 else
Vanger 0:b86d15c6ba29 79 iReturn = BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 80
Vanger 0:b86d15c6ba29 81 return iReturn;
Vanger 0:b86d15c6ba29 82 }
Vanger 0:b86d15c6ba29 83
Vanger 0:b86d15c6ba29 84 int FreeMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 85 {
Vanger 0:b86d15c6ba29 86 vSemaphoreDelete( *m );
Vanger 0:b86d15c6ba29 87 return 0;
Vanger 0:b86d15c6ba29 88 }
Vanger 0:b86d15c6ba29 89
Vanger 0:b86d15c6ba29 90 int LockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 91 {
Vanger 0:b86d15c6ba29 92 /* Assume an infinite block, or should there be zero block? */
Vanger 0:b86d15c6ba29 93 xSemaphoreTake( *m, portMAX_DELAY );
Vanger 0:b86d15c6ba29 94 return 0;
Vanger 0:b86d15c6ba29 95 }
Vanger 0:b86d15c6ba29 96
Vanger 0:b86d15c6ba29 97 int UnLockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 98 {
Vanger 0:b86d15c6ba29 99 xSemaphoreGive( *m );
Vanger 0:b86d15c6ba29 100 return 0;
Vanger 0:b86d15c6ba29 101 }
Vanger 0:b86d15c6ba29 102
Vanger 0:b86d15c6ba29 103 #elif defined(CYASSL_SAFERTOS)
Vanger 0:b86d15c6ba29 104
Vanger 0:b86d15c6ba29 105 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 106 {
Vanger 0:b86d15c6ba29 107 vSemaphoreCreateBinary(m->mutexBuffer, m->mutex);
Vanger 0:b86d15c6ba29 108 if (m->mutex == NULL)
Vanger 0:b86d15c6ba29 109 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 110
Vanger 0:b86d15c6ba29 111 return 0;
Vanger 0:b86d15c6ba29 112 }
Vanger 0:b86d15c6ba29 113
Vanger 0:b86d15c6ba29 114 int FreeMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 115 {
Vanger 0:b86d15c6ba29 116 (void)m;
Vanger 0:b86d15c6ba29 117 return 0;
Vanger 0:b86d15c6ba29 118 }
Vanger 0:b86d15c6ba29 119
Vanger 0:b86d15c6ba29 120 int LockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 121 {
Vanger 0:b86d15c6ba29 122 /* Assume an infinite block */
Vanger 0:b86d15c6ba29 123 xSemaphoreTake(m->mutex, portMAX_DELAY);
Vanger 0:b86d15c6ba29 124 return 0;
Vanger 0:b86d15c6ba29 125 }
Vanger 0:b86d15c6ba29 126
Vanger 0:b86d15c6ba29 127 int UnLockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 128 {
Vanger 0:b86d15c6ba29 129 xSemaphoreGive(m->mutex);
Vanger 0:b86d15c6ba29 130 return 0;
Vanger 0:b86d15c6ba29 131 }
Vanger 0:b86d15c6ba29 132
Vanger 0:b86d15c6ba29 133
Vanger 0:b86d15c6ba29 134 #elif defined(USE_WINDOWS_API)
Vanger 0:b86d15c6ba29 135
Vanger 0:b86d15c6ba29 136 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 137 {
Vanger 0:b86d15c6ba29 138 InitializeCriticalSection(m);
Vanger 0:b86d15c6ba29 139 return 0;
Vanger 0:b86d15c6ba29 140 }
Vanger 0:b86d15c6ba29 141
Vanger 0:b86d15c6ba29 142
Vanger 0:b86d15c6ba29 143 int FreeMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 144 {
Vanger 0:b86d15c6ba29 145 DeleteCriticalSection(m);
Vanger 0:b86d15c6ba29 146 return 0;
Vanger 0:b86d15c6ba29 147 }
Vanger 0:b86d15c6ba29 148
Vanger 0:b86d15c6ba29 149
Vanger 0:b86d15c6ba29 150 int LockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 151 {
Vanger 0:b86d15c6ba29 152 EnterCriticalSection(m);
Vanger 0:b86d15c6ba29 153 return 0;
Vanger 0:b86d15c6ba29 154 }
Vanger 0:b86d15c6ba29 155
Vanger 0:b86d15c6ba29 156
Vanger 0:b86d15c6ba29 157 int UnLockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 158 {
Vanger 0:b86d15c6ba29 159 LeaveCriticalSection(m);
Vanger 0:b86d15c6ba29 160 return 0;
Vanger 0:b86d15c6ba29 161 }
Vanger 0:b86d15c6ba29 162
Vanger 0:b86d15c6ba29 163 #elif defined(CYASSL_PTHREADS)
Vanger 0:b86d15c6ba29 164
Vanger 0:b86d15c6ba29 165 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 166 {
Vanger 0:b86d15c6ba29 167 if (pthread_mutex_init(m, 0) == 0)
Vanger 0:b86d15c6ba29 168 return 0;
Vanger 0:b86d15c6ba29 169 else
Vanger 0:b86d15c6ba29 170 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 171 }
Vanger 0:b86d15c6ba29 172
Vanger 0:b86d15c6ba29 173
Vanger 0:b86d15c6ba29 174 int FreeMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 175 {
Vanger 0:b86d15c6ba29 176 if (pthread_mutex_destroy(m) == 0)
Vanger 0:b86d15c6ba29 177 return 0;
Vanger 0:b86d15c6ba29 178 else
Vanger 0:b86d15c6ba29 179 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 180 }
Vanger 0:b86d15c6ba29 181
Vanger 0:b86d15c6ba29 182
Vanger 0:b86d15c6ba29 183 int LockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 184 {
Vanger 0:b86d15c6ba29 185 if (pthread_mutex_lock(m) == 0)
Vanger 0:b86d15c6ba29 186 return 0;
Vanger 0:b86d15c6ba29 187 else
Vanger 0:b86d15c6ba29 188 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 189 }
Vanger 0:b86d15c6ba29 190
Vanger 0:b86d15c6ba29 191
Vanger 0:b86d15c6ba29 192 int UnLockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 193 {
Vanger 0:b86d15c6ba29 194 if (pthread_mutex_unlock(m) == 0)
Vanger 0:b86d15c6ba29 195 return 0;
Vanger 0:b86d15c6ba29 196 else
Vanger 0:b86d15c6ba29 197 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 198 }
Vanger 0:b86d15c6ba29 199
Vanger 0:b86d15c6ba29 200 #elif defined(THREADX)
Vanger 0:b86d15c6ba29 201
Vanger 0:b86d15c6ba29 202 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 203 {
Vanger 0:b86d15c6ba29 204 if (tx_mutex_create(m, "CyaSSL Mutex", TX_NO_INHERIT) == 0)
Vanger 0:b86d15c6ba29 205 return 0;
Vanger 0:b86d15c6ba29 206 else
Vanger 0:b86d15c6ba29 207 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 208 }
Vanger 0:b86d15c6ba29 209
Vanger 0:b86d15c6ba29 210
Vanger 0:b86d15c6ba29 211 int FreeMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 212 {
Vanger 0:b86d15c6ba29 213 if (tx_mutex_delete(m) == 0)
Vanger 0:b86d15c6ba29 214 return 0;
Vanger 0:b86d15c6ba29 215 else
Vanger 0:b86d15c6ba29 216 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 217 }
Vanger 0:b86d15c6ba29 218
Vanger 0:b86d15c6ba29 219
Vanger 0:b86d15c6ba29 220 int LockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 221 {
Vanger 0:b86d15c6ba29 222 if (tx_mutex_get(m, TX_WAIT_FOREVER) == 0)
Vanger 0:b86d15c6ba29 223 return 0;
Vanger 0:b86d15c6ba29 224 else
Vanger 0:b86d15c6ba29 225 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 226 }
Vanger 0:b86d15c6ba29 227
Vanger 0:b86d15c6ba29 228
Vanger 0:b86d15c6ba29 229 int UnLockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 230 {
Vanger 0:b86d15c6ba29 231 if (tx_mutex_put(m) == 0)
Vanger 0:b86d15c6ba29 232 return 0;
Vanger 0:b86d15c6ba29 233 else
Vanger 0:b86d15c6ba29 234 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 235 }
Vanger 0:b86d15c6ba29 236
Vanger 0:b86d15c6ba29 237 #elif defined(MICRIUM)
Vanger 0:b86d15c6ba29 238
Vanger 0:b86d15c6ba29 239 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 240 {
Vanger 0:b86d15c6ba29 241 #if (NET_SECURE_MGR_CFG_EN == DEF_ENABLED)
Vanger 0:b86d15c6ba29 242 if (NetSecure_OS_MutexCreate(m) == 0)
Vanger 0:b86d15c6ba29 243 return 0;
Vanger 0:b86d15c6ba29 244 else
Vanger 0:b86d15c6ba29 245 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 246 #else
Vanger 0:b86d15c6ba29 247 return 0;
Vanger 0:b86d15c6ba29 248 #endif
Vanger 0:b86d15c6ba29 249 }
Vanger 0:b86d15c6ba29 250
Vanger 0:b86d15c6ba29 251
Vanger 0:b86d15c6ba29 252 int FreeMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 253 {
Vanger 0:b86d15c6ba29 254 #if (NET_SECURE_MGR_CFG_EN == DEF_ENABLED)
Vanger 0:b86d15c6ba29 255 if (NetSecure_OS_FreeMutex(m) == 0)
Vanger 0:b86d15c6ba29 256 return 0;
Vanger 0:b86d15c6ba29 257 else
Vanger 0:b86d15c6ba29 258 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 259 #else
Vanger 0:b86d15c6ba29 260 return 0;
Vanger 0:b86d15c6ba29 261 #endif
Vanger 0:b86d15c6ba29 262 }
Vanger 0:b86d15c6ba29 263
Vanger 0:b86d15c6ba29 264
Vanger 0:b86d15c6ba29 265 int LockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 266 {
Vanger 0:b86d15c6ba29 267 #if (NET_SECURE_MGR_CFG_EN == DEF_ENABLED)
Vanger 0:b86d15c6ba29 268 if (NetSecure_OS_LockMutex(m) == 0)
Vanger 0:b86d15c6ba29 269 return 0;
Vanger 0:b86d15c6ba29 270 else
Vanger 0:b86d15c6ba29 271 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 272 #else
Vanger 0:b86d15c6ba29 273 return 0;
Vanger 0:b86d15c6ba29 274 #endif
Vanger 0:b86d15c6ba29 275 }
Vanger 0:b86d15c6ba29 276
Vanger 0:b86d15c6ba29 277
Vanger 0:b86d15c6ba29 278 int UnLockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 279 {
Vanger 0:b86d15c6ba29 280 #if (NET_SECURE_MGR_CFG_EN == DEF_ENABLED)
Vanger 0:b86d15c6ba29 281 if (NetSecure_OS_UnLockMutex(m) == 0)
Vanger 0:b86d15c6ba29 282 return 0;
Vanger 0:b86d15c6ba29 283 else
Vanger 0:b86d15c6ba29 284 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 285 #else
Vanger 0:b86d15c6ba29 286 return 0;
Vanger 0:b86d15c6ba29 287 #endif
Vanger 0:b86d15c6ba29 288
Vanger 0:b86d15c6ba29 289 }
Vanger 0:b86d15c6ba29 290
Vanger 0:b86d15c6ba29 291 #elif defined(EBSNET)
Vanger 0:b86d15c6ba29 292
Vanger 0:b86d15c6ba29 293 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 294 {
Vanger 0:b86d15c6ba29 295 if (rtp_sig_mutex_alloc(m, "CyaSSL Mutex") == -1)
Vanger 0:b86d15c6ba29 296 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 297 else
Vanger 0:b86d15c6ba29 298 return 0;
Vanger 0:b86d15c6ba29 299 }
Vanger 0:b86d15c6ba29 300
Vanger 0:b86d15c6ba29 301 int FreeMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 302 {
Vanger 0:b86d15c6ba29 303 rtp_sig_mutex_free(*m);
Vanger 0:b86d15c6ba29 304 return 0;
Vanger 0:b86d15c6ba29 305 }
Vanger 0:b86d15c6ba29 306
Vanger 0:b86d15c6ba29 307 int LockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 308 {
Vanger 0:b86d15c6ba29 309 if (rtp_sig_mutex_claim_timed(*m, RTIP_INF) == 0)
Vanger 0:b86d15c6ba29 310 return 0;
Vanger 0:b86d15c6ba29 311 else
Vanger 0:b86d15c6ba29 312 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 313 }
Vanger 0:b86d15c6ba29 314
Vanger 0:b86d15c6ba29 315 int UnLockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 316 {
Vanger 0:b86d15c6ba29 317 rtp_sig_mutex_release(*m);
Vanger 0:b86d15c6ba29 318 return 0;
Vanger 0:b86d15c6ba29 319 }
Vanger 0:b86d15c6ba29 320
Vanger 0:b86d15c6ba29 321 #elif defined(FREESCALE_MQX)
Vanger 0:b86d15c6ba29 322
Vanger 0:b86d15c6ba29 323 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 324 {
Vanger 0:b86d15c6ba29 325 if (_mutex_init(m, NULL) == MQX_EOK)
Vanger 0:b86d15c6ba29 326 return 0;
Vanger 0:b86d15c6ba29 327 else
Vanger 0:b86d15c6ba29 328 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 329 }
Vanger 0:b86d15c6ba29 330
Vanger 0:b86d15c6ba29 331 int FreeMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 332 {
Vanger 0:b86d15c6ba29 333 if (_mutex_destroy(m) == MQX_EOK)
Vanger 0:b86d15c6ba29 334 return 0;
Vanger 0:b86d15c6ba29 335 else
Vanger 0:b86d15c6ba29 336 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 337 }
Vanger 0:b86d15c6ba29 338
Vanger 0:b86d15c6ba29 339 int LockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 340 {
Vanger 0:b86d15c6ba29 341 if (_mutex_lock(m) == MQX_EOK)
Vanger 0:b86d15c6ba29 342 return 0;
Vanger 0:b86d15c6ba29 343 else
Vanger 0:b86d15c6ba29 344 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 345 }
Vanger 0:b86d15c6ba29 346
Vanger 0:b86d15c6ba29 347 int UnLockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 348 {
Vanger 0:b86d15c6ba29 349 if (_mutex_unlock(m) == MQX_EOK)
Vanger 0:b86d15c6ba29 350 return 0;
Vanger 0:b86d15c6ba29 351 else
Vanger 0:b86d15c6ba29 352 return BAD_MUTEX_E;
Vanger 0:b86d15c6ba29 353 }
Vanger 0:b86d15c6ba29 354
Vanger 0:b86d15c6ba29 355 #elif defined (CYASSL_TIRTOS)
Vanger 0:b86d15c6ba29 356
Vanger 0:b86d15c6ba29 357 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 358 {
Vanger 0:b86d15c6ba29 359 Semaphore_Params params;
Vanger 0:b86d15c6ba29 360
Vanger 0:b86d15c6ba29 361 Semaphore_Params_init(&params);
Vanger 0:b86d15c6ba29 362 params.mode = Semaphore_Mode_BINARY;
Vanger 0:b86d15c6ba29 363
Vanger 0:b86d15c6ba29 364 *m = Semaphore_create(1, &params, NULL);
Vanger 0:b86d15c6ba29 365
Vanger 0:b86d15c6ba29 366 return 0;
Vanger 0:b86d15c6ba29 367 }
Vanger 0:b86d15c6ba29 368
Vanger 0:b86d15c6ba29 369 int FreeMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 370 {
Vanger 0:b86d15c6ba29 371 Semaphore_delete(m);
Vanger 0:b86d15c6ba29 372
Vanger 0:b86d15c6ba29 373 return 0;
Vanger 0:b86d15c6ba29 374 }
Vanger 0:b86d15c6ba29 375
Vanger 0:b86d15c6ba29 376 int LockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 377 {
Vanger 0:b86d15c6ba29 378 Semaphore_pend(*m, BIOS_WAIT_FOREVER);
Vanger 0:b86d15c6ba29 379
Vanger 0:b86d15c6ba29 380 return 0;
Vanger 0:b86d15c6ba29 381 }
Vanger 0:b86d15c6ba29 382
Vanger 0:b86d15c6ba29 383 int UnLockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 384 {
Vanger 0:b86d15c6ba29 385 Semaphore_post(*m);
Vanger 0:b86d15c6ba29 386
Vanger 0:b86d15c6ba29 387 return 0;
Vanger 0:b86d15c6ba29 388 }
Vanger 0:b86d15c6ba29 389
Vanger 0:b86d15c6ba29 390 #elif defined(CYASSL_MDK_ARM)|| defined(CYASSL_CMSIS_RTOS)
Vanger 0:b86d15c6ba29 391
Vanger 0:b86d15c6ba29 392 #if defined(CYASSL_CMSIS_RTOS)
Vanger 0:b86d15c6ba29 393 #include "cmsis_os.h"
Vanger 0:b86d15c6ba29 394 #define CMSIS_NMUTEX 10
Vanger 0:b86d15c6ba29 395 osMutexDef(CyaSSL_mt0) ; osMutexDef(CyaSSL_mt1) ; osMutexDef(CyaSSL_mt2) ;
Vanger 0:b86d15c6ba29 396 osMutexDef(CyaSSL_mt3) ; osMutexDef(CyaSSL_mt4) ; osMutexDef(CyaSSL_mt5) ;
Vanger 0:b86d15c6ba29 397 osMutexDef(CyaSSL_mt6) ; osMutexDef(CyaSSL_mt7) ; osMutexDef(CyaSSL_mt8) ;
Vanger 0:b86d15c6ba29 398 osMutexDef(CyaSSL_mt9) ;
Vanger 0:b86d15c6ba29 399
Vanger 0:b86d15c6ba29 400 static const osMutexDef_t *CMSIS_mutex[] = { osMutex(CyaSSL_mt0),
Vanger 0:b86d15c6ba29 401 osMutex(CyaSSL_mt1), osMutex(CyaSSL_mt2), osMutex(CyaSSL_mt3),
Vanger 0:b86d15c6ba29 402 osMutex(CyaSSL_mt4), osMutex(CyaSSL_mt5), osMutex(CyaSSL_mt6),
Vanger 0:b86d15c6ba29 403 osMutex(CyaSSL_mt7), osMutex(CyaSSL_mt8), osMutex(CyaSSL_mt9) } ;
Vanger 0:b86d15c6ba29 404
Vanger 0:b86d15c6ba29 405 static osMutexId CMSIS_mutexID[CMSIS_NMUTEX] = {0} ;
Vanger 0:b86d15c6ba29 406
Vanger 0:b86d15c6ba29 407 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 408 {
Vanger 0:b86d15c6ba29 409 int i ;
Vanger 0:b86d15c6ba29 410 for (i=0; i<CMSIS_NMUTEX; i++) {
Vanger 0:b86d15c6ba29 411 if(CMSIS_mutexID[i] == 0) {
Vanger 0:b86d15c6ba29 412 CMSIS_mutexID[i] = osMutexCreate(CMSIS_mutex[i]) ;
Vanger 0:b86d15c6ba29 413 (*m) = CMSIS_mutexID[i] ;
Vanger 0:b86d15c6ba29 414 return 0 ;
Vanger 0:b86d15c6ba29 415 }
Vanger 0:b86d15c6ba29 416 }
Vanger 0:b86d15c6ba29 417 return -1 ;
Vanger 0:b86d15c6ba29 418 }
Vanger 0:b86d15c6ba29 419
Vanger 0:b86d15c6ba29 420 int FreeMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 421 {
Vanger 0:b86d15c6ba29 422 int i ;
Vanger 0:b86d15c6ba29 423 osMutexDelete (*m) ;
Vanger 0:b86d15c6ba29 424 for (i=0; i<CMSIS_NMUTEX; i++) {
Vanger 0:b86d15c6ba29 425 if(CMSIS_mutexID[i] == (*m)) {
Vanger 0:b86d15c6ba29 426 CMSIS_mutexID[i] = 0 ;
Vanger 0:b86d15c6ba29 427 return(0) ;
Vanger 0:b86d15c6ba29 428 }
Vanger 0:b86d15c6ba29 429 }
Vanger 0:b86d15c6ba29 430 return(-1) ;
Vanger 0:b86d15c6ba29 431 }
Vanger 0:b86d15c6ba29 432
Vanger 0:b86d15c6ba29 433 int LockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 434 {
Vanger 0:b86d15c6ba29 435 osMutexWait(*m, osWaitForever) ;
Vanger 0:b86d15c6ba29 436 return(0) ;
Vanger 0:b86d15c6ba29 437 }
Vanger 0:b86d15c6ba29 438
Vanger 0:b86d15c6ba29 439 int UnLockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 440 {
Vanger 0:b86d15c6ba29 441 osMutexRelease (*m);
Vanger 0:b86d15c6ba29 442 return 0;
Vanger 0:b86d15c6ba29 443 }
Vanger 0:b86d15c6ba29 444 #else
Vanger 0:b86d15c6ba29 445
Vanger 0:b86d15c6ba29 446 int InitMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 447 {
Vanger 0:b86d15c6ba29 448 os_mut_init (m);
Vanger 0:b86d15c6ba29 449 return 0;
Vanger 0:b86d15c6ba29 450 }
Vanger 0:b86d15c6ba29 451
Vanger 0:b86d15c6ba29 452 int FreeMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 453 {
Vanger 0:b86d15c6ba29 454 return(0) ;
Vanger 0:b86d15c6ba29 455 }
Vanger 0:b86d15c6ba29 456
Vanger 0:b86d15c6ba29 457 int LockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 458 {
Vanger 0:b86d15c6ba29 459 os_mut_wait (m, 0xffff);
Vanger 0:b86d15c6ba29 460 return(0) ;
Vanger 0:b86d15c6ba29 461 }
Vanger 0:b86d15c6ba29 462
Vanger 0:b86d15c6ba29 463 int UnLockMutex(CyaSSL_Mutex* m)
Vanger 0:b86d15c6ba29 464 {
Vanger 0:b86d15c6ba29 465 os_mut_release (m);
Vanger 0:b86d15c6ba29 466 return 0;
Vanger 0:b86d15c6ba29 467 }
Vanger 0:b86d15c6ba29 468 #endif
Vanger 0:b86d15c6ba29 469 #endif /* USE_WINDOWS_API */
Vanger 0:b86d15c6ba29 470 #endif /* SINGLE_THREADED */
Vanger 0:b86d15c6ba29 471