From 4f73ac356d4379f620d3b0224984c43f87f59b3f Mon Sep 17 00:00:00 2001 From: Vincent Bossier Date: Thu, 9 Jun 2011 15:49:30 +0200 Subject: [PATCH] --- yaml --- r: 259566 b: refs/heads/master c: dca22184262de0171bafdf613a8d3992a818b70f h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/staging/vme/devices/vme_user.c | 16 ++++++++++++++++ trunk/drivers/staging/vme/devices/vme_user.h | 6 ++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index b244fbb2f031..e9b301265b35 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 54b4a779c9565c475a17cc1254a38f293a5ba3ef +refs/heads/master: dca22184262de0171bafdf613a8d3992a818b70f diff --git a/trunk/drivers/staging/vme/devices/vme_user.c b/trunk/drivers/staging/vme/devices/vme_user.c index db128790e578..91d2cc7bb4c3 100644 --- a/trunk/drivers/staging/vme/devices/vme_user.c +++ b/trunk/drivers/staging/vme/devices/vme_user.c @@ -461,6 +461,7 @@ static int vme_user_ioctl(struct inode *inode, struct file *file, { struct vme_master master; struct vme_slave slave; + struct vme_irq_id irq_req; unsigned long copied; unsigned int minor = MINOR(inode->i_rdev); int retval; @@ -471,6 +472,21 @@ static int vme_user_ioctl(struct inode *inode, struct file *file, switch (type[minor]) { case CONTROL_MINOR: + switch (cmd) { + case VME_IRQ_GEN: + copied = copy_from_user(&irq_req, (char *)arg, + sizeof(struct vme_irq_id)); + if (copied != 0) { + printk(KERN_WARNING "Partial copy from userspace\n"); + return -EFAULT; + } + + retval = vme_irq_generate(vme_user_bridge, + irq_req.level, + irq_req.statid); + + return retval; + } break; case MASTER_MINOR: switch (cmd) { diff --git a/trunk/drivers/staging/vme/devices/vme_user.h b/trunk/drivers/staging/vme/devices/vme_user.h index ede77d7e766b..24bf4e54013d 100644 --- a/trunk/drivers/staging/vme/devices/vme_user.h +++ b/trunk/drivers/staging/vme/devices/vme_user.h @@ -43,10 +43,16 @@ struct vme_slave { #endif }; +struct vme_irq_id { + __u8 level; + __u8 statid; +}; + #define VME_GET_SLAVE _IOR(VME_IOC_MAGIC, 1, struct vme_slave) #define VME_SET_SLAVE _IOW(VME_IOC_MAGIC, 2, struct vme_slave) #define VME_GET_MASTER _IOR(VME_IOC_MAGIC, 3, struct vme_master) #define VME_SET_MASTER _IOW(VME_IOC_MAGIC, 4, struct vme_master) +#define VME_IRQ_GEN _IOW(VME_IOC_MAGIC, 5, struct vme_irq_id) #endif /* _VME_USER_H_ */