forked from Minki/linux
staging: comedi: refactor comedi_fops to remove most of the forward declarations
Move the comedi_unlocked_ioctl function in order to remove most of the forward declarations in this file. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Cc: Mori Hess <fmhess@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
91211dd13b
commit
47db6d5809
@ -92,36 +92,6 @@ static DEFINE_SPINLOCK(comedi_file_info_table_lock);
|
||||
static struct comedi_device_file_info
|
||||
*comedi_file_info_table[COMEDI_NUM_MINORS];
|
||||
|
||||
static int do_devconfig_ioctl(struct comedi_device *dev,
|
||||
struct comedi_devconfig __user *arg);
|
||||
static int do_bufconfig_ioctl(struct comedi_device *dev,
|
||||
struct comedi_bufconfig __user *arg);
|
||||
static int do_devinfo_ioctl(struct comedi_device *dev,
|
||||
struct comedi_devinfo __user *arg,
|
||||
struct file *file);
|
||||
static int do_subdinfo_ioctl(struct comedi_device *dev,
|
||||
struct comedi_subdinfo __user *arg, void *file);
|
||||
static int do_chaninfo_ioctl(struct comedi_device *dev,
|
||||
struct comedi_chaninfo __user *arg);
|
||||
static int do_bufinfo_ioctl(struct comedi_device *dev,
|
||||
struct comedi_bufinfo __user *arg, void *file);
|
||||
static int do_cmd_ioctl(struct comedi_device *dev,
|
||||
struct comedi_cmd __user *arg, void *file);
|
||||
static int do_lock_ioctl(struct comedi_device *dev, unsigned int arg,
|
||||
void *file);
|
||||
static int do_unlock_ioctl(struct comedi_device *dev, unsigned int arg,
|
||||
void *file);
|
||||
static int do_cancel_ioctl(struct comedi_device *dev, unsigned int arg,
|
||||
void *file);
|
||||
static int do_cmdtest_ioctl(struct comedi_device *dev,
|
||||
struct comedi_cmd __user *arg, void *file);
|
||||
static int do_insnlist_ioctl(struct comedi_device *dev,
|
||||
struct comedi_insnlist __user *arg, void *file);
|
||||
static int do_insn_ioctl(struct comedi_device *dev,
|
||||
struct comedi_insn __user *arg, void *file);
|
||||
static int do_poll_ioctl(struct comedi_device *dev, unsigned int subd,
|
||||
void *file);
|
||||
|
||||
static void do_become_nonbusy(struct comedi_device *dev,
|
||||
struct comedi_subdevice *s);
|
||||
static int do_cancel(struct comedi_device *dev, struct comedi_subdevice *s);
|
||||
@ -349,98 +319,6 @@ static struct device_attribute comedi_dev_attrs[] = {
|
||||
__ATTR_NULL
|
||||
};
|
||||
|
||||
static long comedi_unlocked_ioctl(struct file *file, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
const unsigned minor = iminor(file->f_dentry->d_inode);
|
||||
struct comedi_device_file_info *dev_file_info =
|
||||
comedi_get_device_file_info(minor);
|
||||
struct comedi_device *dev;
|
||||
int rc;
|
||||
|
||||
if (dev_file_info == NULL || dev_file_info->device == NULL)
|
||||
return -ENODEV;
|
||||
dev = dev_file_info->device;
|
||||
|
||||
mutex_lock(&dev->mutex);
|
||||
|
||||
/* Device config is special, because it must work on
|
||||
* an unconfigured device. */
|
||||
if (cmd == COMEDI_DEVCONFIG) {
|
||||
rc = do_devconfig_ioctl(dev,
|
||||
(struct comedi_devconfig __user *)arg);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!dev->attached) {
|
||||
DPRINTK("no driver configured on /dev/comedi%i\n", dev->minor);
|
||||
rc = -ENODEV;
|
||||
goto done;
|
||||
}
|
||||
|
||||
switch (cmd) {
|
||||
case COMEDI_BUFCONFIG:
|
||||
rc = do_bufconfig_ioctl(dev,
|
||||
(struct comedi_bufconfig __user *)arg);
|
||||
break;
|
||||
case COMEDI_DEVINFO:
|
||||
rc = do_devinfo_ioctl(dev, (struct comedi_devinfo __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_SUBDINFO:
|
||||
rc = do_subdinfo_ioctl(dev,
|
||||
(struct comedi_subdinfo __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_CHANINFO:
|
||||
rc = do_chaninfo_ioctl(dev, (void __user *)arg);
|
||||
break;
|
||||
case COMEDI_RANGEINFO:
|
||||
rc = do_rangeinfo_ioctl(dev, (void __user *)arg);
|
||||
break;
|
||||
case COMEDI_BUFINFO:
|
||||
rc = do_bufinfo_ioctl(dev,
|
||||
(struct comedi_bufinfo __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_LOCK:
|
||||
rc = do_lock_ioctl(dev, arg, file);
|
||||
break;
|
||||
case COMEDI_UNLOCK:
|
||||
rc = do_unlock_ioctl(dev, arg, file);
|
||||
break;
|
||||
case COMEDI_CANCEL:
|
||||
rc = do_cancel_ioctl(dev, arg, file);
|
||||
break;
|
||||
case COMEDI_CMD:
|
||||
rc = do_cmd_ioctl(dev, (struct comedi_cmd __user *)arg, file);
|
||||
break;
|
||||
case COMEDI_CMDTEST:
|
||||
rc = do_cmdtest_ioctl(dev, (struct comedi_cmd __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_INSNLIST:
|
||||
rc = do_insnlist_ioctl(dev,
|
||||
(struct comedi_insnlist __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_INSN:
|
||||
rc = do_insn_ioctl(dev, (struct comedi_insn __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_POLL:
|
||||
rc = do_poll_ioctl(dev, arg, file);
|
||||
break;
|
||||
default:
|
||||
rc = -ENOTTY;
|
||||
break;
|
||||
}
|
||||
|
||||
done:
|
||||
mutex_unlock(&dev->mutex);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
COMEDI_DEVCONFIG
|
||||
device config ioctl
|
||||
@ -1651,6 +1529,98 @@ static int do_poll_ioctl(struct comedi_device *dev, unsigned int arg,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static long comedi_unlocked_ioctl(struct file *file, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
const unsigned minor = iminor(file->f_dentry->d_inode);
|
||||
struct comedi_device_file_info *dev_file_info =
|
||||
comedi_get_device_file_info(minor);
|
||||
struct comedi_device *dev;
|
||||
int rc;
|
||||
|
||||
if (dev_file_info == NULL || dev_file_info->device == NULL)
|
||||
return -ENODEV;
|
||||
dev = dev_file_info->device;
|
||||
|
||||
mutex_lock(&dev->mutex);
|
||||
|
||||
/* Device config is special, because it must work on
|
||||
* an unconfigured device. */
|
||||
if (cmd == COMEDI_DEVCONFIG) {
|
||||
rc = do_devconfig_ioctl(dev,
|
||||
(struct comedi_devconfig __user *)arg);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!dev->attached) {
|
||||
DPRINTK("no driver configured on /dev/comedi%i\n", dev->minor);
|
||||
rc = -ENODEV;
|
||||
goto done;
|
||||
}
|
||||
|
||||
switch (cmd) {
|
||||
case COMEDI_BUFCONFIG:
|
||||
rc = do_bufconfig_ioctl(dev,
|
||||
(struct comedi_bufconfig __user *)arg);
|
||||
break;
|
||||
case COMEDI_DEVINFO:
|
||||
rc = do_devinfo_ioctl(dev, (struct comedi_devinfo __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_SUBDINFO:
|
||||
rc = do_subdinfo_ioctl(dev,
|
||||
(struct comedi_subdinfo __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_CHANINFO:
|
||||
rc = do_chaninfo_ioctl(dev, (void __user *)arg);
|
||||
break;
|
||||
case COMEDI_RANGEINFO:
|
||||
rc = do_rangeinfo_ioctl(dev, (void __user *)arg);
|
||||
break;
|
||||
case COMEDI_BUFINFO:
|
||||
rc = do_bufinfo_ioctl(dev,
|
||||
(struct comedi_bufinfo __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_LOCK:
|
||||
rc = do_lock_ioctl(dev, arg, file);
|
||||
break;
|
||||
case COMEDI_UNLOCK:
|
||||
rc = do_unlock_ioctl(dev, arg, file);
|
||||
break;
|
||||
case COMEDI_CANCEL:
|
||||
rc = do_cancel_ioctl(dev, arg, file);
|
||||
break;
|
||||
case COMEDI_CMD:
|
||||
rc = do_cmd_ioctl(dev, (struct comedi_cmd __user *)arg, file);
|
||||
break;
|
||||
case COMEDI_CMDTEST:
|
||||
rc = do_cmdtest_ioctl(dev, (struct comedi_cmd __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_INSNLIST:
|
||||
rc = do_insnlist_ioctl(dev,
|
||||
(struct comedi_insnlist __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_INSN:
|
||||
rc = do_insn_ioctl(dev, (struct comedi_insn __user *)arg,
|
||||
file);
|
||||
break;
|
||||
case COMEDI_POLL:
|
||||
rc = do_poll_ioctl(dev, arg, file);
|
||||
break;
|
||||
default:
|
||||
rc = -ENOTTY;
|
||||
break;
|
||||
}
|
||||
|
||||
done:
|
||||
mutex_unlock(&dev->mutex);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int do_cancel(struct comedi_device *dev, struct comedi_subdevice *s)
|
||||
{
|
||||
int ret = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user