master/cdev.c
changeset 1361 9c16b62326fa
parent 1352 275d2fdeab48
child 1362 2d6e0b01c80a
equal deleted inserted replaced
1360:afcea72f0040 1361:9c16b62326fa
  2271         )
  2271         )
  2272 {
  2272 {
  2273     ec_ioctl_sdo_request_t data;
  2273     ec_ioctl_sdo_request_t data;
  2274     ec_slave_config_t *sc;
  2274     ec_slave_config_t *sc;
  2275     ec_sdo_request_t *req;
  2275     ec_sdo_request_t *req;
       
  2276     int ret;
  2276 
  2277 
  2277 	if (unlikely(!priv->requested))
  2278 	if (unlikely(!priv->requested))
  2278         return -EPERM;
  2279         return -EPERM;
  2279 
  2280 
  2280     if (copy_from_user(&data, (void __user *) arg, sizeof(data)))
  2281     if (copy_from_user(&data, (void __user *) arg, sizeof(data)))
  2281         return -EFAULT;
  2282         return -EFAULT;
  2282 
  2283 
       
  2284     if (!data.size) {
       
  2285         EC_ERR("Sdo download: Data size may not be zero!\n");
       
  2286         return -EINVAL;
       
  2287     }
       
  2288 
  2283     if (down_interruptible(&master->master_sem))
  2289     if (down_interruptible(&master->master_sem))
  2284         return -EINTR;
  2290         return -EINTR;
  2285 
  2291 
  2286     if (!(sc = ec_master_get_config(master, data.config_index))) {
  2292     if (!(sc = ec_master_get_config(master, data.config_index))) {
  2287         up(&master->master_sem);
  2293         up(&master->master_sem);
  2293         return -ENOENT;
  2299         return -ENOENT;
  2294     }
  2300     }
  2295 
  2301 
  2296     up(&master->master_sem);
  2302     up(&master->master_sem);
  2297 
  2303 
       
  2304     ret = ec_sdo_request_alloc(req, data.size);
       
  2305     if (ret)
       
  2306         return ret;
       
  2307 
       
  2308     if (copy_from_user(req->data, (void __user *) data.data, data.size))
       
  2309         return -EFAULT;
       
  2310 
       
  2311     req->data_size = data.size;
  2298     ecrt_sdo_request_write(req);
  2312     ecrt_sdo_request_write(req);
  2299     return 0;
  2313     return 0;
  2300 }
  2314 }
  2301 
  2315 
  2302 /*****************************************************************************/
  2316 /*****************************************************************************/