20 #include <linux/module.h>
21 #include <linux/errno.h>
22 #include <linux/kernel.h>
24 #include <linux/time.h>
25 #include <linux/sched.h>
26 #include <linux/slab.h>
28 #include <linux/fcntl.h>
35 #include <linux/poll.h>
37 #include <linux/list.h>
39 #include <linux/device.h>
42 #include <asm/uaccess.h>
44 #include <linux/coda.h>
45 #include <linux/coda_psdev.h>
57 static struct class *coda_psdev_class;
68 poll_wait(file, &vcp->
vc_waitq, wait);
77 static long coda_psdev_ioctl(
struct file * filp,
unsigned int cmd,
unsigned long arg)
84 return put_user(data, (
int __user *) arg);
96 static ssize_t coda_psdev_write(
struct file *file,
const char __user *
buf,
97 size_t nbytes, loff_t *off)
113 int size =
sizeof(*dcbuf);
116 printk(
"coda_downcall opc %d uniq %d, not enough!\n",
121 if ( nbytes > size ) {
122 printk(
"Coda: downcall opc %d, uniq %d, too much!",
138 printk(
"psdev_write: coda_downcall error: %d\n",
error);
150 if (
tmp->uc_unique ==
hdr.unique) {
159 printk(
"psdev_write: msg (%d, %d) not found\n",
166 if (
req->uc_outSize < nbytes) {
167 printk(
"psdev_write: too much cnt: %d, cnt: %ld, opc: %d, uniq: %d.\n",
168 req->uc_outSize, (
long)nbytes,
hdr.opcode,
hdr.unique);
169 nbytes =
req->uc_outSize;
187 if (!outp->
oh.result)
188 outp->fh =
fget(outp->
fd);
200 static ssize_t coda_psdev_read(
struct file * file,
char __user * buf,
201 size_t nbytes, loff_t *off)
241 if (nbytes < req->uc_inSize) {
242 printk (
"psdev_read: Venus read %ld bytes of %d in message\n",
243 (
long)nbytes,
req->uc_inSize);
264 static int coda_psdev_open(
struct inode *
inode,
struct file * file)
295 static int coda_psdev_release(
struct inode * inode,
struct file * file)
301 printk(
"psdev_release: Not open.\n");
337 .read = coda_psdev_read,
338 .write = coda_psdev_write,
339 .poll = coda_psdev_poll,
340 .unlocked_ioctl = coda_psdev_ioctl,
341 .open = coda_psdev_open,
342 .release = coda_psdev_release,
346 static int init_coda_psdev(
void)
355 if (IS_ERR(coda_psdev_class)) {
356 err = PTR_ERR(coda_psdev_class);
379 static int __init init_coda(
void)
387 status = init_coda_psdev();
389 printk(
"Problem (%d) in init_coda_psdev\n", status);
395 printk(
"coda: failed to register filesystem!\n");
411 static void __exit exit_coda(
void)
417 printk(
"coda: failed to unregister filesystem\n");