1/*
2 * Trace files that want to automate creation of all tracepoints defined
3 * in their file should include this file. The following are macros that the
4 * trace file may define:
5 *
6 * TRACE_SYSTEM defines the system the tracepoint is for
7 *
8 * TRACE_INCLUDE_FILE if the file name is something other than TRACE_SYSTEM.h
9 *     This macro may be defined to tell define_trace.h what file to include.
10 *     Note, leave off the ".h".
11 *
12 * TRACE_INCLUDE_PATH if the path is something other than core kernel include/trace
13 *     then this macro can define the path to use. Note, the path is relative to
14 *     define_trace.h, not the file including it. Full path names for out of tree
15 *     modules must be used.
16 */
17
18#ifdef CREATE_TRACE_POINTS
19
20/* Prevent recursion */
21#undef CREATE_TRACE_POINTS
22
23#include <linux/stringify.h>
24
25#undef TRACE_EVENT
26#define TRACE_EVENT(name, proto, args, tstruct, assign, print)	\
27	DEFINE_TRACE(name)
28
29#undef TRACE_EVENT_CONDITION
30#define TRACE_EVENT_CONDITION(name, proto, args, cond, tstruct, assign, print) \
31	TRACE_EVENT(name,						\
32		PARAMS(proto),						\
33		PARAMS(args),						\
34		PARAMS(tstruct),					\
35		PARAMS(assign),						\
36		PARAMS(print))
37
38#undef TRACE_EVENT_FN
39#define TRACE_EVENT_FN(name, proto, args, tstruct,		\
40		assign, print, reg, unreg)			\
41	DEFINE_TRACE_FN(name, reg, unreg)
42
43#undef DEFINE_EVENT
44#define DEFINE_EVENT(template, name, proto, args) \
45	DEFINE_TRACE(name)
46
47#undef DEFINE_EVENT_FN
48#define DEFINE_EVENT_FN(template, name, proto, args, reg, unreg) \
49	DEFINE_TRACE_FN(name, reg, unreg)
50
51#undef DEFINE_EVENT_PRINT
52#define DEFINE_EVENT_PRINT(template, name, proto, args, print)	\
53	DEFINE_TRACE(name)
54
55#undef DEFINE_EVENT_CONDITION
56#define DEFINE_EVENT_CONDITION(template, name, proto, args, cond) \
57	DEFINE_EVENT(template, name, PARAMS(proto), PARAMS(args))
58
59#undef DECLARE_TRACE
60#define DECLARE_TRACE(name, proto, args)	\
61	DEFINE_TRACE(name)
62
63#undef TRACE_INCLUDE
64#undef __TRACE_INCLUDE
65
66#ifndef TRACE_INCLUDE_FILE
67# define TRACE_INCLUDE_FILE TRACE_SYSTEM
68# define UNDEF_TRACE_INCLUDE_FILE
69#endif
70
71#ifndef TRACE_INCLUDE_PATH
72# define __TRACE_INCLUDE(system) <trace/events/system.h>
73# define UNDEF_TRACE_INCLUDE_PATH
74#else
75# define __TRACE_INCLUDE(system) __stringify(TRACE_INCLUDE_PATH/system.h)
76#endif
77
78# define TRACE_INCLUDE(system) __TRACE_INCLUDE(system)
79
80/* Let the trace headers be reread */
81#define TRACE_HEADER_MULTI_READ
82
83#include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
84
85/* Make all open coded DECLARE_TRACE nops */
86#undef DECLARE_TRACE
87#define DECLARE_TRACE(name, proto, args)
88
89#ifdef CONFIG_EVENT_TRACING
90#include <trace/ftrace.h>
91#endif
92
93#undef TRACE_EVENT
94#undef TRACE_EVENT_FN
95#undef TRACE_EVENT_CONDITION
96#undef DECLARE_EVENT_CLASS
97#undef DEFINE_EVENT
98#undef DEFINE_EVENT_FN
99#undef DEFINE_EVENT_PRINT
100#undef DEFINE_EVENT_CONDITION
101#undef TRACE_HEADER_MULTI_READ
102#undef DECLARE_TRACE
103
104/* Only undef what we defined in this file */
105#ifdef UNDEF_TRACE_INCLUDE_FILE
106# undef TRACE_INCLUDE_FILE
107# undef UNDEF_TRACE_INCLUDE_FILE
108#endif
109
110#ifdef UNDEF_TRACE_INCLUDE_PATH
111# undef TRACE_INCLUDE_PATH
112# undef UNDEF_TRACE_INCLUDE_PATH
113#endif
114
115/* We may be processing more files */
116#define CREATE_TRACE_POINTS
117
118#endif /* CREATE_TRACE_POINTS */
119