diff -r e9f722488fcd -r b5391b329b5d master/cdev.c --- a/master/cdev.c Mon Oct 25 17:06:45 2010 +0200 +++ b/master/cdev.c Tue Nov 30 15:24:21 2010 +0100 @@ -1992,6 +1992,25 @@ /*****************************************************************************/ +/** Reset configuration. + */ +int ec_cdev_ioctl_reset( + ec_master_t *master, /**< EtherCAT master. */ + unsigned long arg, /**< ioctl() argument. */ + ec_cdev_priv_t *priv /**< Private data structure of file handle. */ + ) +{ + if (unlikely(!priv->requested)) + return -EPERM; + + down(&master->master_sem); + ecrt_master_reset(master); + up(&master->master_sem); + return 0; +} + +/*****************************************************************************/ + /** Configure a sync manager. */ int ec_cdev_ioctl_sc_sync( @@ -3671,6 +3690,10 @@ if (!(filp->f_mode & FMODE_WRITE)) return -EPERM; return ec_cdev_ioctl_sync_mon_process(master, arg, priv); + case EC_IOCTL_RESET: + if (!(filp->f_mode & FMODE_WRITE)) + return -EPERM; + return ec_cdev_ioctl_reset(master, arg, priv); case EC_IOCTL_SC_SYNC: if (!(filp->f_mode & FMODE_WRITE)) return -EPERM;