1447 up(&master->master_sem); |
1447 up(&master->master_sem); |
1448 |
1448 |
1449 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
1449 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
1450 return -EFAULT; |
1450 return -EFAULT; |
1451 |
1451 |
|
1452 return 0; |
|
1453 } |
|
1454 |
|
1455 /*****************************************************************************/ |
|
1456 |
|
1457 /** Activates the master. |
|
1458 */ |
|
1459 int ec_cdev_ioctl_activate( |
|
1460 ec_master_t *master, /**< EtherCAT master. */ |
|
1461 unsigned long arg, /**< ioctl() argument. */ |
|
1462 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
|
1463 ) |
|
1464 { |
|
1465 if (unlikely(!priv->requested)) |
|
1466 return -EPERM; |
|
1467 |
|
1468 if (ecrt_master_activate(master)) |
|
1469 return -EIO; |
|
1470 |
|
1471 return 0; |
|
1472 } |
|
1473 |
|
1474 /*****************************************************************************/ |
|
1475 |
|
1476 /** Send frames. |
|
1477 */ |
|
1478 int ec_cdev_ioctl_send( |
|
1479 ec_master_t *master, /**< EtherCAT master. */ |
|
1480 unsigned long arg, /**< ioctl() argument. */ |
|
1481 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
|
1482 ) |
|
1483 { |
|
1484 if (unlikely(!priv->requested)) |
|
1485 return -EPERM; |
|
1486 |
|
1487 spin_lock_bh(&master->internal_lock); |
|
1488 ecrt_master_send(master); |
|
1489 spin_unlock_bh(&master->internal_lock); |
|
1490 return 0; |
|
1491 } |
|
1492 |
|
1493 /*****************************************************************************/ |
|
1494 |
|
1495 /** Receive frames. |
|
1496 */ |
|
1497 int ec_cdev_ioctl_receive( |
|
1498 ec_master_t *master, /**< EtherCAT master. */ |
|
1499 unsigned long arg, /**< ioctl() argument. */ |
|
1500 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
|
1501 ) |
|
1502 { |
|
1503 if (unlikely(!priv->requested)) |
|
1504 return -EPERM; |
|
1505 |
|
1506 spin_lock_bh(&master->internal_lock); |
|
1507 ecrt_master_receive(master); |
|
1508 spin_unlock_bh(&master->internal_lock); |
1452 return 0; |
1509 return 0; |
1453 } |
1510 } |
1454 |
1511 |
1455 /****************************************************************************** |
1512 /****************************************************************************** |
1456 * File operations |
1513 * File operations |
1575 return ec_cdev_ioctl_create_domain(master, arg, priv); |
1632 return ec_cdev_ioctl_create_domain(master, arg, priv); |
1576 case EC_IOCTL_CREATE_SLAVE_CONFIG: |
1633 case EC_IOCTL_CREATE_SLAVE_CONFIG: |
1577 if (!(filp->f_mode & FMODE_WRITE)) |
1634 if (!(filp->f_mode & FMODE_WRITE)) |
1578 return -EPERM; |
1635 return -EPERM; |
1579 return ec_cdev_ioctl_create_slave_config(master, arg, priv); |
1636 return ec_cdev_ioctl_create_slave_config(master, arg, priv); |
|
1637 case EC_IOCTL_ACTIVATE: |
|
1638 if (!(filp->f_mode & FMODE_WRITE)) |
|
1639 return -EPERM; |
|
1640 return ec_cdev_ioctl_activate(master, arg, priv); |
|
1641 case EC_IOCTL_SEND: |
|
1642 if (!(filp->f_mode & FMODE_WRITE)) |
|
1643 return -EPERM; |
|
1644 return ec_cdev_ioctl_send(master, arg, priv); |
|
1645 case EC_IOCTL_RECEIVE: |
|
1646 if (!(filp->f_mode & FMODE_WRITE)) |
|
1647 return -EPERM; |
|
1648 return ec_cdev_ioctl_receive(master, arg, priv); |
1580 default: |
1649 default: |
1581 return -ENOTTY; |
1650 return -ENOTTY; |
1582 } |
1651 } |
1583 } |
1652 } |
1584 |
1653 |