changeset 1507 | 68e89abadd19 |
parent 1500 | ed1a733efbc5 |
child 1509 | a864688e7de5 |
1506:41ca84fb6bb2 | 1507:68e89abadd19 |
---|---|
106 /** Constructor. |
106 /** Constructor. |
107 * |
107 * |
108 * \return 0 in case of success, else < 0 |
108 * \return 0 in case of success, else < 0 |
109 */ |
109 */ |
110 int ec_cdev_init( |
110 int ec_cdev_init( |
111 ec_cdev_t *cdev, /**< EtherCAT master character device. */ |
111 ec_cdev_t *cdev, /**< EtherCAT master character device. */ |
112 ec_master_t *master, /**< Parent master. */ |
112 ec_master_t *master, /**< Parent master. */ |
113 dev_t dev_num /**< Device number. */ |
113 dev_t dev_num /**< Device number. */ |
114 ) |
114 ) |
115 { |
115 { |
116 int ret; |
116 int ret; |
117 |
117 |
118 cdev->master = master; |
118 cdev->master = master; |
119 |
119 |
120 cdev_init(&cdev->cdev, &eccdev_fops); |
120 cdev_init(&cdev->cdev, &eccdev_fops); |
121 cdev->cdev.owner = THIS_MODULE; |
121 cdev->cdev.owner = THIS_MODULE; |
122 |
122 |
123 ret = cdev_add(&cdev->cdev, |
123 ret = cdev_add(&cdev->cdev, |
124 MKDEV(MAJOR(dev_num), master->index), 1); |
124 MKDEV(MAJOR(dev_num), master->index), 1); |
125 if (ret) { |
125 if (ret) { |
126 EC_ERR("Failed to add character device!\n"); |
126 EC_ERR("Failed to add character device!\n"); |
127 } |
127 } |
128 |
128 |
129 return ret; |
129 return ret; |
130 } |
130 } |
131 |
131 |
1447 ec_master_t *master, /**< EtherCAT master. */ |
1447 ec_master_t *master, /**< EtherCAT master. */ |
1448 unsigned long arg /**< ioctl() argument. */ |
1448 unsigned long arg /**< ioctl() argument. */ |
1449 ) |
1449 ) |
1450 { |
1450 { |
1451 ec_ioctl_eoe_handler_t data; |
1451 ec_ioctl_eoe_handler_t data; |
1452 const ec_eoe_t *eoe; |
1452 const ec_eoe_t *eoe; |
1453 |
1453 |
1454 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
1454 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
1455 return -EFAULT; |
1455 return -EFAULT; |
1456 } |
1456 } |
1457 |
1457 |
1462 up(&master->master_sem); |
1462 up(&master->master_sem); |
1463 EC_ERR("EoE handler %u does not exist!\n", data.eoe_index); |
1463 EC_ERR("EoE handler %u does not exist!\n", data.eoe_index); |
1464 return -EINVAL; |
1464 return -EINVAL; |
1465 } |
1465 } |
1466 |
1466 |
1467 if (eoe->slave) { |
1467 if (eoe->slave) { |
1468 data.slave_position = eoe->slave->ring_position; |
1468 data.slave_position = eoe->slave->ring_position; |
1469 } else { |
1469 } else { |
1470 data.slave_position = 0xffff; |
1470 data.slave_position = 0xffff; |
1471 } |
1471 } |
1472 snprintf(data.name, EC_DATAGRAM_NAME_SIZE, eoe->dev->name); |
1472 snprintf(data.name, EC_DATAGRAM_NAME_SIZE, eoe->dev->name); |
1473 data.open = eoe->opened; |
1473 data.open = eoe->opened; |
1474 data.rx_bytes = eoe->stats.tx_bytes; |
1474 data.rx_bytes = eoe->stats.tx_bytes; |
1475 data.rx_rate = eoe->tx_rate; |
1475 data.rx_rate = eoe->tx_rate; |
1476 data.tx_bytes = eoe->stats.rx_bytes; |
1476 data.tx_bytes = eoe->stats.rx_bytes; |
1477 data.tx_rate = eoe->tx_rate; |
1477 data.tx_rate = eoe->tx_rate; |
1494 ec_master_t *master, /**< EtherCAT master. */ |
1494 ec_master_t *master, /**< EtherCAT master. */ |
1495 unsigned long arg, /**< ioctl() argument. */ |
1495 unsigned long arg, /**< ioctl() argument. */ |
1496 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1496 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1497 ) |
1497 ) |
1498 { |
1498 { |
1499 ec_master_t *m; |
1499 ec_master_t *m; |
1500 int ret = 0; |
1500 int ret = 0; |
1501 |
1501 |
1502 m = ecrt_request_master_err(master->index); |
1502 m = ecrt_request_master_err(master->index); |
1503 if (IS_ERR(m)) { |
1503 if (IS_ERR(m)) { |
1504 ret = PTR_ERR(m); |
1504 ret = PTR_ERR(m); |
1519 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1519 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1520 ) |
1520 ) |
1521 { |
1521 { |
1522 ec_domain_t *domain; |
1522 ec_domain_t *domain; |
1523 |
1523 |
1524 if (unlikely(!priv->requested)) |
1524 if (unlikely(!priv->requested)) |
1525 return -EPERM; |
1525 return -EPERM; |
1526 |
1526 |
1527 domain = ecrt_master_create_domain_err(master); |
1527 domain = ecrt_master_create_domain_err(master); |
1528 if (IS_ERR(domain)) |
1528 if (IS_ERR(domain)) |
1529 return PTR_ERR(domain); |
1529 return PTR_ERR(domain); |
1530 |
1530 |
1542 ) |
1542 ) |
1543 { |
1543 { |
1544 ec_ioctl_config_t data; |
1544 ec_ioctl_config_t data; |
1545 ec_slave_config_t *sc, *entry; |
1545 ec_slave_config_t *sc, *entry; |
1546 |
1546 |
1547 if (unlikely(!priv->requested)) |
1547 if (unlikely(!priv->requested)) |
1548 return -EPERM; |
1548 return -EPERM; |
1549 |
1549 |
1550 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
1550 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
1551 return -EFAULT; |
1551 return -EFAULT; |
1552 } |
1552 } |
1553 |
1553 |
1587 { |
1587 { |
1588 ec_domain_t *domain; |
1588 ec_domain_t *domain; |
1589 off_t offset; |
1589 off_t offset; |
1590 int ret; |
1590 int ret; |
1591 |
1591 |
1592 if (unlikely(!priv->requested)) |
1592 if (unlikely(!priv->requested)) |
1593 return -EPERM; |
1593 return -EPERM; |
1594 |
1594 |
1595 /* Get the sum of the domains' process data sizes. */ |
1595 /* Get the sum of the domains' process data sizes. */ |
1596 |
1596 |
1597 priv->process_data_size = 0; |
1597 priv->process_data_size = 0; |
1598 |
1598 |
1643 ec_master_t *master, /**< EtherCAT master. */ |
1643 ec_master_t *master, /**< EtherCAT master. */ |
1644 unsigned long arg, /**< ioctl() argument. */ |
1644 unsigned long arg, /**< ioctl() argument. */ |
1645 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1645 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1646 ) |
1646 ) |
1647 { |
1647 { |
1648 if (unlikely(!priv->requested)) |
1648 if (unlikely(!priv->requested)) |
1649 return -EPERM; |
1649 return -EPERM; |
1650 |
1650 |
1651 down(&master->io_sem); |
1651 down(&master->io_sem); |
1652 ecrt_master_send(master); |
1652 ecrt_master_send(master); |
1653 up(&master->io_sem); |
1653 up(&master->io_sem); |
1654 return 0; |
1654 return 0; |
1662 ec_master_t *master, /**< EtherCAT master. */ |
1662 ec_master_t *master, /**< EtherCAT master. */ |
1663 unsigned long arg, /**< ioctl() argument. */ |
1663 unsigned long arg, /**< ioctl() argument. */ |
1664 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1664 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1665 ) |
1665 ) |
1666 { |
1666 { |
1667 if (unlikely(!priv->requested)) |
1667 if (unlikely(!priv->requested)) |
1668 return -EPERM; |
1668 return -EPERM; |
1669 |
1669 |
1670 down(&master->io_sem); |
1670 down(&master->io_sem); |
1671 ecrt_master_receive(master); |
1671 ecrt_master_receive(master); |
1672 up(&master->io_sem); |
1672 up(&master->io_sem); |
1673 return 0; |
1673 return 0; |
1683 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1683 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1684 ) |
1684 ) |
1685 { |
1685 { |
1686 ec_master_state_t data; |
1686 ec_master_state_t data; |
1687 |
1687 |
1688 if (unlikely(!priv->requested)) |
1688 if (unlikely(!priv->requested)) |
1689 return -EPERM; |
1689 return -EPERM; |
1690 |
1690 |
1691 ecrt_master_state(master, &data); |
1691 ecrt_master_state(master, &data); |
1692 |
1692 |
1693 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
1693 if (copy_to_user((void __user *) arg, &data, sizeof(data))) |
1694 return -EFAULT; |
1694 return -EFAULT; |
1706 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1706 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1707 ) |
1707 ) |
1708 { |
1708 { |
1709 ec_ioctl_app_time_t data; |
1709 ec_ioctl_app_time_t data; |
1710 |
1710 |
1711 if (unlikely(!priv->requested)) |
1711 if (unlikely(!priv->requested)) |
1712 return -EPERM; |
1712 return -EPERM; |
1713 |
1713 |
1714 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
1714 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
1715 return -EFAULT; |
1715 return -EFAULT; |
1716 } |
1716 } |
1717 |
1717 |
1727 ec_master_t *master, /**< EtherCAT master. */ |
1727 ec_master_t *master, /**< EtherCAT master. */ |
1728 unsigned long arg, /**< ioctl() argument. */ |
1728 unsigned long arg, /**< ioctl() argument. */ |
1729 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1729 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1730 ) |
1730 ) |
1731 { |
1731 { |
1732 if (unlikely(!priv->requested)) |
1732 if (unlikely(!priv->requested)) |
1733 return -EPERM; |
1733 return -EPERM; |
1734 |
1734 |
1735 down(&master->io_sem); |
1735 down(&master->io_sem); |
1736 ecrt_master_sync_reference_clock(master); |
1736 ecrt_master_sync_reference_clock(master); |
1737 up(&master->io_sem); |
1737 up(&master->io_sem); |
1738 return 0; |
1738 return 0; |
1746 ec_master_t *master, /**< EtherCAT master. */ |
1746 ec_master_t *master, /**< EtherCAT master. */ |
1747 unsigned long arg, /**< ioctl() argument. */ |
1747 unsigned long arg, /**< ioctl() argument. */ |
1748 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1748 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
1749 ) |
1749 ) |
1750 { |
1750 { |
1751 if (unlikely(!priv->requested)) |
1751 if (unlikely(!priv->requested)) |
1752 return -EPERM; |
1752 return -EPERM; |
1753 |
1753 |
1754 down(&master->io_sem); |
1754 down(&master->io_sem); |
1755 ecrt_master_sync_slave_clocks(master); |
1755 ecrt_master_sync_slave_clocks(master); |
1756 up(&master->io_sem); |
1756 up(&master->io_sem); |
1757 return 0; |
1757 return 0; |
1770 ec_ioctl_config_t data; |
1770 ec_ioctl_config_t data; |
1771 ec_slave_config_t *sc; |
1771 ec_slave_config_t *sc; |
1772 unsigned int i; |
1772 unsigned int i; |
1773 int ret = 0; |
1773 int ret = 0; |
1774 |
1774 |
1775 if (unlikely(!priv->requested)) { |
1775 if (unlikely(!priv->requested)) { |
1776 ret = -EPERM; |
1776 ret = -EPERM; |
1777 goto out_return; |
1777 goto out_return; |
1778 } |
1778 } |
1779 |
1779 |
1780 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
1780 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
1819 ) |
1819 ) |
1820 { |
1820 { |
1821 ec_ioctl_config_pdo_t data; |
1821 ec_ioctl_config_pdo_t data; |
1822 ec_slave_config_t *sc; |
1822 ec_slave_config_t *sc; |
1823 |
1823 |
1824 if (unlikely(!priv->requested)) |
1824 if (unlikely(!priv->requested)) |
1825 return -EPERM; |
1825 return -EPERM; |
1826 |
1826 |
1827 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
1827 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
1828 return -EFAULT; |
1828 return -EFAULT; |
1829 |
1829 |
1851 ) |
1851 ) |
1852 { |
1852 { |
1853 ec_ioctl_config_pdo_t data; |
1853 ec_ioctl_config_pdo_t data; |
1854 ec_slave_config_t *sc; |
1854 ec_slave_config_t *sc; |
1855 |
1855 |
1856 if (unlikely(!priv->requested)) |
1856 if (unlikely(!priv->requested)) |
1857 return -EPERM; |
1857 return -EPERM; |
1858 |
1858 |
1859 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
1859 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
1860 return -EFAULT; |
1860 return -EFAULT; |
1861 |
1861 |
1884 ) |
1884 ) |
1885 { |
1885 { |
1886 ec_ioctl_add_pdo_entry_t data; |
1886 ec_ioctl_add_pdo_entry_t data; |
1887 ec_slave_config_t *sc; |
1887 ec_slave_config_t *sc; |
1888 |
1888 |
1889 if (unlikely(!priv->requested)) |
1889 if (unlikely(!priv->requested)) |
1890 return -EPERM; |
1890 return -EPERM; |
1891 |
1891 |
1892 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
1892 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
1893 return -EFAULT; |
1893 return -EFAULT; |
1894 |
1894 |
1917 ) |
1917 ) |
1918 { |
1918 { |
1919 ec_ioctl_config_pdo_t data; |
1919 ec_ioctl_config_pdo_t data; |
1920 ec_slave_config_t *sc; |
1920 ec_slave_config_t *sc; |
1921 |
1921 |
1922 if (unlikely(!priv->requested)) |
1922 if (unlikely(!priv->requested)) |
1923 return -EPERM; |
1923 return -EPERM; |
1924 |
1924 |
1925 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
1925 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
1926 return -EFAULT; |
1926 return -EFAULT; |
1927 |
1927 |
1952 ec_ioctl_reg_pdo_entry_t data; |
1952 ec_ioctl_reg_pdo_entry_t data; |
1953 ec_slave_config_t *sc; |
1953 ec_slave_config_t *sc; |
1954 ec_domain_t *domain; |
1954 ec_domain_t *domain; |
1955 int ret; |
1955 int ret; |
1956 |
1956 |
1957 if (unlikely(!priv->requested)) |
1957 if (unlikely(!priv->requested)) |
1958 return -EPERM; |
1958 return -EPERM; |
1959 |
1959 |
1960 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
1960 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
1961 return -EFAULT; |
1961 return -EFAULT; |
1962 |
1962 |
1995 ) |
1995 ) |
1996 { |
1996 { |
1997 ec_ioctl_config_t data; |
1997 ec_ioctl_config_t data; |
1998 ec_slave_config_t *sc; |
1998 ec_slave_config_t *sc; |
1999 |
1999 |
2000 if (unlikely(!priv->requested)) |
2000 if (unlikely(!priv->requested)) |
2001 return -EPERM; |
2001 return -EPERM; |
2002 |
2002 |
2003 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2003 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2004 return -EFAULT; |
2004 return -EFAULT; |
2005 |
2005 |
2035 ec_ioctl_sc_sdo_t data; |
2035 ec_ioctl_sc_sdo_t data; |
2036 ec_slave_config_t *sc; |
2036 ec_slave_config_t *sc; |
2037 uint8_t *sdo_data = NULL; |
2037 uint8_t *sdo_data = NULL; |
2038 int ret; |
2038 int ret; |
2039 |
2039 |
2040 if (unlikely(!priv->requested)) |
2040 if (unlikely(!priv->requested)) |
2041 return -EPERM; |
2041 return -EPERM; |
2042 |
2042 |
2043 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2043 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2044 return -EFAULT; |
2044 return -EFAULT; |
2045 |
2045 |
2086 { |
2086 { |
2087 ec_ioctl_sdo_request_t data; |
2087 ec_ioctl_sdo_request_t data; |
2088 ec_slave_config_t *sc; |
2088 ec_slave_config_t *sc; |
2089 ec_sdo_request_t *req; |
2089 ec_sdo_request_t *req; |
2090 |
2090 |
2091 if (unlikely(!priv->requested)) |
2091 if (unlikely(!priv->requested)) |
2092 return -EPERM; |
2092 return -EPERM; |
2093 |
2093 |
2094 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
2094 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
2095 return -EFAULT; |
2095 return -EFAULT; |
2096 } |
2096 } |
2097 |
2097 |
2135 { |
2135 { |
2136 ec_ioctl_voe_t data; |
2136 ec_ioctl_voe_t data; |
2137 ec_slave_config_t *sc; |
2137 ec_slave_config_t *sc; |
2138 ec_voe_handler_t *voe; |
2138 ec_voe_handler_t *voe; |
2139 |
2139 |
2140 if (unlikely(!priv->requested)) |
2140 if (unlikely(!priv->requested)) |
2141 return -EPERM; |
2141 return -EPERM; |
2142 |
2142 |
2143 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
2143 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
2144 return -EFAULT; |
2144 return -EFAULT; |
2145 } |
2145 } |
2146 |
2146 |
2183 { |
2183 { |
2184 ec_ioctl_sc_state_t data; |
2184 ec_ioctl_sc_state_t data; |
2185 const ec_slave_config_t *sc; |
2185 const ec_slave_config_t *sc; |
2186 ec_slave_config_state_t state; |
2186 ec_slave_config_state_t state; |
2187 |
2187 |
2188 if (unlikely(!priv->requested)) |
2188 if (unlikely(!priv->requested)) |
2189 return -EPERM; |
2189 return -EPERM; |
2190 |
2190 |
2191 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
2191 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
2192 return -EFAULT; |
2192 return -EFAULT; |
2193 } |
2193 } |
2194 |
2194 |
2221 ) |
2221 ) |
2222 { |
2222 { |
2223 int offset = 0; |
2223 int offset = 0; |
2224 const ec_domain_t *domain; |
2224 const ec_domain_t *domain; |
2225 |
2225 |
2226 if (unlikely(!priv->requested)) |
2226 if (unlikely(!priv->requested)) |
2227 return -EPERM; |
2227 return -EPERM; |
2228 |
2228 |
2229 if (down_interruptible(&master->master_sem)) { |
2229 if (down_interruptible(&master->master_sem)) { |
2230 return -EINTR; |
2230 return -EINTR; |
2231 } |
2231 } |
2252 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
2252 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
2253 ) |
2253 ) |
2254 { |
2254 { |
2255 ec_domain_t *domain; |
2255 ec_domain_t *domain; |
2256 |
2256 |
2257 if (unlikely(!priv->requested)) |
2257 if (unlikely(!priv->requested)) |
2258 return -EPERM; |
2258 return -EPERM; |
2259 |
2259 |
2260 if (down_interruptible(&master->master_sem)) |
2260 if (down_interruptible(&master->master_sem)) |
2261 return -EINTR; |
2261 return -EINTR; |
2262 |
2262 |
2280 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
2280 ec_cdev_priv_t *priv /**< Private data structure of file handle. */ |
2281 ) |
2281 ) |
2282 { |
2282 { |
2283 ec_domain_t *domain; |
2283 ec_domain_t *domain; |
2284 |
2284 |
2285 if (unlikely(!priv->requested)) |
2285 if (unlikely(!priv->requested)) |
2286 return -EPERM; |
2286 return -EPERM; |
2287 |
2287 |
2288 if (down_interruptible(&master->master_sem)) |
2288 if (down_interruptible(&master->master_sem)) |
2289 return -EINTR; |
2289 return -EINTR; |
2290 |
2290 |
2310 { |
2310 { |
2311 ec_ioctl_domain_state_t data; |
2311 ec_ioctl_domain_state_t data; |
2312 const ec_domain_t *domain; |
2312 const ec_domain_t *domain; |
2313 ec_domain_state_t state; |
2313 ec_domain_state_t state; |
2314 |
2314 |
2315 if (unlikely(!priv->requested)) |
2315 if (unlikely(!priv->requested)) |
2316 return -EPERM; |
2316 return -EPERM; |
2317 |
2317 |
2318 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
2318 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { |
2319 return -EFAULT; |
2319 return -EFAULT; |
2320 } |
2320 } |
2321 |
2321 |
2349 { |
2349 { |
2350 ec_ioctl_sdo_request_t data; |
2350 ec_ioctl_sdo_request_t data; |
2351 ec_slave_config_t *sc; |
2351 ec_slave_config_t *sc; |
2352 ec_sdo_request_t *req; |
2352 ec_sdo_request_t *req; |
2353 |
2353 |
2354 if (unlikely(!priv->requested)) |
2354 if (unlikely(!priv->requested)) |
2355 return -EPERM; |
2355 return -EPERM; |
2356 |
2356 |
2357 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2357 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2358 return -EFAULT; |
2358 return -EFAULT; |
2359 |
2359 |
2388 { |
2388 { |
2389 ec_ioctl_sdo_request_t data; |
2389 ec_ioctl_sdo_request_t data; |
2390 ec_slave_config_t *sc; |
2390 ec_slave_config_t *sc; |
2391 ec_sdo_request_t *req; |
2391 ec_sdo_request_t *req; |
2392 |
2392 |
2393 if (unlikely(!priv->requested)) |
2393 if (unlikely(!priv->requested)) |
2394 return -EPERM; |
2394 return -EPERM; |
2395 |
2395 |
2396 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2396 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2397 return -EFAULT; |
2397 return -EFAULT; |
2398 |
2398 |
2435 { |
2435 { |
2436 ec_ioctl_sdo_request_t data; |
2436 ec_ioctl_sdo_request_t data; |
2437 ec_slave_config_t *sc; |
2437 ec_slave_config_t *sc; |
2438 ec_sdo_request_t *req; |
2438 ec_sdo_request_t *req; |
2439 |
2439 |
2440 if (unlikely(!priv->requested)) |
2440 if (unlikely(!priv->requested)) |
2441 return -EPERM; |
2441 return -EPERM; |
2442 |
2442 |
2443 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2443 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2444 return -EFAULT; |
2444 return -EFAULT; |
2445 |
2445 |
2475 ec_ioctl_sdo_request_t data; |
2475 ec_ioctl_sdo_request_t data; |
2476 ec_slave_config_t *sc; |
2476 ec_slave_config_t *sc; |
2477 ec_sdo_request_t *req; |
2477 ec_sdo_request_t *req; |
2478 int ret; |
2478 int ret; |
2479 |
2479 |
2480 if (unlikely(!priv->requested)) |
2480 if (unlikely(!priv->requested)) |
2481 return -EPERM; |
2481 return -EPERM; |
2482 |
2482 |
2483 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2483 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2484 return -EFAULT; |
2484 return -EFAULT; |
2485 |
2485 |
2527 { |
2527 { |
2528 ec_ioctl_sdo_request_t data; |
2528 ec_ioctl_sdo_request_t data; |
2529 ec_slave_config_t *sc; |
2529 ec_slave_config_t *sc; |
2530 ec_sdo_request_t *req; |
2530 ec_sdo_request_t *req; |
2531 |
2531 |
2532 if (unlikely(!priv->requested)) |
2532 if (unlikely(!priv->requested)) |
2533 return -EPERM; |
2533 return -EPERM; |
2534 |
2534 |
2535 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2535 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2536 return -EFAULT; |
2536 return -EFAULT; |
2537 |
2537 |
2571 ec_slave_config_t *sc; |
2571 ec_slave_config_t *sc; |
2572 ec_voe_handler_t *voe; |
2572 ec_voe_handler_t *voe; |
2573 uint32_t vendor_id; |
2573 uint32_t vendor_id; |
2574 uint16_t vendor_type; |
2574 uint16_t vendor_type; |
2575 |
2575 |
2576 if (unlikely(!priv->requested)) |
2576 if (unlikely(!priv->requested)) |
2577 return -EPERM; |
2577 return -EPERM; |
2578 |
2578 |
2579 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2579 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2580 return -EFAULT; |
2580 return -EFAULT; |
2581 |
2581 |
2618 ec_slave_config_t *sc; |
2618 ec_slave_config_t *sc; |
2619 ec_voe_handler_t *voe; |
2619 ec_voe_handler_t *voe; |
2620 uint32_t vendor_id; |
2620 uint32_t vendor_id; |
2621 uint16_t vendor_type; |
2621 uint16_t vendor_type; |
2622 |
2622 |
2623 if (unlikely(!priv->requested)) |
2623 if (unlikely(!priv->requested)) |
2624 return -EPERM; |
2624 return -EPERM; |
2625 |
2625 |
2626 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2626 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2627 return -EFAULT; |
2627 return -EFAULT; |
2628 |
2628 |
2666 { |
2666 { |
2667 ec_ioctl_voe_t data; |
2667 ec_ioctl_voe_t data; |
2668 ec_slave_config_t *sc; |
2668 ec_slave_config_t *sc; |
2669 ec_voe_handler_t *voe; |
2669 ec_voe_handler_t *voe; |
2670 |
2670 |
2671 if (unlikely(!priv->requested)) |
2671 if (unlikely(!priv->requested)) |
2672 return -EPERM; |
2672 return -EPERM; |
2673 |
2673 |
2674 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2674 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2675 return -EFAULT; |
2675 return -EFAULT; |
2676 |
2676 |
2705 { |
2705 { |
2706 ec_ioctl_voe_t data; |
2706 ec_ioctl_voe_t data; |
2707 ec_slave_config_t *sc; |
2707 ec_slave_config_t *sc; |
2708 ec_voe_handler_t *voe; |
2708 ec_voe_handler_t *voe; |
2709 |
2709 |
2710 if (unlikely(!priv->requested)) |
2710 if (unlikely(!priv->requested)) |
2711 return -EPERM; |
2711 return -EPERM; |
2712 |
2712 |
2713 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2713 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2714 return -EFAULT; |
2714 return -EFAULT; |
2715 |
2715 |
2744 { |
2744 { |
2745 ec_ioctl_voe_t data; |
2745 ec_ioctl_voe_t data; |
2746 ec_slave_config_t *sc; |
2746 ec_slave_config_t *sc; |
2747 ec_voe_handler_t *voe; |
2747 ec_voe_handler_t *voe; |
2748 |
2748 |
2749 if (unlikely(!priv->requested)) |
2749 if (unlikely(!priv->requested)) |
2750 return -EPERM; |
2750 return -EPERM; |
2751 |
2751 |
2752 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2752 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2753 return -EFAULT; |
2753 return -EFAULT; |
2754 |
2754 |
2792 { |
2792 { |
2793 ec_ioctl_voe_t data; |
2793 ec_ioctl_voe_t data; |
2794 ec_slave_config_t *sc; |
2794 ec_slave_config_t *sc; |
2795 ec_voe_handler_t *voe; |
2795 ec_voe_handler_t *voe; |
2796 |
2796 |
2797 if (unlikely(!priv->requested)) |
2797 if (unlikely(!priv->requested)) |
2798 return -EPERM; |
2798 return -EPERM; |
2799 |
2799 |
2800 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2800 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2801 return -EFAULT; |
2801 return -EFAULT; |
2802 |
2802 |
2839 { |
2839 { |
2840 ec_ioctl_voe_t data; |
2840 ec_ioctl_voe_t data; |
2841 ec_slave_config_t *sc; |
2841 ec_slave_config_t *sc; |
2842 ec_voe_handler_t *voe; |
2842 ec_voe_handler_t *voe; |
2843 |
2843 |
2844 if (unlikely(!priv->requested)) |
2844 if (unlikely(!priv->requested)) |
2845 return -EPERM; |
2845 return -EPERM; |
2846 |
2846 |
2847 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2847 if (copy_from_user(&data, (void __user *) arg, sizeof(data))) |
2848 return -EFAULT; |
2848 return -EFAULT; |
2849 |
2849 |
2930 wait_event(master->foe_queue, request.req.state != EC_INT_REQUEST_BUSY); |
2930 wait_event(master->foe_queue, request.req.state != EC_INT_REQUEST_BUSY); |
2931 |
2931 |
2932 data.result = request.req.result; |
2932 data.result = request.req.result; |
2933 data.error_code = request.req.error_code; |
2933 data.error_code = request.req.error_code; |
2934 |
2934 |
2935 if (master->debug_level) { |
2935 if (master->debug_level) { |
2936 EC_DBG("Read %d bytes via FoE (result = 0x%x).\n", |
2936 EC_DBG("Read %d bytes via FoE (result = 0x%x).\n", |
2937 request.req.data_size, request.req.result); |
2937 request.req.data_size, request.req.result); |
2938 } |
2938 } |
2939 |
2939 |
2940 if (request.req.state != EC_INT_REQUEST_SUCCESS) { |
2940 if (request.req.state != EC_INT_REQUEST_SUCCESS) { |
2941 data.data_size = 0; |
2941 data.data_size = 0; |
2942 retval = -EIO; |
2942 retval = -EIO; |
2943 } else { |
2943 } else { |
3010 EC_ERR("Slave %u does not exist!\n", data.slave_position); |
3010 EC_ERR("Slave %u does not exist!\n", data.slave_position); |
3011 ec_foe_request_clear(&request.req); |
3011 ec_foe_request_clear(&request.req); |
3012 return -EINVAL; |
3012 return -EINVAL; |
3013 } |
3013 } |
3014 |
3014 |
3015 if (master->debug_level) { |
3015 if (master->debug_level) { |
3016 EC_DBG("Scheduling FoE write request.\n"); |
3016 EC_DBG("Scheduling FoE write request.\n"); |
3017 } |
3017 } |
3018 |
3018 |
3019 // schedule FoE write request. |
3019 // schedule FoE write request. |
3020 list_add_tail(&request.list, &master->foe_requests); |
3020 list_add_tail(&request.list, &master->foe_requests); |
3021 |
3021 |
3022 up(&master->master_sem); |
3022 up(&master->master_sem); |
3048 retval = -EFAULT; |
3048 retval = -EFAULT; |
3049 } |
3049 } |
3050 |
3050 |
3051 ec_foe_request_clear(&request.req); |
3051 ec_foe_request_clear(&request.req); |
3052 |
3052 |
3053 if (master->debug_level) { |
3053 if (master->debug_level) { |
3054 printk ("Finished FoE writing.\n"); |
3054 printk("Finished FoE writing.\n"); |
3055 } |
3055 } |
3056 |
3056 |
3057 return retval; |
3057 return retval; |
3058 } |
3058 } |
3059 |
3059 |
3060 /****************************************************************************** |
3060 /****************************************************************************** |
3187 return ec_cdev_ioctl_config_sdo(master, arg); |
3187 return ec_cdev_ioctl_config_sdo(master, arg); |
3188 case EC_IOCTL_EOE_HANDLER: |
3188 case EC_IOCTL_EOE_HANDLER: |
3189 return ec_cdev_ioctl_eoe_handler(master, arg); |
3189 return ec_cdev_ioctl_eoe_handler(master, arg); |
3190 case EC_IOCTL_REQUEST: |
3190 case EC_IOCTL_REQUEST: |
3191 if (!(filp->f_mode & FMODE_WRITE)) |
3191 if (!(filp->f_mode & FMODE_WRITE)) |
3192 return -EPERM; |
3192 return -EPERM; |
3193 return ec_cdev_ioctl_request(master, arg, priv); |
3193 return ec_cdev_ioctl_request(master, arg, priv); |
3194 case EC_IOCTL_CREATE_DOMAIN: |
3194 case EC_IOCTL_CREATE_DOMAIN: |
3195 if (!(filp->f_mode & FMODE_WRITE)) |
3195 if (!(filp->f_mode & FMODE_WRITE)) |
3196 return -EPERM; |
3196 return -EPERM; |
3197 return ec_cdev_ioctl_create_domain(master, arg, priv); |
3197 return ec_cdev_ioctl_create_domain(master, arg, priv); |
3198 case EC_IOCTL_CREATE_SLAVE_CONFIG: |
3198 case EC_IOCTL_CREATE_SLAVE_CONFIG: |
3199 if (!(filp->f_mode & FMODE_WRITE)) |
3199 if (!(filp->f_mode & FMODE_WRITE)) |
3200 return -EPERM; |
3200 return -EPERM; |
3201 return ec_cdev_ioctl_create_slave_config(master, arg, priv); |
3201 return ec_cdev_ioctl_create_slave_config(master, arg, priv); |
3202 case EC_IOCTL_ACTIVATE: |
3202 case EC_IOCTL_ACTIVATE: |
3203 if (!(filp->f_mode & FMODE_WRITE)) |
3203 if (!(filp->f_mode & FMODE_WRITE)) |
3204 return -EPERM; |
3204 return -EPERM; |
3205 return ec_cdev_ioctl_activate(master, arg, priv); |
3205 return ec_cdev_ioctl_activate(master, arg, priv); |
3206 case EC_IOCTL_SEND: |
3206 case EC_IOCTL_SEND: |
3207 if (!(filp->f_mode & FMODE_WRITE)) |
3207 if (!(filp->f_mode & FMODE_WRITE)) |
3208 return -EPERM; |
3208 return -EPERM; |
3209 return ec_cdev_ioctl_send(master, arg, priv); |
3209 return ec_cdev_ioctl_send(master, arg, priv); |
3210 case EC_IOCTL_RECEIVE: |
3210 case EC_IOCTL_RECEIVE: |
3211 if (!(filp->f_mode & FMODE_WRITE)) |
3211 if (!(filp->f_mode & FMODE_WRITE)) |
3212 return -EPERM; |
3212 return -EPERM; |
3213 return ec_cdev_ioctl_receive(master, arg, priv); |
3213 return ec_cdev_ioctl_receive(master, arg, priv); |
3214 case EC_IOCTL_MASTER_STATE: |
3214 case EC_IOCTL_MASTER_STATE: |
3215 return ec_cdev_ioctl_master_state(master, arg, priv); |
3215 return ec_cdev_ioctl_master_state(master, arg, priv); |
3216 case EC_IOCTL_APP_TIME: |
3216 case EC_IOCTL_APP_TIME: |
3217 if (!(filp->f_mode & FMODE_WRITE)) |
3217 if (!(filp->f_mode & FMODE_WRITE)) |
3218 return -EPERM; |
3218 return -EPERM; |
3219 return ec_cdev_ioctl_app_time(master, arg, priv); |
3219 return ec_cdev_ioctl_app_time(master, arg, priv); |
3220 case EC_IOCTL_SYNC_REF: |
3220 case EC_IOCTL_SYNC_REF: |
3221 if (!(filp->f_mode & FMODE_WRITE)) |
3221 if (!(filp->f_mode & FMODE_WRITE)) |
3222 return -EPERM; |
3222 return -EPERM; |
3223 return ec_cdev_ioctl_sync_ref(master, arg, priv); |
3223 return ec_cdev_ioctl_sync_ref(master, arg, priv); |
3224 case EC_IOCTL_SYNC_SLAVES: |
3224 case EC_IOCTL_SYNC_SLAVES: |
3225 if (!(filp->f_mode & FMODE_WRITE)) |
3225 if (!(filp->f_mode & FMODE_WRITE)) |
3226 return -EPERM; |
3226 return -EPERM; |
3227 return ec_cdev_ioctl_sync_slaves(master, arg, priv); |
3227 return ec_cdev_ioctl_sync_slaves(master, arg, priv); |
3228 case EC_IOCTL_SC_SYNC: |
3228 case EC_IOCTL_SC_SYNC: |
3229 if (!(filp->f_mode & FMODE_WRITE)) |
3229 if (!(filp->f_mode & FMODE_WRITE)) |
3230 return -EPERM; |
3230 return -EPERM; |
3231 return ec_cdev_ioctl_sc_sync(master, arg, priv); |
3231 return ec_cdev_ioctl_sc_sync(master, arg, priv); |
3232 case EC_IOCTL_SC_ADD_PDO: |
3232 case EC_IOCTL_SC_ADD_PDO: |
3233 if (!(filp->f_mode & FMODE_WRITE)) |
3233 if (!(filp->f_mode & FMODE_WRITE)) |
3234 return -EPERM; |
3234 return -EPERM; |
3235 return ec_cdev_ioctl_sc_add_pdo(master, arg, priv); |
3235 return ec_cdev_ioctl_sc_add_pdo(master, arg, priv); |
3236 case EC_IOCTL_SC_CLEAR_PDOS: |
3236 case EC_IOCTL_SC_CLEAR_PDOS: |
3237 if (!(filp->f_mode & FMODE_WRITE)) |
3237 if (!(filp->f_mode & FMODE_WRITE)) |
3238 return -EPERM; |
3238 return -EPERM; |
3239 return ec_cdev_ioctl_sc_clear_pdos(master, arg, priv); |
3239 return ec_cdev_ioctl_sc_clear_pdos(master, arg, priv); |
3240 case EC_IOCTL_SC_ADD_ENTRY: |
3240 case EC_IOCTL_SC_ADD_ENTRY: |
3241 if (!(filp->f_mode & FMODE_WRITE)) |
3241 if (!(filp->f_mode & FMODE_WRITE)) |
3242 return -EPERM; |
3242 return -EPERM; |
3243 return ec_cdev_ioctl_sc_add_entry(master, arg, priv); |
3243 return ec_cdev_ioctl_sc_add_entry(master, arg, priv); |
3244 case EC_IOCTL_SC_CLEAR_ENTRIES: |
3244 case EC_IOCTL_SC_CLEAR_ENTRIES: |
3245 if (!(filp->f_mode & FMODE_WRITE)) |
3245 if (!(filp->f_mode & FMODE_WRITE)) |
3246 return -EPERM; |
3246 return -EPERM; |
3247 return ec_cdev_ioctl_sc_clear_entries(master, arg, priv); |
3247 return ec_cdev_ioctl_sc_clear_entries(master, arg, priv); |
3248 case EC_IOCTL_SC_REG_PDO_ENTRY: |
3248 case EC_IOCTL_SC_REG_PDO_ENTRY: |
3249 if (!(filp->f_mode & FMODE_WRITE)) |
3249 if (!(filp->f_mode & FMODE_WRITE)) |
3250 return -EPERM; |
3250 return -EPERM; |
3251 return ec_cdev_ioctl_sc_reg_pdo_entry(master, arg, priv); |
3251 return ec_cdev_ioctl_sc_reg_pdo_entry(master, arg, priv); |
3252 case EC_IOCTL_SC_DC: |
3252 case EC_IOCTL_SC_DC: |
3253 if (!(filp->f_mode & FMODE_WRITE)) |
3253 if (!(filp->f_mode & FMODE_WRITE)) |
3254 return -EPERM; |
3254 return -EPERM; |
3255 return ec_cdev_ioctl_sc_dc(master, arg, priv); |
3255 return ec_cdev_ioctl_sc_dc(master, arg, priv); |
3256 case EC_IOCTL_SC_SDO: |
3256 case EC_IOCTL_SC_SDO: |
3257 if (!(filp->f_mode & FMODE_WRITE)) |
3257 if (!(filp->f_mode & FMODE_WRITE)) |
3258 return -EPERM; |
3258 return -EPERM; |
3259 return ec_cdev_ioctl_sc_sdo(master, arg, priv); |
3259 return ec_cdev_ioctl_sc_sdo(master, arg, priv); |
3260 case EC_IOCTL_SC_SDO_REQUEST: |
3260 case EC_IOCTL_SC_SDO_REQUEST: |
3261 if (!(filp->f_mode & FMODE_WRITE)) |
3261 if (!(filp->f_mode & FMODE_WRITE)) |
3262 return -EPERM; |
3262 return -EPERM; |
3263 return ec_cdev_ioctl_sc_create_sdo_request(master, arg, priv); |
3263 return ec_cdev_ioctl_sc_create_sdo_request(master, arg, priv); |
3264 case EC_IOCTL_SC_VOE: |
3264 case EC_IOCTL_SC_VOE: |
3265 if (!(filp->f_mode & FMODE_WRITE)) |
3265 if (!(filp->f_mode & FMODE_WRITE)) |
3266 return -EPERM; |
3266 return -EPERM; |
3267 return ec_cdev_ioctl_sc_create_voe_handler(master, arg, priv); |
3267 return ec_cdev_ioctl_sc_create_voe_handler(master, arg, priv); |
3268 case EC_IOCTL_SC_STATE: |
3268 case EC_IOCTL_SC_STATE: |
3269 return ec_cdev_ioctl_sc_state(master, arg, priv); |
3269 return ec_cdev_ioctl_sc_state(master, arg, priv); |
3270 case EC_IOCTL_DOMAIN_OFFSET: |
3270 case EC_IOCTL_DOMAIN_OFFSET: |
3271 return ec_cdev_ioctl_domain_offset(master, arg, priv); |
3271 return ec_cdev_ioctl_domain_offset(master, arg, priv); |
3272 case EC_IOCTL_DOMAIN_PROCESS: |
3272 case EC_IOCTL_DOMAIN_PROCESS: |
3273 if (!(filp->f_mode & FMODE_WRITE)) |
3273 if (!(filp->f_mode & FMODE_WRITE)) |
3274 return -EPERM; |
3274 return -EPERM; |
3275 return ec_cdev_ioctl_domain_process(master, arg, priv); |
3275 return ec_cdev_ioctl_domain_process(master, arg, priv); |
3276 case EC_IOCTL_DOMAIN_QUEUE: |
3276 case EC_IOCTL_DOMAIN_QUEUE: |
3277 if (!(filp->f_mode & FMODE_WRITE)) |
3277 if (!(filp->f_mode & FMODE_WRITE)) |
3278 return -EPERM; |
3278 return -EPERM; |
3279 return ec_cdev_ioctl_domain_queue(master, arg, priv); |
3279 return ec_cdev_ioctl_domain_queue(master, arg, priv); |
3280 case EC_IOCTL_DOMAIN_STATE: |
3280 case EC_IOCTL_DOMAIN_STATE: |
3281 return ec_cdev_ioctl_domain_state(master, arg, priv); |
3281 return ec_cdev_ioctl_domain_state(master, arg, priv); |
3282 case EC_IOCTL_SDO_REQUEST_TIMEOUT: |
3282 case EC_IOCTL_SDO_REQUEST_TIMEOUT: |
3283 if (!(filp->f_mode & FMODE_WRITE)) |
3283 if (!(filp->f_mode & FMODE_WRITE)) |
3284 return -EPERM; |
3284 return -EPERM; |
3285 return ec_cdev_ioctl_sdo_request_timeout(master, arg, priv); |
3285 return ec_cdev_ioctl_sdo_request_timeout(master, arg, priv); |
3286 case EC_IOCTL_SDO_REQUEST_STATE: |
3286 case EC_IOCTL_SDO_REQUEST_STATE: |
3287 return ec_cdev_ioctl_sdo_request_state(master, arg, priv); |
3287 return ec_cdev_ioctl_sdo_request_state(master, arg, priv); |
3288 case EC_IOCTL_SDO_REQUEST_READ: |
3288 case EC_IOCTL_SDO_REQUEST_READ: |
3289 if (!(filp->f_mode & FMODE_WRITE)) |
3289 if (!(filp->f_mode & FMODE_WRITE)) |
3290 return -EPERM; |
3290 return -EPERM; |
3291 return ec_cdev_ioctl_sdo_request_read(master, arg, priv); |
3291 return ec_cdev_ioctl_sdo_request_read(master, arg, priv); |
3292 case EC_IOCTL_SDO_REQUEST_WRITE: |
3292 case EC_IOCTL_SDO_REQUEST_WRITE: |
3293 if (!(filp->f_mode & FMODE_WRITE)) |
3293 if (!(filp->f_mode & FMODE_WRITE)) |
3294 return -EPERM; |
3294 return -EPERM; |
3295 return ec_cdev_ioctl_sdo_request_write(master, arg, priv); |
3295 return ec_cdev_ioctl_sdo_request_write(master, arg, priv); |
3296 case EC_IOCTL_SDO_REQUEST_DATA: |
3296 case EC_IOCTL_SDO_REQUEST_DATA: |
3297 return ec_cdev_ioctl_sdo_request_data(master, arg, priv); |
3297 return ec_cdev_ioctl_sdo_request_data(master, arg, priv); |
3298 case EC_IOCTL_VOE_SEND_HEADER: |
3298 case EC_IOCTL_VOE_SEND_HEADER: |
3299 if (!(filp->f_mode & FMODE_WRITE)) |
3299 if (!(filp->f_mode & FMODE_WRITE)) |
3300 return -EPERM; |
3300 return -EPERM; |
3301 return ec_cdev_ioctl_voe_send_header(master, arg, priv); |
3301 return ec_cdev_ioctl_voe_send_header(master, arg, priv); |
3302 case EC_IOCTL_VOE_REC_HEADER: |
3302 case EC_IOCTL_VOE_REC_HEADER: |
3303 return ec_cdev_ioctl_voe_rec_header(master, arg, priv); |
3303 return ec_cdev_ioctl_voe_rec_header(master, arg, priv); |
3304 case EC_IOCTL_VOE_READ: |
3304 case EC_IOCTL_VOE_READ: |
3305 if (!(filp->f_mode & FMODE_WRITE)) |
3305 if (!(filp->f_mode & FMODE_WRITE)) |
3306 return -EPERM; |
3306 return -EPERM; |
3307 return ec_cdev_ioctl_voe_read(master, arg, priv); |
3307 return ec_cdev_ioctl_voe_read(master, arg, priv); |
3308 case EC_IOCTL_VOE_READ_NOSYNC: |
3308 case EC_IOCTL_VOE_READ_NOSYNC: |
3309 if (!(filp->f_mode & FMODE_WRITE)) |
3309 if (!(filp->f_mode & FMODE_WRITE)) |
3310 return -EPERM; |
3310 return -EPERM; |
3311 return ec_cdev_ioctl_voe_read_nosync(master, arg, priv); |
3311 return ec_cdev_ioctl_voe_read_nosync(master, arg, priv); |
3312 case EC_IOCTL_VOE_WRITE: |
3312 case EC_IOCTL_VOE_WRITE: |
3313 if (!(filp->f_mode & FMODE_WRITE)) |
3313 if (!(filp->f_mode & FMODE_WRITE)) |
3314 return -EPERM; |
3314 return -EPERM; |
3315 return ec_cdev_ioctl_voe_write(master, arg, priv); |
3315 return ec_cdev_ioctl_voe_write(master, arg, priv); |
3316 case EC_IOCTL_VOE_EXEC: |
3316 case EC_IOCTL_VOE_EXEC: |
3317 if (!(filp->f_mode & FMODE_WRITE)) |
3317 if (!(filp->f_mode & FMODE_WRITE)) |
3318 return -EPERM; |
3318 return -EPERM; |
3319 return ec_cdev_ioctl_voe_exec(master, arg, priv); |
3319 return ec_cdev_ioctl_voe_exec(master, arg, priv); |
3320 case EC_IOCTL_VOE_DATA: |
3320 case EC_IOCTL_VOE_DATA: |
3321 return ec_cdev_ioctl_voe_data(master, arg, priv); |
3321 return ec_cdev_ioctl_voe_data(master, arg, priv); |
3322 default: |
3322 default: |
3323 return -ENOTTY; |
3323 return -ENOTTY; |
3324 } |
3324 } |
3325 } |
3325 } |
3326 |
3326 |