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#ifndef _TRACE_PIPELINE_H
33#define _TRACE_PIPELINE_H
34
35#include "los_compiler.h"
36
37#ifdef __cplusplus
38#if __cplusplus
39extern "C" {
40#endif /* __cplusplus */
41#endif /* __cplusplus */
42
43typedef struct {
44    UINT32 (*init)(VOID);
45    VOID (*dataSend)(UINT16 len, UINT8 *data);
46    UINT32 (*dataRecv)(UINT8 *data, UINT32 size, UINT32 timeout);
47    UINT32 (*wait)(VOID);
48} TracePipelineOps;
49
50/* used as tlv's tag */
51enum TraceMsgType {
52    NOTIFY,
53    HEAD,
54    OBJ,
55    EVENT,
56    TRACE_MSG_MAX,
57};
58
59enum TraceNotifySubType {
60    CMD = 0x1,
61    PARAMS,
62};
63
64enum TraceHeadSubType {
65    ENDIAN = 0x1,
66    VERSION,
67    OBJ_SIZE,
68    OBJ_COUNT,
69    CUR_INDEX,
70    MAX_RECODE,
71    CUR_OBJ_INDEX,
72    CLOCK_FREQ,
73};
74
75enum TraceObjSubType {
76    ADDR = 0x1,
77    PRIO,
78    NAME,
79};
80
81enum TraceEvtSubType {
82    CORE = 0x1,
83    EVENT_CODE,
84    CUR_TIME,
85    EVENT_COUNT,
86    CUR_TASK,
87    IDENTITY,
88    EVENT_PARAMS,
89};
90
91extern VOID OsTracePipelineReg(const TracePipelineOps *ops);
92extern UINT32 OsTracePipelineInit(VOID);
93
94extern VOID OsTraceDataSend(UINT8 type, UINT16 len, UINT8 *data);
95extern UINT32 OsTraceDataRecv(UINT8 *data, UINT32 size, UINT32 timeout);
96extern UINT32 OsTraceDataWait(VOID);
97
98#ifdef __cplusplus
99#if __cplusplus
100}
101#endif /* __cplusplus */
102#endif /* __cplusplus */
103
104#endif /* _TRACE_PIPELINE_H */
105