1 #ifndef _LINUX_PIPE_FS_I_H 2 #define _LINUX_PIPE_FS_I_H 3 4 #define PIPEFS_MAGIC 0x50495045 5 6 #define PIPE_BUFFERS (16) 7 8 struct pipe_buffer { 9 struct page *page; 10 unsigned int offset, len; 11 struct pipe_buf_operations *ops; 12 }; 13 14 struct pipe_buf_operations { 15 int can_merge; 16 void * (*map)(struct file *, struct pipe_inode_info *, struct pipe_buffer *); 17 void (*unmap)(struct pipe_inode_info *, struct pipe_buffer *); 18 void (*release)(struct pipe_inode_info *, struct pipe_buffer *); 19 }; 20 21 struct pipe_inode_info { 22 wait_queue_head_t wait; 23 unsigned int nrbufs, curbuf; 24 struct pipe_buffer bufs[PIPE_BUFFERS]; 25 struct page *tmp_page; 26 unsigned int start; 27 unsigned int readers; 28 unsigned int writers; 29 unsigned int waiting_writers; 30 unsigned int r_counter; 31 unsigned int w_counter; 32 struct fasync_struct *fasync_readers; 33 struct fasync_struct *fasync_writers; 34 }; 35 36 /* Differs from PIPE_BUF in that PIPE_SIZE is the length of the actual 37 memory allocation, whereas PIPE_BUF makes atomicity guarantees. */ 38 #define PIPE_SIZE PAGE_SIZE 39 40 #define PIPE_MUTEX(inode) (&(inode).i_mutex) 41 #define PIPE_WAIT(inode) (&(inode).i_pipe->wait) 42 #define PIPE_READERS(inode) ((inode).i_pipe->readers) 43 #define PIPE_WRITERS(inode) ((inode).i_pipe->writers) 44 #define PIPE_WAITING_WRITERS(inode) ((inode).i_pipe->waiting_writers) 45 #define PIPE_RCOUNTER(inode) ((inode).i_pipe->r_counter) 46 #define PIPE_WCOUNTER(inode) ((inode).i_pipe->w_counter) 47 #define PIPE_FASYNC_READERS(inode) (&((inode).i_pipe->fasync_readers)) 48 #define PIPE_FASYNC_WRITERS(inode) (&((inode).i_pipe->fasync_writers)) 49 50 /* Drop the inode semaphore and wait for a pipe event, atomically */ 51 void pipe_wait(struct inode * inode); 52 53 struct inode* pipe_new(struct inode* inode); 54 void free_pipe_info(struct inode* inode); 55 56 #endif 57