1 #ifndef _LINUX_TRACE_SEQ_H 2 #define _LINUX_TRACE_SEQ_H 3 4 #include <linux/fs.h> 5 6 #include <asm/page.h> 7 8 /* 9 * Trace sequences are used to allow a function to call several other functions 10 * to create a string of data to use (up to a max of PAGE_SIZE). 11 */ 12 13 struct trace_seq { 14 unsigned char buffer[PAGE_SIZE]; 15 unsigned int len; 16 unsigned int readpos; 17 int full; 18 }; 19 20 static inline void 21 trace_seq_init(struct trace_seq *s) 22 { 23 s->len = 0; 24 s->readpos = 0; 25 s->full = 0; 26 } 27 28 /** 29 * trace_seq_buffer_ptr - return pointer to next location in buffer 30 * @s: trace sequence descriptor 31 * 32 * Returns the pointer to the buffer where the next write to 33 * the buffer will happen. This is useful to save the location 34 * that is about to be written to and then return the result 35 * of that write. 36 */ 37 static inline unsigned char * 38 trace_seq_buffer_ptr(struct trace_seq *s) 39 { 40 return s->buffer + s->len; 41 } 42 43 /* 44 * Currently only defined when tracing is enabled. 45 */ 46 #ifdef CONFIG_TRACING 47 extern __printf(2, 3) 48 int trace_seq_printf(struct trace_seq *s, const char *fmt, ...); 49 extern __printf(2, 0) 50 int trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args); 51 extern int 52 trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary); 53 extern int trace_print_seq(struct seq_file *m, struct trace_seq *s); 54 extern int trace_seq_to_user(struct trace_seq *s, char __user *ubuf, 55 int cnt); 56 extern int trace_seq_puts(struct trace_seq *s, const char *str); 57 extern int trace_seq_putc(struct trace_seq *s, unsigned char c); 58 extern int trace_seq_putmem(struct trace_seq *s, const void *mem, unsigned int len); 59 extern int trace_seq_putmem_hex(struct trace_seq *s, const void *mem, 60 unsigned int len); 61 extern int trace_seq_path(struct trace_seq *s, const struct path *path); 62 63 extern int trace_seq_bitmask(struct trace_seq *s, const unsigned long *maskp, 64 int nmaskbits); 65 66 #else /* CONFIG_TRACING */ 67 static inline int trace_seq_printf(struct trace_seq *s, const char *fmt, ...) 68 { 69 return 0; 70 } 71 static inline int 72 trace_seq_bprintf(struct trace_seq *s, const char *fmt, const u32 *binary) 73 { 74 return 0; 75 } 76 77 static inline int 78 trace_seq_bitmask(struct trace_seq *s, const unsigned long *maskp, 79 int nmaskbits) 80 { 81 return 0; 82 } 83 84 static inline int trace_print_seq(struct seq_file *m, struct trace_seq *s) 85 { 86 return 0; 87 } 88 static inline int trace_seq_to_user(struct trace_seq *s, char __user *ubuf, 89 int cnt) 90 { 91 return 0; 92 } 93 static inline int trace_seq_puts(struct trace_seq *s, const char *str) 94 { 95 return 0; 96 } 97 static inline int trace_seq_putc(struct trace_seq *s, unsigned char c) 98 { 99 return 0; 100 } 101 static inline int 102 trace_seq_putmem(struct trace_seq *s, const void *mem, unsigned int len) 103 { 104 return 0; 105 } 106 static inline int trace_seq_putmem_hex(struct trace_seq *s, const void *mem, 107 unsigned int len) 108 { 109 return 0; 110 } 111 static inline int trace_seq_path(struct trace_seq *s, const struct path *path) 112 { 113 return 0; 114 } 115 #endif /* CONFIG_TRACING */ 116 117 #endif /* _LINUX_TRACE_SEQ_H */ 118