summaryrefslogtreecommitdiffstats
path: root/libc/kernel/common/linux/relay.h
diff options
context:
space:
mode:
Diffstat (limited to 'libc/kernel/common/linux/relay.h')
-rw-r--r--libc/kernel/common/linux/relay.h91
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
+