master/cdev.c
changeset 1535 0c484ee12d89
parent 1531 6c5478400e28
child 1544 cfcaf46c5b3f
child 1582 7273aa7deb3d
equal deleted inserted replaced
1534:4844a8433915 1535:0c484ee12d89
  1785     return 0;
  1785     return 0;
  1786 }
  1786 }
  1787 
  1787 
  1788 /*****************************************************************************/
  1788 /*****************************************************************************/
  1789 
  1789 
       
  1790 /** Queue the sync monitoring datagram.
       
  1791  */
       
  1792 int ec_cdev_ioctl_sync_mon_queue(
       
  1793         ec_master_t *master, /**< EtherCAT master. */
       
  1794         unsigned long arg, /**< ioctl() argument. */
       
  1795         ec_cdev_priv_t *priv /**< Private data structure of file handle. */
       
  1796         )
       
  1797 {
       
  1798     if (unlikely(!priv->requested))
       
  1799         return -EPERM;
       
  1800 
       
  1801     down(&master->io_sem);
       
  1802     ecrt_master_sync_monitor_queue(master);
       
  1803     up(&master->io_sem);
       
  1804     return 0;
       
  1805 }
       
  1806 
       
  1807 /*****************************************************************************/
       
  1808 
       
  1809 /** Processes the sync monitoring datagram.
       
  1810  */
       
  1811 int ec_cdev_ioctl_sync_mon_process(
       
  1812         ec_master_t *master, /**< EtherCAT master. */
       
  1813         unsigned long arg, /**< ioctl() argument. */
       
  1814         ec_cdev_priv_t *priv /**< Private data structure of file handle. */
       
  1815         )
       
  1816 {
       
  1817     uint32_t time_diff;
       
  1818 
       
  1819     if (unlikely(!priv->requested))
       
  1820         return -EPERM;
       
  1821 
       
  1822     down(&master->io_sem);
       
  1823     time_diff = ecrt_master_sync_monitor_process(master);
       
  1824     up(&master->io_sem);
       
  1825 
       
  1826     if (copy_to_user((void __user *) arg, &time_diff, sizeof(time_diff)))
       
  1827         return -EFAULT;
       
  1828 
       
  1829     return 0;
       
  1830 }
       
  1831 
       
  1832 /*****************************************************************************/
       
  1833 
  1790 /** Configure a sync manager.
  1834 /** Configure a sync manager.
  1791  */
  1835  */
  1792 int ec_cdev_ioctl_sc_sync(
  1836 int ec_cdev_ioctl_sc_sync(
  1793         ec_master_t *master, /**< EtherCAT master. */
  1837         ec_master_t *master, /**< EtherCAT master. */
  1794         unsigned long arg, /**< ioctl() argument. */
  1838         unsigned long arg, /**< ioctl() argument. */
  3304             return ec_cdev_ioctl_sync_ref(master, arg, priv);
  3348             return ec_cdev_ioctl_sync_ref(master, arg, priv);
  3305         case EC_IOCTL_SYNC_SLAVES:
  3349         case EC_IOCTL_SYNC_SLAVES:
  3306             if (!(filp->f_mode & FMODE_WRITE))
  3350             if (!(filp->f_mode & FMODE_WRITE))
  3307                 return -EPERM;
  3351                 return -EPERM;
  3308             return ec_cdev_ioctl_sync_slaves(master, arg, priv);
  3352             return ec_cdev_ioctl_sync_slaves(master, arg, priv);
       
  3353         case EC_IOCTL_SYNC_MON_QUEUE:
       
  3354             if (!(filp->f_mode & FMODE_WRITE))
       
  3355                 return -EPERM;
       
  3356             return ec_cdev_ioctl_sync_mon_queue(master, arg, priv);
       
  3357         case EC_IOCTL_SYNC_MON_PROCESS:
       
  3358             if (!(filp->f_mode & FMODE_WRITE))
       
  3359                 return -EPERM;
       
  3360             return ec_cdev_ioctl_sync_mon_process(master, arg, priv);
  3309         case EC_IOCTL_SC_SYNC:
  3361         case EC_IOCTL_SC_SYNC:
  3310             if (!(filp->f_mode & FMODE_WRITE))
  3362             if (!(filp->f_mode & FMODE_WRITE))
  3311                 return -EPERM;
  3363                 return -EPERM;
  3312             return ec_cdev_ioctl_sc_sync(master, arg, priv);
  3364             return ec_cdev_ioctl_sc_sync(master, arg, priv);
  3313         case EC_IOCTL_SC_WATCHDOG:
  3365         case EC_IOCTL_SC_WATCHDOG: