uc-sdk
Main Page
Related Pages
Modules
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
sys.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without modification,
6
* are permitted provided that the following conditions are met:
7
*
8
* 1. Redistributions of source code must retain the above copyright notice,
9
* this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright notice,
11
* this list of conditions and the following disclaimer in the documentation
12
* and/or other materials provided with the distribution.
13
* 3. The name of the author may not be used to endorse or promote products
14
* derived from this software without specific prior written permission.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
19
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
21
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
25
* OF SUCH DAMAGE.
26
*
27
* This file is part of the lwIP TCP/IP stack.
28
*
29
* Author: Adam Dunkels <adam@sics.se>
30
*
31
*/
32
#ifndef __LWIP_SYS_H__
33
#define __LWIP_SYS_H__
34
35
#include "
lwip/opt.h
"
36
37
#ifdef __cplusplus
38
extern
"C"
{
39
#endif
40
41
#if NO_SYS
42
43
/* For a totally minimal and standalone system, we provide null
44
definitions of the sys_ functions. */
45
typedef
u8_t
sys_sem_t;
46
typedef
u8_t
sys_mutex_t;
47
typedef
u8_t
sys_mbox_t;
48
49
#define sys_sem_new(s, c) ERR_OK
50
#define sys_sem_signal(s)
51
#define sys_sem_wait(s)
52
#define sys_arch_sem_wait(s,t)
53
#define sys_sem_free(s)
54
#define sys_mutex_new(mu) ERR_OK
55
#define sys_mutex_lock(mu)
56
#define sys_mutex_unlock(mu)
57
#define sys_mutex_free(mu)
58
#define sys_mbox_new(m, s) ERR_OK
59
#define sys_mbox_fetch(m,d)
60
#define sys_mbox_tryfetch(m,d)
61
#define sys_mbox_post(m,d)
62
#define sys_mbox_trypost(m,d)
63
#define sys_mbox_free(m)
64
65
#define sys_thread_new(n,t,a,s,p)
66
67
#define sys_msleep(t)
68
69
#else
/* NO_SYS */
70
72
#define SYS_ARCH_TIMEOUT 0xffffffffUL
73
77
#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT
78
79
#include "
lwip/err.h
"
80
#include "arch/sys_arch.h"
81
83
typedef
void (*
lwip_thread_fn
)(
void
*arg);
84
85
/* Function prototypes for functions to be implemented by platform ports
86
(in sys_arch.c) */
87
88
/* Mutex functions: */
89
92
#if LWIP_COMPAT_MUTEX
93
/* for old ports that don't have mutexes: define them to binary semaphores */
94
#define sys_mutex_t sys_sem_t
95
#define sys_mutex_new(mutex) sys_sem_new(mutex, 1)
96
#define sys_mutex_lock(mutex) sys_sem_wait(mutex)
97
#define sys_mutex_unlock(mutex) sys_sem_signal(mutex)
98
#define sys_mutex_free(mutex) sys_sem_free(mutex)
99
#define sys_mutex_valid(mutex) sys_sem_valid(mutex)
100
#define sys_mutex_set_invalid(mutex) sys_sem_set_invalid(mutex)
101
102
#else
/* LWIP_COMPAT_MUTEX */
103
107
err_t
sys_mutex_new
(sys_mutex_t *mutex);
110
void
sys_mutex_lock
(sys_mutex_t *mutex);
113
void
sys_mutex_unlock
(sys_mutex_t *mutex);
116
void
sys_mutex_free
(sys_mutex_t *mutex);
117
#ifndef sys_mutex_valid
118
119
int
sys_mutex_valid
(sys_mutex_t *mutex);
120
#endif
121
#ifndef sys_mutex_set_invalid
122
123
void
sys_mutex_set_invalid
(sys_mutex_t *mutex);
124
#endif
125
#endif
/* LWIP_COMPAT_MUTEX */
126
127
/* Semaphore functions: */
128
133
err_t
sys_sem_new
(sys_sem_t *sem,
u8_t
count);
136
void
sys_sem_signal
(sys_sem_t *sem);
142
u32_t
sys_arch_sem_wait
(sys_sem_t *sem,
u32_t
timeout);
145
void
sys_sem_free
(sys_sem_t *sem);
147
#define sys_sem_wait(sem) sys_arch_sem_wait(sem, 0)
148
#ifndef sys_sem_valid
149
150
int
sys_sem_valid
(sys_sem_t *sem);
151
#endif
152
#ifndef sys_sem_set_invalid
153
154
void
sys_sem_set_invalid
(sys_sem_t *sem);
155
#endif
156
157
/* Time functions. */
158
#ifndef sys_msleep
159
void
sys_msleep
(
u32_t
ms);
/* only has a (close to) 1 jiffy resolution. */
160
#endif
161
162
/* Mailbox functions. */
163
168
err_t
sys_mbox_new
(sys_mbox_t *mbox,
int
size);
173
void
sys_mbox_post
(sys_mbox_t *mbox,
void
*msg);
177
err_t
sys_mbox_trypost
(sys_mbox_t *mbox,
void
*msg);
185
u32_t
sys_arch_mbox_fetch
(sys_mbox_t *mbox,
void
**msg,
u32_t
timeout);
186
/* Allow port to override with a macro, e.g. special timout for sys_arch_mbox_fetch() */
187
#ifndef sys_arch_mbox_tryfetch
188
194
u32_t
sys_arch_mbox_tryfetch
(sys_mbox_t *mbox,
void
**msg);
195
#endif
196
197
#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg)
198
200
void
sys_mbox_free
(sys_mbox_t *mbox);
201
#define sys_mbox_fetch(mbox, msg) sys_arch_mbox_fetch(mbox, msg, 0)
202
#ifndef sys_mbox_valid
203
204
int
sys_mbox_valid
(sys_mbox_t *mbox);
205
#endif
206
#ifndef sys_mbox_set_invalid
207
208
void
sys_mbox_set_invalid
(sys_mbox_t *mbox);
209
#endif
210
218
sys_thread_t
sys_thread_new
(
const
char
*name,
lwip_thread_fn
thread,
void
*arg,
int
stacksize,
int
prio);
219
220
#endif
/* NO_SYS */
221
222
/* sys_init() must be called before anthing else. */
223
void
sys_init
(
void
);
224
225
#ifndef sys_jiffies
226
227
u32_t
sys_jiffies
(
void
);
228
#endif
229
232
u32_t
sys_now
(
void
);
233
234
/* Critical Region Protection */
235
/* These functions must be implemented in the sys_arch.c file.
236
In some implementations they can provide a more light-weight protection
237
mechanism than using semaphores. Otherwise semaphores can be used for
238
implementation */
239
#ifndef SYS_ARCH_PROTECT
240
245
#if SYS_LIGHTWEIGHT_PROT
246
252
#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev
253
262
#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect()
263
271
#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev)
272
sys_prot_t sys_arch_protect(
void
);
273
void
sys_arch_unprotect(sys_prot_t pval);
274
275
#else
276
277
#define SYS_ARCH_DECL_PROTECT(lev)
278
#define SYS_ARCH_PROTECT(lev)
279
#define SYS_ARCH_UNPROTECT(lev)
280
281
#endif
/* SYS_LIGHTWEIGHT_PROT */
282
283
#endif
/* SYS_ARCH_PROTECT */
284
285
/*
286
* Macros to set/get and increase/decrease variables in a thread-safe way.
287
* Use these for accessing variable that are used from more than one thread.
288
*/
289
290
#ifndef SYS_ARCH_INC
291
#define SYS_ARCH_INC(var, val) do { \
292
SYS_ARCH_DECL_PROTECT(old_level); \
293
SYS_ARCH_PROTECT(old_level); \
294
var += val; \
295
SYS_ARCH_UNPROTECT(old_level); \
296
} while(0)
297
#endif
/* SYS_ARCH_INC */
298
299
#ifndef SYS_ARCH_DEC
300
#define SYS_ARCH_DEC(var, val) do { \
301
SYS_ARCH_DECL_PROTECT(old_level); \
302
SYS_ARCH_PROTECT(old_level); \
303
var -= val; \
304
SYS_ARCH_UNPROTECT(old_level); \
305
} while(0)
306
#endif
/* SYS_ARCH_DEC */
307
308
#ifndef SYS_ARCH_GET
309
#define SYS_ARCH_GET(var, ret) do { \
310
SYS_ARCH_DECL_PROTECT(old_level); \
311
SYS_ARCH_PROTECT(old_level); \
312
ret = var; \
313
SYS_ARCH_UNPROTECT(old_level); \
314
} while(0)
315
#endif
/* SYS_ARCH_GET */
316
317
#ifndef SYS_ARCH_SET
318
#define SYS_ARCH_SET(var, val) do { \
319
SYS_ARCH_DECL_PROTECT(old_level); \
320
SYS_ARCH_PROTECT(old_level); \
321
var = val; \
322
SYS_ARCH_UNPROTECT(old_level); \
323
} while(0)
324
#endif
/* SYS_ARCH_SET */
325
326
327
#ifdef __cplusplus
328
}
329
#endif
330
331
#endif
/* __LWIP_SYS_H__ */
lwip
src
include
lwip
sys.h
Generated on Fri Nov 15 2013 05:00:22 for uc-sdk by
1.8.4