1 /*
2  * Copyright (C) 2015-2017 Alibaba Group Holding Limited
3  */
4 
5 #ifndef K_TRACE_H
6 #define K_TRACE_H
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 /** @addtogroup aos_rhino trace
13  *  Trace
14  *
15  *  @{
16  */
17 
18 #ifdef AOS_COMP_TRACE
19 
20 #define SYSVIEW_TRACE_ID_SEM_BASE         (40u)
21 #define SYSVIEW_TRACE_ID_SEM_CREATE       ( 1u + SYSVIEW_TRACE_ID_SEM_BASE)
22 #define SYSVIEW_TRACE_ID_SEM_OVERFLOW       ( 2u + SYSVIEW_TRACE_ID_SEM_BASE)
23 #define SYSVIEW_TRACE_ID_SEM_CNT_INCREASE       ( 3u + SYSVIEW_TRACE_ID_SEM_BASE)
24 #define SYSVIEW_TRACE_ID_SEM_GET_SUCCESS       ( 4u + SYSVIEW_TRACE_ID_SEM_BASE)
25 #define SYSVIEW_TRACE_ID_SEM_GET_BLK       ( 5u + SYSVIEW_TRACE_ID_SEM_BASE)
26 #define SYSVIEW_TRACE_ID_SEM_TASK_WAKE       ( 6u + SYSVIEW_TRACE_ID_SEM_BASE)
27 #define SYSVIEW_TRACE_ID_SEM_DEL       ( 7u + SYSVIEW_TRACE_ID_SEM_BASE)
28 #define SYSVIEW_TRACE_ID_SEM_GIVE  ( 8u + SYSVIEW_TRACE_ID_SEM_BASE)
29 
30 #define SYSVIEW_TRACE_ID_MUTEX_BASE       (50u)
31 #define SYSVIEW_TRACE_ID_MUTEX_CREATE    ( 1u + SYSVIEW_TRACE_ID_MUTEX_BASE)
32 #define SYSVIEW_TRACE_ID_MUTEX_RELEASE    ( 2u + SYSVIEW_TRACE_ID_MUTEX_BASE)
33 #define SYSVIEW_TRACE_ID_MUTEX_GET    ( 3u + SYSVIEW_TRACE_ID_MUTEX_BASE)
34 #define SYSVIEW_TRACE_ID_TASK_PRI_INV    ( 4u + SYSVIEW_TRACE_ID_MUTEX_BASE)
35 #define SYSVIEW_TRACE_ID_MUTEX_GET_BLK    ( 5u + SYSVIEW_TRACE_ID_MUTEX_BASE)
36 #define SYSVIEW_TRACE_ID_MUTEX_RELEASE_SUCCESS    ( 6u + SYSVIEW_TRACE_ID_MUTEX_BASE)
37 #define SYSVIEW_TRACE_ID_MUTEX_TASK_WAKE    ( 7u + SYSVIEW_TRACE_ID_MUTEX_BASE)
38 #define SYSVIEW_TRACE_ID_MUTEX_DEL    ( 8u + SYSVIEW_TRACE_ID_MUTEX_BASE)
39 
40 #define SYSVIEW_TRACE_ID_EVENT_BASE       (60u)
41 #define SYSVIEW_TRACE_ID_EVENT_CREATE    ( 1u + SYSVIEW_TRACE_ID_EVENT_BASE)
42 #define SYSVIEW_TRACE_ID_EVENT_GET    ( 2u + SYSVIEW_TRACE_ID_EVENT_BASE)
43 #define SYSVIEW_TRACE_ID_EVENT_GET_BLK    ( 3u + SYSVIEW_TRACE_ID_EVENT_BASE)
44 #define SYSVIEW_TRACE_ID_EVENT_TASK_WAKE    ( 4u + SYSVIEW_TRACE_ID_EVENT_BASE)
45 #define SYSVIEW_TRACE_ID_EVENT_DEL    ( 5u + SYSVIEW_TRACE_ID_EVENT_BASE)
46 
47 
48 #define SYSVIEW_TRACE_ID_BUF_QUEUE_BASE       (70u)
49 #define SYSVIEW_TRACE_ID_BUF_QUEUE_CREATE    ( 1u + SYSVIEW_TRACE_ID_BUF_QUEUE_BASE)
50 #define SYSVIEW_TRACE_ID_BUF_QUEUE_MAX    ( 2u + SYSVIEW_TRACE_ID_BUF_QUEUE_BASE)
51 #define SYSVIEW_TRACE_ID_BUF_QUEUE_POST    ( 3u + SYSVIEW_TRACE_ID_BUF_QUEUE_BASE)
52 #define SYSVIEW_TRACE_ID_BUF_QUEUE_TASK_WAKE    ( 4u + SYSVIEW_TRACE_ID_BUF_QUEUE_BASE)
53 #define SYSVIEW_TRACE_ID_BUF_QUEUE_GET_BLK    ( 5u + SYSVIEW_TRACE_ID_BUF_QUEUE_BASE)
54 
55 #define SYSVIEW_TRACE_ID_WORKQUEUE_BASE       (80u)
56 #define SYSVIEW_TRACE_ID_WORKQUEUE_INIT    ( 1u + SYSVIEW_TRACE_ID_WORKQUEUE_BASE)
57 #define SYSVIEW_TRACE_ID_WORKQUEUE_CREATE    ( 2u + SYSVIEW_TRACE_ID_WORKQUEUE_BASE)
58 #define SYSVIEW_TRACE_ID_WORKQUEUE_DEL    ( 3u + SYSVIEW_TRACE_ID_WORKQUEUE_BASE)
59 
60 
61 /* interrupt trace */
62 void trace_intrpt_exit(void);
63 void trace_intrpt_enter(void);
64 
65 #if 0
66 #define TRACE_INTRPT_ENTETR() trace_intrpt_enter()
67 #define TRACE_INTRPT_EXIT()  trace_intrpt_exit()
68 #else
69 #define TRACE_INTRPT_ENTETR()
70 #define TRACE_INTRPT_EXIT()
71 #endif
72 
73 /* task trace */
74 void trace_task_switch(ktask_t *from, ktask_t *to);
75 void trace_intrpt_task_switch(ktask_t *from, ktask_t *to);
76 void trace_init(void);
77 void trace_task_idel(void);
78 void trace_task_create(ktask_t *task);
79 void trace_task_wait_abort(ktask_t *task, ktask_t *task_abort);
80 void trace_task_resume(ktask_t *task, ktask_t *task_resumed);
81 void trace_task_suspend(ktask_t *task, ktask_t *task_suspended);
82 void trace_task_start_ready(ktask_t *task);
83 void trace_task_stop_ready(ktask_t *task);
84 
85 #define TRACE_INIT()  trace_init()
86 #define TRACE_TASK_SWITCH(from, to)   trace_task_switch(from, to)
87 #define TRACE_TASK_CREATE(task)   trace_task_create(task)
88 #define TRACE_TASK_SLEEP(task, ticks)
89 #define TRACE_INTRPT_TASK_SWITCH(from, to) trace_intrpt_task_switch(from, to)
90 #define TRACE_TASK_PRI_CHANGE(task, task_pri_chg, pri)
91 #define TRACE_TASK_SUSPEND(task, task_suspended) trace_task_suspend(task, task_suspended)
92 #define TRACE_TASK_RESUME(task, task_resumed) trace_task_resume(task, task_resumed)
93 #define TRACE_TASK_DEL(task, task_del)
94 #define TRACE_TASK_WAIT_ABORT(task, task_abort)  trace_task_wait_abort(task, task_abort)
95 #define TRACE_TASK_START_READY(task)  trace_task_start_ready(task)
96 #define TRACE_TASK_STOP_READY(task)  trace_task_stop_ready(task)
97 
98 /* semaphore trace */
99 void trace_sem_create(ktask_t *task, ksem_t *sem);
100 void trace_sem_overflow(ktask_t *task, ksem_t *sem);
101 void trace_sem_cnt_increase(ktask_t *task, ksem_t *sem);
102 void trace_sem_get_success(ktask_t *task, ksem_t *sem);
103 void trace_sem_get_blk(ktask_t *task, ksem_t *sem);
104 void trace_sem_task_wake(ktask_t *task, ktask_t *task_waked_up, ksem_t *sem, uint8_t opt_wake_all);
105 void trace_sem_del(ktask_t *task, ksem_t *sem);
106 void trace_sem_give(ksem_t *sem, uint8_t opt_wake_all);
107 
108 #define TRACE_SEM_CREATE(task, sem) trace_sem_create(task, sem)
109 #define TRACE_SEM_OVERFLOW(task, sem)  trace_sem_overflow(task, sem)
110 #define TRACE_SEM_CNT_INCREASE(task, sem) trace_sem_cnt_increase(task, sem)
111 #define TRACE_SEM_GET_SUCCESS(task, sem) trace_sem_get_success(task, sem)
112 #define TRACE_SEM_GET_BLK(task, sem, wait_option) trace_sem_get_blk(task, sem)
113 #define TRACE_SEM_TASK_WAKE(task, task_waked_up, sem, opt_wake_all) trace_sem_task_wake(task, task_waked_up, sem, opt_wake_all)
114 #define TRACE_SEM_DEL(task, sem) trace_sem_del(task, sem)
115 #define TRACE_SEM_GIVE(sem, opt_wake_all) trace_sem_give(sem, opt_wake_all)
116 
117 /* mutex trace */
118 void trace_mutex_create(ktask_t *task, kmutex_t *mutex, const name_t *name);
119 void trace_mutex_release(ktask_t *task, ktask_t *task_release, uint8_t new_pri);
120 void trace_mutex_get(ktask_t *task, kmutex_t *mutex, tick_t wait_option);
121 void trace_task_pri_inv(ktask_t *task, ktask_t *mtxtsk);
122 void trace_mutex_get_blk(ktask_t *task, kmutex_t *mutex, tick_t wait_option);
123 void trace_mutex_release_success(ktask_t *task, kmutex_t *mutex);
124 void trace_mutex_task_wake(ktask_t *task, ktask_t *task_waked_up, kmutex_t *mutex);
125 void trace_mutex_del(ktask_t *task, kmutex_t *mutex);
126 
127 #define TRACE_MUTEX_CREATE(task, mutex, name)  trace_mutex_create(task, mutex, name)
128 #define TRACE_MUTEX_RELEASE(task, task_release, new_pri)  trace_mutex_release(task, task_release, new_pri)
129 #define TRACE_MUTEX_GET(task, mutex, wait_option)  trace_mutex_get(task, mutex, wait_option)
130 #define TRACE_TASK_PRI_INV(task, mtxtsk)  trace_task_pri_inv(task, mtxtsk)
131 #define TRACE_MUTEX_GET_BLK(task, mutex, wait_option)  trace_mutex_get_blk(task, mutex, wait_option)
132 #define TRACE_MUTEX_RELEASE_SUCCESS(task, mutex)  trace_mutex_release_success(task, mutex)
133 #define TRACE_MUTEX_TASK_WAKE(task, task_waked_up, mutex)  trace_mutex_task_wake(task, task_waked_up, mutex)
134 #define TRACE_MUTEX_DEL(task, mutex)  trace_mutex_del(task, mutex)
135 
136 /* event trace */
137 void trace_event_create(ktask_t *task, kevent_t *event, const name_t *name, uint32_t flags_init);
138 void trace_event_get(ktask_t *task, kevent_t *event);
139 void trace_event_get_blk(ktask_t *task, kevent_t *event, tick_t wait_option);
140 void trace_event_task_wake(ktask_t *task, ktask_t *task_waked_up, kevent_t *event);
141 void trace_event_del(ktask_t *task, kevent_t *event);
142 
143 #define TRACE_EVENT_CREATE(task, event, name, flags_init) trace_event_create(task, event, name, flags_init)
144 #define TRACE_EVENT_GET(task, event)  trace_event_get(task, event)
145 #define TRACE_EVENT_GET_BLK(task, event, wait_option)  trace_event_get_blk(task, event, wait_option)
146 #define TRACE_EVENT_TASK_WAKE(task, task_waked_up, event)  trace_event_task_wake(task, task_waked_up, event)
147 #define TRACE_EVENT_DEL(task, event)  trace_event_del(task, event)
148 
149 /* buf_queue trace */
150 void trace_buf_queue_create(ktask_t *task, kbuf_queue_t *buf_queue);
151 void trace_buf_queue_max(ktask_t *task, kbuf_queue_t *buf_queue, void *msg, size_t msg_size);
152 void trace_buf_queue_post(ktask_t *task, kbuf_queue_t *buf_queue, void *msg, size_t msg_size);
153 void trace_buf_queue_task_wake(ktask_t *task, ktask_t *task_waked_up, kbuf_queue_t *buf_queue);
154 void trace_buf_queue_get_blk(ktask_t *task, kbuf_queue_t *buf_queue, tick_t wait_option);
155 
156 #define TRACE_BUF_QUEUE_CREATE(task, buf_queue)  trace_buf_queue_create(task, buf_queue)
157 #define TRACE_BUF_QUEUE_MAX(task, buf_queue, msg, msg_size) trace_buf_queue_max(task, buf_queue, msg, msg_size)
158 #define TRACE_BUF_QUEUE_POST(task, buf_queue, msg, msg_size)  trace_buf_queue_post(task, buf_queue, msg, msg_size)
159 #define TRACE_BUF_QUEUE_TASK_WAKE(task, task_waked_up, queue)  trace_buf_queue_task_wake(task, task_waked_up, queue)
160 #define TRACE_BUF_QUEUE_GET_BLK(task, buf_queue, wait_option)  trace_buf_queue_get_blk(task, buf_queue, wait_option)
161 
162 /* timer trace */
163 #define TRACE_TIMER_CREATE(task, timer)
164 #define TRACE_TIMER_DEL(task, timer)
165 
166 /* MBLK trace */
167 #define TRACE_MBLK_POOL_CREATE(task, pool)
168 
169 /* MM trace */
170 #define TRACE_MM_POOL_CREATE(task, pool)
171 
172 /* MM region trace*/
173 #define TRACE_MM_REGION_CREATE(task, regions)
174 
175 /* work queue trace */
176 void trace_workqueue_init(ktask_t *task, kwork_t *work);
177 void trace_workqueue_create(ktask_t *task, kworkqueue_t *workqueue);
178 void trace_workqueue_del(ktask_t *task, kworkqueue_t *workqueue);
179 
180 #define TRACE_WORK_INIT(task, work)   trace_workqueue_init(task, work)
181 #define TRACE_WORKQUEUE_CREATE(task, workqueue)  trace_workqueue_create(task, workqueue)
182 #define TRACE_WORKQUEUE_DEL(task, workqueue)  trace_workqueue_del(task, workqueue)
183 
184 int uart_port_init(void);
185 #else
186 
187 /* task trace */
188 #define TRACE_INIT()
189 #define TRACE_TASK_SWITCH(from, to)
190 #define TRACE_TASK_CREATE(task)
191 #define TRACE_TASK_SLEEP(task, ticks)
192 #define TRACE_INTRPT_TASK_SWITCH(from, to)
193 #define TRACE_TASK_PRI_CHANGE(task, task_pri_chg, pri)
194 #define TRACE_TASK_SUSPEND(task, task_suspended)
195 #define TRACE_TASK_RESUME(task, task_resumed)
196 #define TRACE_TASK_DEL(task, task_del)
197 #define TRACE_TASK_WAIT_ABORT(task, task_abort)
198 #define TRACE_TASK_START_READY(task)
199 #define TRACE_TASK_STOP_READY(task)
200 
201 /* interuppt trace */
202 #define TRACE_INTRPT_ENTETR()
203 #define TRACE_INTRPT_EXIT()
204 
205 /* semaphore trace */
206 #define TRACE_SEM_CREATE(task, sem)
207 #define TRACE_SEM_OVERFLOW(task, sem)
208 #define TRACE_SEM_CNT_INCREASE(task, sem)
209 #define TRACE_SEM_GET_SUCCESS(task, sem)
210 #define TRACE_SEM_GET_BLK(task, sem, wait_option)
211 #define TRACE_SEM_TASK_WAKE(task, task_waked_up, sem, opt_wake_all)
212 #define TRACE_SEM_DEL(task, sem)
213 #define TRACE_SEM_GIVE(sem, opt_wake_all)
214 
215 /* mutex trace */
216 #define TRACE_MUTEX_CREATE(task, mutex, name)
217 #define TRACE_MUTEX_RELEASE(task, task_release, new_pri)
218 #define TRACE_MUTEX_GET(task, mutex, wait_option)
219 #define TRACE_TASK_PRI_INV(task, mtxtsk)
220 #define TRACE_MUTEX_GET_BLK(task, mutex, wait_option)
221 #define TRACE_MUTEX_RELEASE_SUCCESS(task, mutex)
222 #define TRACE_MUTEX_TASK_WAKE(task, task_waked_up, mutex)
223 #define TRACE_MUTEX_DEL(task, mutex)
224 
225 /* event trace */
226 #define TRACE_EVENT_CREATE(task, event, name, flags_init)
227 #define TRACE_EVENT_GET(task, event)
228 #define TRACE_EVENT_GET_BLK(task, event, wait_option)
229 #define TRACE_EVENT_TASK_WAKE(task, task_waked_up, event)
230 #define TRACE_EVENT_DEL(task, event)
231 
232 /* buf_queue trace */
233 #define TRACE_BUF_QUEUE_CREATE(task, buf_queue)
234 #define TRACE_BUF_QUEUE_MAX(task, buf_queue, msg, msg_size)
235 #define TRACE_BUF_QUEUE_POST(task, buf_queue, msg, msg_size)
236 #define TRACE_BUF_QUEUE_TASK_WAKE(task, task_waked_up, queue)
237 #define TRACE_BUF_QUEUE_GET_BLK(task, buf_queue, wait_option)
238 
239 /* timer trace */
240 #define TRACE_TIMER_CREATE(task, timer)
241 #define TRACE_TIMER_DEL(task, timer)
242 
243 /* MBLK trace */
244 #define TRACE_MBLK_POOL_CREATE(task, pool)
245 
246 /* MM trace */
247 #define TRACE_MM_POOL_CREATE(task, pool)
248 
249 /* MM region trace*/
250 #define TRACE_MM_REGION_CREATE(task, regions)
251 
252 /* work queue trace */
253 #define TRACE_WORK_INIT(task, work)
254 #define TRACE_WORKQUEUE_CREATE(task, workqueue)
255 #define TRACE_WORKQUEUE_DEL(task, workqueue)
256 
257 #endif
258 /** @} */
259 
260 #ifdef __cplusplus
261 }
262 #endif
263 
264 #endif
265 
266