Lines Matching full:ndev
346 static void sh_eth_rcv_snd_disable(struct net_device *ndev);
347 static struct net_device_stats *sh_eth_get_stats(struct net_device *ndev);
349 static void sh_eth_write(struct net_device *ndev, u32 data, int enum_index) in sh_eth_write() argument
351 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_write()
360 static u32 sh_eth_read(struct net_device *ndev, int enum_index) in sh_eth_read() argument
362 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_read()
371 static void sh_eth_modify(struct net_device *ndev, int enum_index, u32 clear, in sh_eth_modify() argument
374 sh_eth_write(ndev, (sh_eth_read(ndev, enum_index) & ~clear) | set, in sh_eth_modify()
415 static void sh_eth_select_mii(struct net_device *ndev) in sh_eth_select_mii() argument
417 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_select_mii()
434 netdev_warn(ndev, in sh_eth_select_mii()
440 sh_eth_write(ndev, value, RMII_MII); in sh_eth_select_mii()
443 static void sh_eth_set_duplex(struct net_device *ndev) in sh_eth_set_duplex() argument
445 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_duplex()
447 sh_eth_modify(ndev, ECMR, ECMR_DM, mdp->duplex ? ECMR_DM : 0); in sh_eth_set_duplex()
450 static void sh_eth_chip_reset(struct net_device *ndev) in sh_eth_chip_reset() argument
452 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_chip_reset()
459 static int sh_eth_soft_reset(struct net_device *ndev) in sh_eth_soft_reset() argument
461 sh_eth_modify(ndev, EDMR, EDMR_SRST_ETHER, EDMR_SRST_ETHER); in sh_eth_soft_reset()
463 sh_eth_modify(ndev, EDMR, EDMR_SRST_ETHER, 0); in sh_eth_soft_reset()
468 static int sh_eth_check_soft_reset(struct net_device *ndev) in sh_eth_check_soft_reset() argument
473 if (!(sh_eth_read(ndev, EDMR) & EDMR_SRST_GETHER)) in sh_eth_check_soft_reset()
478 netdev_err(ndev, "Device reset failed\n"); in sh_eth_check_soft_reset()
482 static int sh_eth_soft_reset_gether(struct net_device *ndev) in sh_eth_soft_reset_gether() argument
484 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_soft_reset_gether()
487 sh_eth_write(ndev, EDSR_ENALL, EDSR); in sh_eth_soft_reset_gether()
488 sh_eth_modify(ndev, EDMR, EDMR_SRST_GETHER, EDMR_SRST_GETHER); in sh_eth_soft_reset_gether()
490 ret = sh_eth_check_soft_reset(ndev); in sh_eth_soft_reset_gether()
495 sh_eth_write(ndev, 0, TDLAR); in sh_eth_soft_reset_gether()
496 sh_eth_write(ndev, 0, TDFAR); in sh_eth_soft_reset_gether()
497 sh_eth_write(ndev, 0, TDFXR); in sh_eth_soft_reset_gether()
498 sh_eth_write(ndev, 0, TDFFR); in sh_eth_soft_reset_gether()
499 sh_eth_write(ndev, 0, RDLAR); in sh_eth_soft_reset_gether()
500 sh_eth_write(ndev, 0, RDFAR); in sh_eth_soft_reset_gether()
501 sh_eth_write(ndev, 0, RDFXR); in sh_eth_soft_reset_gether()
502 sh_eth_write(ndev, 0, RDFFR); in sh_eth_soft_reset_gether()
506 sh_eth_write(ndev, 0, CSMR); in sh_eth_soft_reset_gether()
510 sh_eth_select_mii(ndev); in sh_eth_soft_reset_gether()
515 static void sh_eth_set_rate_gether(struct net_device *ndev) in sh_eth_set_rate_gether() argument
517 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_gether()
524 sh_eth_write(ndev, GECMR_10, GECMR); in sh_eth_set_rate_gether()
527 sh_eth_write(ndev, GECMR_100, GECMR); in sh_eth_set_rate_gether()
530 sh_eth_write(ndev, GECMR_1000, GECMR); in sh_eth_set_rate_gether()
578 static void sh_eth_chip_reset_r8a7740(struct net_device *ndev) in sh_eth_chip_reset_r8a7740() argument
580 sh_eth_chip_reset(ndev); in sh_eth_chip_reset_r8a7740()
582 sh_eth_select_mii(ndev); in sh_eth_chip_reset_r8a7740()
632 static void sh_eth_set_rate_rcar(struct net_device *ndev) in sh_eth_set_rate_rcar() argument
634 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_rcar()
638 sh_eth_modify(ndev, ECMR, ECMR_ELB, 0); in sh_eth_set_rate_rcar()
641 sh_eth_modify(ndev, ECMR, ECMR_ELB, ECMR_ELB); in sh_eth_set_rate_rcar()
793 static void sh_eth_set_rate_sh7724(struct net_device *ndev) in sh_eth_set_rate_sh7724() argument
795 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_sh7724()
799 sh_eth_modify(ndev, ECMR, ECMR_RTM, 0); in sh_eth_set_rate_sh7724()
802 sh_eth_modify(ndev, ECMR, ECMR_RTM, ECMR_RTM); in sh_eth_set_rate_sh7724()
837 static void sh_eth_set_rate_sh7757(struct net_device *ndev) in sh_eth_set_rate_sh7757() argument
839 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_sh7757()
843 sh_eth_write(ndev, 0, RTRATE); in sh_eth_set_rate_sh7757()
846 sh_eth_write(ndev, 1, RTRATE); in sh_eth_set_rate_sh7757()
888 static void sh_eth_chip_reset_giga(struct net_device *ndev) in sh_eth_chip_reset_giga() argument
899 sh_eth_chip_reset(ndev); in sh_eth_chip_reset_giga()
908 static void sh_eth_set_rate_giga(struct net_device *ndev) in sh_eth_set_rate_giga() argument
910 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_giga()
917 sh_eth_write(ndev, 0x00000000, GECMR); in sh_eth_set_rate_giga()
920 sh_eth_write(ndev, 0x00000010, GECMR); in sh_eth_set_rate_giga()
923 sh_eth_write(ndev, 0x00000020, GECMR); in sh_eth_set_rate_giga()
1130 static void update_mac_address(struct net_device *ndev) in update_mac_address() argument
1132 sh_eth_write(ndev, in update_mac_address()
1133 (ndev->dev_addr[0] << 24) | (ndev->dev_addr[1] << 16) | in update_mac_address()
1134 (ndev->dev_addr[2] << 8) | (ndev->dev_addr[3]), MAHR); in update_mac_address()
1135 sh_eth_write(ndev, in update_mac_address()
1136 (ndev->dev_addr[4] << 8) | (ndev->dev_addr[5]), MALR); in update_mac_address()
1146 static void read_mac_address(struct net_device *ndev, unsigned char *mac) in read_mac_address() argument
1149 memcpy(ndev->dev_addr, mac, ETH_ALEN); in read_mac_address()
1151 u32 mahr = sh_eth_read(ndev, MAHR); in read_mac_address()
1152 u32 malr = sh_eth_read(ndev, MALR); in read_mac_address()
1154 ndev->dev_addr[0] = (mahr >> 24) & 0xFF; in read_mac_address()
1155 ndev->dev_addr[1] = (mahr >> 16) & 0xFF; in read_mac_address()
1156 ndev->dev_addr[2] = (mahr >> 8) & 0xFF; in read_mac_address()
1157 ndev->dev_addr[3] = (mahr >> 0) & 0xFF; in read_mac_address()
1158 ndev->dev_addr[4] = (malr >> 8) & 0xFF; in read_mac_address()
1159 ndev->dev_addr[5] = (malr >> 0) & 0xFF; in read_mac_address()
1224 static int sh_eth_tx_free(struct net_device *ndev, bool sent_only) in sh_eth_tx_free() argument
1226 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tx_free()
1240 netif_info(mdp, tx_done, ndev, in sh_eth_tx_free()
1258 ndev->stats.tx_packets++; in sh_eth_tx_free()
1259 ndev->stats.tx_bytes += le32_to_cpu(txdesc->len) >> 16; in sh_eth_tx_free()
1266 static void sh_eth_ring_free(struct net_device *ndev) in sh_eth_ring_free() argument
1268 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_ring_free()
1297 sh_eth_tx_free(ndev, false); in sh_eth_ring_free()
1311 static void sh_eth_ring_format(struct net_device *ndev) in sh_eth_ring_format() argument
1313 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_ring_format()
1335 skb = netdev_alloc_skb(ndev, skbuff_size); in sh_eth_ring_format()
1358 sh_eth_write(ndev, mdp->rx_desc_dma, RDLAR); in sh_eth_ring_format()
1360 sh_eth_write(ndev, mdp->rx_desc_dma, RDFAR); in sh_eth_ring_format()
1380 sh_eth_write(ndev, mdp->tx_desc_dma, TDLAR); in sh_eth_ring_format()
1382 sh_eth_write(ndev, mdp->tx_desc_dma, TDFAR); in sh_eth_ring_format()
1390 static int sh_eth_ring_init(struct net_device *ndev) in sh_eth_ring_init() argument
1392 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_ring_init()
1400 mdp->rx_buf_sz = (ndev->mtu <= 1492 ? PKT_BUF_SZ : in sh_eth_ring_init()
1401 (((ndev->mtu + 26 + 7) & ~7) + 2 + 16)); in sh_eth_ring_init()
1435 sh_eth_ring_free(ndev); in sh_eth_ring_init()
1440 static int sh_eth_dev_init(struct net_device *ndev) in sh_eth_dev_init() argument
1442 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_dev_init()
1446 ret = mdp->cd->soft_reset(ndev); in sh_eth_dev_init()
1451 sh_eth_write(ndev, 0x1, RMIIMODE); in sh_eth_dev_init()
1454 sh_eth_ring_format(ndev); in sh_eth_dev_init()
1456 sh_eth_write(ndev, NET_IP_ALIGN << 16, RPADIR); in sh_eth_dev_init()
1459 sh_eth_write(ndev, 0, EESIPR); in sh_eth_dev_init()
1463 sh_eth_write(ndev, EDMR_EL, EDMR); in sh_eth_dev_init()
1466 sh_eth_write(ndev, 0, EDMR); in sh_eth_dev_init()
1469 sh_eth_write(ndev, mdp->cd->fdr_value, FDR); in sh_eth_dev_init()
1470 sh_eth_write(ndev, 0, TFTR); in sh_eth_dev_init()
1473 sh_eth_write(ndev, RMCR_RNC, RMCR); in sh_eth_dev_init()
1475 sh_eth_write(ndev, mdp->cd->trscer_err_mask, TRSCER); in sh_eth_dev_init()
1479 sh_eth_modify(ndev, EDMR, EDMR_NBST, EDMR_NBST); in sh_eth_dev_init()
1483 sh_eth_write(ndev, 0x800, BCULR); in sh_eth_dev_init()
1485 sh_eth_write(ndev, mdp->cd->fcftr_value, FCFTR); in sh_eth_dev_init()
1488 sh_eth_write(ndev, 0, TRIMD); in sh_eth_dev_init()
1491 sh_eth_write(ndev, ndev->mtu + ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN, in sh_eth_dev_init()
1494 sh_eth_modify(ndev, EESR, 0, 0); in sh_eth_dev_init()
1496 sh_eth_write(ndev, mdp->cd->eesipr_value, EESIPR); in sh_eth_dev_init()
1499 sh_eth_write(ndev, ECMR_ZPF | (mdp->duplex ? ECMR_DM : 0) | in sh_eth_dev_init()
1500 (ndev->features & NETIF_F_RXCSUM ? ECMR_RCSC : 0) | in sh_eth_dev_init()
1504 mdp->cd->set_rate(ndev); in sh_eth_dev_init()
1507 sh_eth_write(ndev, mdp->cd->ecsr_value, ECSR); in sh_eth_dev_init()
1510 sh_eth_write(ndev, mdp->cd->ecsipr_value, ECSIPR); in sh_eth_dev_init()
1513 update_mac_address(ndev); in sh_eth_dev_init()
1517 sh_eth_write(ndev, 1, APR); in sh_eth_dev_init()
1519 sh_eth_write(ndev, 1, MPR); in sh_eth_dev_init()
1521 sh_eth_write(ndev, TPAUSER_UNLIMITED, TPAUSER); in sh_eth_dev_init()
1524 sh_eth_write(ndev, EDRRR_R, EDRRR); in sh_eth_dev_init()
1529 static void sh_eth_dev_exit(struct net_device *ndev) in sh_eth_dev_exit() argument
1531 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_dev_exit()
1541 sh_eth_rcv_snd_disable(ndev); in sh_eth_dev_exit()
1544 sh_eth_write(ndev, 0, EDRRR); in sh_eth_dev_exit()
1552 sh_eth_get_stats(ndev); in sh_eth_dev_exit()
1553 mdp->cd->soft_reset(ndev); in sh_eth_dev_exit()
1557 sh_eth_write(ndev, 0x1, RMIIMODE); in sh_eth_dev_exit()
1560 update_mac_address(ndev); in sh_eth_dev_exit()
1577 static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) in sh_eth_rx() argument
1579 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_rx()
1604 netif_info(mdp, rx_status, ndev, in sh_eth_rx()
1609 ndev->stats.rx_length_errors++; in sh_eth_rx()
1623 ndev->stats.rx_errors++; in sh_eth_rx()
1625 ndev->stats.rx_crc_errors++; in sh_eth_rx()
1627 ndev->stats.rx_frame_errors++; in sh_eth_rx()
1629 ndev->stats.rx_length_errors++; in sh_eth_rx()
1631 ndev->stats.rx_length_errors++; in sh_eth_rx()
1633 ndev->stats.rx_missed_errors++; in sh_eth_rx()
1635 ndev->stats.rx_over_errors++; in sh_eth_rx()
1649 skb->protocol = eth_type_trans(skb, ndev); in sh_eth_rx()
1650 if (ndev->features & NETIF_F_RXCSUM) in sh_eth_rx()
1653 ndev->stats.rx_packets++; in sh_eth_rx()
1654 ndev->stats.rx_bytes += pkt_len; in sh_eth_rx()
1656 ndev->stats.multicast++; in sh_eth_rx()
1671 skb = netdev_alloc_skb(ndev, skbuff_size); in sh_eth_rx()
1696 if (!(sh_eth_read(ndev, EDRRR) & EDRRR_R)) { in sh_eth_rx()
1699 u32 count = (sh_eth_read(ndev, RDFAR) - in sh_eth_rx()
1700 sh_eth_read(ndev, RDLAR)) >> 4; in sh_eth_rx()
1705 sh_eth_write(ndev, EDRRR_R, EDRRR); in sh_eth_rx()
1713 static void sh_eth_rcv_snd_disable(struct net_device *ndev) in sh_eth_rcv_snd_disable() argument
1716 sh_eth_modify(ndev, ECMR, ECMR_RE | ECMR_TE, 0); in sh_eth_rcv_snd_disable()
1719 static void sh_eth_rcv_snd_enable(struct net_device *ndev) in sh_eth_rcv_snd_enable() argument
1722 sh_eth_modify(ndev, ECMR, ECMR_RE | ECMR_TE, ECMR_RE | ECMR_TE); in sh_eth_rcv_snd_enable()
1726 static void sh_eth_emac_interrupt(struct net_device *ndev) in sh_eth_emac_interrupt() argument
1728 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_emac_interrupt()
1732 felic_stat = sh_eth_read(ndev, ECSR) & sh_eth_read(ndev, ECSIPR); in sh_eth_emac_interrupt()
1733 sh_eth_write(ndev, felic_stat, ECSR); /* clear int */ in sh_eth_emac_interrupt()
1735 ndev->stats.tx_carrier_errors++; in sh_eth_emac_interrupt()
1742 link_stat = sh_eth_read(ndev, PSR); in sh_eth_emac_interrupt()
1746 sh_eth_rcv_snd_disable(ndev); in sh_eth_emac_interrupt()
1749 sh_eth_modify(ndev, EESIPR, EESIPR_ECIIP, 0); in sh_eth_emac_interrupt()
1751 sh_eth_modify(ndev, ECSR, 0, 0); in sh_eth_emac_interrupt()
1752 sh_eth_modify(ndev, EESIPR, EESIPR_ECIIP, EESIPR_ECIIP); in sh_eth_emac_interrupt()
1754 sh_eth_rcv_snd_enable(ndev); in sh_eth_emac_interrupt()
1760 static void sh_eth_error(struct net_device *ndev, u32 intr_status) in sh_eth_error() argument
1762 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_error()
1768 ndev->stats.tx_aborted_errors++; in sh_eth_error()
1769 netif_err(mdp, tx_err, ndev, "Transmit Abort\n"); in sh_eth_error()
1777 ndev->stats.rx_frame_errors++; in sh_eth_error()
1783 ndev->stats.tx_fifo_errors++; in sh_eth_error()
1784 netif_err(mdp, tx_err, ndev, "Transmit Descriptor Empty\n"); in sh_eth_error()
1789 ndev->stats.tx_fifo_errors++; in sh_eth_error()
1790 netif_err(mdp, tx_err, ndev, "Transmit FIFO Under flow\n"); in sh_eth_error()
1795 ndev->stats.rx_over_errors++; in sh_eth_error()
1800 ndev->stats.rx_fifo_errors++; in sh_eth_error()
1805 ndev->stats.tx_fifo_errors++; in sh_eth_error()
1806 netif_err(mdp, tx_err, ndev, "Address Error\n"); in sh_eth_error()
1814 u32 edtrr = sh_eth_read(ndev, EDTRR); in sh_eth_error()
1817 netdev_err(ndev, "TX error. status=%8.8x cur_tx=%8.8x dirty_tx=%8.8x state=%8.8x EDTRR=%8.8x.\n", in sh_eth_error()
1819 (u32)ndev->state, edtrr); in sh_eth_error()
1821 sh_eth_tx_free(ndev, true); in sh_eth_error()
1826 sh_eth_write(ndev, mdp->cd->edtrr_trns, EDTRR); in sh_eth_error()
1829 netif_wake_queue(ndev); in sh_eth_error()
1835 struct net_device *ndev = netdev; in sh_eth_interrupt() local
1836 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_interrupt()
1844 intr_status = sh_eth_read(ndev, EESR); in sh_eth_interrupt()
1851 intr_enable = sh_eth_read(ndev, EESIPR); in sh_eth_interrupt()
1860 sh_eth_write(ndev, 0, EESIPR); in sh_eth_interrupt()
1867 sh_eth_write(ndev, intr_enable & ~EESR_RX_CHECK, in sh_eth_interrupt()
1871 netdev_warn(ndev, in sh_eth_interrupt()
1880 sh_eth_write(ndev, intr_status & cd->tx_check, EESR); in sh_eth_interrupt()
1882 sh_eth_tx_free(ndev, true); in sh_eth_interrupt()
1883 netif_wake_queue(ndev); in sh_eth_interrupt()
1888 sh_eth_emac_interrupt(ndev); in sh_eth_interrupt()
1892 sh_eth_write(ndev, intr_status & cd->eesr_err_check, EESR); in sh_eth_interrupt()
1894 sh_eth_error(ndev, intr_status); in sh_eth_interrupt()
1907 struct net_device *ndev = napi->dev; in sh_eth_poll() local
1912 intr_status = sh_eth_read(ndev, EESR); in sh_eth_poll()
1916 sh_eth_write(ndev, intr_status & EESR_RX_CHECK, EESR); in sh_eth_poll()
1918 if (sh_eth_rx(ndev, intr_status, "a)) in sh_eth_poll()
1926 sh_eth_write(ndev, mdp->cd->eesipr_value, EESIPR); in sh_eth_poll()
1932 static void sh_eth_adjust_link(struct net_device *ndev) in sh_eth_adjust_link() argument
1934 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_adjust_link()
1935 struct phy_device *phydev = ndev->phydev; in sh_eth_adjust_link()
1943 sh_eth_rcv_snd_disable(ndev); in sh_eth_adjust_link()
1950 mdp->cd->set_duplex(ndev); in sh_eth_adjust_link()
1957 mdp->cd->set_rate(ndev); in sh_eth_adjust_link()
1960 sh_eth_modify(ndev, ECMR, ECMR_TXF, 0); in sh_eth_adjust_link()
1973 sh_eth_rcv_snd_enable(ndev); in sh_eth_adjust_link()
1982 static int sh_eth_phy_init(struct net_device *ndev) in sh_eth_phy_init() argument
1984 struct device_node *np = ndev->dev.parent->of_node; in sh_eth_phy_init()
1985 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_phy_init()
1997 phydev = of_phy_connect(ndev, pn, in sh_eth_phy_init()
2010 phydev = phy_connect(ndev, phy_id, sh_eth_adjust_link, in sh_eth_phy_init()
2015 netdev_err(ndev, "failed to connect PHY\n"); in sh_eth_phy_init()
2023 netdev_err(ndev, "failed to limit PHY to 100 Mbit/s\n"); in sh_eth_phy_init()
2035 static int sh_eth_phy_start(struct net_device *ndev) in sh_eth_phy_start() argument
2039 ret = sh_eth_phy_init(ndev); in sh_eth_phy_start()
2043 phy_start(ndev->phydev); in sh_eth_phy_start()
2056 static size_t __sh_eth_get_regs(struct net_device *ndev, u32 *buf) in __sh_eth_get_regs() argument
2058 struct sh_eth_private *mdp = netdev_priv(ndev); in __sh_eth_get_regs()
2091 #define add_reg(reg) add_reg_from(reg, sh_eth_read(ndev, reg)) in __sh_eth_get_regs()
2221 static int sh_eth_get_regs_len(struct net_device *ndev) in sh_eth_get_regs_len() argument
2223 return __sh_eth_get_regs(ndev, NULL); in sh_eth_get_regs_len()
2226 static void sh_eth_get_regs(struct net_device *ndev, struct ethtool_regs *regs, in sh_eth_get_regs() argument
2229 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_regs()
2234 __sh_eth_get_regs(ndev, buf); in sh_eth_get_regs()
2238 static u32 sh_eth_get_msglevel(struct net_device *ndev) in sh_eth_get_msglevel() argument
2240 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_msglevel()
2244 static void sh_eth_set_msglevel(struct net_device *ndev, u32 value) in sh_eth_set_msglevel() argument
2246 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_msglevel()
2266 static void sh_eth_get_ethtool_stats(struct net_device *ndev, in sh_eth_get_ethtool_stats() argument
2269 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_ethtool_stats()
2279 static void sh_eth_get_strings(struct net_device *ndev, u32 stringset, u8 *data) in sh_eth_get_strings() argument
2289 static void sh_eth_get_ringparam(struct net_device *ndev, in sh_eth_get_ringparam() argument
2292 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_ringparam()
2300 static int sh_eth_set_ringparam(struct net_device *ndev, in sh_eth_set_ringparam() argument
2303 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_ringparam()
2314 if (netif_running(ndev)) { in sh_eth_set_ringparam()
2315 netif_device_detach(ndev); in sh_eth_set_ringparam()
2316 netif_tx_disable(ndev); in sh_eth_set_ringparam()
2324 synchronize_irq(ndev->irq); in sh_eth_set_ringparam()
2326 sh_eth_write(ndev, 0x0000, EESIPR); in sh_eth_set_ringparam()
2328 sh_eth_dev_exit(ndev); in sh_eth_set_ringparam()
2331 sh_eth_ring_free(ndev); in sh_eth_set_ringparam()
2338 if (netif_running(ndev)) { in sh_eth_set_ringparam()
2339 ret = sh_eth_ring_init(ndev); in sh_eth_set_ringparam()
2341 netdev_err(ndev, "%s: sh_eth_ring_init failed.\n", in sh_eth_set_ringparam()
2345 ret = sh_eth_dev_init(ndev); in sh_eth_set_ringparam()
2347 netdev_err(ndev, "%s: sh_eth_dev_init failed.\n", in sh_eth_set_ringparam()
2352 netif_device_attach(ndev); in sh_eth_set_ringparam()
2358 static void sh_eth_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) in sh_eth_get_wol() argument
2360 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_wol()
2371 static int sh_eth_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) in sh_eth_set_wol() argument
2373 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_wol()
2404 static int sh_eth_open(struct net_device *ndev) in sh_eth_open() argument
2406 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_open()
2413 ret = request_irq(ndev->irq, sh_eth_interrupt, in sh_eth_open()
2414 mdp->cd->irq_flags, ndev->name, ndev); in sh_eth_open()
2416 netdev_err(ndev, "Can not assign IRQ number\n"); in sh_eth_open()
2421 ret = sh_eth_ring_init(ndev); in sh_eth_open()
2426 ret = sh_eth_dev_init(ndev); in sh_eth_open()
2431 ret = sh_eth_phy_start(ndev); in sh_eth_open()
2435 netif_start_queue(ndev); in sh_eth_open()
2442 free_irq(ndev->irq, ndev); in sh_eth_open()
2450 static void sh_eth_tx_timeout(struct net_device *ndev, unsigned int txqueue) in sh_eth_tx_timeout() argument
2452 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tx_timeout()
2456 netif_stop_queue(ndev); in sh_eth_tx_timeout()
2458 netif_err(mdp, timer, ndev, in sh_eth_tx_timeout()
2460 sh_eth_read(ndev, EESR)); in sh_eth_tx_timeout()
2463 ndev->stats.tx_errors++; in sh_eth_tx_timeout()
2479 sh_eth_dev_init(ndev); in sh_eth_tx_timeout()
2481 netif_start_queue(ndev); in sh_eth_tx_timeout()
2486 struct net_device *ndev) in sh_eth_start_xmit() argument
2488 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_start_xmit()
2496 if (!sh_eth_tx_free(ndev, true)) { in sh_eth_start_xmit()
2497 netif_warn(mdp, tx_queued, ndev, "TxFD exhausted.\n"); in sh_eth_start_xmit()
2498 netif_stop_queue(ndev); in sh_eth_start_xmit()
2531 if (!(sh_eth_read(ndev, EDTRR) & mdp->cd->edtrr_trns)) in sh_eth_start_xmit()
2532 sh_eth_write(ndev, mdp->cd->edtrr_trns, EDTRR); in sh_eth_start_xmit()
2543 sh_eth_update_stat(struct net_device *ndev, unsigned long *stat, int reg) in sh_eth_update_stat() argument
2545 u32 delta = sh_eth_read(ndev, reg); in sh_eth_update_stat()
2549 sh_eth_write(ndev, 0, reg); in sh_eth_update_stat()
2553 static struct net_device_stats *sh_eth_get_stats(struct net_device *ndev) in sh_eth_get_stats() argument
2555 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_stats()
2558 return &ndev->stats; in sh_eth_get_stats()
2561 return &ndev->stats; in sh_eth_get_stats()
2563 sh_eth_update_stat(ndev, &ndev->stats.tx_dropped, TROCR); in sh_eth_get_stats()
2564 sh_eth_update_stat(ndev, &ndev->stats.collisions, CDCR); in sh_eth_get_stats()
2565 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, LCCR); in sh_eth_get_stats()
2568 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, in sh_eth_get_stats()
2570 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, in sh_eth_get_stats()
2573 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, in sh_eth_get_stats()
2577 return &ndev->stats; in sh_eth_get_stats()
2581 static int sh_eth_close(struct net_device *ndev) in sh_eth_close() argument
2583 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_close()
2585 netif_stop_queue(ndev); in sh_eth_close()
2592 synchronize_irq(ndev->irq); in sh_eth_close()
2594 sh_eth_write(ndev, 0x0000, EESIPR); in sh_eth_close()
2596 sh_eth_dev_exit(ndev); in sh_eth_close()
2599 if (ndev->phydev) { in sh_eth_close()
2600 phy_stop(ndev->phydev); in sh_eth_close()
2601 phy_disconnect(ndev->phydev); in sh_eth_close()
2604 free_irq(ndev->irq, ndev); in sh_eth_close()
2607 sh_eth_ring_free(ndev); in sh_eth_close()
2616 static int sh_eth_change_mtu(struct net_device *ndev, int new_mtu) in sh_eth_change_mtu() argument
2618 if (netif_running(ndev)) in sh_eth_change_mtu()
2621 ndev->mtu = new_mtu; in sh_eth_change_mtu()
2622 netdev_update_features(ndev); in sh_eth_change_mtu()
2638 static void sh_eth_tsu_enable_cam_entry_post(struct net_device *ndev, in sh_eth_tsu_enable_cam_entry_post() argument
2641 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_enable_cam_entry_post()
2649 static bool sh_eth_tsu_disable_cam_entry_post(struct net_device *ndev, in sh_eth_tsu_disable_cam_entry_post() argument
2652 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_disable_cam_entry_post()
2666 static int sh_eth_tsu_busy(struct net_device *ndev) in sh_eth_tsu_busy() argument
2669 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_busy()
2675 netdev_err(ndev, "%s: timeout\n", __func__); in sh_eth_tsu_busy()
2683 static int sh_eth_tsu_write_entry(struct net_device *ndev, u16 offset, in sh_eth_tsu_write_entry() argument
2686 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_write_entry()
2691 if (sh_eth_tsu_busy(ndev) < 0) in sh_eth_tsu_write_entry()
2696 if (sh_eth_tsu_busy(ndev) < 0) in sh_eth_tsu_write_entry()
2702 static void sh_eth_tsu_read_entry(struct net_device *ndev, u16 offset, u8 *addr) in sh_eth_tsu_read_entry() argument
2704 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_read_entry()
2718 static int sh_eth_tsu_find_entry(struct net_device *ndev, const u8 *addr) in sh_eth_tsu_find_entry() argument
2720 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_find_entry()
2726 sh_eth_tsu_read_entry(ndev, reg_offset, c_addr); in sh_eth_tsu_find_entry()
2734 static int sh_eth_tsu_find_empty(struct net_device *ndev) in sh_eth_tsu_find_empty() argument
2740 entry = sh_eth_tsu_find_entry(ndev, blank); in sh_eth_tsu_find_empty()
2744 static int sh_eth_tsu_disable_cam_entry_table(struct net_device *ndev, in sh_eth_tsu_disable_cam_entry_table() argument
2747 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_disable_cam_entry_table()
2756 ret = sh_eth_tsu_write_entry(ndev, reg_offset + entry * 8, blank); in sh_eth_tsu_disable_cam_entry_table()
2762 static int sh_eth_tsu_add_entry(struct net_device *ndev, const u8 *addr) in sh_eth_tsu_add_entry() argument
2764 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_add_entry()
2771 i = sh_eth_tsu_find_entry(ndev, addr); in sh_eth_tsu_add_entry()
2774 i = sh_eth_tsu_find_empty(ndev); in sh_eth_tsu_add_entry()
2777 ret = sh_eth_tsu_write_entry(ndev, reg_offset + i * 8, addr); in sh_eth_tsu_add_entry()
2787 sh_eth_tsu_enable_cam_entry_post(ndev, i); in sh_eth_tsu_add_entry()
2792 static int sh_eth_tsu_del_entry(struct net_device *ndev, const u8 *addr) in sh_eth_tsu_del_entry() argument
2794 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_del_entry()
2800 i = sh_eth_tsu_find_entry(ndev, addr); in sh_eth_tsu_del_entry()
2803 if (sh_eth_tsu_disable_cam_entry_post(ndev, i)) in sh_eth_tsu_del_entry()
2807 ret = sh_eth_tsu_disable_cam_entry_table(ndev, i); in sh_eth_tsu_del_entry()
2815 static int sh_eth_tsu_purge_all(struct net_device *ndev) in sh_eth_tsu_purge_all() argument
2817 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_purge_all()
2824 if (sh_eth_tsu_disable_cam_entry_post(ndev, i)) in sh_eth_tsu_purge_all()
2828 ret = sh_eth_tsu_disable_cam_entry_table(ndev, i); in sh_eth_tsu_purge_all()
2836 static void sh_eth_tsu_purge_mcast(struct net_device *ndev) in sh_eth_tsu_purge_mcast() argument
2838 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_purge_mcast()
2847 sh_eth_tsu_read_entry(ndev, reg_offset, addr); in sh_eth_tsu_purge_mcast()
2849 sh_eth_tsu_del_entry(ndev, addr); in sh_eth_tsu_purge_mcast()
2854 static void sh_eth_set_rx_mode(struct net_device *ndev) in sh_eth_set_rx_mode() argument
2856 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rx_mode()
2863 * Depending on ndev->flags, set PRM or clear MCT in sh_eth_set_rx_mode()
2865 ecmr_bits = sh_eth_read(ndev, ECMR) & ~ECMR_PRM; in sh_eth_set_rx_mode()
2869 if (!(ndev->flags & IFF_MULTICAST)) { in sh_eth_set_rx_mode()
2870 sh_eth_tsu_purge_mcast(ndev); in sh_eth_set_rx_mode()
2873 if (ndev->flags & IFF_ALLMULTI) { in sh_eth_set_rx_mode()
2874 sh_eth_tsu_purge_mcast(ndev); in sh_eth_set_rx_mode()
2879 if (ndev->flags & IFF_PROMISC) { in sh_eth_set_rx_mode()
2880 sh_eth_tsu_purge_all(ndev); in sh_eth_set_rx_mode()
2884 netdev_for_each_mc_addr(ha, ndev) { in sh_eth_set_rx_mode()
2888 if (sh_eth_tsu_add_entry(ndev, ha->addr) < 0) { in sh_eth_set_rx_mode()
2890 sh_eth_tsu_purge_mcast(ndev); in sh_eth_set_rx_mode()
2899 sh_eth_write(ndev, ecmr_bits, ECMR); in sh_eth_set_rx_mode()
2904 static void sh_eth_set_rx_csum(struct net_device *ndev, bool enable) in sh_eth_set_rx_csum() argument
2906 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rx_csum()
2912 sh_eth_rcv_snd_disable(ndev); in sh_eth_set_rx_csum()
2915 sh_eth_modify(ndev, ECMR, ECMR_RCSC, enable ? ECMR_RCSC : 0); in sh_eth_set_rx_csum()
2918 sh_eth_rcv_snd_enable(ndev); in sh_eth_set_rx_csum()
2923 static int sh_eth_set_features(struct net_device *ndev, in sh_eth_set_features() argument
2926 netdev_features_t changed = ndev->features ^ features; in sh_eth_set_features()
2927 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_features()
2930 sh_eth_set_rx_csum(ndev, features & NETIF_F_RXCSUM); in sh_eth_set_features()
2932 ndev->features = features; in sh_eth_set_features()
2945 static int sh_eth_vlan_rx_add_vid(struct net_device *ndev, in sh_eth_vlan_rx_add_vid() argument
2948 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_vlan_rx_add_vid()
2975 static int sh_eth_vlan_rx_kill_vid(struct net_device *ndev, in sh_eth_vlan_rx_kill_vid() argument
2978 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_vlan_rx_kill_vid()
3195 struct net_device *ndev; in sh_eth_drv_probe() local
3201 ndev = alloc_etherdev(sizeof(struct sh_eth_private)); in sh_eth_drv_probe()
3202 if (!ndev) in sh_eth_drv_probe()
3211 ndev->irq = ret; in sh_eth_drv_probe()
3213 SET_NETDEV_DEV(ndev, &pdev->dev); in sh_eth_drv_probe()
3215 mdp = netdev_priv(ndev); in sh_eth_drv_probe()
3224 ndev->base_addr = res->start; in sh_eth_drv_probe()
3262 ndev->max_mtu = 2000 - (ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN); in sh_eth_drv_probe()
3263 ndev->min_mtu = ETH_MIN_MTU; in sh_eth_drv_probe()
3266 ndev->features = NETIF_F_RXCSUM; in sh_eth_drv_probe()
3267 ndev->hw_features = NETIF_F_RXCSUM; in sh_eth_drv_probe()
3272 ndev->netdev_ops = &sh_eth_netdev_ops_tsu; in sh_eth_drv_probe()
3274 ndev->netdev_ops = &sh_eth_netdev_ops; in sh_eth_drv_probe()
3275 ndev->ethtool_ops = &sh_eth_ethtool_ops; in sh_eth_drv_probe()
3276 ndev->watchdog_timeo = TX_TIMEOUT; in sh_eth_drv_probe()
3282 read_mac_address(ndev, pd->mac_addr); in sh_eth_drv_probe()
3283 if (!is_valid_ether_addr(ndev->dev_addr)) { in sh_eth_drv_probe()
3286 eth_hw_addr_random(ndev); in sh_eth_drv_probe()
3319 ndev->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in sh_eth_drv_probe()
3324 mdp->cd->chip_reset(ndev); in sh_eth_drv_probe()
3332 sh_eth_write(ndev, 0x1, RMIIMODE); in sh_eth_drv_probe()
3342 netif_napi_add(ndev, &mdp->napi, sh_eth_poll, 64); in sh_eth_drv_probe()
3345 ret = register_netdev(ndev); in sh_eth_drv_probe()
3353 netdev_info(ndev, "Base address at 0x%x, %pM, IRQ %d.\n", in sh_eth_drv_probe()
3354 (u32)ndev->base_addr, ndev->dev_addr, ndev->irq); in sh_eth_drv_probe()
3357 platform_set_drvdata(pdev, ndev); in sh_eth_drv_probe()
3367 free_netdev(ndev); in sh_eth_drv_probe()
3376 struct net_device *ndev = platform_get_drvdata(pdev); in sh_eth_drv_remove() local
3377 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_drv_remove()
3379 unregister_netdev(ndev); in sh_eth_drv_remove()
3383 free_netdev(ndev); in sh_eth_drv_remove()
3390 static int sh_eth_wol_setup(struct net_device *ndev) in sh_eth_wol_setup() argument
3392 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_wol_setup()
3395 synchronize_irq(ndev->irq); in sh_eth_wol_setup()
3397 sh_eth_write(ndev, EESIPR_ECIIP, EESIPR); in sh_eth_wol_setup()
3400 sh_eth_modify(ndev, ECMR, ECMR_MPDE, ECMR_MPDE); in sh_eth_wol_setup()
3402 return enable_irq_wake(ndev->irq); in sh_eth_wol_setup()
3405 static int sh_eth_wol_restore(struct net_device *ndev) in sh_eth_wol_restore() argument
3407 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_wol_restore()
3413 sh_eth_modify(ndev, ECMR, ECMR_MPDE, 0); in sh_eth_wol_restore()
3420 ret = sh_eth_close(ndev); in sh_eth_wol_restore()
3423 ret = sh_eth_open(ndev); in sh_eth_wol_restore()
3427 return disable_irq_wake(ndev->irq); in sh_eth_wol_restore()
3432 struct net_device *ndev = dev_get_drvdata(dev); in sh_eth_suspend() local
3433 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_suspend()
3436 if (!netif_running(ndev)) in sh_eth_suspend()
3439 netif_device_detach(ndev); in sh_eth_suspend()
3442 ret = sh_eth_wol_setup(ndev); in sh_eth_suspend()
3444 ret = sh_eth_close(ndev); in sh_eth_suspend()
3451 struct net_device *ndev = dev_get_drvdata(dev); in sh_eth_resume() local
3452 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_resume()
3455 if (!netif_running(ndev)) in sh_eth_resume()
3459 ret = sh_eth_wol_restore(ndev); in sh_eth_resume()
3461 ret = sh_eth_open(ndev); in sh_eth_resume()
3466 netif_device_attach(ndev); in sh_eth_resume()