• Home
  • Raw
  • Download

Lines Matching refs:ndev

411 static void sh_eth_rcv_snd_disable(struct net_device *ndev);
412 static struct net_device_stats *sh_eth_get_stats(struct net_device *ndev);
414 static void sh_eth_write(struct net_device *ndev, u32 data, int enum_index) in sh_eth_write() argument
416 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_write()
425 static u32 sh_eth_read(struct net_device *ndev, int enum_index) in sh_eth_read() argument
427 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_read()
436 static void sh_eth_modify(struct net_device *ndev, int enum_index, u32 clear, in sh_eth_modify() argument
439 sh_eth_write(ndev, (sh_eth_read(ndev, enum_index) & ~clear) | set, in sh_eth_modify()
453 static void sh_eth_select_mii(struct net_device *ndev) in sh_eth_select_mii() argument
455 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_select_mii()
469 netdev_warn(ndev, in sh_eth_select_mii()
475 sh_eth_write(ndev, value, RMII_MII); in sh_eth_select_mii()
478 static void sh_eth_set_duplex(struct net_device *ndev) in sh_eth_set_duplex() argument
480 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_duplex()
482 sh_eth_modify(ndev, ECMR, ECMR_DM, mdp->duplex ? ECMR_DM : 0); in sh_eth_set_duplex()
485 static void sh_eth_chip_reset(struct net_device *ndev) in sh_eth_chip_reset() argument
487 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_chip_reset()
494 static void sh_eth_set_rate_gether(struct net_device *ndev) in sh_eth_set_rate_gether() argument
496 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_gether()
500 sh_eth_write(ndev, GECMR_10, GECMR); in sh_eth_set_rate_gether()
503 sh_eth_write(ndev, GECMR_100, GECMR); in sh_eth_set_rate_gether()
506 sh_eth_write(ndev, GECMR_1000, GECMR); in sh_eth_set_rate_gether()
549 static void sh_eth_chip_reset_r8a7740(struct net_device *ndev) in sh_eth_chip_reset_r8a7740() argument
551 sh_eth_chip_reset(ndev); in sh_eth_chip_reset_r8a7740()
553 sh_eth_select_mii(ndev); in sh_eth_chip_reset_r8a7740()
597 static void sh_eth_set_rate_r8a777x(struct net_device *ndev) in sh_eth_set_rate_r8a777x() argument
599 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_r8a777x()
603 sh_eth_modify(ndev, ECMR, ECMR_ELB, 0); in sh_eth_set_rate_r8a777x()
606 sh_eth_modify(ndev, ECMR, ECMR_ELB, ECMR_ELB); in sh_eth_set_rate_r8a777x()
671 static void sh_eth_set_rate_sh7724(struct net_device *ndev) in sh_eth_set_rate_sh7724() argument
673 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_sh7724()
677 sh_eth_modify(ndev, ECMR, ECMR_RTM, 0); in sh_eth_set_rate_sh7724()
680 sh_eth_modify(ndev, ECMR, ECMR_RTM, ECMR_RTM); in sh_eth_set_rate_sh7724()
713 static void sh_eth_set_rate_sh7757(struct net_device *ndev) in sh_eth_set_rate_sh7757() argument
715 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_sh7757()
719 sh_eth_write(ndev, 0, RTRATE); in sh_eth_set_rate_sh7757()
722 sh_eth_write(ndev, 1, RTRATE); in sh_eth_set_rate_sh7757()
762 static void sh_eth_chip_reset_giga(struct net_device *ndev) in sh_eth_chip_reset_giga() argument
773 sh_eth_chip_reset(ndev); in sh_eth_chip_reset_giga()
782 static void sh_eth_set_rate_giga(struct net_device *ndev) in sh_eth_set_rate_giga() argument
784 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_giga()
788 sh_eth_write(ndev, 0x00000000, GECMR); in sh_eth_set_rate_giga()
791 sh_eth_write(ndev, 0x00000010, GECMR); in sh_eth_set_rate_giga()
794 sh_eth_write(ndev, 0x00000020, GECMR); in sh_eth_set_rate_giga()
967 static int sh_eth_check_reset(struct net_device *ndev) in sh_eth_check_reset() argument
973 if (!(sh_eth_read(ndev, EDMR) & EDMR_SRST_GETHER)) in sh_eth_check_reset()
979 netdev_err(ndev, "Device reset failed\n"); in sh_eth_check_reset()
985 static int sh_eth_reset(struct net_device *ndev) in sh_eth_reset() argument
987 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_reset()
991 sh_eth_write(ndev, EDSR_ENALL, EDSR); in sh_eth_reset()
992 sh_eth_modify(ndev, EDMR, EDMR_SRST_GETHER, EDMR_SRST_GETHER); in sh_eth_reset()
994 ret = sh_eth_check_reset(ndev); in sh_eth_reset()
999 sh_eth_write(ndev, 0x0, TDLAR); in sh_eth_reset()
1000 sh_eth_write(ndev, 0x0, TDFAR); in sh_eth_reset()
1001 sh_eth_write(ndev, 0x0, TDFXR); in sh_eth_reset()
1002 sh_eth_write(ndev, 0x0, TDFFR); in sh_eth_reset()
1003 sh_eth_write(ndev, 0x0, RDLAR); in sh_eth_reset()
1004 sh_eth_write(ndev, 0x0, RDFAR); in sh_eth_reset()
1005 sh_eth_write(ndev, 0x0, RDFXR); in sh_eth_reset()
1006 sh_eth_write(ndev, 0x0, RDFFR); in sh_eth_reset()
1010 sh_eth_write(ndev, 0x0, CSMR); in sh_eth_reset()
1014 sh_eth_select_mii(ndev); in sh_eth_reset()
1016 sh_eth_modify(ndev, EDMR, EDMR_SRST_ETHER, EDMR_SRST_ETHER); in sh_eth_reset()
1018 sh_eth_modify(ndev, EDMR, EDMR_SRST_ETHER, 0); in sh_eth_reset()
1033 static void update_mac_address(struct net_device *ndev) in update_mac_address() argument
1035 sh_eth_write(ndev, in update_mac_address()
1036 (ndev->dev_addr[0] << 24) | (ndev->dev_addr[1] << 16) | in update_mac_address()
1037 (ndev->dev_addr[2] << 8) | (ndev->dev_addr[3]), MAHR); in update_mac_address()
1038 sh_eth_write(ndev, in update_mac_address()
1039 (ndev->dev_addr[4] << 8) | (ndev->dev_addr[5]), MALR); in update_mac_address()
1049 static void read_mac_address(struct net_device *ndev, unsigned char *mac) in read_mac_address() argument
1052 memcpy(ndev->dev_addr, mac, ETH_ALEN); in read_mac_address()
1054 u32 mahr = sh_eth_read(ndev, MAHR); in read_mac_address()
1055 u32 malr = sh_eth_read(ndev, MALR); in read_mac_address()
1057 ndev->dev_addr[0] = (mahr >> 24) & 0xFF; in read_mac_address()
1058 ndev->dev_addr[1] = (mahr >> 16) & 0xFF; in read_mac_address()
1059 ndev->dev_addr[2] = (mahr >> 8) & 0xFF; in read_mac_address()
1060 ndev->dev_addr[3] = (mahr >> 0) & 0xFF; in read_mac_address()
1061 ndev->dev_addr[4] = (malr >> 8) & 0xFF; in read_mac_address()
1062 ndev->dev_addr[5] = (malr >> 0) & 0xFF; in read_mac_address()
1135 static int sh_eth_tx_free(struct net_device *ndev, bool sent_only) in sh_eth_tx_free() argument
1137 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tx_free()
1151 netif_info(mdp, tx_done, ndev, in sh_eth_tx_free()
1156 dma_unmap_single(&ndev->dev, le32_to_cpu(txdesc->addr), in sh_eth_tx_free()
1168 ndev->stats.tx_packets++; in sh_eth_tx_free()
1169 ndev->stats.tx_bytes += le32_to_cpu(txdesc->len) >> 16; in sh_eth_tx_free()
1176 static void sh_eth_ring_free(struct net_device *ndev) in sh_eth_ring_free() argument
1178 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_ring_free()
1186 dma_unmap_single(&ndev->dev, in sh_eth_ring_free()
1207 sh_eth_tx_free(ndev, false); in sh_eth_ring_free()
1221 static void sh_eth_ring_format(struct net_device *ndev) in sh_eth_ring_format() argument
1223 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_ring_format()
1245 skb = netdev_alloc_skb(ndev, skbuff_size); in sh_eth_ring_format()
1252 dma_addr = dma_map_single(&ndev->dev, skb->data, buf_len, in sh_eth_ring_format()
1254 if (dma_mapping_error(&ndev->dev, dma_addr)) { in sh_eth_ring_format()
1268 sh_eth_write(ndev, mdp->rx_desc_dma, RDLAR); in sh_eth_ring_format()
1271 sh_eth_write(ndev, mdp->rx_desc_dma, RDFAR); in sh_eth_ring_format()
1291 sh_eth_write(ndev, mdp->tx_desc_dma, TDLAR); in sh_eth_ring_format()
1294 sh_eth_write(ndev, mdp->tx_desc_dma, TDFAR); in sh_eth_ring_format()
1302 static int sh_eth_ring_init(struct net_device *ndev) in sh_eth_ring_init() argument
1304 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_ring_init()
1312 mdp->rx_buf_sz = (ndev->mtu <= 1492 ? PKT_BUF_SZ : in sh_eth_ring_init()
1313 (((ndev->mtu + 26 + 7) & ~7) + 2 + 16)); in sh_eth_ring_init()
1347 sh_eth_ring_free(ndev); in sh_eth_ring_init()
1352 static int sh_eth_dev_init(struct net_device *ndev) in sh_eth_dev_init() argument
1354 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_dev_init()
1358 ret = sh_eth_reset(ndev); in sh_eth_dev_init()
1363 sh_eth_write(ndev, 0x1, RMIIMODE); in sh_eth_dev_init()
1366 sh_eth_ring_format(ndev); in sh_eth_dev_init()
1368 sh_eth_write(ndev, mdp->cd->rpadir_value, RPADIR); in sh_eth_dev_init()
1371 sh_eth_write(ndev, 0, EESIPR); in sh_eth_dev_init()
1375 sh_eth_write(ndev, EDMR_EL, EDMR); in sh_eth_dev_init()
1378 sh_eth_write(ndev, 0, EDMR); in sh_eth_dev_init()
1381 sh_eth_write(ndev, mdp->cd->fdr_value, FDR); in sh_eth_dev_init()
1382 sh_eth_write(ndev, 0, TFTR); in sh_eth_dev_init()
1385 sh_eth_write(ndev, RMCR_RNC, RMCR); in sh_eth_dev_init()
1387 sh_eth_write(ndev, mdp->cd->trscer_err_mask, TRSCER); in sh_eth_dev_init()
1390 sh_eth_write(ndev, 0x800, BCULR); /* Burst sycle set */ in sh_eth_dev_init()
1392 sh_eth_write(ndev, mdp->cd->fcftr_value, FCFTR); in sh_eth_dev_init()
1395 sh_eth_write(ndev, 0, TRIMD); in sh_eth_dev_init()
1398 sh_eth_write(ndev, ndev->mtu + ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN, in sh_eth_dev_init()
1401 sh_eth_modify(ndev, EESR, 0, 0); in sh_eth_dev_init()
1403 sh_eth_write(ndev, mdp->cd->eesipr_value, EESIPR); in sh_eth_dev_init()
1406 sh_eth_write(ndev, ECMR_ZPF | (mdp->duplex ? ECMR_DM : 0) | in sh_eth_dev_init()
1410 mdp->cd->set_rate(ndev); in sh_eth_dev_init()
1413 sh_eth_write(ndev, mdp->cd->ecsr_value, ECSR); in sh_eth_dev_init()
1416 sh_eth_write(ndev, mdp->cd->ecsipr_value, ECSIPR); in sh_eth_dev_init()
1419 update_mac_address(ndev); in sh_eth_dev_init()
1423 sh_eth_write(ndev, APR_AP, APR); in sh_eth_dev_init()
1425 sh_eth_write(ndev, MPR_MP, MPR); in sh_eth_dev_init()
1427 sh_eth_write(ndev, TPAUSER_UNLIMITED, TPAUSER); in sh_eth_dev_init()
1430 sh_eth_write(ndev, EDRRR_R, EDRRR); in sh_eth_dev_init()
1435 static void sh_eth_dev_exit(struct net_device *ndev) in sh_eth_dev_exit() argument
1437 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_dev_exit()
1447 sh_eth_rcv_snd_disable(ndev); in sh_eth_dev_exit()
1450 sh_eth_write(ndev, 0, EDRRR); in sh_eth_dev_exit()
1458 sh_eth_get_stats(ndev); in sh_eth_dev_exit()
1459 sh_eth_reset(ndev); in sh_eth_dev_exit()
1463 sh_eth_write(ndev, 0x1, RMIIMODE); in sh_eth_dev_exit()
1466 update_mac_address(ndev); in sh_eth_dev_exit()
1470 static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) in sh_eth_rx() argument
1472 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_rx()
1497 netif_info(mdp, rx_status, ndev, in sh_eth_rx()
1502 ndev->stats.rx_length_errors++; in sh_eth_rx()
1516 ndev->stats.rx_errors++; in sh_eth_rx()
1518 ndev->stats.rx_crc_errors++; in sh_eth_rx()
1520 ndev->stats.rx_frame_errors++; in sh_eth_rx()
1522 ndev->stats.rx_length_errors++; in sh_eth_rx()
1524 ndev->stats.rx_length_errors++; in sh_eth_rx()
1526 ndev->stats.rx_missed_errors++; in sh_eth_rx()
1528 ndev->stats.rx_over_errors++; in sh_eth_rx()
1538 dma_unmap_single(&ndev->dev, dma_addr, in sh_eth_rx()
1542 skb->protocol = eth_type_trans(skb, ndev); in sh_eth_rx()
1544 ndev->stats.rx_packets++; in sh_eth_rx()
1545 ndev->stats.rx_bytes += pkt_len; in sh_eth_rx()
1547 ndev->stats.multicast++; in sh_eth_rx()
1562 skb = netdev_alloc_skb(ndev, skbuff_size); in sh_eth_rx()
1566 dma_addr = dma_map_single(&ndev->dev, skb->data, in sh_eth_rx()
1568 if (dma_mapping_error(&ndev->dev, dma_addr)) { in sh_eth_rx()
1587 if (!(sh_eth_read(ndev, EDRRR) & EDRRR_R)) { in sh_eth_rx()
1591 u32 count = (sh_eth_read(ndev, RDFAR) - in sh_eth_rx()
1592 sh_eth_read(ndev, RDLAR)) >> 4; in sh_eth_rx()
1597 sh_eth_write(ndev, EDRRR_R, EDRRR); in sh_eth_rx()
1605 static void sh_eth_rcv_snd_disable(struct net_device *ndev) in sh_eth_rcv_snd_disable() argument
1608 sh_eth_modify(ndev, ECMR, ECMR_RE | ECMR_TE, 0); in sh_eth_rcv_snd_disable()
1611 static void sh_eth_rcv_snd_enable(struct net_device *ndev) in sh_eth_rcv_snd_enable() argument
1614 sh_eth_modify(ndev, ECMR, ECMR_RE | ECMR_TE, ECMR_RE | ECMR_TE); in sh_eth_rcv_snd_enable()
1618 static void sh_eth_emac_interrupt(struct net_device *ndev) in sh_eth_emac_interrupt() argument
1620 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_emac_interrupt()
1624 felic_stat = sh_eth_read(ndev, ECSR) & sh_eth_read(ndev, ECSIPR); in sh_eth_emac_interrupt()
1625 sh_eth_write(ndev, felic_stat, ECSR); /* clear int */ in sh_eth_emac_interrupt()
1627 ndev->stats.tx_carrier_errors++; in sh_eth_emac_interrupt()
1634 link_stat = sh_eth_read(ndev, PSR); in sh_eth_emac_interrupt()
1638 sh_eth_rcv_snd_disable(ndev); in sh_eth_emac_interrupt()
1641 sh_eth_modify(ndev, EESIPR, EESIPR_ECIIP, 0); in sh_eth_emac_interrupt()
1643 sh_eth_modify(ndev, ECSR, 0, 0); in sh_eth_emac_interrupt()
1644 sh_eth_modify(ndev, EESIPR, EESIPR_ECIIP, EESIPR_ECIIP); in sh_eth_emac_interrupt()
1646 sh_eth_rcv_snd_enable(ndev); in sh_eth_emac_interrupt()
1652 static void sh_eth_error(struct net_device *ndev, u32 intr_status) in sh_eth_error() argument
1654 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_error()
1660 ndev->stats.tx_aborted_errors++; in sh_eth_error()
1661 netif_err(mdp, tx_err, ndev, "Transmit Abort\n"); in sh_eth_error()
1669 ndev->stats.rx_frame_errors++; in sh_eth_error()
1675 ndev->stats.tx_fifo_errors++; in sh_eth_error()
1676 netif_err(mdp, tx_err, ndev, "Transmit Descriptor Empty\n"); in sh_eth_error()
1681 ndev->stats.tx_fifo_errors++; in sh_eth_error()
1682 netif_err(mdp, tx_err, ndev, "Transmit FIFO Under flow\n"); in sh_eth_error()
1687 ndev->stats.rx_over_errors++; in sh_eth_error()
1692 ndev->stats.rx_fifo_errors++; in sh_eth_error()
1697 ndev->stats.tx_fifo_errors++; in sh_eth_error()
1698 netif_err(mdp, tx_err, ndev, "Address Error\n"); in sh_eth_error()
1706 u32 edtrr = sh_eth_read(ndev, EDTRR); in sh_eth_error()
1709 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()
1711 (u32)ndev->state, edtrr); in sh_eth_error()
1713 sh_eth_tx_free(ndev, true); in sh_eth_error()
1718 sh_eth_write(ndev, sh_eth_get_edtrr_trns(mdp), EDTRR); in sh_eth_error()
1721 netif_wake_queue(ndev); in sh_eth_error()
1727 struct net_device *ndev = netdev; in sh_eth_interrupt() local
1728 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_interrupt()
1736 intr_status = sh_eth_read(ndev, EESR); in sh_eth_interrupt()
1743 intr_enable = sh_eth_read(ndev, EESIPR); in sh_eth_interrupt()
1752 sh_eth_write(ndev, 0, EESIPR); in sh_eth_interrupt()
1759 sh_eth_write(ndev, intr_enable & ~EESR_RX_CHECK, in sh_eth_interrupt()
1763 netdev_warn(ndev, in sh_eth_interrupt()
1772 sh_eth_write(ndev, intr_status & cd->tx_check, EESR); in sh_eth_interrupt()
1774 sh_eth_tx_free(ndev, true); in sh_eth_interrupt()
1775 netif_wake_queue(ndev); in sh_eth_interrupt()
1780 sh_eth_emac_interrupt(ndev); in sh_eth_interrupt()
1784 sh_eth_write(ndev, intr_status & cd->eesr_err_check, EESR); in sh_eth_interrupt()
1786 sh_eth_error(ndev, intr_status); in sh_eth_interrupt()
1799 struct net_device *ndev = napi->dev; in sh_eth_poll() local
1804 intr_status = sh_eth_read(ndev, EESR); in sh_eth_poll()
1808 sh_eth_write(ndev, intr_status & EESR_RX_CHECK, EESR); in sh_eth_poll()
1810 if (sh_eth_rx(ndev, intr_status, &quota)) in sh_eth_poll()
1818 sh_eth_write(ndev, mdp->cd->eesipr_value, EESIPR); in sh_eth_poll()
1824 static void sh_eth_adjust_link(struct net_device *ndev) in sh_eth_adjust_link() argument
1826 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_adjust_link()
1827 struct phy_device *phydev = ndev->phydev; in sh_eth_adjust_link()
1835 sh_eth_rcv_snd_disable(ndev); in sh_eth_adjust_link()
1842 mdp->cd->set_duplex(ndev); in sh_eth_adjust_link()
1849 mdp->cd->set_rate(ndev); in sh_eth_adjust_link()
1852 sh_eth_modify(ndev, ECMR, ECMR_TXF, 0); in sh_eth_adjust_link()
1865 sh_eth_rcv_snd_enable(ndev); in sh_eth_adjust_link()
1875 static int sh_eth_phy_init(struct net_device *ndev) in sh_eth_phy_init() argument
1877 struct device_node *np = ndev->dev.parent->of_node; in sh_eth_phy_init()
1878 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_phy_init()
1890 phydev = of_phy_connect(ndev, pn, in sh_eth_phy_init()
1903 phydev = phy_connect(ndev, phy_id, sh_eth_adjust_link, in sh_eth_phy_init()
1908 netdev_err(ndev, "failed to connect PHY\n"); in sh_eth_phy_init()
1918 static int sh_eth_phy_start(struct net_device *ndev) in sh_eth_phy_start() argument
1922 ret = sh_eth_phy_init(ndev); in sh_eth_phy_start()
1926 phy_start(ndev->phydev); in sh_eth_phy_start()
1931 static int sh_eth_get_link_ksettings(struct net_device *ndev, in sh_eth_get_link_ksettings() argument
1934 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_link_ksettings()
1937 if (!ndev->phydev) in sh_eth_get_link_ksettings()
1941 phy_ethtool_ksettings_get(ndev->phydev, cmd); in sh_eth_get_link_ksettings()
1947 static int sh_eth_set_link_ksettings(struct net_device *ndev, in sh_eth_set_link_ksettings() argument
1950 if (!ndev->phydev) in sh_eth_set_link_ksettings()
1953 return phy_ethtool_ksettings_set(ndev->phydev, cmd); in sh_eth_set_link_ksettings()
1964 static size_t __sh_eth_get_regs(struct net_device *ndev, u32 *buf) in __sh_eth_get_regs() argument
1966 struct sh_eth_private *mdp = netdev_priv(ndev); in __sh_eth_get_regs()
1999 #define add_reg(reg) add_reg_from(reg, sh_eth_read(ndev, reg)) in __sh_eth_get_regs()
2125 static int sh_eth_get_regs_len(struct net_device *ndev) in sh_eth_get_regs_len() argument
2127 return __sh_eth_get_regs(ndev, NULL); in sh_eth_get_regs_len()
2130 static void sh_eth_get_regs(struct net_device *ndev, struct ethtool_regs *regs, in sh_eth_get_regs() argument
2133 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_regs()
2138 __sh_eth_get_regs(ndev, buf); in sh_eth_get_regs()
2142 static int sh_eth_nway_reset(struct net_device *ndev) in sh_eth_nway_reset() argument
2144 if (!ndev->phydev) in sh_eth_nway_reset()
2147 return phy_start_aneg(ndev->phydev); in sh_eth_nway_reset()
2150 static u32 sh_eth_get_msglevel(struct net_device *ndev) in sh_eth_get_msglevel() argument
2152 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_msglevel()
2156 static void sh_eth_set_msglevel(struct net_device *ndev, u32 value) in sh_eth_set_msglevel() argument
2158 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_msglevel()
2178 static void sh_eth_get_ethtool_stats(struct net_device *ndev, in sh_eth_get_ethtool_stats() argument
2181 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_ethtool_stats()
2191 static void sh_eth_get_strings(struct net_device *ndev, u32 stringset, u8 *data) in sh_eth_get_strings() argument
2201 static void sh_eth_get_ringparam(struct net_device *ndev, in sh_eth_get_ringparam() argument
2204 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_ringparam()
2212 static int sh_eth_set_ringparam(struct net_device *ndev, in sh_eth_set_ringparam() argument
2215 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_ringparam()
2226 if (netif_running(ndev)) { in sh_eth_set_ringparam()
2227 netif_device_detach(ndev); in sh_eth_set_ringparam()
2228 netif_tx_disable(ndev); in sh_eth_set_ringparam()
2236 synchronize_irq(ndev->irq); in sh_eth_set_ringparam()
2238 sh_eth_write(ndev, 0x0000, EESIPR); in sh_eth_set_ringparam()
2240 sh_eth_dev_exit(ndev); in sh_eth_set_ringparam()
2243 sh_eth_ring_free(ndev); in sh_eth_set_ringparam()
2250 if (netif_running(ndev)) { in sh_eth_set_ringparam()
2251 ret = sh_eth_ring_init(ndev); in sh_eth_set_ringparam()
2253 netdev_err(ndev, "%s: sh_eth_ring_init failed.\n", in sh_eth_set_ringparam()
2257 ret = sh_eth_dev_init(ndev); in sh_eth_set_ringparam()
2259 netdev_err(ndev, "%s: sh_eth_dev_init failed.\n", in sh_eth_set_ringparam()
2264 netif_device_attach(ndev); in sh_eth_set_ringparam()
2270 static void sh_eth_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) in sh_eth_get_wol() argument
2272 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_wol()
2283 static int sh_eth_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) in sh_eth_set_wol() argument
2285 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_wol()
2316 static int sh_eth_open(struct net_device *ndev) in sh_eth_open() argument
2318 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_open()
2325 ret = request_irq(ndev->irq, sh_eth_interrupt, in sh_eth_open()
2326 mdp->cd->irq_flags, ndev->name, ndev); in sh_eth_open()
2328 netdev_err(ndev, "Can not assign IRQ number\n"); in sh_eth_open()
2333 ret = sh_eth_ring_init(ndev); in sh_eth_open()
2338 ret = sh_eth_dev_init(ndev); in sh_eth_open()
2343 ret = sh_eth_phy_start(ndev); in sh_eth_open()
2347 netif_start_queue(ndev); in sh_eth_open()
2354 free_irq(ndev->irq, ndev); in sh_eth_open()
2362 static void sh_eth_tx_timeout(struct net_device *ndev) in sh_eth_tx_timeout() argument
2364 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tx_timeout()
2368 netif_stop_queue(ndev); in sh_eth_tx_timeout()
2370 netif_err(mdp, timer, ndev, in sh_eth_tx_timeout()
2372 sh_eth_read(ndev, EESR)); in sh_eth_tx_timeout()
2375 ndev->stats.tx_errors++; in sh_eth_tx_timeout()
2391 sh_eth_dev_init(ndev); in sh_eth_tx_timeout()
2393 netif_start_queue(ndev); in sh_eth_tx_timeout()
2397 static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev) in sh_eth_start_xmit() argument
2399 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_start_xmit()
2407 if (!sh_eth_tx_free(ndev, true)) { in sh_eth_start_xmit()
2408 netif_warn(mdp, tx_queued, ndev, "TxFD exhausted.\n"); in sh_eth_start_xmit()
2409 netif_stop_queue(ndev); in sh_eth_start_xmit()
2425 dma_addr = dma_map_single(&ndev->dev, skb->data, skb->len, in sh_eth_start_xmit()
2427 if (dma_mapping_error(&ndev->dev, dma_addr)) { in sh_eth_start_xmit()
2442 if (!(sh_eth_read(ndev, EDTRR) & sh_eth_get_edtrr_trns(mdp))) in sh_eth_start_xmit()
2443 sh_eth_write(ndev, sh_eth_get_edtrr_trns(mdp), EDTRR); in sh_eth_start_xmit()
2454 sh_eth_update_stat(struct net_device *ndev, unsigned long *stat, int reg) in sh_eth_update_stat() argument
2456 u32 delta = sh_eth_read(ndev, reg); in sh_eth_update_stat()
2460 sh_eth_write(ndev, 0, reg); in sh_eth_update_stat()
2464 static struct net_device_stats *sh_eth_get_stats(struct net_device *ndev) in sh_eth_get_stats() argument
2466 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_stats()
2469 return &ndev->stats; in sh_eth_get_stats()
2472 return &ndev->stats; in sh_eth_get_stats()
2474 sh_eth_update_stat(ndev, &ndev->stats.tx_dropped, TROCR); in sh_eth_get_stats()
2475 sh_eth_update_stat(ndev, &ndev->stats.collisions, CDCR); in sh_eth_get_stats()
2476 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, LCCR); in sh_eth_get_stats()
2479 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, in sh_eth_get_stats()
2481 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, in sh_eth_get_stats()
2484 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, in sh_eth_get_stats()
2488 return &ndev->stats; in sh_eth_get_stats()
2492 static int sh_eth_close(struct net_device *ndev) in sh_eth_close() argument
2494 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_close()
2496 netif_stop_queue(ndev); in sh_eth_close()
2503 synchronize_irq(ndev->irq); in sh_eth_close()
2505 sh_eth_write(ndev, 0x0000, EESIPR); in sh_eth_close()
2507 sh_eth_dev_exit(ndev); in sh_eth_close()
2510 if (ndev->phydev) { in sh_eth_close()
2511 phy_stop(ndev->phydev); in sh_eth_close()
2512 phy_disconnect(ndev->phydev); in sh_eth_close()
2515 free_irq(ndev->irq, ndev); in sh_eth_close()
2518 sh_eth_ring_free(ndev); in sh_eth_close()
2528 static int sh_eth_do_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd) in sh_eth_do_ioctl() argument
2530 struct phy_device *phydev = ndev->phydev; in sh_eth_do_ioctl()
2532 if (!netif_running(ndev)) in sh_eth_do_ioctl()
2541 static int sh_eth_change_mtu(struct net_device *ndev, int new_mtu) in sh_eth_change_mtu() argument
2543 if (netif_running(ndev)) in sh_eth_change_mtu()
2546 ndev->mtu = new_mtu; in sh_eth_change_mtu()
2547 netdev_update_features(ndev); in sh_eth_change_mtu()
2569 static void sh_eth_tsu_enable_cam_entry_post(struct net_device *ndev, in sh_eth_tsu_enable_cam_entry_post() argument
2572 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_enable_cam_entry_post()
2581 static bool sh_eth_tsu_disable_cam_entry_post(struct net_device *ndev, in sh_eth_tsu_disable_cam_entry_post() argument
2584 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_disable_cam_entry_post()
2599 static int sh_eth_tsu_busy(struct net_device *ndev) in sh_eth_tsu_busy() argument
2602 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_busy()
2608 netdev_err(ndev, "%s: timeout\n", __func__); in sh_eth_tsu_busy()
2616 static int sh_eth_tsu_write_entry(struct net_device *ndev, void *reg, in sh_eth_tsu_write_entry() argument
2623 if (sh_eth_tsu_busy(ndev) < 0) in sh_eth_tsu_write_entry()
2628 if (sh_eth_tsu_busy(ndev) < 0) in sh_eth_tsu_write_entry()
2649 static int sh_eth_tsu_find_entry(struct net_device *ndev, const u8 *addr) in sh_eth_tsu_find_entry() argument
2651 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_find_entry()
2665 static int sh_eth_tsu_find_empty(struct net_device *ndev) in sh_eth_tsu_find_empty() argument
2671 entry = sh_eth_tsu_find_entry(ndev, blank); in sh_eth_tsu_find_empty()
2675 static int sh_eth_tsu_disable_cam_entry_table(struct net_device *ndev, in sh_eth_tsu_disable_cam_entry_table() argument
2678 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_disable_cam_entry_table()
2687 ret = sh_eth_tsu_write_entry(ndev, reg_offset + entry * 8, blank); in sh_eth_tsu_disable_cam_entry_table()
2693 static int sh_eth_tsu_add_entry(struct net_device *ndev, const u8 *addr) in sh_eth_tsu_add_entry() argument
2695 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_add_entry()
2702 i = sh_eth_tsu_find_entry(ndev, addr); in sh_eth_tsu_add_entry()
2705 i = sh_eth_tsu_find_empty(ndev); in sh_eth_tsu_add_entry()
2708 ret = sh_eth_tsu_write_entry(ndev, reg_offset + i * 8, addr); in sh_eth_tsu_add_entry()
2718 sh_eth_tsu_enable_cam_entry_post(ndev, i); in sh_eth_tsu_add_entry()
2723 static int sh_eth_tsu_del_entry(struct net_device *ndev, const u8 *addr) in sh_eth_tsu_del_entry() argument
2725 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_del_entry()
2731 i = sh_eth_tsu_find_entry(ndev, addr); in sh_eth_tsu_del_entry()
2734 if (sh_eth_tsu_disable_cam_entry_post(ndev, i)) in sh_eth_tsu_del_entry()
2738 ret = sh_eth_tsu_disable_cam_entry_table(ndev, i); in sh_eth_tsu_del_entry()
2746 static int sh_eth_tsu_purge_all(struct net_device *ndev) in sh_eth_tsu_purge_all() argument
2748 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_purge_all()
2755 if (sh_eth_tsu_disable_cam_entry_post(ndev, i)) in sh_eth_tsu_purge_all()
2759 ret = sh_eth_tsu_disable_cam_entry_table(ndev, i); in sh_eth_tsu_purge_all()
2767 static void sh_eth_tsu_purge_mcast(struct net_device *ndev) in sh_eth_tsu_purge_mcast() argument
2769 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_purge_mcast()
2780 sh_eth_tsu_del_entry(ndev, addr); in sh_eth_tsu_purge_mcast()
2785 static void sh_eth_set_rx_mode(struct net_device *ndev) in sh_eth_set_rx_mode() argument
2787 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rx_mode()
2796 ecmr_bits = sh_eth_read(ndev, ECMR) & ~ECMR_PRM; in sh_eth_set_rx_mode()
2800 if (!(ndev->flags & IFF_MULTICAST)) { in sh_eth_set_rx_mode()
2801 sh_eth_tsu_purge_mcast(ndev); in sh_eth_set_rx_mode()
2804 if (ndev->flags & IFF_ALLMULTI) { in sh_eth_set_rx_mode()
2805 sh_eth_tsu_purge_mcast(ndev); in sh_eth_set_rx_mode()
2810 if (ndev->flags & IFF_PROMISC) { in sh_eth_set_rx_mode()
2811 sh_eth_tsu_purge_all(ndev); in sh_eth_set_rx_mode()
2815 netdev_for_each_mc_addr(ha, ndev) { in sh_eth_set_rx_mode()
2819 if (sh_eth_tsu_add_entry(ndev, ha->addr) < 0) { in sh_eth_set_rx_mode()
2821 sh_eth_tsu_purge_mcast(ndev); in sh_eth_set_rx_mode()
2830 sh_eth_write(ndev, ecmr_bits, ECMR); in sh_eth_set_rx_mode()
2843 static int sh_eth_vlan_rx_add_vid(struct net_device *ndev, in sh_eth_vlan_rx_add_vid() argument
2846 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_vlan_rx_add_vid()
2873 static int sh_eth_vlan_rx_kill_vid(struct net_device *ndev, in sh_eth_vlan_rx_kill_vid() argument
2876 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_vlan_rx_kill_vid()
3099 struct net_device *ndev; in sh_eth_drv_probe() local
3105 ndev = alloc_etherdev(sizeof(struct sh_eth_private)); in sh_eth_drv_probe()
3106 if (!ndev) in sh_eth_drv_probe()
3119 ndev->irq = ret; in sh_eth_drv_probe()
3121 SET_NETDEV_DEV(ndev, &pdev->dev); in sh_eth_drv_probe()
3123 mdp = netdev_priv(ndev); in sh_eth_drv_probe()
3137 ndev->base_addr = res->start; in sh_eth_drv_probe()
3175 ndev->max_mtu = 2000 - (ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN); in sh_eth_drv_probe()
3176 ndev->min_mtu = ETH_MIN_MTU; in sh_eth_drv_probe()
3180 ndev->netdev_ops = &sh_eth_netdev_ops_tsu; in sh_eth_drv_probe()
3182 ndev->netdev_ops = &sh_eth_netdev_ops; in sh_eth_drv_probe()
3183 ndev->ethtool_ops = &sh_eth_ethtool_ops; in sh_eth_drv_probe()
3184 ndev->watchdog_timeo = TX_TIMEOUT; in sh_eth_drv_probe()
3190 read_mac_address(ndev, pd->mac_addr); in sh_eth_drv_probe()
3191 if (!is_valid_ether_addr(ndev->dev_addr)) { in sh_eth_drv_probe()
3194 eth_hw_addr_random(ndev); in sh_eth_drv_probe()
3226 ndev->features = NETIF_F_HW_VLAN_CTAG_FILTER; in sh_eth_drv_probe()
3232 mdp->cd->chip_reset(ndev); in sh_eth_drv_probe()
3241 sh_eth_write(ndev, 0x1, RMIIMODE); in sh_eth_drv_probe()
3251 netif_napi_add(ndev, &mdp->napi, sh_eth_poll, 64); in sh_eth_drv_probe()
3254 ret = register_netdev(ndev); in sh_eth_drv_probe()
3262 netdev_info(ndev, "Base address at 0x%x, %pM, IRQ %d.\n", in sh_eth_drv_probe()
3263 (u32)ndev->base_addr, ndev->dev_addr, ndev->irq); in sh_eth_drv_probe()
3266 platform_set_drvdata(pdev, ndev); in sh_eth_drv_probe()
3276 if (ndev) in sh_eth_drv_probe()
3277 free_netdev(ndev); in sh_eth_drv_probe()
3286 struct net_device *ndev = platform_get_drvdata(pdev); in sh_eth_drv_remove() local
3287 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_drv_remove()
3289 unregister_netdev(ndev); in sh_eth_drv_remove()
3293 free_netdev(ndev); in sh_eth_drv_remove()
3300 static int sh_eth_wol_setup(struct net_device *ndev) in sh_eth_wol_setup() argument
3302 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_wol_setup()
3305 synchronize_irq(ndev->irq); in sh_eth_wol_setup()
3307 sh_eth_write(ndev, EESIPR_ECIIP, EESIPR); in sh_eth_wol_setup()
3310 sh_eth_modify(ndev, ECMR, ECMR_MPDE, ECMR_MPDE); in sh_eth_wol_setup()
3315 return enable_irq_wake(ndev->irq); in sh_eth_wol_setup()
3318 static int sh_eth_wol_restore(struct net_device *ndev) in sh_eth_wol_restore() argument
3320 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_wol_restore()
3326 sh_eth_modify(ndev, ECMR, ECMR_MPDE, 0); in sh_eth_wol_restore()
3333 ret = sh_eth_close(ndev); in sh_eth_wol_restore()
3336 ret = sh_eth_open(ndev); in sh_eth_wol_restore()
3343 return disable_irq_wake(ndev->irq); in sh_eth_wol_restore()
3348 struct net_device *ndev = dev_get_drvdata(dev); in sh_eth_suspend() local
3349 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_suspend()
3352 if (!netif_running(ndev)) in sh_eth_suspend()
3355 netif_device_detach(ndev); in sh_eth_suspend()
3358 ret = sh_eth_wol_setup(ndev); in sh_eth_suspend()
3360 ret = sh_eth_close(ndev); in sh_eth_suspend()
3367 struct net_device *ndev = dev_get_drvdata(dev); in sh_eth_resume() local
3368 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_resume()
3371 if (!netif_running(ndev)) in sh_eth_resume()
3375 ret = sh_eth_wol_restore(ndev); in sh_eth_resume()
3377 ret = sh_eth_open(ndev); in sh_eth_resume()
3382 netif_device_attach(ndev); in sh_eth_resume()