STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
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_HDR_SYS_H
33 #define LWIP_HDR_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_sem_valid(s) 0
55 #define sys_sem_valid_val(s) 0
56 #define sys_sem_set_invalid(s)
57 #define sys_sem_set_invalid_val(s)
58 #define sys_mutex_new(mu) ERR_OK
59 #define sys_mutex_lock(mu)
60 #define sys_mutex_unlock(mu)
61 #define sys_mutex_free(mu)
62 #define sys_mutex_valid(mu) 0
63 #define sys_mutex_set_invalid(mu)
64 #define sys_mbox_new(m, s) ERR_OK
65 #define sys_mbox_fetch(m,d)
66 #define sys_mbox_tryfetch(m,d)
67 #define sys_mbox_post(m,d)
68 #define sys_mbox_trypost(m,d)
69 #define sys_mbox_free(m)
70 #define sys_mbox_valid(m)
71 #define sys_mbox_valid_val(m)
72 #define sys_mbox_set_invalid(m)
73 #define sys_mbox_set_invalid_val(m)
74 
75 #define sys_thread_new(n,t,a,s,p)
76 
77 #define sys_msleep(t)
78 
79 #else /* NO_SYS */
80 
82 #define SYS_ARCH_TIMEOUT 0xffffffffUL
83 
87 #define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT
88 
89 #include "lwip/err.h"
90 #include "arch/sys_arch.h"
91 
93 typedef void (*lwip_thread_fn)(void *arg);
94 
95 /* Function prototypes for functions to be implemented by platform ports
96  (in sys_arch.c) */
97 
98 /* Mutex functions: */
99 
102 #if LWIP_COMPAT_MUTEX
103 /* for old ports that don't have mutexes: define them to binary semaphores */
104 #define sys_mutex_t sys_sem_t
105 #define sys_mutex_new(mutex) sys_sem_new(mutex, 1)
106 #define sys_mutex_lock(mutex) sys_sem_wait(mutex)
107 #define sys_mutex_unlock(mutex) sys_sem_signal(mutex)
108 #define sys_mutex_free(mutex) sys_sem_free(mutex)
109 #define sys_mutex_valid(mutex) sys_sem_valid(mutex)
110 #define sys_mutex_set_invalid(mutex) sys_sem_set_invalid(mutex)
111 
112 #else /* LWIP_COMPAT_MUTEX */
113 
117 err_t sys_mutex_new(sys_mutex_t *mutex);
120 void sys_mutex_lock(sys_mutex_t *mutex);
123 void sys_mutex_unlock(sys_mutex_t *mutex);
126 void sys_mutex_free(sys_mutex_t *mutex);
127 #ifndef sys_mutex_valid
128 
129 int sys_mutex_valid(sys_mutex_t *mutex);
130 #endif
131 #ifndef sys_mutex_set_invalid
132 
133 void sys_mutex_set_invalid(sys_mutex_t *mutex);
134 #endif
135 #endif /* LWIP_COMPAT_MUTEX */
136 
137 /* Semaphore functions: */
138 
143 err_t sys_sem_new(sys_sem_t *sem, u8_t count);
146 void sys_sem_signal(sys_sem_t *sem);
152 u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout);
155 void sys_sem_free(sys_sem_t *sem);
157 #define sys_sem_wait(sem) sys_arch_sem_wait(sem, 0)
158 #ifndef sys_sem_valid
159 
160 int sys_sem_valid(sys_sem_t *sem);
161 #endif
162 #ifndef sys_sem_set_invalid
163 
164 void sys_sem_set_invalid(sys_sem_t *sem);
165 #endif
166 #ifndef sys_sem_valid_val
167 
168 #define sys_sem_valid_val(sem) sys_sem_valid(&(sem))
169 #endif
170 #ifndef sys_sem_set_invalid_val
171 
172 #define sys_sem_set_invalid_val(sem) sys_sem_set_invalid(&(sem))
173 #endif
174 
175 /* Time functions. */
176 #ifndef sys_msleep
177 void sys_msleep(u32_t ms); /* only has a (close to) 1 ms resolution. */
178 #endif
179 
180 /* Mailbox functions. */
181 
186 err_t sys_mbox_new(sys_mbox_t *mbox, int size);
191 void sys_mbox_post(sys_mbox_t *mbox, void *msg);
195 err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg);
203 u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout);
204 /* Allow port to override with a macro, e.g. special timeout for sys_arch_mbox_fetch() */
205 #ifndef sys_arch_mbox_tryfetch
206 
211 u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg);
212 #endif
213 
214 #define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg)
215 
217 void sys_mbox_free(sys_mbox_t *mbox);
218 #define sys_mbox_fetch(mbox, msg) sys_arch_mbox_fetch(mbox, msg, 0)
219 #ifndef sys_mbox_valid
220 
221 int sys_mbox_valid(sys_mbox_t *mbox);
222 #endif
223 #ifndef sys_mbox_set_invalid
224 
225 void sys_mbox_set_invalid(sys_mbox_t *mbox);
226 #endif
227 #ifndef sys_mbox_valid_val
228 
229 #define sys_mbox_valid_val(mbox) sys_mbox_valid(&(mbox))
230 #endif
231 #ifndef sys_mbox_set_invalid_val
232 
233 #define sys_mbox_set_invalid_val(mbox) sys_mbox_set_invalid(&(mbox))
234 #endif
235 
236 
245 sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio);
246 
247 #endif /* NO_SYS */
248 
249 /* sys_init() must be called before anything else. */
250 void sys_init(void);
251 
252 #ifndef sys_jiffies
253 
254 u32_t sys_jiffies(void);
255 #endif
256 
259 u32_t sys_now(void);
260 
261 /* Critical Region Protection */
262 /* These functions must be implemented in the sys_arch.c file.
263  In some implementations they can provide a more light-weight protection
264  mechanism than using semaphores. Otherwise semaphores can be used for
265  implementation */
266 #ifndef SYS_ARCH_PROTECT
267 
272 #if SYS_LIGHTWEIGHT_PROT
273 
279 #define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev
280 
289 #define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect()
290 
298 #define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev)
300 void sys_arch_unprotect(sys_prot_t pval);
301 
302 #else
303 
304 #define SYS_ARCH_DECL_PROTECT(lev)
305 #define SYS_ARCH_PROTECT(lev)
306 #define SYS_ARCH_UNPROTECT(lev)
307 
308 #endif /* SYS_LIGHTWEIGHT_PROT */
309 
310 #endif /* SYS_ARCH_PROTECT */
311 
312 /*
313  * Macros to set/get and increase/decrease variables in a thread-safe way.
314  * Use these for accessing variable that are used from more than one thread.
315  */
316 
317 #ifndef SYS_ARCH_INC
318 #define SYS_ARCH_INC(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_INC */
325 
326 #ifndef SYS_ARCH_DEC
327 #define SYS_ARCH_DEC(var, val) do { \
328  SYS_ARCH_DECL_PROTECT(old_level); \
329  SYS_ARCH_PROTECT(old_level); \
330  var -= val; \
331  SYS_ARCH_UNPROTECT(old_level); \
332  } while(0)
333 #endif /* SYS_ARCH_DEC */
334 
335 #ifndef SYS_ARCH_GET
336 #define SYS_ARCH_GET(var, ret) do { \
337  SYS_ARCH_DECL_PROTECT(old_level); \
338  SYS_ARCH_PROTECT(old_level); \
339  ret = var; \
340  SYS_ARCH_UNPROTECT(old_level); \
341  } while(0)
342 #endif /* SYS_ARCH_GET */
343 
344 #ifndef SYS_ARCH_SET
345 #define SYS_ARCH_SET(var, val) do { \
346  SYS_ARCH_DECL_PROTECT(old_level); \
347  SYS_ARCH_PROTECT(old_level); \
348  var = val; \
349  SYS_ARCH_UNPROTECT(old_level); \
350  } while(0)
351 #endif /* SYS_ARCH_SET */
352 
353 
354 #ifdef __cplusplus
355 }
356 #endif
357 
358 #endif /* LWIP_HDR_SYS_H */
359 
sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio)
Definition: sys_arch.c:391
err_t sys_mutex_new(sys_mutex_t *mutex)
Definition: sys_arch.c:339
u32_t sys_now(void)
int sys_mbox_valid(sys_mbox_t *mbox)
Definition: sys_arch.c:205
void sys_mutex_unlock(sys_mutex_t *mutex)
Definition: sys_arch.c:377
void sys_mutex_lock(sys_mutex_t *mutex)
Definition: sys_arch.c:370
void sys_sem_set_invalid(sys_sem_t *sem)
Definition: sys_arch.c:321
u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout)
Definition: sys_arch.c:143
osThreadId sys_thread_t
Definition: sys_arch.h:47
osMessageQId sys_mbox_t
Definition: sys_arch.h:46
void sys_mutex_set_invalid(sys_mutex_t *mutex)
void sys_sem_free(sys_sem_t *sem)
Definition: sys_arch.c:303
err_t sys_sem_new(sys_sem_t *sem, u8_t count)
Definition: sys_arch.c:221
u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
Definition: sys_arch.c:186
int sys_sem_valid(sys_sem_t *sem)
Definition: sys_arch.c:312
err_t sys_mbox_new(sys_mbox_t *mbox, int size)
Definition: sys_arch.c:52
unsigned long u32_t
Definition: cc.h:42
sys_prot_t sys_arch_protect(void)
Definition: sys_arch.c:432
void(* lwip_thread_fn)(void *arg)
Definition: sys.h:93
int sys_mutex_valid(sys_mutex_t *mutex)
s8_t err_t
Definition: err.h:47
osSemaphoreId sys_sem_t
Definition: sys_arch.h:44
int sys_prot_t
Definition: cc.h:45
void sys_mutex_free(sys_mutex_t *mutex)
Definition: sys_arch.c:360
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
Definition: sys_arch.c:263
err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
Definition: sys_arch.c:106
u32_t sys_jiffies(void)
void sys_arch_unprotect(sys_prot_t pval)
Definition: sys_arch.c:444
unsigned char u8_t
Definition: cc.h:38
void sys_msleep(u32_t ms)
Definition: sys.c:55
void sys_mbox_post(sys_mbox_t *mbox, void *msg)
Definition: sys_arch.c:98
void sys_sem_signal(sys_sem_t *sem)
Definition: sys_arch.c:296
void sys_mbox_set_invalid(sys_mbox_t *mbox)
Definition: sys_arch.c:213
void sys_init(void)
Definition: sys_arch.c:328
void sys_mbox_free(sys_mbox_t *mbox)
Definition: sys_arch.c:76
osSemaphoreId sys_mutex_t
Definition: sys_arch.h:45