Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * Function declerations and data structures related to the splice
  3  * implementation.
  4  *
  5  * Copyright (C) 2007 Jens Axboe <jens.axboe@oracle.com>
  6  *
  7  */
  8 #ifndef SPLICE_H
  9 #define SPLICE_H
 10 
 11 #include <linux/pipe_fs_i.h>
 12 
 13 /*
 14  * Flags passed in from splice/tee/vmsplice
 15  */
 16 #define SPLICE_F_MOVE   (0x01)  /* move pages instead of copying */
 17 #define SPLICE_F_NONBLOCK (0x02) /* don't block on the pipe splicing (but */
 18                                  /* we may still block on the fd we splice */
 19                                  /* from/to, of course */
 20 #define SPLICE_F_MORE   (0x04)  /* expect more data */
 21 #define SPLICE_F_GIFT   (0x08)  /* pages passed in are a gift */
 22 
 23 /*
 24  * Passed to the actors
 25  */
 26 struct splice_desc {
 27         unsigned int len, total_len;    /* current and remaining length */
 28         unsigned int flags;             /* splice flags */
 29         /*
 30          * actor() private data
 31          */
 32         union {
 33                 void __user *userptr;   /* memory to write to */
 34                 struct file *file;      /* file to read/write */
 35                 void *data;             /* cookie */
 36         } u;
 37         loff_t pos;                     /* file position */
 38         size_t num_spliced;             /* number of bytes already spliced */
 39         bool need_wakeup;               /* need to wake up writer */
 40 };
 41 
 42 struct partial_page {
 43         unsigned int offset;
 44         unsigned int len;
 45         unsigned long private;
 46 };
 47 
 48 /*
 49  * Passed to splice_to_pipe
 50  */
 51 struct splice_pipe_desc {
 52         struct page **pages;            /* page map */
 53         struct partial_page *partial;   /* pages[] may not be contig */
 54         int nr_pages;                   /* number of pages in map */
 55         unsigned int flags;             /* splice flags */
 56         const struct pipe_buf_operations *ops;/* ops associated with output pipe */
 57         void (*spd_release)(struct splice_pipe_desc *, unsigned int);
 58 };
 59 
 60 typedef int (splice_actor)(struct pipe_inode_info *, struct pipe_buffer *,
 61                            struct splice_desc *);
 62 typedef int (splice_direct_actor)(struct pipe_inode_info *,
 63                                   struct splice_desc *);
 64 
 65 extern ssize_t splice_from_pipe(struct pipe_inode_info *, struct file *,
 66                                 loff_t *, size_t, unsigned int,
 67                                 splice_actor *);
 68 extern ssize_t __splice_from_pipe(struct pipe_inode_info *,
 69                                   struct splice_desc *, splice_actor *);
 70 extern int splice_from_pipe_feed(struct pipe_inode_info *, struct splice_desc *,
 71                                  splice_actor *);
 72 extern int splice_from_pipe_next(struct pipe_inode_info *,
 73                                  struct splice_desc *);
 74 extern void splice_from_pipe_begin(struct splice_desc *);
 75 extern void splice_from_pipe_end(struct pipe_inode_info *,
 76                                  struct splice_desc *);
 77 extern int pipe_to_file(struct pipe_inode_info *, struct pipe_buffer *,
 78                         struct splice_desc *);
 79 
 80 extern ssize_t splice_to_pipe(struct pipe_inode_info *,
 81                               struct splice_pipe_desc *);
 82 extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *,
 83                                       splice_direct_actor *);
 84 
 85 #endif
 86 
  This page was automatically generated by the LXR engine.