blob: 66ea365acf01bf982bc53be6cb95059c3ab469af [file] [log] [blame]
Steven Rostedt95045042009-04-11 12:59:57 -04001#ifndef _LINUX_TRACE_SEQ_H
2#define _LINUX_TRACE_SEQ_H
3
Steven Rostedt6d723732009-04-10 14:53:50 -04004#include <linux/fs.h>
5
Wu Zhangjin78be6912009-06-14 14:52:30 +08006#include <asm/page.h>
7
Steven Rostedt95045042009-04-11 12:59:57 -04008/*
9 * Trace sequences are used to allow a function to call several other functions
Jiri Olsa6d3f1e12009-10-23 19:36:19 -040010 * to create a string of data to use (up to a max of PAGE_SIZE).
Steven Rostedt95045042009-04-11 12:59:57 -040011 */
12
13struct trace_seq {
14 unsigned char buffer[PAGE_SIZE];
15 unsigned int len;
16 unsigned int readpos;
Johannes Bergd184b312009-11-25 16:10:14 +010017 int full;
Steven Rostedt95045042009-04-11 12:59:57 -040018};
19
20static inline void
21trace_seq_init(struct trace_seq *s)
22{
23 s->len = 0;
24 s->readpos = 0;
Johannes Bergd184b312009-11-25 16:10:14 +010025 s->full = 0;
Steven Rostedt95045042009-04-11 12:59:57 -040026}
27
Steven Rostedt (Red Hat)12306272014-06-20 13:38:54 -040028#define MAX_MEMHEX_BYTES 8
29
Steven Rostedt95045042009-04-11 12:59:57 -040030/*
31 * Currently only defined when tracing is enabled.
32 */
33#ifdef CONFIG_TRACING
Joe Perchesb9075fa2011-10-31 17:11:33 -070034extern __printf(2, 3)
35int trace_seq_printf(struct trace_seq *s, const char *fmt, ...);
36extern __printf(2, 0)
37int trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args);
Steven Rostedt95045042009-04-11 12:59:57 -040038extern int
39trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary);
Steven Rostedta63ce5b2009-12-07 09:11:39 -050040extern int trace_print_seq(struct seq_file *m, struct trace_seq *s);
Steven Rostedt95045042009-04-11 12:59:57 -040041extern ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf,
42 size_t cnt);
43extern int trace_seq_puts(struct trace_seq *s, const char *str);
44extern int trace_seq_putc(struct trace_seq *s, unsigned char c);
45extern int trace_seq_putmem(struct trace_seq *s, const void *mem, size_t len);
46extern int trace_seq_putmem_hex(struct trace_seq *s, const void *mem,
47 size_t len);
48extern void *trace_seq_reserve(struct trace_seq *s, size_t len);
Al Viro38eff282012-03-14 21:51:10 -040049extern int trace_seq_path(struct trace_seq *s, const struct path *path);
Steven Rostedt95045042009-04-11 12:59:57 -040050
Steven Rostedt (Red Hat)4449bf92014-05-06 13:10:24 -040051extern int trace_seq_bitmask(struct trace_seq *s, const unsigned long *maskp,
52 int nmaskbits);
53
Steven Rostedt95045042009-04-11 12:59:57 -040054#else /* CONFIG_TRACING */
55static inline int trace_seq_printf(struct trace_seq *s, const char *fmt, ...)
Steven Rostedt95045042009-04-11 12:59:57 -040056{
57 return 0;
58}
59static inline int
60trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary)
61{
62 return 0;
63}
64
Steven Rostedt (Red Hat)4449bf92014-05-06 13:10:24 -040065static inline int
66trace_seq_bitmask(struct trace_seq *s, const unsigned long *maskp,
67 int nmaskbits)
68{
69 return 0;
70}
71
Steven Rostedta63ce5b2009-12-07 09:11:39 -050072static inline int trace_print_seq(struct seq_file *m, struct trace_seq *s)
Steven Rostedt95045042009-04-11 12:59:57 -040073{
Steven Rostedta63ce5b2009-12-07 09:11:39 -050074 return 0;
Steven Rostedt95045042009-04-11 12:59:57 -040075}
76static inline ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf,
77 size_t cnt)
78{
79 return 0;
80}
81static inline int trace_seq_puts(struct trace_seq *s, const char *str)
82{
83 return 0;
84}
Steven Rostedt23de29d2009-04-20 12:59:29 -040085static inline int trace_seq_putc(struct trace_seq *s, unsigned char c)
Steven Rostedt95045042009-04-11 12:59:57 -040086{
87 return 0;
88}
89static inline int
90trace_seq_putmem(struct trace_seq *s, const void *mem, size_t len)
91{
92 return 0;
93}
94static inline int trace_seq_putmem_hex(struct trace_seq *s, const void *mem,
95 size_t len)
96{
97 return 0;
98}
99static inline void *trace_seq_reserve(struct trace_seq *s, size_t len)
100{
101 return NULL;
102}
Al Viro38eff282012-03-14 21:51:10 -0400103static inline int trace_seq_path(struct trace_seq *s, const struct path *path)
Steven Rostedt95045042009-04-11 12:59:57 -0400104{
105 return 0;
106}
107#endif /* CONFIG_TRACING */
108
109#endif /* _LINUX_TRACE_SEQ_H */