• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3  * Copyright (c) 2020-2022 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 "hm_liteipc.h"
41 #include "los_hook.h"
42 
LOS_TraceMemInit(VOID * pool,UINT32 size)43 STATIC VOID LOS_TraceMemInit(VOID *pool, UINT32 size)
44 {
45     LOS_TRACE(MEM_INFO_REQ, pool);
46 }
47 
LOS_TraceMemAlloc(VOID * pool,VOID * ptr,UINT32 size)48 STATIC VOID LOS_TraceMemAlloc(VOID *pool, VOID *ptr, UINT32 size)
49 {
50     LOS_TRACE(MEM_ALLOC, pool, (UINTPTR)ptr, size);
51 }
52 
LOS_TraceMemFree(VOID * pool,VOID * ptr)53 STATIC VOID LOS_TraceMemFree(VOID *pool, VOID *ptr)
54 {
55     LOS_TRACE(MEM_FREE, pool, (UINTPTR)ptr);
56 }
57 
LOS_TraceMemRealloc(VOID * pool,VOID * ptr,UINT32 size)58 STATIC VOID LOS_TraceMemRealloc(VOID *pool, VOID *ptr, UINT32 size)
59 {
60     LOS_TRACE(MEM_REALLOC, pool, (UINTPTR)ptr, size);
61 }
62 
LOS_TraceMemAllocAlign(VOID * pool,VOID * ptr,UINT32 size,UINT32 boundary)63 STATIC VOID LOS_TraceMemAllocAlign(VOID *pool, VOID *ptr, UINT32 size, UINT32 boundary)
64 {
65     LOS_TRACE(MEM_ALLOC_ALIGN, pool, (UINTPTR)ptr, size, boundary);
66 }
67 
LOS_TraceEventInit(PEVENT_CB_S eventCB)68 STATIC VOID LOS_TraceEventInit(PEVENT_CB_S eventCB)
69 {
70     LOS_TRACE(EVENT_CREATE, (UINTPTR)eventCB);
71 }
72 
LOS_TraceEventRead(PEVENT_CB_S eventCB,UINT32 eventMask,UINT32 mode,UINT32 timeout)73 STATIC VOID LOS_TraceEventRead(PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout)
74 {
75     LOS_TRACE(EVENT_READ, (UINTPTR)eventCB, eventCB->uwEventID, eventMask, mode, timeout);
76 }
77 
LOS_TraceEventWrite(PEVENT_CB_S eventCB,UINT32 events)78 STATIC VOID LOS_TraceEventWrite(PEVENT_CB_S eventCB, UINT32 events)
79 {
80     LOS_TRACE(EVENT_WRITE, (UINTPTR)eventCB, eventCB->uwEventID, events);
81 }
82 
LOS_TraceEventClear(PEVENT_CB_S eventCB,UINT32 events)83 STATIC VOID LOS_TraceEventClear(PEVENT_CB_S eventCB, UINT32 events)
84 {
85     LOS_TRACE(EVENT_CLEAR, (UINTPTR)eventCB, eventCB->uwEventID, events);
86 }
87 
LOS_TraceEventDestroy(PEVENT_CB_S eventCB)88 STATIC VOID LOS_TraceEventDestroy(PEVENT_CB_S eventCB)
89 {
90     LOS_TRACE(EVENT_DELETE, (UINTPTR)eventCB, LOS_OK);
91 }
92 
LOS_TraceQueueCreate(const LosQueueCB * queueCB)93 STATIC VOID LOS_TraceQueueCreate(const LosQueueCB *queueCB)
94 {
95     LOS_TRACE(QUEUE_CREATE, queueCB->queueID, queueCB->queueLen, queueCB->queueSize - sizeof(UINT32),
96         (UINTPTR)queueCB, 0);
97 }
98 
LOS_TraceQueueRW(const LosQueueCB * queueCB,UINT32 operateType,UINT32 bufferSize,UINT32 timeout)99 STATIC VOID LOS_TraceQueueRW(const LosQueueCB *queueCB, UINT32 operateType,
100                     UINT32 bufferSize, UINT32 timeout)
101 {
102     LOS_TRACE(QUEUE_RW, queueCB->queueID, queueCB->queueSize, bufferSize, operateType,
103         queueCB->readWriteableCnt[OS_QUEUE_READ], queueCB->readWriteableCnt[OS_QUEUE_WRITE], timeout);
104 }
105 
LOS_TraceQueueDelete(const LosQueueCB * queueCB)106 STATIC VOID LOS_TraceQueueDelete(const LosQueueCB *queueCB)
107 {
108     LOS_TRACE(QUEUE_DELETE, queueCB->queueID, queueCB->queueState, queueCB->readWriteableCnt[OS_QUEUE_READ]);
109 }
110 
LOS_TraceSemCreate(const LosSemCB * semCB)111 STATIC VOID LOS_TraceSemCreate(const LosSemCB *semCB)
112 {
113     LOS_TRACE(SEM_CREATE, semCB->semID, 0, semCB->semCount);
114 }
115 
LOS_TraceSemPost(const LosSemCB * semCB,const LosTaskCB * resumedTask)116 STATIC VOID LOS_TraceSemPost(const LosSemCB *semCB, const LosTaskCB *resumedTask)
117 {
118     (VOID)resumedTask;
119     LOS_TRACE(SEM_POST, semCB->semID, 0, semCB->semCount);
120 }
121 
LOS_TraceSemPend(const LosSemCB * semCB,const LosTaskCB * runningTask,UINT32 timeout)122 STATIC VOID LOS_TraceSemPend(const LosSemCB *semCB, const LosTaskCB *runningTask, UINT32 timeout)
123 {
124     (VOID)runningTask;
125     LOS_TRACE(SEM_PEND, semCB->semID, semCB->semCount, timeout);
126 }
127 
LOS_TraceSemDelete(const LosSemCB * semCB)128 STATIC VOID LOS_TraceSemDelete(const LosSemCB *semCB)
129 {
130     LOS_TRACE(SEM_DELETE, semCB->semID, LOS_OK);
131 }
132 
LOS_TraceMuxCreate(const LosMux * muxCB)133 STATIC VOID LOS_TraceMuxCreate(const LosMux *muxCB)
134 {
135     LOS_TRACE(MUX_CREATE, (UINTPTR)muxCB);
136 }
137 
LOS_TraceMuxPost(const LosMux * muxCB)138 STATIC VOID LOS_TraceMuxPost(const LosMux *muxCB)
139 {
140     LOS_TRACE(MUX_POST, (UINTPTR)muxCB, muxCB->muxCount,
141         (muxCB->owner == NULL) ? 0xffffffff : ((LosTaskCB *)muxCB->owner)->taskID);
142 }
143 
LOS_TraceMuxPend(const LosMux * muxCB,UINT32 timeout)144 STATIC VOID LOS_TraceMuxPend(const LosMux *muxCB, UINT32 timeout)
145 {
146     LOS_TRACE(MUX_PEND, (UINTPTR)muxCB, muxCB->muxCount,
147         (muxCB->owner == NULL) ? 0xffffffff : ((LosTaskCB *)muxCB->owner)->taskID, timeout);
148 }
149 
LOS_TraceMuxDelete(const LosMux * muxCB)150 STATIC VOID LOS_TraceMuxDelete(const LosMux *muxCB)
151 {
152     LOS_TRACE(MUX_DELETE, (UINTPTR)muxCB, muxCB->attr.type, muxCB->muxCount,
153         (muxCB->owner == NULL) ? 0xffffffff : ((LosTaskCB *)muxCB->owner)->taskID);
154 }
155 
LOS_TraceTaskCreate(const LosTaskCB * taskCB)156 STATIC VOID LOS_TraceTaskCreate(const LosTaskCB *taskCB)
157 {
158 #ifdef LOSCFG_KERNEL_TRACE
159     SchedParam param = { 0 };
160     taskCB->ops->schedParamGet(taskCB, &param);
161     LOS_TRACE(TASK_CREATE, taskCB->taskID, taskCB->taskStatus, param.priority);
162 #else
163     (VOID)taskCB;
164 #endif
165 }
166 
LOS_TraceTaskPriModify(const LosTaskCB * taskCB,UINT32 prio)167 STATIC VOID LOS_TraceTaskPriModify(const LosTaskCB *taskCB, UINT32 prio)
168 {
169 #ifdef LOSCFG_KERNEL_TRACE
170     SchedParam param = { 0 };
171     taskCB->ops->schedParamGet(taskCB, &param);
172     LOS_TRACE(TASK_PRIOSET, taskCB->taskID, taskCB->taskStatus, param.priority, prio);
173 #else
174     (VOID)taskCB;
175     (VOID)prio;
176 #endif
177 }
178 
LOS_TraceTaskDelete(const LosTaskCB * taskCB)179 STATIC VOID LOS_TraceTaskDelete(const LosTaskCB *taskCB)
180 {
181     LOS_TRACE(TASK_DELETE, taskCB->taskID, taskCB->taskStatus, (UINTPTR)taskCB->stackPointer);
182 }
183 
LOS_TraceTaskSwitchedIn(const LosTaskCB * newTask,const LosTaskCB * runTask)184 STATIC VOID LOS_TraceTaskSwitchedIn(const LosTaskCB *newTask, const LosTaskCB *runTask)
185 {
186 #ifdef LOSCFG_KERNEL_TRACE
187     SchedParam runParam = { 0 };
188     SchedParam newParam = { 0 };
189     runTask->ops->schedParamGet(runTask, &runParam);
190     newTask->ops->schedParamGet(newTask, &newParam);
191     LOS_TRACE(TASK_SWITCH, newTask->taskID, runParam.priority, runTask->taskStatus,
192               newParam.priority, newTask->taskStatus);
193 #else
194     (VOID)newTask;
195     (VOID)runTask;
196 #endif
197 }
198 
LOS_TraceTaskResume(const LosTaskCB * taskCB)199 STATIC VOID LOS_TraceTaskResume(const LosTaskCB *taskCB)
200 {
201 #ifdef LOSCFG_KERNEL_TRACE
202     SchedParam param = { 0 };
203     taskCB->ops->schedParamGet(taskCB, &param);
204     LOS_TRACE(TASK_RESUME, taskCB->taskID, taskCB->taskStatus, param.priority);
205 #else
206     (VOID)taskCB;
207 #endif
208 }
209 
LOS_TraceTaskSuspend(const LosTaskCB * taskCB)210 STATIC VOID LOS_TraceTaskSuspend(const LosTaskCB *taskCB)
211 {
212     LOS_TRACE(TASK_SUSPEND, taskCB->taskID, taskCB->taskStatus, OsCurrTaskGet()->taskID);
213 }
214 
LOS_TraceIsrEnter(UINT32 hwiNum)215 STATIC VOID LOS_TraceIsrEnter(UINT32 hwiNum)
216 {
217     LOS_TRACE(HWI_RESPONSE_IN, hwiNum);
218 }
219 
LOS_TraceIsrExit(UINT32 hwiNum)220 STATIC VOID LOS_TraceIsrExit(UINT32 hwiNum)
221 {
222     LOS_TRACE(HWI_RESPONSE_OUT, hwiNum);
223 }
224 
LOS_TraceSwtmrCreate(const SWTMR_CTRL_S * swtmr)225 STATIC VOID LOS_TraceSwtmrCreate(const SWTMR_CTRL_S *swtmr)
226 {
227     LOS_TRACE(SWTMR_CREATE, swtmr->usTimerID);
228 }
229 
LOS_TraceSwtmrDelete(const SWTMR_CTRL_S * swtmr)230 STATIC VOID LOS_TraceSwtmrDelete(const SWTMR_CTRL_S *swtmr)
231 {
232     LOS_TRACE(SWTMR_DELETE, swtmr->usTimerID);
233 }
234 
LOS_TraceSwtmrExpired(const SWTMR_CTRL_S * swtmr)235 STATIC VOID LOS_TraceSwtmrExpired(const SWTMR_CTRL_S *swtmr)
236 {
237     LOS_TRACE(SWTMR_EXPIRED, swtmr->usTimerID);
238 }
239 
LOS_TraceSwtmrStart(const SWTMR_CTRL_S * swtmr)240 STATIC VOID LOS_TraceSwtmrStart(const SWTMR_CTRL_S *swtmr)
241 {
242     LOS_TRACE(SWTMR_START, swtmr->usTimerID, swtmr->ucMode, swtmr->uwInterval);
243 }
244 
LOS_TraceSwtmrStop(const SWTMR_CTRL_S * swtmr)245 STATIC VOID LOS_TraceSwtmrStop(const SWTMR_CTRL_S *swtmr)
246 {
247     LOS_TRACE(SWTMR_STOP, swtmr->usTimerID);
248 }
249 
LOS_TraceIpcWriteDrop(const IpcMsg * msg,UINT32 dstTid,UINT32 dstPid,UINT32 ipcStatus)250 STATIC VOID LOS_TraceIpcWriteDrop(const IpcMsg *msg, UINT32 dstTid, UINT32 dstPid, UINT32 ipcStatus)
251 {
252     LOS_TRACE(IPC_WRITE_DROP, dstTid, dstPid, msg->type, msg->code, ipcStatus);
253 }
254 
LOS_TraceIpcWrite(const IpcMsg * msg,UINT32 dstTid,UINT32 dstPid,UINT32 ipcStatus)255 STATIC VOID LOS_TraceIpcWrite(const IpcMsg *msg, UINT32 dstTid, UINT32 dstPid, UINT32 ipcStatus)
256 {
257     LOS_TRACE(IPC_WRITE, dstTid, dstPid, msg->type, msg->code, ipcStatus);
258 }
259 
LOS_TraceIpcReadDrop(const IpcMsg * msg,UINT32 ipcStatus)260 STATIC VOID LOS_TraceIpcReadDrop(const IpcMsg *msg, UINT32 ipcStatus)
261 {
262     LOS_TRACE(IPC_READ_DROP, msg->taskID, msg->processID, msg->type, msg->code, ipcStatus);
263 }
264 
LOS_TraceIpcRead(const IpcMsg * msg,UINT32 ipcStatus)265 STATIC VOID LOS_TraceIpcRead(const IpcMsg *msg, UINT32 ipcStatus)
266 {
267     LOS_TRACE(IPC_READ_DROP, msg->taskID, msg->processID, msg->type, msg->code, ipcStatus);
268 }
269 
LOS_TraceIpcTryRead(UINT32 msgType,UINT32 ipcStatus)270 STATIC VOID LOS_TraceIpcTryRead(UINT32 msgType, UINT32 ipcStatus)
271 {
272     LOS_TRACE(IPC_TRY_READ, msgType, ipcStatus);
273 }
274 
LOS_TraceIpcReadTimeout(UINT32 msgType,UINT32 ipcStatus)275 STATIC VOID LOS_TraceIpcReadTimeout(UINT32 msgType, UINT32 ipcStatus)
276 {
277     LOS_TRACE(IPC_READ_TIMEOUT, msgType, ipcStatus);
278 }
279 
LOS_TraceIpcKill(UINT32 msgType,UINT32 ipcStatus)280 STATIC VOID LOS_TraceIpcKill(UINT32 msgType, UINT32 ipcStatus)
281 {
282     LOS_TRACE(IPC_KILL, msgType, ipcStatus);
283 }
284 
LOS_TraceUsrEvent(VOID * buffer,UINT32 len)285 STATIC VOID LOS_TraceUsrEvent(VOID *buffer, UINT32 len)
286 {
287 #ifdef LOSCFG_DRIVERS_TRACE
288     UsrEventInfo *info = (UsrEventInfo *)buffer;
289     if ((info == NULL) || (len != sizeof(UsrEventInfo))) {
290         return;
291     }
292     LOS_TRACE_EASY(info->eventType & (~TRACE_USER_DEFAULT_FLAG), info->identity, info->params[0], info->params[1],
293         info->params[2]); /* 2, params num, no special meaning */
294     LOS_MemFree(m_aucSysMem0, buffer);
295 #endif
296 }
297 
OsTraceCnvInit(VOID)298 VOID OsTraceCnvInit(VOID)
299 {
300     LOS_HookReg(LOS_HOOK_TYPE_MEM_ALLOC, LOS_TraceMemAlloc);
301     LOS_HookReg(LOS_HOOK_TYPE_MEM_FREE, LOS_TraceMemFree);
302     LOS_HookReg(LOS_HOOK_TYPE_MEM_INIT, LOS_TraceMemInit);
303     LOS_HookReg(LOS_HOOK_TYPE_MEM_REALLOC, LOS_TraceMemRealloc);
304     LOS_HookReg(LOS_HOOK_TYPE_MEM_ALLOCALIGN, LOS_TraceMemAllocAlign);
305     LOS_HookReg(LOS_HOOK_TYPE_EVENT_INIT, LOS_TraceEventInit);
306     LOS_HookReg(LOS_HOOK_TYPE_EVENT_READ, LOS_TraceEventRead);
307     LOS_HookReg(LOS_HOOK_TYPE_EVENT_WRITE, LOS_TraceEventWrite);
308     LOS_HookReg(LOS_HOOK_TYPE_EVENT_CLEAR, LOS_TraceEventClear);
309     LOS_HookReg(LOS_HOOK_TYPE_EVENT_DESTROY, LOS_TraceEventDestroy);
310     LOS_HookReg(LOS_HOOK_TYPE_QUEUE_CREATE, LOS_TraceQueueCreate);
311     LOS_HookReg(LOS_HOOK_TYPE_QUEUE_DELETE, LOS_TraceQueueDelete);
312     LOS_HookReg(LOS_HOOK_TYPE_QUEUE_READ, LOS_TraceQueueRW);
313     LOS_HookReg(LOS_HOOK_TYPE_QUEUE_WRITE, LOS_TraceQueueRW);
314     LOS_HookReg(LOS_HOOK_TYPE_SEM_CREATE, LOS_TraceSemCreate);
315     LOS_HookReg(LOS_HOOK_TYPE_SEM_DELETE, LOS_TraceSemDelete);
316     LOS_HookReg(LOS_HOOK_TYPE_SEM_POST, LOS_TraceSemPost);
317     LOS_HookReg(LOS_HOOK_TYPE_SEM_PEND, LOS_TraceSemPend);
318     LOS_HookReg(LOS_HOOK_TYPE_MUX_CREATE, LOS_TraceMuxCreate);
319     LOS_HookReg(LOS_HOOK_TYPE_MUX_POST, LOS_TraceMuxPost);
320     LOS_HookReg(LOS_HOOK_TYPE_MUX_PEND, LOS_TraceMuxPend);
321     LOS_HookReg(LOS_HOOK_TYPE_MUX_DELETE, LOS_TraceMuxDelete);
322     LOS_HookReg(LOS_HOOK_TYPE_TASK_PRIMODIFY, LOS_TraceTaskPriModify);
323     LOS_HookReg(LOS_HOOK_TYPE_TASK_DELETE, LOS_TraceTaskDelete);
324     LOS_HookReg(LOS_HOOK_TYPE_TASK_CREATE, LOS_TraceTaskCreate);
325     LOS_HookReg(LOS_HOOK_TYPE_TASK_SWITCHEDIN, LOS_TraceTaskSwitchedIn);
326     LOS_HookReg(LOS_HOOK_TYPE_MOVEDTASKTOREADYSTATE, LOS_TraceTaskResume);
327     LOS_HookReg(LOS_HOOK_TYPE_MOVEDTASKTOSUSPENDEDLIST, LOS_TraceTaskSuspend);
328     LOS_HookReg(LOS_HOOK_TYPE_ISR_ENTER, LOS_TraceIsrEnter);
329     LOS_HookReg(LOS_HOOK_TYPE_ISR_EXIT, LOS_TraceIsrExit);
330     LOS_HookReg(LOS_HOOK_TYPE_SWTMR_CREATE, LOS_TraceSwtmrCreate);
331     LOS_HookReg(LOS_HOOK_TYPE_SWTMR_DELETE, LOS_TraceSwtmrDelete);
332     LOS_HookReg(LOS_HOOK_TYPE_SWTMR_EXPIRED, LOS_TraceSwtmrExpired);
333     LOS_HookReg(LOS_HOOK_TYPE_SWTMR_START, LOS_TraceSwtmrStart);
334     LOS_HookReg(LOS_HOOK_TYPE_SWTMR_STOP, LOS_TraceSwtmrStop);
335     LOS_HookReg(LOS_HOOK_TYPE_USR_EVENT, LOS_TraceUsrEvent);
336     LOS_HookReg(LOS_HOOK_TYPE_IPC_WRITE_DROP, LOS_TraceIpcWriteDrop);
337     LOS_HookReg(LOS_HOOK_TYPE_IPC_WRITE, LOS_TraceIpcWrite);
338     LOS_HookReg(LOS_HOOK_TYPE_IPC_READ_DROP, LOS_TraceIpcReadDrop);
339     LOS_HookReg(LOS_HOOK_TYPE_IPC_READ, LOS_TraceIpcRead);
340     LOS_HookReg(LOS_HOOK_TYPE_IPC_TRY_READ, LOS_TraceIpcTryRead);
341     LOS_HookReg(LOS_HOOK_TYPE_IPC_READ_TIMEOUT, LOS_TraceIpcReadTimeout);
342     LOS_HookReg(LOS_HOOK_TYPE_IPC_KILL, LOS_TraceIpcKill);
343 }
344 
345