00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef __LWIP_SYS_H__
00033 #define __LWIP_SYS_H__
00034
00035 #include "lwip/opt.h"
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040
00041 #if NO_SYS
00042
00043
00044
00045 typedef u8_t sys_sem_t;
00046 typedef u8_t sys_mbox_t;
00047 struct sys_timeo {u8_t dummy;};
00048
00049 #define sys_init()
00050 #define sys_timeout(m,h,a)
00051 #define sys_untimeout(m,a)
00052 #define sys_sem_new(c) c
00053 #define sys_sem_signal(s)
00054 #define sys_sem_wait(s)
00055 #define sys_sem_wait_timeout(s,t)
00056 #define sys_arch_sem_wait(s,t)
00057 #define sys_sem_free(s)
00058 #define sys_mbox_new(s) 0
00059 #define sys_mbox_fetch(m,d)
00060 #define sys_mbox_tryfetch(m,d)
00061 #define sys_mbox_post(m,d)
00062 #define sys_mbox_trypost(m,d)
00063 #define sys_mbox_free(m)
00064
00065 #define sys_thread_new(n,t,a,s,p)
00066
00067 #else
00068
00069
00070 #define SYS_ARCH_TIMEOUT 0xffffffffUL
00071
00072
00073
00074
00075 #define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT
00076
00077 #include "lwip/err.h"
00078 #include "arch/sys_arch.h"
00079
00080 typedef void (* sys_timeout_handler)(void *arg);
00081
00082 struct sys_timeo {
00083 struct sys_timeo *next;
00084 u32_t time;
00085 sys_timeout_handler h;
00086 void *arg;
00087 };
00088
00089 struct sys_timeouts {
00090 struct sys_timeo *next;
00091 };
00092
00093
00094 void sys_init(void);
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105 void sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg);
00106 void sys_untimeout(sys_timeout_handler h, void *arg);
00107 struct sys_timeouts *sys_arch_timeouts(void);
00108
00109
00110 sys_sem_t sys_sem_new(u8_t count);
00111 void sys_sem_signal(sys_sem_t sem);
00112 u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout);
00113 void sys_sem_free(sys_sem_t sem);
00114 void sys_sem_wait(sys_sem_t sem);
00115 int sys_sem_wait_timeout(sys_sem_t sem, u32_t timeout);
00116
00117
00118 #ifndef sys_msleep
00119 void sys_msleep(u32_t ms);
00120 #endif
00121 #ifndef sys_jiffies
00122 u32_t sys_jiffies(void);
00123 #endif
00124
00125
00126 sys_mbox_t sys_mbox_new(int size);
00127 void sys_mbox_post(sys_mbox_t mbox, void *msg);
00128 err_t sys_mbox_trypost(sys_mbox_t mbox, void *msg);
00129 u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout);
00130 #ifndef sys_arch_mbox_tryfetch
00131 u32_t sys_arch_mbox_tryfetch(sys_mbox_t mbox, void **msg);
00132 #endif
00133
00134 #define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg)
00135 void sys_mbox_free(sys_mbox_t mbox);
00136 void sys_mbox_fetch(sys_mbox_t mbox, void **msg);
00137
00138
00139 sys_thread_t sys_thread_new(char *name, void (* thread)(void *arg), void *arg, int stacksize, int prio);
00140
00141 #endif
00142
00143
00144 u32_t sys_now(void);
00145
00146
00147
00148
00149
00150
00151 #ifndef SYS_ARCH_PROTECT
00152
00153
00154
00155
00156
00157 #if SYS_LIGHTWEIGHT_PROT
00158
00159
00160
00161
00162
00163
00164 #define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174 #define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect()
00175
00176
00177
00178
00179
00180
00181
00182
00183 #define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev)
00184 sys_prot_t sys_arch_protect(void);
00185 void sys_arch_unprotect(sys_prot_t pval);
00186
00187 #else
00188
00189 #define SYS_ARCH_DECL_PROTECT(lev)
00190 #define SYS_ARCH_PROTECT(lev)
00191 #define SYS_ARCH_UNPROTECT(lev)
00192
00193 #endif
00194
00195 #endif
00196
00197
00198
00199
00200
00201
00202 #ifndef SYS_ARCH_INC
00203 #define SYS_ARCH_INC(var, val) do { \
00204 SYS_ARCH_DECL_PROTECT(old_level); \
00205 SYS_ARCH_PROTECT(old_level); \
00206 var += val; \
00207 SYS_ARCH_UNPROTECT(old_level); \
00208 } while(0)
00209 #endif
00210
00211 #ifndef SYS_ARCH_DEC
00212 #define SYS_ARCH_DEC(var, val) do { \
00213 SYS_ARCH_DECL_PROTECT(old_level); \
00214 SYS_ARCH_PROTECT(old_level); \
00215 var -= val; \
00216 SYS_ARCH_UNPROTECT(old_level); \
00217 } while(0)
00218 #endif
00219
00220 #ifndef SYS_ARCH_GET
00221 #define SYS_ARCH_GET(var, ret) do { \
00222 SYS_ARCH_DECL_PROTECT(old_level); \
00223 SYS_ARCH_PROTECT(old_level); \
00224 ret = var; \
00225 SYS_ARCH_UNPROTECT(old_level); \
00226 } while(0)
00227 #endif
00228
00229 #ifndef SYS_ARCH_SET
00230 #define SYS_ARCH_SET(var, val) do { \
00231 SYS_ARCH_DECL_PROTECT(old_level); \
00232 SYS_ARCH_PROTECT(old_level); \
00233 var = val; \
00234 SYS_ARCH_UNPROTECT(old_level); \
00235 } while(0)
00236 #endif
00237
00238
00239 #ifdef __cplusplus
00240 }
00241 #endif
00242
00243 #endif