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 --- |