equal
deleted
inserted
replaced
2029 up(&master->master_sem); |
2029 up(&master->master_sem); |
2030 out_return: |
2030 out_return: |
2031 return ret; |
2031 return ret; |
2032 } |
2032 } |
2033 |
2033 |
|
2034 |
|
2035 /*****************************************************************************/ |
|
2036 |
|
2037 /** Configure wether a slave allows overlapping PDOs. |
|
2038 */ |
|
2039 int ec_cdev_ioctl_sc_allow_overlapping_pdos( |
|
2040 ec_master_t *master, /**< EtherCAT master. */ |
|
2041 unsigned long arg, /**< ioctl() argument. */ |
|
2042 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
|
2043 ) |
|
2044 { |
|
2045 ec_ioctl_config_t data; |
|
2046 ec_slave_config_t *sc; |
|
2047 int ret = 0; |
|
2048 |
|
2049 if (unlikely(!priv->requested)) { |
|
2050 ret = -EPERM; |
|
2051 goto out_return; |
|
2052 } |
|
2053 |
|
2054 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
|
2055 ret = -EFAULT; |
|
2056 goto out_return; |
|
2057 } |
|
2058 |
|
2059 if (down_interruptible(&master->master_sem)) { |
|
2060 ret = -EINTR; |
|
2061 goto out_return; |
|
2062 } |
|
2063 |
|
2064 if (!(sc = ec_master_get_config(master, data.config_index))) { |
|
2065 ret = -ENOENT; |
|
2066 goto out_up; |
|
2067 } |
|
2068 |
|
2069 ecrt_slave_config_overlapping_pdos(sc, |
|
2070 data.allow_overlapping_pdos); |
|
2071 |
|
2072 out_up: |
|
2073 up(&master->master_sem); |
|
2074 out_return: |
|
2075 return ret; |
|
2076 } |
|
2077 |
2034 /*****************************************************************************/ |
2078 /*****************************************************************************/ |
2035 |
2079 |
2036 /** Add a PDO to the assignment. |
2080 /** Add a PDO to the assignment. |
2037 */ |
2081 */ |
2038 int ec_cdev_ioctl_sc_add_pdo( |
2082 int ec_cdev_ioctl_sc_add_pdo( |
3723 return ec_cdev_ioctl_sc_sync(master, arg, priv); |
3767 return ec_cdev_ioctl_sc_sync(master, arg, priv); |
3724 case EC_IOCTL_SC_WATCHDOG: |
3768 case EC_IOCTL_SC_WATCHDOG: |
3725 if (!(filp->f_mode & FMODE_WRITE)) |
3769 if (!(filp->f_mode & FMODE_WRITE)) |
3726 return -EPERM; |
3770 return -EPERM; |
3727 return ec_cdev_ioctl_sc_watchdog(master, arg, priv); |
3771 return ec_cdev_ioctl_sc_watchdog(master, arg, priv); |
|
3772 case EC_IOCTL_SC_OVERLAPPING_IO: |
|
3773 if (!(filp->f_mode & FMODE_WRITE)) |
|
3774 return -EPERM; |
|
3775 return ec_cdev_ioctl_sc_allow_overlapping_pdos(master,arg,priv); |
3728 case EC_IOCTL_SC_ADD_PDO: |
3776 case EC_IOCTL_SC_ADD_PDO: |
3729 if (!(filp->f_mode & FMODE_WRITE)) |
3777 if (!(filp->f_mode & FMODE_WRITE)) |
3730 return -EPERM; |
3778 return -EPERM; |
3731 return ec_cdev_ioctl_sc_add_pdo(master, arg, priv); |
3779 return ec_cdev_ioctl_sc_add_pdo(master, arg, priv); |
3732 case EC_IOCTL_SC_CLEAR_PDOS: |
3780 case EC_IOCTL_SC_CLEAR_PDOS: |