821bc1e4 |
1 | /* |
2 | * LinuxEvents.h |
3 | * |
4 | * Copyright (C) 2000, 2001, 2002 Karim Yaghmour (karym@opersys.com). |
5 | * |
6 | * This header is distributed under GPL. |
7 | * |
8 | * Linux events being traced. |
9 | * |
10 | * History : |
11 | * K.Y., 31/05/1999, Initial typing. |
12 | * |
13 | */ |
14 | |
15 | #ifndef __TRACE_TOOLKIT_LINUX_HEADER__ |
16 | #define __TRACE_TOOLKIT_LINUX_HEADER__ |
17 | |
18 | #include <LTTTypes.h> |
19 | |
20 | /* Traced events */ |
21 | #define TRACE_START 0 /* This is to mark the trace's start */ |
22 | #define TRACE_SYSCALL_ENTRY 1 /* Entry in a given system call */ |
23 | #define TRACE_SYSCALL_EXIT 2 /* Exit from a given system call */ |
24 | #define TRACE_TRAP_ENTRY 3 /* Entry in a trap */ |
25 | #define TRACE_TRAP_EXIT 4 /* Exit from a trap */ |
26 | #define TRACE_IRQ_ENTRY 5 /* Entry in an irq */ |
27 | #define TRACE_IRQ_EXIT 6 /* Exit from an irq */ |
28 | #define TRACE_SCHEDCHANGE 7 /* Scheduling change */ |
29 | #define TRACE_KERNEL_TIMER 8 /* The kernel timer routine has been called */ |
30 | #define TRACE_SOFT_IRQ 9 /* Hit key part of soft-irq management */ |
31 | #define TRACE_PROCESS 10 /* Hit key part of process management */ |
32 | #define TRACE_FILE_SYSTEM 11 /* Hit key part of file system */ |
33 | #define TRACE_TIMER 12 /* Hit key part of timer management */ |
34 | #define TRACE_MEMORY 13 /* Hit key part of memory management */ |
35 | #define TRACE_SOCKET 14 /* Hit key part of socket communication */ |
36 | #define TRACE_IPC 15 /* Hit key part of inter-process communication */ |
37 | #define TRACE_NETWORK 16 /* Hit key part of network communication */ |
38 | |
39 | #define TRACE_BUFFER_START 17 /* Mark the begining of a trace buffer */ |
40 | #define TRACE_BUFFER_END 18 /* Mark the ending of a trace buffer */ |
41 | #define TRACE_NEW_EVENT 19 /* New event type */ |
42 | #define TRACE_CUSTOM 20 /* Custom event */ |
43 | |
44 | #define TRACE_CHANGE_MASK 21 /* Change in event mask */ |
45 | #define TRACE_HEARTBEAT 22 /* Heartbeat event */ |
46 | |
47 | /* Number of traced events */ |
48 | #define TRACE_MAX TRACE_HEARTBEAT |
49 | |
50 | /* Architecture types */ |
51 | #define TRACE_ARCH_TYPE_I386 1 /* i386 system */ |
52 | #define TRACE_ARCH_TYPE_PPC 2 /* PPC system */ |
53 | #define TRACE_ARCH_TYPE_SH 3 /* SH system */ |
54 | #define TRACE_ARCH_TYPE_S390 4 /* S/390 system */ |
55 | #define TRACE_ARCH_TYPE_MIPS 5 /* MIPS system */ |
56 | #define TRACE_ARCH_TYPE_ARM 6 /* ARM system */ |
57 | |
58 | /* Standard definitions for variants */ |
59 | #define TRACE_ARCH_VARIANT_NONE 0 /* Main architecture implementation */ |
60 | |
61 | /* PowerPC variants */ |
62 | #define TRACE_ARCH_VARIANT_PPC_4xx 1 /* 4xx systems (IBM embedded series) */ |
63 | #define TRACE_ARCH_VARIANT_PPC_6xx 2 /* 6xx/7xx/74xx/8260/POWER3 systems (desktop flavor) */ |
64 | #define TRACE_ARCH_VARIANT_PPC_8xx 3 /* 8xx system (Motoral embedded series) */ |
65 | #define TRACE_ARCH_VARIANT_PPC_ISERIES 4 /* 8xx system (iSeries) */ |
66 | |
67 | /* System types */ |
68 | #define TRACE_SYS_TYPE_VANILLA_LINUX 1 /* Vanilla linux kernel */ |
69 | #define TRACE_SYS_TYPE_RTAI_LINUX 2 /* RTAI patched linux kernel */ |
70 | |
71 | /* The information logged when the tracing is started */ |
72 | #define TRACER_MAGIC_NUMBER 0x00D6B7ED /* That day marks an important historical event ... */ |
73 | #define TRACER_SUP_VERSION_MAJOR 2 /* Major version number */ |
74 | #define TRACER_SUP_VERSION_MINOR 2 /* Minor version number */ |
75 | typedef struct _trace_start |
76 | { |
77 | uint32_t MagicNumber; /* Magic number to identify a trace */ |
78 | uint32_t ArchType; /* Type of architecture */ |
79 | uint32_t ArchVariant; /* Variant of the given type of architecture */ |
80 | uint32_t SystemType; /* Operating system type */ |
81 | uint8_t MajorVersion; /* Major version of trace */ |
82 | uint8_t MinorVersion; /* Minor version of trace */ |
83 | |
84 | uint32_t BufferSize; /* Size of buffers */ |
85 | trace_event_mask EventMask; /* The event mask */ |
86 | trace_event_mask DetailsMask; /* Are the event details logged */ |
87 | uint8_t LogCPUID; /* Is the CPUID logged */ |
88 | uint8_t UseTSC; /* Are we using TSCs or time deltas */ |
89 | |
90 | } LTT_PACKED_STRUCT trace_start; |
91 | #define START_EVENT(X) ((trace_start*)X) |
92 | |
93 | /* TRACE_SYSCALL_ENTRY */ |
94 | typedef struct _trace_syscall_entry |
95 | { |
96 | uint8_t syscall_id; /* Syscall entry number in entry.S */ |
97 | uint32_t address; /* Address from which call was made */ |
98 | } LTT_PACKED_STRUCT trace_syscall_entry; |
99 | #define SYSCALL_EVENT(X) ((trace_syscall_entry*)X) |
100 | |
101 | /* TRACE_TRAP_ENTRY */ |
102 | typedef struct _trace_trap_entry |
103 | { |
104 | uint16_t trap_id; /* Trap number */ |
105 | uint32_t address; /* Address where trap occured */ |
106 | } LTT_PACKED_STRUCT trace_trap_entry; |
107 | typedef struct _trace_trap_entry_s390 |
108 | { |
109 | uint64_t trap_id; /* Trap number */ |
110 | uint32_t address; /* Address where trap occured */ |
111 | } LTT_PACKED_STRUCT trace_trap_entry_s390; |
112 | #define TRAP_EVENT(X) ((trace_trap_entry*)X) |
113 | #define TRAP_EVENT_S390(X) ((trace_trap_entry_s390*)X) |
114 | |
115 | /* TRACE_IRQ_ENTRY */ |
116 | typedef struct _trace_irq_entry |
117 | { |
118 | uint8_t irq_id; /* IRQ number */ |
119 | uint8_t kernel; /* Are we executing kernel code */ |
120 | } LTT_PACKED_STRUCT trace_irq_entry; |
121 | #define IRQ_EVENT(X) ((trace_irq_entry*)X) |
122 | |
123 | /* TRACE_SCHEDCHANGE */ |
124 | typedef struct _trace_schedchange |
125 | { |
126 | uint32_t out; /* Outgoing process */ |
127 | uint32_t in; /* Incoming process */ |
128 | uint32_t out_state; /* Outgoing process' state */ |
129 | } LTT_PACKED_STRUCT trace_schedchange; |
130 | #define SCHED_EVENT(X) ((trace_schedchange*)X) |
131 | |
132 | /* TRACE_SOFT_IRQ */ |
133 | #define TRACE_SOFT_IRQ_BOTTOM_HALF 1 /* Conventional bottom-half */ |
134 | #define TRACE_SOFT_IRQ_SOFT_IRQ 2 /* Real soft-irq */ |
135 | #define TRACE_SOFT_IRQ_TASKLET_ACTION 3 /* Tasklet action */ |
136 | #define TRACE_SOFT_IRQ_TASKLET_HI_ACTION 4 /* Tasklet hi-action */ |
137 | typedef struct _trace_soft_irq |
138 | { |
139 | uint8_t event_sub_id; /* Soft-irq event Id */ |
140 | uint32_t event_data; /* Data associated with event */ |
141 | } LTT_PACKED_STRUCT trace_soft_irq; |
142 | #define SOFT_IRQ_EVENT(X) ((trace_soft_irq*)X) |
143 | |
144 | /* TRACE_PROCESS */ |
145 | #define TRACE_PROCESS_KTHREAD 1 /* Creation of a kernel thread */ |
146 | #define TRACE_PROCESS_FORK 2 /* A fork or clone occured */ |
147 | #define TRACE_PROCESS_EXIT 3 /* An exit occured */ |
148 | #define TRACE_PROCESS_WAIT 4 /* A wait occured */ |
149 | #define TRACE_PROCESS_SIGNAL 5 /* A signal has been sent */ |
150 | #define TRACE_PROCESS_WAKEUP 6 /* Wake up a process */ |
151 | typedef struct _trace_process |
152 | { |
153 | uint8_t event_sub_id; /* Process event ID */ |
154 | uint32_t event_data1; /* Data associated with event */ |
155 | uint32_t event_data2; |
156 | } LTT_PACKED_STRUCT trace_process; |
157 | #define PROC_EVENT(X) ((trace_process*)X) |
158 | |
159 | /* TRACE_FILE_SYSTEM */ |
160 | #define TRACE_FILE_SYSTEM_BUF_WAIT_START 1 /* Starting to wait for a data buffer */ |
161 | #define TRACE_FILE_SYSTEM_BUF_WAIT_END 2 /* End to wait for a data buffer */ |
162 | #define TRACE_FILE_SYSTEM_EXEC 3 /* An exec occured */ |
163 | #define TRACE_FILE_SYSTEM_OPEN 4 /* An open occured */ |
164 | #define TRACE_FILE_SYSTEM_CLOSE 5 /* A close occured */ |
165 | #define TRACE_FILE_SYSTEM_READ 6 /* A read occured */ |
166 | #define TRACE_FILE_SYSTEM_WRITE 7 /* A write occured */ |
167 | #define TRACE_FILE_SYSTEM_SEEK 8 /* A seek occured */ |
168 | #define TRACE_FILE_SYSTEM_IOCTL 9 /* An ioctl occured */ |
169 | #define TRACE_FILE_SYSTEM_SELECT 10 /* A select occured */ |
170 | #define TRACE_FILE_SYSTEM_POLL 11 /* A poll occured */ |
171 | typedef struct _trace_file_system |
172 | { |
173 | uint8_t event_sub_id; /* File system event ID */ |
174 | uint32_t event_data1; /* Event data */ |
175 | uint32_t event_data2; /* Event data 2 */ |
176 | char* file_name; /* Name of file operated on */ |
177 | } LTT_PACKED_STRUCT trace_file_system; |
178 | #define FS_EVENT(X) ((trace_file_system*)X) |
179 | #define FS_EVENT_FILENAME(X) ((char*) ((X) + sizeof(trace_file_system))) |
180 | |
181 | /* TRACE_TIMER */ |
182 | #define TRACE_TIMER_EXPIRED 1 /* Timer expired */ |
183 | #define TRACE_TIMER_SETITIMER 2 /* Setting itimer occurred */ |
184 | #define TRACE_TIMER_SETTIMEOUT 3 /* Setting sched timeout occurred */ |
185 | typedef struct _trace_timer |
186 | { |
187 | uint8_t event_sub_id; /* Timer event ID */ |
188 | uint8_t event_sdata; /* Short data */ |
189 | uint32_t event_data1; /* Data associated with event */ |
190 | uint32_t event_data2; |
191 | } LTT_PACKED_STRUCT trace_timer; |
192 | #define TIMER_EVENT(X) ((trace_timer*)X) |
193 | |
194 | /* TRACE_MEMORY */ |
195 | #define TRACE_MEMORY_PAGE_ALLOC 1 /* Allocating pages */ |
196 | #define TRACE_MEMORY_PAGE_FREE 2 /* Freing pages */ |
197 | #define TRACE_MEMORY_SWAP_IN 3 /* Swaping pages in */ |
198 | #define TRACE_MEMORY_SWAP_OUT 4 /* Swaping pages out */ |
199 | #define TRACE_MEMORY_PAGE_WAIT_START 5 /* Start to wait for page */ |
200 | #define TRACE_MEMORY_PAGE_WAIT_END 6 /* End to wait for page */ |
201 | typedef struct _trace_memory |
202 | { |
203 | uint8_t event_sub_id; /* Memory event ID */ |
204 | unsigned long event_data; /* Data associated with event */ |
205 | } LTT_PACKED_STRUCT trace_memory; |
206 | #define MEM_EVENT(X) ((trace_memory*)X) |
207 | |
208 | /* TRACE_SOCKET */ |
209 | #define TRACE_SOCKET_CALL 1 /* A socket call occured */ |
210 | #define TRACE_SOCKET_CREATE 2 /* A socket has been created */ |
211 | #define TRACE_SOCKET_SEND 3 /* Data was sent to a socket */ |
212 | #define TRACE_SOCKET_RECEIVE 4 /* Data was read from a socket */ |
213 | typedef struct _trace_socket |
214 | { |
215 | uint8_t event_sub_id; /* Socket event ID */ |
216 | uint32_t event_data1; /* Data associated with event */ |
217 | uint32_t event_data2; /* Data associated with event */ |
218 | } LTT_PACKED_STRUCT trace_socket; |
219 | #define SOCKET_EVENT(X) ((trace_socket*)X) |
220 | |
221 | /* TRACE_IPC */ |
222 | #define TRACE_IPC_CALL 1 /* A System V IPC call occured */ |
223 | #define TRACE_IPC_MSG_CREATE 2 /* A message queue has been created */ |
224 | #define TRACE_IPC_SEM_CREATE 3 /* A semaphore was created */ |
225 | #define TRACE_IPC_SHM_CREATE 4 /* A shared memory segment has been created */ |
226 | typedef struct _trace_ipc |
227 | { |
228 | uint8_t event_sub_id; /* IPC event ID */ |
229 | uint32_t event_data1; /* Data associated with event */ |
230 | uint32_t event_data2; /* Data associated with event */ |
231 | } LTT_PACKED_STRUCT trace_ipc; |
232 | #define IPC_EVENT(X) ((trace_ipc*)X) |
233 | |
234 | /* TRACE_NETWORK */ |
235 | #define TRACE_NETWORK_PACKET_IN 1 /* A packet came in */ |
236 | #define TRACE_NETWORK_PACKET_OUT 2 /* A packet was sent */ |
237 | typedef struct _trace_network |
238 | { |
239 | uint8_t event_sub_id; /* Network event ID */ |
240 | uint32_t event_data; /* Event data */ |
241 | } LTT_PACKED_STRUCT trace_network; |
242 | #define NET_EVENT(X) ((trace_network*)X) |
243 | |
244 | /* Start of trace buffer information */ |
245 | typedef struct _trace_buffer_start |
246 | { |
247 | struct timeval Time; /* Time stamp of this buffer */ |
248 | uint32_t TSC; /* TSC of this buffer, if applicable */ |
249 | uint32_t ID; /* Unique buffer ID */ |
250 | } LTT_PACKED_STRUCT trace_buffer_start; |
251 | |
252 | /* End of trace buffer information */ |
253 | typedef struct _trace_buffer_end |
254 | { |
255 | struct timeval Time; /* Time stamp of this buffer */ |
256 | uint32_t TSC; /* TSC of this buffer, if applicable */ |
257 | } LTT_PACKED_STRUCT trace_buffer_end; |
258 | |
259 | /* Maximal size a custom event can have */ |
260 | #define CUSTOM_EVENT_MAX_SIZE 8192 |
261 | |
262 | /* String length limits for custom events creation */ |
263 | #define CUSTOM_EVENT_TYPE_STR_LEN 20 |
264 | #define CUSTOM_EVENT_DESC_STR_LEN 100 |
265 | #define CUSTOM_EVENT_FORM_STR_LEN 256 |
266 | |
267 | /* Type of custom event formats */ |
268 | #define CUSTOM_EVENT_FORMAT_TYPE_NONE 0 |
269 | #define CUSTOM_EVENT_FORMAT_TYPE_STR 1 |
270 | #define CUSTOM_EVENT_FORMAT_TYPE_HEX 2 |
271 | #define CUSTOM_EVENT_FORMAT_TYPE_XML 3 |
272 | #define CUSTOM_EVENT_FORMAT_TYPE_IBM 4 |
273 | |
274 | typedef struct _trace_new_event |
275 | { |
276 | /* Basics */ |
277 | uint32_t id; /* Custom event ID */ |
278 | char type[CUSTOM_EVENT_TYPE_STR_LEN]; /* Event type description */ |
279 | char desc[CUSTOM_EVENT_DESC_STR_LEN]; /* Detailed event description */ |
280 | |
281 | /* Custom formatting */ |
282 | uint32_t format_type; /* Type of formatting */ |
283 | char form[CUSTOM_EVENT_FORM_STR_LEN]; /* Data specific to format */ |
284 | } LTT_PACKED_STRUCT trace_new_event; |
285 | #define NEW_EVENT(X) ((trace_new_event*) X) |
286 | |
287 | typedef struct _trace_custom |
288 | { |
289 | uint32_t id; /* Event ID */ |
290 | uint32_t data_size; /* Size of data recorded by event */ |
291 | void* data; /* Data recorded by event */ |
292 | } LTT_PACKED_STRUCT trace_custom; |
293 | #define CUSTOM_EVENT(X) ((trace_custom*) X) |
294 | |
295 | /* TRACE_CHANGE_MASK */ |
296 | typedef struct _trace_change_mask |
297 | { |
298 | trace_event_mask mask; /* Event mask */ |
299 | } LTT_PACKED_STRUCT trace_change_mask; |
300 | #define CHMASK_EVENT(X) ((trace_change_mask*) X) |
301 | |
302 | #endif /* __TRACE_TOOLKIT_LINUX_HEADER__ */ |