Skip to content

Commit

Permalink
Staging: VME: Introduce IOCTL to generate VME interrupts.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Vincent Bossier authored and Greg Kroah-Hartman committed Jun 28, 2011
1 parent 54b4a77 commit dca2218
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
16 changes: 16 additions & 0 deletions drivers/staging/vme/devices/vme_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {
Expand Down
6 changes: 6 additions & 0 deletions drivers/staging/vme/devices/vme_user.h
Original file line number Diff line number Diff line change
Expand Up @@ -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_ */

0 comments on commit dca2218

Please sign in to comment.