Add pollfs_fs.h header which contains the kernel-side declarations and auxiliary macros for type safety checks. Those macros can be simplified later. Signed-off-by: Davi E. M. Arnaut --- include/linux/pollfs_fs.h | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) Index: linux-2.6/include/linux/pollfs_fs.h =================================================================== --- /dev/null +++ linux-2.6/include/linux/pollfs_fs.h @@ -0,0 +1,57 @@ +/* + * pollfs, a naive filesystem for pollable (waitable) files (objects) + * + * Copyright (C) 2007 Davi E. M. Arnaut + * + */ + +#ifndef _LINUX_POLL_FS_H +#define _LINUX_POLL_FS_H + +#ifdef __KERNEL__ + +#include +#include +#include + +#define PFS_CHECK_CALLBACK_1(f, a) (void*) \ + (sizeof((f)((typeof(a *))0))) + +#define PFS_CHECK_CALLBACK_2(f, a, b) (void*) \ + (sizeof((f)((typeof(a *))0, (typeof(b*))0))) + +#define PFS_WRITE(func, type, utype) \ + (ssize_t (*)(void *, const void __user *)) \ + (0 ? PFS_CHECK_CALLBACK_2(func, type, utype) : func) + +#define PFS_READ(func, type, utype) \ + (ssize_t (*)(void *, void __user *)) \ + (0 ? PFS_CHECK_CALLBACK_2(func, type, utype) : func) + +#define PFS_POLL(func, type) \ + (int (*)(void *))(0 ? PFS_CHECK_CALLBACK_1(func, type) : func) + +#define PFS_RELEASE(func, type) \ + (int (*)(void *))(0 ? PFS_CHECK_CALLBACK_1(func, type) : func) + +struct pfs_operations { + ssize_t (*read)(void *, void __user *); + ssize_t (*write)(void *, const void __user *); + int (*mmap)(void *, struct vm_area_struct *); + int (*poll)(void *); + int (*release)(void *); + size_t rsize; + size_t wsize; +}; + +struct pfs_file { + void *data; + wait_queue_head_t *wait; + const struct pfs_operations *fops; +}; + +long pfs_open(struct pfs_file *pfs); + +#endif /* __KERNEL __ */ + +#endif /* _LINUX_POLLFS_FS_H */ -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/