1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#ifndef __LWIP_ARCH_SYS_ARCH_H__
#define __LWIP_ARCH_SYS_ARCH_H__
#include <stddef.h>
#include "arch/cc.h"
#include <thread.h>
#include <mbox.h>
typedef struct semaphore *sys_sem_t;
typedef struct mailbox *sys_mbox_t;
typedef struct thread *sys_thread_t;
static inline void sys_sem_signal(sys_sem_t *sem)
{
if (!!sem)
sem_up(*sem);
}
#define sys_now ms_timer
#define SYS_MBOX_NULL NULL
#define SYS_SEM_NULL NULL
extern void __compile_time_error(void);
#define SYS_ARCH_OP(var, val, inc, add) \
do { \
if (__builtin_constant_p(val) && (val) == 1) { \
switch (sizeof(var)) { \
case 1: \
asm volatile(inc "b %0" : "+m" (var)); \
break; \
case 2: \
asm volatile(inc "w %0" : "+m" (var)); \
break; \
case 4: \
asm volatile(inc "l %0" : "+m" (var)); \
break; \
default: \
__compile_time_error(); \
break; \
} \
} else { \
switch (sizeof(var)) { \
case 1: \
asm volatile(add "b %1,%0" : "+m" (var) : "ri" (val)); \
break; \
case 2: \
asm volatile(add "w %1,%0" : "+m" (var) : "ri" (val)); \
break; \
case 4: \
asm volatile(add "l %1,%0" : "+m" (var) : "ri" (val)); \
break; \
default: \
__compile_time_error(); \
break; \
} \
} \
} while (0)
static inline struct sys_timeouts *sys_arch_timeouts(void)
{
return (struct sys_timeouts *)¤t()->pvt;
}
#define SYS_ARCH_INC(var, val) SYS_ARCH_OP(var, val, "inc", "add")
#define SYS_ARCH_DEC(var, val) SYS_ARCH_OP(var, val, "dec", "sub")
#define SYS_ARCH_GET(var, ret) \
do { \
volatile __typeof__(var) * const __varp = &(var); \
ret = *__varp; \
} while (0)
#define SYS_ARCH_SET(var, val) \
do { \
volatile __typeof__(var) * const __varp = &(var); \
*__varp = val; \
} while (0)
#define SYS_ARCH_DECL_PROTECT(VAR) irq_state_t VAR
#define SYS_ARCH_PROTECT(VAR) VAR = irq_save()
#define SYS_ARCH_UNPROTECT(VAR) irq_restore(VAR)
#endif /* __LWIP_ARCH_SYS_ARCH_H__ */
|