1 /***********************************************************************\r
2 *\r
3 * Copyright 2012 Mentor Graphics Corporation\r
4 * All Rights Reserved.\r
5 *\r
6 * THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS\r
7 * THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS\r
8 * SUBJECT TO LICENSE TERMS.\r
9 ************************************************************************\r
10 \r
11 ************************************************************************\r
12 *\r
13 * DESCRIPTION\r
14 *\r
15 * This file contains external data structures and definitions of\r
16 * TRACE components.\r
17 *\r
18 ***********************************************************************/\r
19 \r
20 #ifndef _NU_TRACE_H_\r
21 #define _NU_TRACE_H_\r
22 \r
23 #ifdef __cplusplus\r
24 extern "C" { /* C declarations in C++ */\r
25 #endif\r
26 \r
27 #include <stdarg.h>\r
28 \r
29 /* Mask definitions for each kernel object */\r
30 #define NU_TRACE_ALL 0xFFFFFFFF\r
31 #define NU_TRACE_APP (1<<0x0)\r
32 #define NU_TRACE_KERN (~NU_TRACE_APP) /* Enable all kernel hooks */\r
33 #define NU_TRACE_LISRS (1<<0x1)\r
34 #define NU_TRACE_HISRS (1<<0x2)\r
35 #define NU_TRACE_TASKS (1<<0x3)\r
36 #define NU_TRACE_DMEM (1<<0x4)\r
37 #define NU_TRACE_PMEM (1<<0x5)\r
38 #define NU_TRACE_MAILBOX (1<<0x6)\r
39 #define NU_TRACE_QUEUE (1<<0x7)\r
40 #define NU_TRACE_PIPE (1<<0x8)\r
41 #define NU_TRACE_SEMAPHORE (1<<0x9)\r
42 #define NU_TRACE_EVENT (1<<0xA)\r
43 #define NU_TRACE_SIGNAL (1<<0xB)\r
44 #define NU_TRACE_TIMER (1<<0xC)\r
45 #define NU_TRACE_CPU_STATE (1<<0xD)\r
46 #define NU_TRACE_PMS_INFO (1<<0xE)\r
47 #define NU_TRACE_STOR_INFO (1<<0XF)\r
48 #define NU_TRACE_NET_INFO (1<<0X10)\r
49 \r
50 #define NU_TRACE_KERN_INFO (NU_TRACE_LISRS | NU_TRACE_HISRS | NU_TRACE_TASKS | \\r
51 NU_TRACE_DMEM | NU_TRACE_PMEM | NU_TRACE_MAILBOX | \\r
52 NU_TRACE_QUEUE | NU_TRACE_PIPE | NU_TRACE_SEMAPHORE | \\r
53 NU_TRACE_EVENT | NU_TRACE_SIGNAL | NU_TRACE_TIMER | \\r
54 NU_TRACE_CPU_STATE)\r
55 \r
56 /* Definitions for trace communications */\r
57 #define NU_TRACE_TRANSMIT_ALL 0xFFFFFFFF\r
58 \r
59 /* Error definitions */\r
60 #define NU_TRACE_INIT_ERROR -1\r
61 #define NU_TRACE_ALREADY_INITIALIZED (NU_TRACE_INIT_ERROR - 1)\r
62 #define NU_TRACE_NOT_INITIALIZED (NU_TRACE_ALREADY_INITIALIZED - 1)\r
63 #define NU_TRACE_BUFF_FULL (NU_TRACE_NOT_INITIALIZED - 1)\r
64 #define NU_TRACE_BUFF_EMPTY (NU_TRACE_BUFF_FULL - 1)\r
65 #define NU_TRACE_INVALID_ARGS (NU_TRACE_BUFF_EMPTY - 1)\r
66 #define NU_TRACE_COMMS_ERROR (NU_TRACE_INVALID_ARGS -1)\r
67 #define NU_TRACE_COMMS_NOT_INITIALIZED (NU_TRACE_COMMS_ERROR - 1)\r
68 #define NU_TRACE_COMMS_ALREADY_STARTED (NU_TRACE_COMMS_NOT_INITIALIZED - 1)\r
69 #define NU_TRACE_COMMS_NOT_STARTED (NU_TRACE_COMMS_ALREADY_STARTED - 1)\r
70 #define NU_TRACE_KERN_NOT_AVAILABLE (NU_TRACE_COMMS_NOT_STARTED - 1)\r
71 #define NU_TRACE_ERROR_CODE_DELIMITER (NU_TRACE_KERN_NOT_AVAILABLE - 1)\r
72 \r
73 #ifdef CFG_NU_OS_SVCS_TRACE_ENABLE\r
74 \r
75 /* This macro invoke trace log if global mask is enabled for the kernel object requested */\r
76 extern unsigned long Gbl_Trace_Mask;\r
77 \r
78 #if ((CFG_NU_OS_SVCS_TRACE_CORE_TRACE_SUPPORT == NU_TRUE) && (CFG_NU_OS_SVCS_TRACE_CORE_TRACK_TRACE_OVERHEAD == NU_TRUE))\r
79 \r
80 /* Trace log function prototype */\r
81 extern void Log_pCU64U64(unsigned short evt_id, char* pC, unsigned long long u64_1, unsigned long long u64_2);\r
82 extern UINT64 NU_Get_Time_Stamp();\r
83 \r
84 /* API latency trace event ID */\r
85 #define TRACE_APPLY_MASK(_msk_bit_, _evt_str_, _trace_fn_) \\r
86 { \\r
87 unsigned long long _start; \\r
88 unsigned long long _finish; \\r
89 \\r
90 if(_msk_bit_ & Gbl_Trace_Mask) \\r
91 { \\r
92 _start = NU_Get_Time_Stamp(); \\r
93 _trace_fn_; \\r
94 _finish = NU_Get_Time_Stamp(); \\r
95 Log_pCU64U64(0xFE, _evt_str_, _finish, _start); \\r
96 } \\r
97 }\r
98 #else\r
99 #define TRACE_APPLY_MASK(_msk_bit_, _evt_str_, _trace_fn_) \\r
100 { \\r
101 if(_msk_bit_ & Gbl_Trace_Mask) \\r
102 { \\r
103 _trace_fn_; \\r
104 } \\r
105 }\r
106 #endif /* ((CFG_NU_OS_SVCS_TRACE_CORE_TRACE_SUPPORT == NU_TRUE) && (CFG_NU_OS_SVCS_TRACE_CORE_TRACK_TRACE_OVERHEAD == NU_TRUE)) */\r
107 \r
108 /* User API interface */\r
109 STATUS NU_Trace_Initialize(VOID);\r
110 STATUS NU_Trace_Deinitialize(VOID);\r
111 STATUS NU_Trace_Arm(UINT32 mask);\r
112 STATUS NU_Trace_Disarm(UINT32 mask);\r
113 UINT32 NU_Trace_Get_Mask(VOID);\r
114 \r
115 /* External definitions */\r
116 extern void Trace_Mark_I32(char* evt_str, signed int i32_val);\r
117 extern void Trace_Mark_U32(char* evt_str, unsigned int u32_val);\r
118 extern void Trace_Mark_Float(char* evt_str, float float_val);\r
119 extern void Trace_Mark_String(char* evt_str, char* str_val);\r
120 extern void Trace_Mark(char *event_type, char* format, ...);\r
121 \r
122 #define NU_Trace_Mark_I32(evt_str, i32_val) TRACE_APPLY_MASK(NU_TRACE_APP, evt_str, Trace_Mark_I32(evt_str, i32_val))\r
123 #define NU_Trace_Mark_U32(evt_str, u32_val) TRACE_APPLY_MASK(NU_TRACE_APP, evt_str, Trace_Mark_U32(evt_str, u32_val))\r
124 #define NU_Trace_Mark_Float(evt_str, float_val) TRACE_APPLY_MASK(NU_TRACE_APP, evt_str, Trace_Mark_Float(evt_str, float_val))\r
125 #define NU_Trace_Mark_String(evt_str, str_val) TRACE_APPLY_MASK(NU_TRACE_APP, evt_str, Trace_Mark_String(evt_str, str_val))\r
126 #define NU_Trace_Mark Trace_Mark\r
127 \r
128 #if(defined(CFG_NU_OS_SVCS_TRACE_COMMS_ENABLE) && (CFG_NU_OS_SVCS_TRACE_COMMS_CHANNEL != DBG_INTERFACE))\r
129 \r
130 STATUS Trace_Comms_Start(OPTION comms_tsk_priority, UINT32 comms_tx_period);\r
131 STATUS Trace_Comms_Stop(VOID);\r
132 STATUS Trace_Comms_Flush(VOID);\r
133 STATUS Trace_Comms_Transmit_N_Packets(UINT32 num_packets, UINT32* num_pkts_transmitted);\r
134 \r
135 #define NU_Trace_Comms_Start Trace_Comms_Start\r
136 #define NU_Trace_Comms_Stop Trace_Comms_Stop\r
137 #define NU_Trace_Comms_Flush Trace_Comms_Flush\r
138 #define NU_Trace_Comms_Transmit_N_Packets Trace_Comms_Transmit_N_Packets\r
139 \r
140 #else\r
141 \r
142 #define NU_Trace_Comms_Start\r
143 #define NU_Trace_Comms_Stop\r
144 #define NU_Trace_Comms_Flush\r
145 #define NU_Trace_Comms_Transmit_N_Packets\r
146 \r
147 #endif /* (defined(CFG_NU_OS_SVCS_TRACE_COMMS_ENABLE) && (CFG_NU_OS_SVCS_TRACE_COMMS_CHANNEL != DBG_INTERFACE)) */\r
148 \r
149 #else\r
150 \r
151 /* Dummy definitions to avoid build errors when Trace is disabled at build-time */\r
152 #define NU_Trace_Initialize() NU_SUCCESS\r
153 #define NU_Trace_Deinitialize() NU_SUCCESS\r
154 #define NU_Trace_Arm(mask) NU_SUCCESS\r
155 #define NU_Trace_Disarm(mask) NU_SUCCESS\r
156 #define NU_Trace_Get_Mask() 0\r
157 \r
158 #define NU_Trace_Mark_I32(evt_str, i32_val)\r
159 #define NU_Trace_Mark_U32(evt_str, u32_val)\r
160 #define NU_Trace_Mark_Float(evt_str, float_val)\r
161 #define NU_Trace_Mark_String(evt_str, str_val)\r
162 #define NU_Trace_Mark\r
163 \r
164 #endif /* CFG_NU_OS_SVCS_TRACE_ENABLE */\r
165 \r
166 #ifdef __cplusplus\r
167 } /* End of C declarations */\r
168 #endif /* __cplusplus */\r
169 \r
170 #endif /* _NU_TRACE_H_ */\r