staging: comedi: deprecate loading firmware with comedi_config
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Wed, 9 Jan 2013 16:46:10 +0000 (09:46 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 18 Jan 2013 00:51:46 +0000 (16:51 -0800)
All the comedi drivers have been converted to use the request_firmware()
hotplug interface. The COMEDI_DEVCONFIG ioctl support for passing the
firmware blob as 'aux_data' is no longer required.

Remove the feature and give the user a dev_warn message if it is
attempted.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/comedi.h
drivers/staging/comedi/comedi_fops.c
drivers/staging/comedi/comedidev.h

index c8a8ca12612745c21b9f1cebf4a6e88b6fb72cbf..4233605df30ace5057dc40f16df7ad24b6496605 100644 (file)
 
 /* number of config options in the config structure */
 #define COMEDI_NDEVCONFOPTS 32
-/*length of nth chunk of firmware data*/
+
+/*
+ * NOTE: 'comedi_config --init-data' is deprecated
+ *
+ * The following indexes in the config options were used by
+ * comedi_config to pass firmware blobs from user space to the
+ * comedi drivers. The request_firmware() hotplug interface is
+ * now used by all comedi drivers instead.
+ */
+
+/* length of nth chunk of firmware data -*/
 #define COMEDI_DEVCONF_AUX_DATA3_LENGTH                25
 #define COMEDI_DEVCONF_AUX_DATA2_LENGTH                26
 #define COMEDI_DEVCONF_AUX_DATA1_LENGTH                27
index 7d1e1d5db607542b36bc335fc6599c956a5dd886..599e775241332b05a5ff14b3270970af940622a3 100644 (file)
@@ -469,8 +469,6 @@ static int do_devconfig_ioctl(struct comedi_device *dev,
 {
        struct comedi_devconfig it;
        int ret;
-       unsigned char *aux_data = NULL;
-       int aux_len;
 
        if (!capable(CAP_SYS_ADMIN))
                return -EPERM;
@@ -491,31 +489,10 @@ static int do_devconfig_ioctl(struct comedi_device *dev,
 
        it.board_name[COMEDI_NAMELEN - 1] = 0;
 
-       if (comedi_aux_data(it.options, 0) &&
-           it.options[COMEDI_DEVCONF_AUX_DATA_LENGTH]) {
-               int bit_shift;
-               aux_len = it.options[COMEDI_DEVCONF_AUX_DATA_LENGTH];
-               if (aux_len < 0)
-                       return -EFAULT;
-
-               aux_data = vmalloc(aux_len);
-               if (!aux_data)
-                       return -ENOMEM;
-
-               if (copy_from_user(aux_data,
-                                  (unsigned char __user *
-                                   )comedi_aux_data(it.options, 0), aux_len)) {
-                       vfree(aux_data);
-                       return -EFAULT;
-               }
-               it.options[COMEDI_DEVCONF_AUX_DATA_LO] =
-                   (unsigned long)aux_data;
-               if (sizeof(void *) > sizeof(int)) {
-                       bit_shift = sizeof(int) * 8;
-                       it.options[COMEDI_DEVCONF_AUX_DATA_HI] =
-                           ((unsigned long)aux_data) >> bit_shift;
-               } else
-                       it.options[COMEDI_DEVCONF_AUX_DATA_HI] = 0;
+       if (it.options[COMEDI_DEVCONF_AUX_DATA_LENGTH]) {
+               dev_warn(dev->class_dev,
+                        "comedi_config --init_data is deprecated\n");
+               return -EINVAL;
        }
 
        ret = comedi_device_attach(dev, &it);
@@ -526,9 +503,6 @@ static int do_devconfig_ioctl(struct comedi_device *dev,
                }
        }
 
-       if (aux_data)
-               vfree(aux_data);
-
        return ret;
 }
 
index 34a85d3941c3e054b187025b7113d03ec3c2a144..c3bc4b742452df3ea0fdbc011a7c970a78d56668 100644 (file)
@@ -461,31 +461,6 @@ static inline unsigned comedi_buf_read_n_allocated(struct comedi_async *async)
        return async->buf_read_alloc_count - async->buf_read_count;
 }
 
-static inline void *comedi_aux_data(int options[], int n)
-{
-       unsigned long address;
-       unsigned long address_low;
-       int bit_shift;
-       if (sizeof(int) >= sizeof(void *))
-               address = options[COMEDI_DEVCONF_AUX_DATA_LO];
-       else {
-               address = options[COMEDI_DEVCONF_AUX_DATA_HI];
-               bit_shift = sizeof(int) * 8;
-               address <<= bit_shift;
-               address_low = options[COMEDI_DEVCONF_AUX_DATA_LO];
-               address_low &= (1UL << bit_shift) - 1;
-               address |= address_low;
-       }
-       if (n >= 1)
-               address += options[COMEDI_DEVCONF_AUX_DATA0_LENGTH];
-       if (n >= 2)
-               address += options[COMEDI_DEVCONF_AUX_DATA1_LENGTH];
-       if (n >= 3)
-               address += options[COMEDI_DEVCONF_AUX_DATA2_LENGTH];
-       BUG_ON(n > 3);
-       return (void *)address;
-}
-
 int comedi_alloc_subdevice_minor(struct comedi_device *dev,
                                 struct comedi_subdevice *s);
 void comedi_free_subdevice_minor(struct comedi_subdevice *s);