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:
Родитель
91211dd13b
Коммит
47db6d5809
|
@ -92,36 +92,6 @@ static DEFINE_SPINLOCK(comedi_file_info_table_lock);
|
||||||
static struct comedi_device_file_info
|
static struct comedi_device_file_info
|
||||||
*comedi_file_info_table[COMEDI_NUM_MINORS];
|
*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,
|
static void do_become_nonbusy(struct comedi_device *dev,
|
||||||
struct comedi_subdevice *s);
|
struct comedi_subdevice *s);
|
||||||
static int do_cancel(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
|
__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
|
COMEDI_DEVCONFIG
|
||||||
device config ioctl
|
device config ioctl
|
||||||
|
@ -1651,6 +1529,98 @@ static int do_poll_ioctl(struct comedi_device *dev, unsigned int arg,
|
||||||
return -EINVAL;
|
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)
|
static int do_cancel(struct comedi_device *dev, struct comedi_subdevice *s)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче