cpsw.c (48e0a83ece7803a62afd624ba70523ca66631c35) cpsw.c (c8395d4e1d4ffbc9d8aa61f534c82e8deed72cfd)
1/*
2 * Texas Instruments Ethernet Switch Driver
3 *
4 * Copyright (C) 2012 Texas Instruments
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation version 2.

--- 1580 unchanged lines hidden (view full) ---

1589 return NETDEV_TX_OK;
1590fail:
1591 ndev->stats.tx_dropped++;
1592 txq = netdev_get_tx_queue(ndev, skb_get_queue_mapping(skb));
1593 netif_tx_stop_queue(txq);
1594 return NETDEV_TX_BUSY;
1595}
1596
1/*
2 * Texas Instruments Ethernet Switch Driver
3 *
4 * Copyright (C) 2012 Texas Instruments
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation version 2.

--- 1580 unchanged lines hidden (view full) ---

1589 return NETDEV_TX_OK;
1590fail:
1591 ndev->stats.tx_dropped++;
1592 txq = netdev_get_tx_queue(ndev, skb_get_queue_mapping(skb));
1593 netif_tx_stop_queue(txq);
1594 return NETDEV_TX_BUSY;
1595}
1596
1597#ifdef CONFIG_TI_CPTS
1597#if IS_ENABLED(CONFIG_TI_CPTS)
1598
1599static void cpsw_hwtstamp_v1(struct cpsw_common *cpsw)
1600{
1601 struct cpsw_slave *slave = &cpsw->slaves[cpsw->data.active_slave];
1602 u32 ts_en, seq_id;
1603
1604 if (!cpsw->cpts->tx_enable && !cpsw->cpts->rx_enable) {
1605 slave_write(slave, 0, CPSW1_TS_CTL);

--- 131 unchanged lines hidden (view full) ---

1737
1738 cfg.flags = 0;
1739 cfg.tx_type = cpts->tx_enable ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF;
1740 cfg.rx_filter = (cpts->rx_enable ?
1741 HWTSTAMP_FILTER_PTP_V2_EVENT : HWTSTAMP_FILTER_NONE);
1742
1743 return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ? -EFAULT : 0;
1744}
1598
1599static void cpsw_hwtstamp_v1(struct cpsw_common *cpsw)
1600{
1601 struct cpsw_slave *slave = &cpsw->slaves[cpsw->data.active_slave];
1602 u32 ts_en, seq_id;
1603
1604 if (!cpsw->cpts->tx_enable && !cpsw->cpts->rx_enable) {
1605 slave_write(slave, 0, CPSW1_TS_CTL);

--- 131 unchanged lines hidden (view full) ---

1737
1738 cfg.flags = 0;
1739 cfg.tx_type = cpts->tx_enable ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF;
1740 cfg.rx_filter = (cpts->rx_enable ?
1741 HWTSTAMP_FILTER_PTP_V2_EVENT : HWTSTAMP_FILTER_NONE);
1742
1743 return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ? -EFAULT : 0;
1744}
1745#else
1746static int cpsw_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
1747{
1748 return -EOPNOTSUPP;
1749}
1745
1750
1751static int cpsw_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
1752{
1753 return -EOPNOTSUPP;
1754}
1746#endif /*CONFIG_TI_CPTS*/
1747
1748static int cpsw_ndo_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
1749{
1750 struct cpsw_priv *priv = netdev_priv(dev);
1751 struct cpsw_common *cpsw = priv->cpsw;
1752 int slave_no = cpsw_slave_index(cpsw, priv);
1753
1754 if (!netif_running(dev))
1755 return -EINVAL;
1756
1757 switch (cmd) {
1755#endif /*CONFIG_TI_CPTS*/
1756
1757static int cpsw_ndo_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
1758{
1759 struct cpsw_priv *priv = netdev_priv(dev);
1760 struct cpsw_common *cpsw = priv->cpsw;
1761 int slave_no = cpsw_slave_index(cpsw, priv);
1762
1763 if (!netif_running(dev))
1764 return -EINVAL;
1765
1766 switch (cmd) {
1758#ifdef CONFIG_TI_CPTS
1759 case SIOCSHWTSTAMP:
1760 return cpsw_hwtstamp_set(dev, req);
1761 case SIOCGHWTSTAMP:
1762 return cpsw_hwtstamp_get(dev, req);
1767 case SIOCSHWTSTAMP:
1768 return cpsw_hwtstamp_set(dev, req);
1769 case SIOCGHWTSTAMP:
1770 return cpsw_hwtstamp_get(dev, req);
1763#endif
1764 }
1765
1766 if (!cpsw->slaves[slave_no].phy)
1767 return -EOPNOTSUPP;
1768 return phy_mii_ioctl(cpsw->slaves[slave_no].phy, req, cmd);
1769}
1770
1771static void cpsw_ndo_tx_timeout(struct net_device *ndev)

--- 323 unchanged lines hidden (view full) ---

2095}
2096
2097static void cpsw_set_msglevel(struct net_device *ndev, u32 value)
2098{
2099 struct cpsw_priv *priv = netdev_priv(ndev);
2100 priv->msg_enable = value;
2101}
2102
1771 }
1772
1773 if (!cpsw->slaves[slave_no].phy)
1774 return -EOPNOTSUPP;
1775 return phy_mii_ioctl(cpsw->slaves[slave_no].phy, req, cmd);
1776}
1777
1778static void cpsw_ndo_tx_timeout(struct net_device *ndev)

--- 323 unchanged lines hidden (view full) ---

2102}
2103
2104static void cpsw_set_msglevel(struct net_device *ndev, u32 value)
2105{
2106 struct cpsw_priv *priv = netdev_priv(ndev);
2107 priv->msg_enable = value;
2108}
2109
2110#if IS_ENABLED(CONFIG_TI_CPTS)
2103static int cpsw_get_ts_info(struct net_device *ndev,
2104 struct ethtool_ts_info *info)
2105{
2111static int cpsw_get_ts_info(struct net_device *ndev,
2112 struct ethtool_ts_info *info)
2113{
2106#ifdef CONFIG_TI_CPTS
2107 struct cpsw_common *cpsw = ndev_to_cpsw(ndev);
2108
2109 info->so_timestamping =
2110 SOF_TIMESTAMPING_TX_HARDWARE |
2111 SOF_TIMESTAMPING_TX_SOFTWARE |
2112 SOF_TIMESTAMPING_RX_HARDWARE |
2113 SOF_TIMESTAMPING_RX_SOFTWARE |
2114 SOF_TIMESTAMPING_SOFTWARE |
2115 SOF_TIMESTAMPING_RAW_HARDWARE;
2116 info->phc_index = cpsw->cpts->phc_index;
2117 info->tx_types =
2118 (1 << HWTSTAMP_TX_OFF) |
2119 (1 << HWTSTAMP_TX_ON);
2120 info->rx_filters =
2121 (1 << HWTSTAMP_FILTER_NONE) |
2122 (1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
2114 struct cpsw_common *cpsw = ndev_to_cpsw(ndev);
2115
2116 info->so_timestamping =
2117 SOF_TIMESTAMPING_TX_HARDWARE |
2118 SOF_TIMESTAMPING_TX_SOFTWARE |
2119 SOF_TIMESTAMPING_RX_HARDWARE |
2120 SOF_TIMESTAMPING_RX_SOFTWARE |
2121 SOF_TIMESTAMPING_SOFTWARE |
2122 SOF_TIMESTAMPING_RAW_HARDWARE;
2123 info->phc_index = cpsw->cpts->phc_index;
2124 info->tx_types =
2125 (1 << HWTSTAMP_TX_OFF) |
2126 (1 << HWTSTAMP_TX_ON);
2127 info->rx_filters =
2128 (1 << HWTSTAMP_FILTER_NONE) |
2129 (1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
2130 return 0;
2131}
2123#else
2132#else
2133static int cpsw_get_ts_info(struct net_device *ndev,
2134 struct ethtool_ts_info *info)
2135{
2124 info->so_timestamping =
2125 SOF_TIMESTAMPING_TX_SOFTWARE |
2126 SOF_TIMESTAMPING_RX_SOFTWARE |
2127 SOF_TIMESTAMPING_SOFTWARE;
2128 info->phc_index = -1;
2129 info->tx_types = 0;
2130 info->rx_filters = 0;
2136 info->so_timestamping =
2137 SOF_TIMESTAMPING_TX_SOFTWARE |
2138 SOF_TIMESTAMPING_RX_SOFTWARE |
2139 SOF_TIMESTAMPING_SOFTWARE;
2140 info->phc_index = -1;
2141 info->tx_types = 0;
2142 info->rx_filters = 0;
2131#endif
2132 return 0;
2133}
2143 return 0;
2144}
2145#endif
2134
2135static int cpsw_get_link_ksettings(struct net_device *ndev,
2136 struct ethtool_link_ksettings *ecmd)
2137{
2138 struct cpsw_priv *priv = netdev_priv(ndev);
2139 struct cpsw_common *cpsw = priv->cpsw;
2140 int slave_no = cpsw_slave_index(cpsw, priv);
2141

--- 1041 unchanged lines hidden ---
2146
2147static int cpsw_get_link_ksettings(struct net_device *ndev,
2148 struct ethtool_link_ksettings *ecmd)
2149{
2150 struct cpsw_priv *priv = netdev_priv(ndev);
2151 struct cpsw_common *cpsw = priv->cpsw;
2152 int slave_no = cpsw_slave_index(cpsw, priv);
2153

--- 1041 unchanged lines hidden ---