aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/vme/devices/vme_user.c
diff options
context:
space:
mode:
authorVincent Bossier <vincent.bossier@gmail.com>2011-06-09 15:49:30 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2011-06-28 14:13:05 -0700
commitdca22184262de0171bafdf613a8d3992a818b70f (patch)
tree7b1e8feb4f2177d474634fcd8cc952b87dece774 /drivers/staging/vme/devices/vme_user.c
parent54b4a779c9565c475a17cc1254a38f293a5ba3ef (diff)
Staging: VME: Introduce IOCTL to generate VME interrupts.
The vme_irq_set is oblviously not needed (a remnant from old tests) and the IOCTL exchange types have been updated following Greg's comments. Allow the IOCTL call to generate VME interrupts when called on the vme/ctl device with the right arguments. Signed-off-by: Vincent Bossier <vincent.bossier@gmail.com> Acked-by: Martyn Welch <martyn.welch@ge.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/vme/devices/vme_user.c')
-rw-r--r--drivers/staging/vme/devices/vme_user.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/staging/vme/devices/vme_user.c b/drivers/staging/vme/devices/vme_user.c
index db128790e57..91d2cc7bb4c 100644
--- a/drivers/staging/vme/devices/vme_user.c
+++ b/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) {