1 /*
2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this list of
9 * conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12 * of conditions and the following disclaimer in the documentation and/or other materials
13 * provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16 * to endorse or promote products derived from this software without specific prior written
17 * permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32 #include "trace_cnv.h"
33 #include "los_trace.h"
34 #include "los_task.h"
35 #include "los_sem.h"
36 #include "los_mux.h"
37 #include "los_queue.h"
38 #include "los_event.h"
39 #include "los_swtmr.h"
40 #include "los_hook.h"
41
LOS_TraceMemInit(VOID * pool,UINT32 size)42 STATIC VOID LOS_TraceMemInit(VOID *pool, UINT32 size)
43 {
44 LOS_TRACE(MEM_INFO_REQ, pool);
45 }
46
LOS_TraceMemAlloc(VOID * pool,VOID * ptr,UINT32 size)47 STATIC VOID LOS_TraceMemAlloc(VOID *pool, VOID *ptr, UINT32 size)
48 {
49 LOS_TRACE(MEM_ALLOC, pool, (UINTPTR)ptr, size);
50 }
51
LOS_TraceMemFree(VOID * pool,VOID * ptr)52 STATIC VOID LOS_TraceMemFree(VOID *pool, VOID *ptr)
53 {
54 LOS_TRACE(MEM_FREE, pool, (UINTPTR)ptr);
55 }
56
LOS_TraceMemRealloc(VOID * pool,VOID * ptr,UINT32 size)57 STATIC VOID LOS_TraceMemRealloc(VOID *pool, VOID *ptr, UINT32 size)
58 {
59 LOS_TRACE(MEM_REALLOC, pool, (UINTPTR)ptr, size);
60 }
61
LOS_TraceMemAllocAlign(VOID * pool,VOID * ptr,UINT32 size,UINT32 boundary)62 STATIC VOID LOS_TraceMemAllocAlign(VOID *pool, VOID *ptr, UINT32 size, UINT32 boundary)
63 {
64 LOS_TRACE(MEM_ALLOC_ALIGN, pool, (UINTPTR)ptr, size, boundary);
65 }
66
LOS_TraceEventInit(PEVENT_CB_S eventCB)67 STATIC VOID LOS_TraceEventInit(PEVENT_CB_S eventCB)
68 {
69 LOS_TRACE(EVENT_CREATE, (UINTPTR)eventCB);
70 }
71
LOS_TraceEventRead(PEVENT_CB_S eventCB,UINT32 eventMask,UINT32 mode,UINT32 timeout)72 STATIC VOID LOS_TraceEventRead(PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout)
73 {
74 LOS_TRACE(EVENT_READ, (UINTPTR)eventCB, eventCB->uwEventID, eventMask, mode, timeout);
75 }
76
LOS_TraceEventWrite(PEVENT_CB_S eventCB,UINT32 events)77 STATIC VOID LOS_TraceEventWrite(PEVENT_CB_S eventCB, UINT32 events)
78 {
79 LOS_TRACE(EVENT_WRITE, (UINTPTR)eventCB, eventCB->uwEventID, events);
80 }
81
LOS_TraceEventClear(PEVENT_CB_S eventCB,UINT32 events)82 STATIC VOID LOS_TraceEventClear(PEVENT_CB_S eventCB, UINT32 events)
83 {
84 LOS_TRACE(EVENT_CLEAR, (UINTPTR)eventCB, eventCB->uwEventID, events);
85 }
86
LOS_TraceEventDestroy(PEVENT_CB_S eventCB)87 STATIC VOID LOS_TraceEventDestroy(PEVENT_CB_S eventCB)
88 {
89 LOS_TRACE(EVENT_DELETE, (UINTPTR)eventCB, LOS_OK);
90 }
91
LOS_TraceQueueCreate(const LosQueueCB * queueCB)92 STATIC VOID LOS_TraceQueueCreate(const LosQueueCB *queueCB)
93 {
94 LOS_TRACE(QUEUE_CREATE, queueCB->queueID, queueCB->queueLen, queueCB->queueSize - sizeof(UINT32),
95 (UINTPTR)queueCB, 0);
96 }
97
LOS_TraceQueueRW(const LosQueueCB * queueCB,UINT32 operateType,UINT32 bufferSize,UINT32 timeout)98 STATIC VOID LOS_TraceQueueRW(const LosQueueCB *queueCB, UINT32 operateType,
99 UINT32 bufferSize, UINT32 timeout)
100 {
101 LOS_TRACE(QUEUE_RW, queueCB->queueID, queueCB->queueSize, bufferSize, operateType,
102 queueCB->readWriteableCnt[OS_QUEUE_READ], queueCB->readWriteableCnt[OS_QUEUE_WRITE], timeout);
103 }
104
LOS_TraceQueueDelete(const LosQueueCB * queueCB)105 STATIC VOID LOS_TraceQueueDelete(const LosQueueCB *queueCB)
106 {
107 LOS_TRACE(QUEUE_DELETE, queueCB->queueID, queueCB->queueState, queueCB->readWriteableCnt[OS_QUEUE_READ]);
108 }
109
LOS_TraceSemCreate(const LosSemCB * semCB)110 STATIC VOID LOS_TraceSemCreate(const LosSemCB *semCB)
111 {
112 LOS_TRACE(SEM_CREATE, semCB->semID, 0, semCB->semCount);
113 }
114
LOS_TraceSemPost(const LosSemCB * semCB,const LosTaskCB * resumedTask)115 STATIC VOID LOS_TraceSemPost(const LosSemCB *semCB, const LosTaskCB *resumedTask)
116 {
117 (VOID)resumedTask;
118 LOS_TRACE(SEM_POST, semCB->semID, 0, semCB->semCount);
119 }
120
LOS_TraceSemPend(const LosSemCB * semCB,const LosTaskCB * runningTask,UINT32 timeout)121 STATIC VOID LOS_TraceSemPend(const LosSemCB *semCB, const LosTaskCB *runningTask, UINT32 timeout)
122 {
123 (VOID)runningTask;
124 LOS_TRACE(SEM_PEND, semCB->semID, semCB->semCount, timeout);
125 }
126
LOS_TraceSemDelete(const LosSemCB * semCB)127 STATIC VOID LOS_TraceSemDelete(const LosSemCB *semCB)
128 {
129 LOS_TRACE(SEM_DELETE, semCB->semID, LOS_OK);
130 }
131
LOS_TraceMuxCreate(const LosMuxCB * muxCB)132 STATIC VOID LOS_TraceMuxCreate(const LosMuxCB *muxCB)
133 {
134 LOS_TRACE(MUX_CREATE, muxCB->muxID);
135 }
136
LOS_TraceMuxPost(const LosMuxCB * muxCB)137 STATIC VOID LOS_TraceMuxPost(const LosMuxCB *muxCB)
138 {
139 LOS_TRACE(MUX_POST, muxCB->muxID, muxCB->muxCount,
140 (muxCB->owner == NULL) ? 0xffffffff : muxCB->owner->taskID);
141 }
142
LOS_TraceMuxPend(const LosMuxCB * muxCB,UINT32 timeout)143 STATIC VOID LOS_TraceMuxPend(const LosMuxCB *muxCB, UINT32 timeout)
144 {
145 LOS_TRACE(MUX_PEND, muxCB->muxID, muxCB->muxCount,
146 (muxCB->owner == NULL) ? 0xffffffff : muxCB->owner->taskID, timeout);
147 }
148
LOS_TraceMuxDelete(const LosMuxCB * muxCB)149 STATIC VOID LOS_TraceMuxDelete(const LosMuxCB *muxCB)
150 {
151 LOS_TRACE(MUX_DELETE, muxCB->muxID, muxCB->muxStat, muxCB->muxCount,
152 (muxCB->owner == NULL) ? 0xffffffff : muxCB->owner->taskID);
153 }
154
LOS_TraceTaskCreate(const LosTaskCB * taskCB)155 STATIC VOID LOS_TraceTaskCreate(const LosTaskCB *taskCB)
156 {
157 LOS_TRACE(TASK_CREATE, taskCB->taskID, taskCB->taskStatus, taskCB->priority);
158 }
159
LOS_TraceTaskPriModify(const LosTaskCB * taskCB,UINT32 prio)160 STATIC VOID LOS_TraceTaskPriModify(const LosTaskCB *taskCB, UINT32 prio)
161 {
162 LOS_TRACE(TASK_PRIOSET, taskCB->taskID, taskCB->taskStatus, taskCB->priority, prio);
163 }
164
LOS_TraceTaskDelete(const LosTaskCB * taskCB)165 STATIC VOID LOS_TraceTaskDelete(const LosTaskCB *taskCB)
166 {
167 LOS_TRACE(TASK_DELETE, taskCB->taskID, taskCB->taskStatus, (UINTPTR)taskCB->stackPointer);
168 }
169
LOS_TraceTaskSwitchedIn(VOID)170 STATIC VOID LOS_TraceTaskSwitchedIn(VOID)
171 {
172 LosTaskCB *newTask = g_losTask.newTask;
173 LosTaskCB *runTask = g_losTask.runTask;
174 LOS_TRACE(TASK_SWITCH, newTask->taskID, runTask->priority, runTask->taskStatus,
175 newTask->priority, newTask->taskStatus);
176 }
177
LOS_TraceTaskResume(const LosTaskCB * taskCB)178 STATIC VOID LOS_TraceTaskResume(const LosTaskCB *taskCB)
179 {
180 LOS_TRACE(TASK_RESUME, taskCB->taskID, taskCB->taskStatus, taskCB->priority);
181 }
182
LOS_TraceTaskSuspend(const LosTaskCB * taskCB)183 STATIC VOID LOS_TraceTaskSuspend(const LosTaskCB *taskCB)
184 {
185 LOS_TRACE(TASK_SUSPEND, taskCB->taskID, taskCB->taskStatus, g_losTask.runTask->taskID);
186 }
187
LOS_TraceIsrEnter(UINT32 hwiNum)188 STATIC VOID LOS_TraceIsrEnter(UINT32 hwiNum)
189 {
190 LOS_TRACE(HWI_RESPONSE_IN, hwiNum);
191 }
192
LOS_TraceIsrExit(UINT32 hwiNum)193 STATIC VOID LOS_TraceIsrExit(UINT32 hwiNum)
194 {
195 LOS_TRACE(HWI_RESPONSE_OUT, hwiNum);
196 }
197
LOS_TraceSwtmrCreate(const SWTMR_CTRL_S * swtmr)198 STATIC VOID LOS_TraceSwtmrCreate(const SWTMR_CTRL_S *swtmr)
199 {
200 LOS_TRACE(SWTMR_CREATE, swtmr->usTimerID);
201 }
202
LOS_TraceSwtmrDelete(const SWTMR_CTRL_S * swtmr)203 STATIC VOID LOS_TraceSwtmrDelete(const SWTMR_CTRL_S *swtmr)
204 {
205 LOS_TRACE(SWTMR_DELETE, swtmr->usTimerID);
206 }
207
LOS_TraceSwtmrExpired(const SWTMR_CTRL_S * swtmr)208 STATIC VOID LOS_TraceSwtmrExpired(const SWTMR_CTRL_S *swtmr)
209 {
210 LOS_TRACE(SWTMR_EXPIRED, swtmr->usTimerID);
211 }
212
LOS_TraceSwtmrStart(const SWTMR_CTRL_S * swtmr)213 STATIC VOID LOS_TraceSwtmrStart(const SWTMR_CTRL_S *swtmr)
214 {
215 LOS_TRACE(SWTMR_START, swtmr->usTimerID, swtmr->ucMode, swtmr->uwInterval);
216 }
217
LOS_TraceSwtmrStop(const SWTMR_CTRL_S * swtmr)218 STATIC VOID LOS_TraceSwtmrStop(const SWTMR_CTRL_S *swtmr)
219 {
220 LOS_TRACE(SWTMR_STOP, swtmr->usTimerID);
221 }
222
OsTraceCnvInit(VOID)223 VOID OsTraceCnvInit(VOID)
224 {
225 LOS_HookReg(LOS_HOOK_TYPE_MEM_ALLOC, LOS_TraceMemAlloc);
226 LOS_HookReg(LOS_HOOK_TYPE_MEM_FREE, LOS_TraceMemFree);
227 LOS_HookReg(LOS_HOOK_TYPE_MEM_INIT, LOS_TraceMemInit);
228 LOS_HookReg(LOS_HOOK_TYPE_MEM_REALLOC, LOS_TraceMemRealloc);
229 LOS_HookReg(LOS_HOOK_TYPE_MEM_ALLOCALIGN, LOS_TraceMemAllocAlign);
230 LOS_HookReg(LOS_HOOK_TYPE_EVENT_INIT, LOS_TraceEventInit);
231 LOS_HookReg(LOS_HOOK_TYPE_EVENT_READ, LOS_TraceEventRead);
232 LOS_HookReg(LOS_HOOK_TYPE_EVENT_WRITE, LOS_TraceEventWrite);
233 LOS_HookReg(LOS_HOOK_TYPE_EVENT_CLEAR, LOS_TraceEventClear);
234 LOS_HookReg(LOS_HOOK_TYPE_EVENT_DESTROY, LOS_TraceEventDestroy);
235 LOS_HookReg(LOS_HOOK_TYPE_QUEUE_CREATE, LOS_TraceQueueCreate);
236 LOS_HookReg(LOS_HOOK_TYPE_QUEUE_DELETE, LOS_TraceQueueDelete);
237 LOS_HookReg(LOS_HOOK_TYPE_QUEUE_READ, LOS_TraceQueueRW);
238 LOS_HookReg(LOS_HOOK_TYPE_QUEUE_WRITE, LOS_TraceQueueRW);
239 LOS_HookReg(LOS_HOOK_TYPE_SEM_CREATE, LOS_TraceSemCreate);
240 LOS_HookReg(LOS_HOOK_TYPE_SEM_DELETE, LOS_TraceSemDelete);
241 LOS_HookReg(LOS_HOOK_TYPE_SEM_POST, LOS_TraceSemPost);
242 LOS_HookReg(LOS_HOOK_TYPE_SEM_PEND, LOS_TraceSemPend);
243 LOS_HookReg(LOS_HOOK_TYPE_MUX_CREATE, LOS_TraceMuxCreate);
244 LOS_HookReg(LOS_HOOK_TYPE_MUX_POST, LOS_TraceMuxPost);
245 LOS_HookReg(LOS_HOOK_TYPE_MUX_PEND, LOS_TraceMuxPend);
246 LOS_HookReg(LOS_HOOK_TYPE_MUX_DELETE, LOS_TraceMuxDelete);
247 LOS_HookReg(LOS_HOOK_TYPE_TASK_PRIMODIFY, LOS_TraceTaskPriModify);
248 LOS_HookReg(LOS_HOOK_TYPE_TASK_DELETE, LOS_TraceTaskDelete);
249 LOS_HookReg(LOS_HOOK_TYPE_TASK_CREATE, LOS_TraceTaskCreate);
250 LOS_HookReg(LOS_HOOK_TYPE_TASK_SWITCHEDIN, LOS_TraceTaskSwitchedIn);
251 LOS_HookReg(LOS_HOOK_TYPE_MOVEDTASKTOREADYSTATE, LOS_TraceTaskResume);
252 LOS_HookReg(LOS_HOOK_TYPE_MOVEDTASKTOSUSPENDEDLIST, LOS_TraceTaskSuspend);
253 LOS_HookReg(LOS_HOOK_TYPE_ISR_ENTER, LOS_TraceIsrEnter);
254 LOS_HookReg(LOS_HOOK_TYPE_ISR_EXIT, LOS_TraceIsrExit);
255 LOS_HookReg(LOS_HOOK_TYPE_SWTMR_CREATE, LOS_TraceSwtmrCreate);
256 LOS_HookReg(LOS_HOOK_TYPE_SWTMR_DELETE, LOS_TraceSwtmrDelete);
257 LOS_HookReg(LOS_HOOK_TYPE_SWTMR_EXPIRED, LOS_TraceSwtmrExpired);
258 LOS_HookReg(LOS_HOOK_TYPE_SWTMR_START, LOS_TraceSwtmrStart);
259 LOS_HookReg(LOS_HOOK_TYPE_SWTMR_STOP, LOS_TraceSwtmrStop);
260 }
261