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