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_SEM(inode) (&(inode).i_sem) 41 #define PIPE_WAIT(inode) (&(inode).i_pipe->wait) 42 #define PIPE_BASE(inode) ((inode).i_pipe->base) 43 #define PIPE_START(inode) ((inode).i_pipe->start) 44 #define PIPE_LEN(inode) ((inode).i_pipe->len) 45 #define PIPE_READERS(inode) ((inode).i_pipe->readers) 46 #define PIPE_WRITERS(inode) ((inode).i_pipe->writers) 47 #define PIPE_WAITING_WRITERS(inode) ((inode).i_pipe->waiting_writers) 48 #define PIPE_RCOUNTER(inode) ((inode).i_pipe->r_counter) 49 #define PIPE_WCOUNTER(inode) ((inode).i_pipe->w_counter) 50 #define PIPE_FASYNC_READERS(inode) (&((inode).i_pipe->fasync_readers)) 51 #define PIPE_FASYNC_WRITERS(inode) (&((inode).i_pipe->fasync_writers)) 52 53 /* Drop the inode semaphore and wait for a pipe event, atomically */ 54 void pipe_wait(struct inode * inode); 55 56 struct inode* pipe_new(struct inode* inode); 57 void free_pipe_info(struct inode* inode); 58 59 #endif 60