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