equal
deleted
inserted
replaced
2220 } |
2220 } |
2221 |
2221 |
2222 up(&master->master_sem); |
2222 up(&master->master_sem); |
2223 |
2223 |
2224 ecrt_voe_handler_read(voe); |
2224 ecrt_voe_handler_read(voe); |
|
2225 return 0; |
|
2226 } |
|
2227 |
|
2228 /*****************************************************************************/ |
|
2229 |
|
2230 /** Starts a VoE read operation without sending a sync message first. |
|
2231 */ |
|
2232 int ec_cdev_ioctl_voe_read_nosync( |
|
2233 ec_master_t *master, /**< EtherCAT master. */ |
|
2234 unsigned long arg, /**< ioctl() argument. */ |
|
2235 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
|
2236 ) |
|
2237 { |
|
2238 ec_ioctl_voe_t data; |
|
2239 ec_slave_config_t *sc; |
|
2240 ec_voe_handler_t *voe; |
|
2241 |
|
2242 if (unlikely(!priv->requested)) |
|
2243 return -EPERM; |
|
2244 |
|
2245 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
|
2246 return -EFAULT; |
|
2247 |
|
2248 if (down_interruptible(&master->master_sem)) |
|
2249 return -EINTR; |
|
2250 |
|
2251 if (!(sc = ec_master_get_config(master, data.config_index))) { |
|
2252 up(&master->master_sem); |
|
2253 return -ENOENT; |
|
2254 } |
|
2255 |
|
2256 if (!(voe = ec_slave_config_find_voe_handler(sc, data.voe_index))) { |
|
2257 up(&master->master_sem); |
|
2258 return -ENOENT; |
|
2259 } |
|
2260 |
|
2261 up(&master->master_sem); |
|
2262 |
|
2263 ecrt_voe_handler_read_nosync(voe); |
2225 return 0; |
2264 return 0; |
2226 } |
2265 } |
2227 |
2266 |
2228 /*****************************************************************************/ |
2267 /*****************************************************************************/ |
2229 |
2268 |
2557 case EC_IOCTL_VOE_REC_HEADER: |
2596 case EC_IOCTL_VOE_REC_HEADER: |
2558 return ec_cdev_ioctl_voe_rec_header(master, arg, priv); |
2597 return ec_cdev_ioctl_voe_rec_header(master, arg, priv); |
2559 case EC_IOCTL_VOE_READ: |
2598 case EC_IOCTL_VOE_READ: |
2560 if (!(filp->f_mode & FMODE_WRITE)) |
2599 if (!(filp->f_mode & FMODE_WRITE)) |
2561 return -EPERM; |
2600 return -EPERM; |
|
2601 case EC_IOCTL_VOE_READ_NOSYNC: |
|
2602 if (!(filp->f_mode & FMODE_WRITE)) |
|
2603 return -EPERM; |
|
2604 return ec_cdev_ioctl_voe_read_nosync(master, arg, priv); |
2562 return ec_cdev_ioctl_voe_read(master, arg, priv); |
2605 return ec_cdev_ioctl_voe_read(master, arg, priv); |
2563 case EC_IOCTL_VOE_WRITE: |
2606 case EC_IOCTL_VOE_WRITE: |
2564 if (!(filp->f_mode & FMODE_WRITE)) |
2607 if (!(filp->f_mode & FMODE_WRITE)) |
2565 return -EPERM; |
2608 return -EPERM; |
2566 return ec_cdev_ioctl_voe_write(master, arg, priv); |
2609 return ec_cdev_ioctl_voe_write(master, arg, priv); |