更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
trace_pipeline.c
浏览该文件的文档.
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_pipeline.h"
33#include "trace_tlv.h"
34#include "los_trace_pri.h"
35
36#ifdef LOSCFG_KERNEL_SMP
37LITE_OS_SEC_BSS SPIN_LOCK_INIT(g_pipeSpin);
38#define PIPE_LOCK(state) LOS_SpinLockSave(&g_pipeSpin, &(state))
39#define PIPE_UNLOCK(state) LOS_SpinUnlockRestore(&g_pipeSpin, (state))
40#else
41#define PIPE_LOCK(state) (state) = LOS_IntLock()
42#define PIPE_UNLOCK(state) LOS_IntRestore(state)
43#endif
44
46 { CMD, LOS_OFF_SET_OF(TraceNotifyFrame, cmd), sizeof(UINT32) },
47 { PARAMS, LOS_OFF_SET_OF(TraceNotifyFrame, param), sizeof(UINT32) },
48 { TRACE_TLV_TYPE_NULL, 0, 0 },
49};
50
52 { ENDIAN, LOS_OFF_SET_OF(TraceBaseHeaderInfo, bigLittleEndian), sizeof(UINT32) },
53 { VERSION, LOS_OFF_SET_OF(TraceBaseHeaderInfo, version), sizeof(UINT32) },
54 { CLOCK_FREQ, LOS_OFF_SET_OF(TraceBaseHeaderInfo, clockFreq), sizeof(UINT32) },
55 { TRACE_TLV_TYPE_NULL, 0, 0 },
56};
57
59 { ADDR, LOS_OFF_SET_OF(ObjData, id), sizeof(UINT32) },
60 { PRIO, LOS_OFF_SET_OF(ObjData, prio), sizeof(UINT32) },
61 { NAME, LOS_OFF_SET_OF(ObjData, name), sizeof(CHAR) * LOSCFG_TRACE_OBJ_MAX_NAME_SIZE },
62 { TRACE_TLV_TYPE_NULL, 0, 0 },
63};
64
66#ifdef LOSCFG_TRACE_FRAME_CORE_MSG
67 { CORE, LOS_OFF_SET_OF(TraceEventFrame, core), sizeof(UINT32) },
68#endif
69 { EVENT_CODE, LOS_OFF_SET_OF(TraceEventFrame, eventType), sizeof(UINT32) },
70 { CUR_TIME, LOS_OFF_SET_OF(TraceEventFrame, curTime), sizeof(UINT64) },
71
72#ifdef LOSCFG_TRACE_FRAME_EVENT_COUNT
73 { EVENT_COUNT, LOS_OFF_SET_OF(TraceEventFrame, eventCount), sizeof(UINT32) },
74#endif
75 { CUR_TASK, LOS_OFF_SET_OF(TraceEventFrame, curTask), sizeof(UINT32) },
76 { IDENTITY, LOS_OFF_SET_OF(TraceEventFrame, identity), sizeof(UINTPTR) },
77 { EVENT_PARAMS, LOS_OFF_SET_OF(TraceEventFrame, params), sizeof(UINTPTR) * LOSCFG_TRACE_FRAME_MAX_PARAMS },
78 { CUR_PID, LOS_OFF_SET_OF(TraceEventFrame, curPid), sizeof(UINT32) },
79#ifdef LOS_TRACE_FRAME_LR
80 { EVENT_LR, LOS_OFF_SET_OF(TraceEventFrame, linkReg), sizeof(UINTPTR) * LOS_TRACE_LR_RECORD },
81#endif
82 { TRACE_TLV_TYPE_NULL, 0, 0 },
83};
84
90};
91
93{
94 return LOS_OK;
95}
96
97STATIC VOID DefaultDataSend(UINT16 len, UINT8 *data)
98{
99 (VOID)len;
100 (VOID)data;
101}
102
103STATIC UINT32 DefaultDataReceive(UINT8 *data, UINT32 size, UINT32 timeout)
104{
105 (VOID)data;
106 (VOID)size;
107 (VOID)timeout;
108 return LOS_OK;
109}
110
111STATIC UINT32 DefaultWait(VOID)
112{
113 return LOS_OK;
114}
115
118 .dataSend = DefaultDataSend,
119 .dataRecv = DefaultDataReceive,
120 .wait = DefaultWait,
121};
122
124
126{
127 g_tracePipelineOps = ops;
128}
129
130VOID OsTraceDataSend(UINT8 type, UINT16 len, UINT8 *data)
131{
132 UINT32 intSave;
133 UINT8 outBuf[LOSCFG_TRACE_TLV_BUF_SIZE] = {0};
134
135 if ((type >= TRACE_MSG_MAX) || (len > LOSCFG_TRACE_TLV_BUF_SIZE)) {
136 return;
137 }
138
139 len = OsTraceDataEncode(type, g_traceTlvTbl[type], data, &outBuf[0], sizeof(outBuf));
140
141 PIPE_LOCK(intSave);
142 g_tracePipelineOps->dataSend(len, &outBuf[0]);
143 PIPE_UNLOCK(intSave);
144}
145
147{
148 return g_tracePipelineOps->dataRecv(data, size, timeout);
149}
150
152{
153 return g_tracePipelineOps->wait();
154}
UINT32 OsTraceDataEncode(UINT8 type, const TlvTable *table, UINT8 *src, UINT8 *dest, INT32 destLen)
Encode trace raw data.
Definition: trace_tlv.c:115
unsigned short UINT16
Definition: los_typedef.h:56
long unsigned int UINT64
Definition: los_typedef.h:66
unsigned char UINT8
Definition: los_typedef.h:55
unsigned long UINTPTR
Definition: los_typedef.h:68
unsigned int UINT32
Definition: los_typedef.h:57
char CHAR
Definition: los_typedef.h:63
TLV表,主要用于TLV的解码阶段
Definition: trace_tlv.h:60
http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-mini-memory-trace....
Definition: los_trace.h:244
trace管道操作
UINT32(* wait)(VOID)
等待
VOID(* dataSend)(UINT16 len, UINT8 *data)
将数据发送给串口
UINT32(* dataRecv)(UINT8 *data, UINT32 size, UINT32 timeout)
接收数据
UINT32(* init)(VOID)
初始化
STATIC UINT32 DefaultPipelineInit(VOID)
STATIC TlvTable g_traceTlvTblNotify[]
LITE_OS_SEC_BSS SPIN_LOCK_INIT(g_pipeSpin)
STATIC VOID DefaultDataSend(UINT16 len, UINT8 *data)
STATIC const TracePipelineOps * g_tracePipelineOps
STATIC TracePipelineOps g_defaultOps
STATIC TlvTable g_traceTlvTblEvent[]
STATIC TlvTable g_traceTlvTblObj[]
UINT32 OsTraceDataWait(VOID)
STATIC UINT32 DefaultWait(VOID)
STATIC TlvTable g_traceTlvTblHead[]
UINT32 OsTraceDataRecv(UINT8 *data, UINT32 size, UINT32 timeout)
VOID OsTracePipelineReg(const TracePipelineOps *ops)
STATIC UINT32 DefaultDataReceive(UINT8 *data, UINT32 size, UINT32 timeout)
STATIC TlvTable * g_traceTlvTbl[]
VOID OsTraceDataSend(UINT8 type, UINT16 len, UINT8 *data)
@ TRACE_MSG_MAX
@ CMD
@ PARAMS
@ EVENT_PARAMS
@ EVENT_LR
@ EVENT_CODE
@ CUR_PID
@ CORE
@ EVENT_COUNT
@ CUR_TASK
@ CUR_TIME
@ IDENTITY
@ ENDIAN
@ VERSION
@ CLOCK_FREQ
@ PRIO
@ NAME
@ ADDR