mirror of
https://gitlab.com/etherlab.org/ethercat.git
synced 2026-09-21 09:33:47 +08:00
Fixed SDO download via library.
This commit is contained in:
@@ -2273,6 +2273,7 @@ int ec_cdev_ioctl_sdo_request_write(
|
||||
ec_ioctl_sdo_request_t data;
|
||||
ec_slave_config_t *sc;
|
||||
ec_sdo_request_t *req;
|
||||
int ret;
|
||||
|
||||
if (unlikely(!priv->requested))
|
||||
return -EPERM;
|
||||
@@ -2280,6 +2281,11 @@ int ec_cdev_ioctl_sdo_request_write(
|
||||
if (copy_from_user(&data, (void __user *) arg, sizeof(data)))
|
||||
return -EFAULT;
|
||||
|
||||
if (!data.size) {
|
||||
EC_ERR("Sdo download: Data size may not be zero!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (down_interruptible(&master->master_sem))
|
||||
return -EINTR;
|
||||
|
||||
@@ -2295,6 +2301,14 @@ int ec_cdev_ioctl_sdo_request_write(
|
||||
|
||||
up(&master->master_sem);
|
||||
|
||||
ret = ec_sdo_request_alloc(req, data.size);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (copy_from_user(req->data, (void __user *) data.data, data.size))
|
||||
return -EFAULT;
|
||||
|
||||
req->data_size = data.size;
|
||||
ecrt_sdo_request_write(req);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user