19504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt#ifndef _LINUX_TRACE_SEQ_H
29504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt#define _LINUX_TRACE_SEQ_H
39504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt
46d723736e472f7a0cd5b62c84152fceead241328Steven Rostedt#include <linux/fs.h>
56d723736e472f7a0cd5b62c84152fceead241328Steven Rostedt
678be6914cb5c6d648617c51bb99bf81f28471d89Wu Zhangjin#include <asm/page.h>
778be6914cb5c6d648617c51bb99bf81f28471d89Wu Zhangjin
89504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt/*
99504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt * Trace sequences are used to allow a function to call several other functions
106d3f1e12f46a2f9a1bb7e7aa433df8dd31ce5647Jiri Olsa * to create a string of data to use (up to a max of PAGE_SIZE).
119504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt */
129504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt
139504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtstruct trace_seq {
149504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	unsigned char		buffer[PAGE_SIZE];
159504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	unsigned int		len;
169504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	unsigned int		readpos;
17d184b31c0e403580aafb3f8955ecc185a3d04801Johannes Berg	int			full;
189504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt};
199504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt
209504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtstatic inline void
219504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedttrace_seq_init(struct trace_seq *s)
229504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt{
239504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	s->len = 0;
249504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	s->readpos = 0;
25d184b31c0e403580aafb3f8955ecc185a3d04801Johannes Berg	s->full = 0;
269504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt}
279504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt
289504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt/*
299504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt * Currently only defined when tracing is enabled.
309504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt */
319504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt#ifdef CONFIG_TRACING
32b9075fa968a0a4347aef35e235e2995c0e57ddddJoe Perchesextern __printf(2, 3)
33b9075fa968a0a4347aef35e235e2995c0e57ddddJoe Perchesint trace_seq_printf(struct trace_seq *s, const char *fmt, ...);
34b9075fa968a0a4347aef35e235e2995c0e57ddddJoe Perchesextern __printf(2, 0)
35b9075fa968a0a4347aef35e235e2995c0e57ddddJoe Perchesint trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args);
369504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtextern int
379504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedttrace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary);
38a63ce5b306855bccdacba95c03bfc293316c8ae3Steven Rostedtextern int trace_print_seq(struct seq_file *m, struct trace_seq *s);
399504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtextern ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf,
409504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt				 size_t cnt);
419504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtextern int trace_seq_puts(struct trace_seq *s, const char *str);
429504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtextern int trace_seq_putc(struct trace_seq *s, unsigned char c);
439504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtextern int trace_seq_putmem(struct trace_seq *s, const void *mem, size_t len);
449504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtextern int trace_seq_putmem_hex(struct trace_seq *s, const void *mem,
459504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt				size_t len);
469504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtextern void *trace_seq_reserve(struct trace_seq *s, size_t len);
4738eff2892628fa5c4fc8962a17b7296f42833ebeAl Viroextern int trace_seq_path(struct trace_seq *s, const struct path *path);
489504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt
499504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt#else /* CONFIG_TRACING */
509504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtstatic inline int trace_seq_printf(struct trace_seq *s, const char *fmt, ...)
519504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt{
529504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	return 0;
539504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt}
549504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtstatic inline int
559504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedttrace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary)
569504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt{
579504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	return 0;
589504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt}
599504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt
60a63ce5b306855bccdacba95c03bfc293316c8ae3Steven Rostedtstatic inline int trace_print_seq(struct seq_file *m, struct trace_seq *s)
619504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt{
62a63ce5b306855bccdacba95c03bfc293316c8ae3Steven Rostedt	return 0;
639504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt}
649504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtstatic inline ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf,
659504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt				 size_t cnt)
669504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt{
679504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	return 0;
689504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt}
699504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtstatic inline int trace_seq_puts(struct trace_seq *s, const char *str)
709504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt{
719504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	return 0;
729504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt}
7323de29de2d8b227943be191d59fb6d983996d55eSteven Rostedtstatic inline int trace_seq_putc(struct trace_seq *s, unsigned char c)
749504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt{
759504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	return 0;
769504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt}
779504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtstatic inline int
789504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedttrace_seq_putmem(struct trace_seq *s, const void *mem, size_t len)
799504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt{
809504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	return 0;
819504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt}
829504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtstatic inline int trace_seq_putmem_hex(struct trace_seq *s, const void *mem,
839504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt				       size_t len)
849504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt{
859504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	return 0;
869504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt}
879504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedtstatic inline void *trace_seq_reserve(struct trace_seq *s, size_t len)
889504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt{
899504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	return NULL;
909504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt}
9138eff2892628fa5c4fc8962a17b7296f42833ebeAl Virostatic inline int trace_seq_path(struct trace_seq *s, const struct path *path)
929504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt{
939504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt	return 0;
949504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt}
959504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt#endif /* CONFIG_TRACING */
969504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt
979504504cbab29ecb694186b1c5b15d3579c43c51Steven Rostedt#endif /* _LINUX_TRACE_SEQ_H */
98