1 #ifndef __SYS_ARCH_H__
2 #define __SYS_ARCH_H__
3 #include "cmsis_os.h"
4 #include "net_defs.h"
5 #include "lwip/err.h"
6 #include "hal_trace.h"
7 
8 extern void *rt_malloc(size_t size);
9 extern void rt_free(void *rmem);
10 #if 1
11 #define lwip_sys_malloc(size)({\
12 	unsigned char * ret = NULL;\
13 	ret = rt_malloc(size);\
14 	TRACE("sys_malloc:%s %d\n", __func__, __LINE__);\
15 	ret;\
16 	})
17 
18 #else
19 #define lwip_sys_malloc(size)({\
20 	unsigned char * ret = NULL;\
21 	ret = rt_malloc(size);\
22 	uart_printf("sys_malloc:%s %d\n", __func__, __LINE__);\
23 	ret;\
24 	})
25 #endif
26 #define lwip_sys_free   rt_free
27 #define MAX_MSG_IN_LWIP_MBOX 50
28 
29 struct lwip_sem{
30     osSemaphoreId sem_id;
31 #if defined(CMSIS_OS_RTX) && (osCMSIS < 0x20000U)
32     uint32_t os_semaphore_name[2];
33 #endif
34 };
35 typedef struct lwip_sem sys_sem_t;
36 
37 struct lwip_message_queue{
38   osMessageQDef_t queue_def;
39   osMessageQId            msg_id;
40   uint32_t                queue_sz;    ///< number of elements in the queue
41 #if (osCMSIS < 0x20000U)
42   void                    *pool;    ///< memory array for messages
43 #endif
44 };
45 typedef struct lwip_message_queue* sys_mbox_t;
46 
47 struct lwip_mutex{
48     osMutexId mutex_id;
49     uint32_t  os_mutex_cb[3];
50 };
51 typedef struct lwip_mutex sys_mutex_t;
52 
53 #ifdef CMSIS_OS_RTX
54 struct lwip_sys_thread{
55     osThreadDef_t thread_def;
56     void *        stack;
57 };
58 //typedef struct lwip_sys_thread  *sys_thread_t;
59 #endif
60 
61 //#ifdef osCMSIS_FreeRTOS
62 //typedef osThreadId sys_thread_t;
63 //#endif
64 typedef osThreadId sys_thread_t;
65 
66 
67 #ifndef NULL
68 #define NULL 0
69 #endif
70 
71 #ifndef offsetof
72 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
73 #endif
74 
75 #define SYS_MBOX_NULL  (sys_mbox_t)NULL
76 #define SYS_SEM_NULL   (sys_sem_t)NULL
77 #define SYS_MUTEX_NULL   (sys_mutex_t)NULL
78 
79 err_t sys_sem_new(sys_sem_t *sem,u8_t count);
80 void sys_sem_free(sys_sem_t *sem);
81 void sys_sem_signal(sys_sem_t *sem);
82 
83 #endif /* __SYS_ARCH_H__ */
84 
85 
86