equal
deleted
inserted
replaced
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 /*****************************************************************************/ |