packet: Add GSO/csum offload support.
[safe/jmp/linux-2.6] / include / linux / seq_file.h
index 8bf1e05..8366d8f 100644 (file)
@@ -1,16 +1,17 @@
 #ifndef _LINUX_SEQ_FILE_H
 #define _LINUX_SEQ_FILE_H
-#ifdef __KERNEL__
 
 #include <linux/types.h>
 #include <linux/string.h>
 #include <linux/mutex.h>
+#include <linux/cpumask.h>
+#include <linux/nodemask.h>
 
 struct seq_operations;
 struct file;
-struct vfsmount;
-struct dentry;
+struct path;
 struct inode;
+struct dentry;
 
 struct seq_file {
        char *buf;
@@ -18,7 +19,8 @@ struct seq_file {
        size_t from;
        size_t count;
        loff_t index;
-       loff_t version;
+       loff_t read_pos;
+       u64 version;
        struct mutex lock;
        const struct seq_operations *op;
        void *private;
@@ -31,6 +33,47 @@ struct seq_operations {
        int (*show) (struct seq_file *m, void *v);
 };
 
+#define SEQ_SKIP 1
+
+/**
+ * seq_get_buf - get buffer to write arbitrary data to
+ * @m: the seq_file handle
+ * @bufp: the beginning of the buffer is stored here
+ *
+ * Return the number of bytes available in the buffer, or zero if
+ * there's no space.
+ */
+static inline size_t seq_get_buf(struct seq_file *m, char **bufp)
+{
+       BUG_ON(m->count > m->size);
+       if (m->count < m->size)
+               *bufp = m->buf + m->count;
+       else
+               *bufp = NULL;
+
+       return m->size - m->count;
+}
+
+/**
+ * seq_commit - commit data to the buffer
+ * @m: the seq_file handle
+ * @num: the number of bytes to commit
+ *
+ * Commit @num bytes of data written to a buffer previously acquired
+ * by seq_buf_get.  To signal an error condition, or that the data
+ * didn't fit in the available space, pass a negative @num value.
+ */
+static inline void seq_commit(struct seq_file *m, int num)
+{
+       if (num < 0) {
+               m->count = m->size;
+       } else {
+               BUG_ON(m->count + num > m->size);
+               m->count += num;
+       }
+}
+
+char *mangle_path(char *s, char *p, char *esc);
 int seq_open(struct file *, const struct seq_operations *);
 ssize_t seq_read(struct file *, char __user *, size_t, loff_t *);
 loff_t seq_lseek(struct file *, loff_t, int);
@@ -38,11 +81,40 @@ int seq_release(struct inode *, struct file *);
 int seq_escape(struct seq_file *, const char *, const char *);
 int seq_putc(struct seq_file *m, char c);
 int seq_puts(struct seq_file *m, const char *s);
+int seq_write(struct seq_file *seq, const void *data, size_t len);
 
 int seq_printf(struct seq_file *, const char *, ...)
        __attribute__ ((format (printf,2,3)));
 
-int seq_path(struct seq_file *, struct vfsmount *, struct dentry *, char *);
+int seq_path(struct seq_file *, struct path *, char *);
+int seq_dentry(struct seq_file *, struct dentry *, char *);
+int seq_path_root(struct seq_file *m, struct path *path, struct path *root,
+                 char *esc);
+int seq_bitmap(struct seq_file *m, const unsigned long *bits,
+                                  unsigned int nr_bits);
+static inline int seq_cpumask(struct seq_file *m, const struct cpumask *mask)
+{
+       return seq_bitmap(m, cpumask_bits(mask), nr_cpu_ids);
+}
+
+static inline int seq_nodemask(struct seq_file *m, nodemask_t *mask)
+{
+       return seq_bitmap(m, mask->bits, MAX_NUMNODES);
+}
+
+int seq_bitmap_list(struct seq_file *m, const unsigned long *bits,
+               unsigned int nr_bits);
+
+static inline int seq_cpumask_list(struct seq_file *m,
+                                  const struct cpumask *mask)
+{
+       return seq_bitmap_list(m, cpumask_bits(mask), nr_cpu_ids);
+}
+
+static inline int seq_nodemask_list(struct seq_file *m, nodemask_t *mask)
+{
+       return seq_bitmap_list(m, mask->bits, MAX_NUMNODES);
+}
 
 int single_open(struct file *, int (*)(struct seq_file *, void *), void *);
 int single_release(struct inode *, struct file *);
@@ -64,4 +136,3 @@ extern struct list_head *seq_list_next(void *v, struct list_head *head,
                loff_t *ppos);
 
 #endif
-#endif