master/ioctl.c
branchstable-1.5
changeset 2477 1d5ebfb7fec1
parent 2474 fb2fe8fae501
child 2481 c99ff159b60d
equal deleted inserted replaced
2476:9a0d30056e70 2477:1d5ebfb7fec1
  1716         ec_ioctl_context_t *ctx /**< Private data structure of file handle. */
  1716         ec_ioctl_context_t *ctx /**< Private data structure of file handle. */
  1717         )
  1717         )
  1718 {
  1718 {
  1719     size_t send_interval;
  1719     size_t send_interval;
  1720 
  1720 
       
  1721     if (unlikely(!ctx->requested)) {
       
  1722         return -EPERM;
       
  1723     }
       
  1724 
  1721     if (copy_from_user(&send_interval, (void __user *) arg,
  1725     if (copy_from_user(&send_interval, (void __user *) arg,
  1722                 sizeof(send_interval))) {
  1726                 sizeof(send_interval))) {
  1723         return -EFAULT;
  1727         return -EFAULT;
  1724     }
  1728     }
  1725 
  1729 
  1780         ec_ioctl_context_t *ctx /**< Private data structure of file handle. */
  1784         ec_ioctl_context_t *ctx /**< Private data structure of file handle. */
  1781         )
  1785         )
  1782 {
  1786 {
  1783     ec_master_state_t data;
  1787     ec_master_state_t data;
  1784 
  1788 
  1785     if (unlikely(!ctx->requested))
       
  1786         return -EPERM;
       
  1787 
       
  1788     ecrt_master_state(master, &data);
  1789     ecrt_master_state(master, &data);
  1789 
  1790 
  1790     if (copy_to_user((void __user *) arg, &data, sizeof(data)))
  1791     if (copy_to_user((void __user *) arg, &data, sizeof(data)))
  1791         return -EFAULT;
  1792         return -EFAULT;
  1792 
  1793 
  1805 {
  1806 {
  1806     ec_ioctl_link_state_t ioctl;
  1807     ec_ioctl_link_state_t ioctl;
  1807     ec_master_link_state_t state;
  1808     ec_master_link_state_t state;
  1808     int ret;
  1809     int ret;
  1809 
  1810 
  1810     if (unlikely(!ctx->requested)) {
       
  1811         return -EPERM;
       
  1812     }
       
  1813 
       
  1814     if (copy_from_user(&ioctl, (void __user *) arg, sizeof(ioctl))) {
  1811     if (copy_from_user(&ioctl, (void __user *) arg, sizeof(ioctl))) {
  1815         return -EFAULT;
  1812         return -EFAULT;
  1816     }
  1813     }
  1817 
  1814 
  1818     ret = ecrt_master_link_state(master, ioctl.dev_idx, &state);
  1815     ret = ecrt_master_link_state(master, ioctl.dev_idx, &state);
  1969         ec_master_t *master, /**< EtherCAT master. */
  1966         ec_master_t *master, /**< EtherCAT master. */
  1970         void *arg, /**< ioctl() argument. */
  1967         void *arg, /**< ioctl() argument. */
  1971         ec_ioctl_context_t *ctx /**< Private data structure of file handle. */
  1968         ec_ioctl_context_t *ctx /**< Private data structure of file handle. */
  1972         )
  1969         )
  1973 {
  1970 {
  1974     if (unlikely(!ctx->requested))
       
  1975         return -EPERM;
       
  1976 
       
  1977     down(&master->master_sem);
  1971     down(&master->master_sem);
  1978     ecrt_master_reset(master);
  1972     ecrt_master_reset(master);
  1979     up(&master->master_sem);
  1973     up(&master->master_sem);
  1980     return 0;
  1974     return 0;
  1981 }
  1975 }
  4168                 break;
  4162                 break;
  4169             }
  4163             }
  4170             ret = ec_ioctl_sc_emerg_clear(master, arg, ctx);
  4164             ret = ec_ioctl_sc_emerg_clear(master, arg, ctx);
  4171             break;
  4165             break;
  4172         case EC_IOCTL_SC_EMERG_OVERRUNS:
  4166         case EC_IOCTL_SC_EMERG_OVERRUNS:
  4173             if (!ctx->writable) {
       
  4174                 ret = -EPERM;
       
  4175                 break;
       
  4176             }
       
  4177             ret = ec_ioctl_sc_emerg_overruns(master, arg, ctx);
  4167             ret = ec_ioctl_sc_emerg_overruns(master, arg, ctx);
  4178             break;
  4168             break;
  4179         case EC_IOCTL_SC_SDO_REQUEST:
  4169         case EC_IOCTL_SC_SDO_REQUEST:
  4180             if (!ctx->writable) {
  4170             if (!ctx->writable) {
  4181                 ret = -EPERM;
  4171                 ret = -EPERM;