1951a39d68df598db08dfced8b4707755864a0492Ying Wang/**************************************************************************** 2951a39d68df598db08dfced8b4707755864a0492Ying Wang **************************************************************************** 3951a39d68df598db08dfced8b4707755864a0492Ying Wang *** 4951a39d68df598db08dfced8b4707755864a0492Ying Wang *** This header was automatically generated from a Linux kernel header 5951a39d68df598db08dfced8b4707755864a0492Ying Wang *** of the same name, to make information necessary for userspace to 6951a39d68df598db08dfced8b4707755864a0492Ying Wang *** call into the kernel available to libc. It contains only constants, 7951a39d68df598db08dfced8b4707755864a0492Ying Wang *** structures, and macros generated from the original header, and thus, 8951a39d68df598db08dfced8b4707755864a0492Ying Wang *** contains no copyrightable information. 9951a39d68df598db08dfced8b4707755864a0492Ying Wang *** 10951a39d68df598db08dfced8b4707755864a0492Ying Wang **************************************************************************** 11951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************/ 12951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _LINUX_RELAY_H 13951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _LINUX_RELAY_H 14951a39d68df598db08dfced8b4707755864a0492Ying Wang 15951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/types.h> 16951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/sched.h> 17951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/wait.h> 18951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/list.h> 19951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/fs.h> 20951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/poll.h> 21951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/kref.h> 22951a39d68df598db08dfced8b4707755864a0492Ying Wang 23951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FIX_SIZE(x) ((((x) - 1) & PAGE_MASK) + PAGE_SIZE) 24951a39d68df598db08dfced8b4707755864a0492Ying Wang 25951a39d68df598db08dfced8b4707755864a0492Ying Wang#define RELAYFS_CHANNEL_VERSION 6 26951a39d68df598db08dfced8b4707755864a0492Ying Wang 27951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct rchan_buf 28951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 29951a39d68df598db08dfced8b4707755864a0492Ying Wang void *start; 30951a39d68df598db08dfced8b4707755864a0492Ying Wang void *data; 31951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t offset; 32951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t subbufs_produced; 33951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t subbufs_consumed; 34951a39d68df598db08dfced8b4707755864a0492Ying Wang struct rchan *chan; 35951a39d68df598db08dfced8b4707755864a0492Ying Wang wait_queue_head_t read_wait; 36951a39d68df598db08dfced8b4707755864a0492Ying Wang struct work_struct wake_readers; 37951a39d68df598db08dfced8b4707755864a0492Ying Wang struct dentry *dentry; 38951a39d68df598db08dfced8b4707755864a0492Ying Wang struct kref kref; 39951a39d68df598db08dfced8b4707755864a0492Ying Wang struct page **page_array; 40951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int page_count; 41951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int finalized; 42951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t *padding; 43951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t prev_padding; 44951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t bytes_consumed; 45951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int cpu; 46951a39d68df598db08dfced8b4707755864a0492Ying Wang} ____cacheline_aligned; 47951a39d68df598db08dfced8b4707755864a0492Ying Wang 48951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct rchan 49951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 50951a39d68df598db08dfced8b4707755864a0492Ying Wang u32 version; 51951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t subbuf_size; 52951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t n_subbufs; 53951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t alloc_size; 54951a39d68df598db08dfced8b4707755864a0492Ying Wang struct rchan_callbacks *cb; 55951a39d68df598db08dfced8b4707755864a0492Ying Wang struct kref kref; 56951a39d68df598db08dfced8b4707755864a0492Ying Wang void *private_data; 57951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t last_toobig; 58951a39d68df598db08dfced8b4707755864a0492Ying Wang struct rchan_buf *buf[NR_CPUS]; 59951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 60951a39d68df598db08dfced8b4707755864a0492Ying Wang 61951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct rchan_callbacks 62951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 63951a39d68df598db08dfced8b4707755864a0492Ying Wang 64951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*subbuf_start) (struct rchan_buf *buf, 65951a39d68df598db08dfced8b4707755864a0492Ying Wang void *subbuf, 66951a39d68df598db08dfced8b4707755864a0492Ying Wang void *prev_subbuf, 67951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t prev_padding); 68951a39d68df598db08dfced8b4707755864a0492Ying Wang 69951a39d68df598db08dfced8b4707755864a0492Ying Wang void (*buf_mapped)(struct rchan_buf *buf, 70951a39d68df598db08dfced8b4707755864a0492Ying Wang struct file *filp); 71951a39d68df598db08dfced8b4707755864a0492Ying Wang 72951a39d68df598db08dfced8b4707755864a0492Ying Wang void (*buf_unmapped)(struct rchan_buf *buf, 73951a39d68df598db08dfced8b4707755864a0492Ying Wang struct file *filp); 74951a39d68df598db08dfced8b4707755864a0492Ying Wang 75951a39d68df598db08dfced8b4707755864a0492Ying Wang struct dentry *(*create_buf_file)(const char *filename, 76951a39d68df598db08dfced8b4707755864a0492Ying Wang struct dentry *parent, 77951a39d68df598db08dfced8b4707755864a0492Ying Wang int mode, 78951a39d68df598db08dfced8b4707755864a0492Ying Wang struct rchan_buf *buf, 79951a39d68df598db08dfced8b4707755864a0492Ying Wang int *is_global); 80951a39d68df598db08dfced8b4707755864a0492Ying Wang 81951a39d68df598db08dfced8b4707755864a0492Ying Wang int (*remove_buf_file)(struct dentry *dentry); 82951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 83951a39d68df598db08dfced8b4707755864a0492Ying Wang 84951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct rchan *relay_open(const char *base_filename, 85951a39d68df598db08dfced8b4707755864a0492Ying Wang struct dentry *parent, 86951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t subbuf_size, 87951a39d68df598db08dfced8b4707755864a0492Ying Wang size_t n_subbufs, 88951a39d68df598db08dfced8b4707755864a0492Ying Wang struct rchan_callbacks *cb); 89951a39d68df598db08dfced8b4707755864a0492Ying Wang 90951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 91951a39d68df598db08dfced8b4707755864a0492Ying Wang 92