diff options
Diffstat (limited to 'libc/kernel/common/linux/relay.h')
-rw-r--r-- | libc/kernel/common/linux/relay.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/libc/kernel/common/linux/relay.h b/libc/kernel/common/linux/relay.h new file mode 100644 index 0000000..09f7219 --- /dev/null +++ b/libc/kernel/common/linux/relay.h @@ -0,0 +1,91 @@ +/**************************************************************************** + **************************************************************************** + *** + *** This header was automatically generated from a Linux kernel header + *** of the same name, to make information necessary for userspace to + *** call into the kernel available to libc. It contains only constants, + *** structures, and macros generated from the original header, and thus, + *** contains no copyrightable information. + *** + **************************************************************************** + ****************************************************************************/ +#ifndef _LINUX_RELAY_H +#define _LINUX_RELAY_H + +#include <linux/types.h> +#include <linux/sched.h> +#include <linux/wait.h> +#include <linux/list.h> +#include <linux/fs.h> +#include <linux/poll.h> +#include <linux/kref.h> + +#define FIX_SIZE(x) ((((x) - 1) & PAGE_MASK) + PAGE_SIZE) + +#define RELAYFS_CHANNEL_VERSION 6 + +struct rchan_buf +{ + void *start; + void *data; + size_t offset; + size_t subbufs_produced; + size_t subbufs_consumed; + struct rchan *chan; + wait_queue_head_t read_wait; + struct work_struct wake_readers; + struct dentry *dentry; + struct kref kref; + struct page **page_array; + unsigned int page_count; + unsigned int finalized; + size_t *padding; + size_t prev_padding; + size_t bytes_consumed; + unsigned int cpu; +} ____cacheline_aligned; + +struct rchan +{ + u32 version; + size_t subbuf_size; + size_t n_subbufs; + size_t alloc_size; + struct rchan_callbacks *cb; + struct kref kref; + void *private_data; + size_t last_toobig; + struct rchan_buf *buf[NR_CPUS]; +}; + +struct rchan_callbacks +{ + + int (*subbuf_start) (struct rchan_buf *buf, + void *subbuf, + void *prev_subbuf, + size_t prev_padding); + + void (*buf_mapped)(struct rchan_buf *buf, + struct file *filp); + + void (*buf_unmapped)(struct rchan_buf *buf, + struct file *filp); + + struct dentry *(*create_buf_file)(const char *filename, + struct dentry *parent, + int mode, + struct rchan_buf *buf, + int *is_global); + + int (*remove_buf_file)(struct dentry *dentry); +}; + +struct rchan *relay_open(const char *base_filename, + struct dentry *parent, + size_t subbuf_size, + size_t n_subbufs, + struct rchan_callbacks *cb); + +#endif + |