Lines Matching refs:ndev
406 static void sh_eth_rcv_snd_disable(struct net_device *ndev);
407 static struct net_device_stats *sh_eth_get_stats(struct net_device *ndev);
409 static void sh_eth_write(struct net_device *ndev, u32 data, int enum_index) in sh_eth_write() argument
411 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_write()
420 static u32 sh_eth_read(struct net_device *ndev, int enum_index) in sh_eth_read() argument
422 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_read()
441 static void sh_eth_select_mii(struct net_device *ndev) in sh_eth_select_mii() argument
444 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_select_mii()
457 netdev_warn(ndev, in sh_eth_select_mii()
463 sh_eth_write(ndev, value, RMII_MII); in sh_eth_select_mii()
466 static void sh_eth_set_duplex(struct net_device *ndev) in sh_eth_set_duplex() argument
468 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_duplex()
471 sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_DM, ECMR); in sh_eth_set_duplex()
473 sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_DM, ECMR); in sh_eth_set_duplex()
477 static void sh_eth_set_rate_r8a777x(struct net_device *ndev) in sh_eth_set_rate_r8a777x() argument
479 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_r8a777x()
483 sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_ELB, ECMR); in sh_eth_set_rate_r8a777x()
486 sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_ELB, ECMR); in sh_eth_set_rate_r8a777x()
542 static void sh_eth_set_rate_sh7724(struct net_device *ndev) in sh_eth_set_rate_sh7724() argument
544 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_sh7724()
548 sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_RTM, ECMR); in sh_eth_set_rate_sh7724()
551 sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_RTM, ECMR); in sh_eth_set_rate_sh7724()
582 static void sh_eth_set_rate_sh7757(struct net_device *ndev) in sh_eth_set_rate_sh7757() argument
584 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_sh7757()
588 sh_eth_write(ndev, 0, RTRATE); in sh_eth_set_rate_sh7757()
591 sh_eth_write(ndev, 1, RTRATE); in sh_eth_set_rate_sh7757()
626 static void sh_eth_chip_reset_giga(struct net_device *ndev) in sh_eth_chip_reset_giga() argument
648 static void sh_eth_set_rate_giga(struct net_device *ndev) in sh_eth_set_rate_giga() argument
650 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_giga()
654 sh_eth_write(ndev, 0x00000000, GECMR); in sh_eth_set_rate_giga()
657 sh_eth_write(ndev, 0x00000010, GECMR); in sh_eth_set_rate_giga()
660 sh_eth_write(ndev, 0x00000020, GECMR); in sh_eth_set_rate_giga()
698 static void sh_eth_chip_reset(struct net_device *ndev) in sh_eth_chip_reset() argument
700 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_chip_reset()
707 static void sh_eth_set_rate_gether(struct net_device *ndev) in sh_eth_set_rate_gether() argument
709 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rate_gether()
713 sh_eth_write(ndev, GECMR_10, GECMR); in sh_eth_set_rate_gether()
716 sh_eth_write(ndev, GECMR_100, GECMR); in sh_eth_set_rate_gether()
719 sh_eth_write(ndev, GECMR_1000, GECMR); in sh_eth_set_rate_gether()
783 static void sh_eth_chip_reset_r8a7740(struct net_device *ndev) in sh_eth_chip_reset_r8a7740() argument
785 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_chip_reset_r8a7740()
791 sh_eth_select_mii(ndev); in sh_eth_chip_reset_r8a7740()
900 static int sh_eth_check_reset(struct net_device *ndev) in sh_eth_check_reset() argument
906 if (!(sh_eth_read(ndev, EDMR) & 0x3)) in sh_eth_check_reset()
912 netdev_err(ndev, "Device reset failed\n"); in sh_eth_check_reset()
918 static int sh_eth_reset(struct net_device *ndev) in sh_eth_reset() argument
920 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_reset()
924 sh_eth_write(ndev, EDSR_ENALL, EDSR); in sh_eth_reset()
925 sh_eth_write(ndev, sh_eth_read(ndev, EDMR) | EDMR_SRST_GETHER, in sh_eth_reset()
928 ret = sh_eth_check_reset(ndev); in sh_eth_reset()
933 sh_eth_write(ndev, 0x0, TDLAR); in sh_eth_reset()
934 sh_eth_write(ndev, 0x0, TDFAR); in sh_eth_reset()
935 sh_eth_write(ndev, 0x0, TDFXR); in sh_eth_reset()
936 sh_eth_write(ndev, 0x0, TDFFR); in sh_eth_reset()
937 sh_eth_write(ndev, 0x0, RDLAR); in sh_eth_reset()
938 sh_eth_write(ndev, 0x0, RDFAR); in sh_eth_reset()
939 sh_eth_write(ndev, 0x0, RDFXR); in sh_eth_reset()
940 sh_eth_write(ndev, 0x0, RDFFR); in sh_eth_reset()
944 sh_eth_write(ndev, 0x0, CSMR); in sh_eth_reset()
948 sh_eth_select_mii(ndev); in sh_eth_reset()
950 sh_eth_write(ndev, sh_eth_read(ndev, EDMR) | EDMR_SRST_ETHER, in sh_eth_reset()
953 sh_eth_write(ndev, sh_eth_read(ndev, EDMR) & ~EDMR_SRST_ETHER, in sh_eth_reset()
993 static void update_mac_address(struct net_device *ndev) in update_mac_address() argument
995 sh_eth_write(ndev, in update_mac_address()
996 (ndev->dev_addr[0] << 24) | (ndev->dev_addr[1] << 16) | in update_mac_address()
997 (ndev->dev_addr[2] << 8) | (ndev->dev_addr[3]), MAHR); in update_mac_address()
998 sh_eth_write(ndev, in update_mac_address()
999 (ndev->dev_addr[4] << 8) | (ndev->dev_addr[5]), MALR); in update_mac_address()
1009 static void read_mac_address(struct net_device *ndev, unsigned char *mac) in read_mac_address() argument
1012 memcpy(ndev->dev_addr, mac, ETH_ALEN); in read_mac_address()
1014 ndev->dev_addr[0] = (sh_eth_read(ndev, MAHR) >> 24); in read_mac_address()
1015 ndev->dev_addr[1] = (sh_eth_read(ndev, MAHR) >> 16) & 0xFF; in read_mac_address()
1016 ndev->dev_addr[2] = (sh_eth_read(ndev, MAHR) >> 8) & 0xFF; in read_mac_address()
1017 ndev->dev_addr[3] = (sh_eth_read(ndev, MAHR) & 0xFF); in read_mac_address()
1018 ndev->dev_addr[4] = (sh_eth_read(ndev, MALR) >> 8) & 0xFF; in read_mac_address()
1019 ndev->dev_addr[5] = (sh_eth_read(ndev, MALR) & 0xFF); in read_mac_address()
1122 static void sh_eth_ring_free(struct net_device *ndev) in sh_eth_ring_free() argument
1124 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_ring_free()
1159 static void sh_eth_ring_format(struct net_device *ndev) in sh_eth_ring_format() argument
1161 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_ring_format()
1183 skb = netdev_alloc_skb(ndev, skbuff_size); in sh_eth_ring_format()
1190 dma_addr = dma_map_single(&ndev->dev, skb->data, buf_len, in sh_eth_ring_format()
1192 if (dma_mapping_error(&ndev->dev, dma_addr)) { in sh_eth_ring_format()
1206 sh_eth_write(ndev, mdp->rx_desc_dma, RDLAR); in sh_eth_ring_format()
1209 sh_eth_write(ndev, mdp->rx_desc_dma, RDFAR); in sh_eth_ring_format()
1229 sh_eth_write(ndev, mdp->tx_desc_dma, TDLAR); in sh_eth_ring_format()
1232 sh_eth_write(ndev, mdp->tx_desc_dma, TDFAR); in sh_eth_ring_format()
1240 static int sh_eth_ring_init(struct net_device *ndev) in sh_eth_ring_init() argument
1242 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_ring_init()
1250 mdp->rx_buf_sz = (ndev->mtu <= 1492 ? PKT_BUF_SZ : in sh_eth_ring_init()
1251 (((ndev->mtu + 26 + 7) & ~7) + 2 + 16)); in sh_eth_ring_init()
1285 sh_eth_ring_free(ndev); in sh_eth_ring_init()
1290 static int sh_eth_dev_init(struct net_device *ndev, bool start) in sh_eth_dev_init() argument
1293 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_dev_init()
1297 ret = sh_eth_reset(ndev); in sh_eth_dev_init()
1302 sh_eth_write(ndev, 0x1, RMIIMODE); in sh_eth_dev_init()
1305 sh_eth_ring_format(ndev); in sh_eth_dev_init()
1307 sh_eth_write(ndev, mdp->cd->rpadir_value, RPADIR); in sh_eth_dev_init()
1310 sh_eth_write(ndev, 0, EESIPR); in sh_eth_dev_init()
1314 sh_eth_write(ndev, EDMR_EL, EDMR); in sh_eth_dev_init()
1317 sh_eth_write(ndev, 0, EDMR); in sh_eth_dev_init()
1320 sh_eth_write(ndev, mdp->cd->fdr_value, FDR); in sh_eth_dev_init()
1321 sh_eth_write(ndev, 0, TFTR); in sh_eth_dev_init()
1324 sh_eth_write(ndev, RMCR_RNC, RMCR); in sh_eth_dev_init()
1326 sh_eth_write(ndev, mdp->cd->trscer_err_mask, TRSCER); in sh_eth_dev_init()
1329 sh_eth_write(ndev, 0x800, BCULR); /* Burst sycle set */ in sh_eth_dev_init()
1331 sh_eth_write(ndev, mdp->cd->fcftr_value, FCFTR); in sh_eth_dev_init()
1334 sh_eth_write(ndev, 0, TRIMD); in sh_eth_dev_init()
1337 sh_eth_write(ndev, ndev->mtu + ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN, in sh_eth_dev_init()
1340 sh_eth_write(ndev, sh_eth_read(ndev, EESR), EESR); in sh_eth_dev_init()
1343 sh_eth_write(ndev, mdp->cd->eesipr_value, EESIPR); in sh_eth_dev_init()
1347 val = (sh_eth_read(ndev, ECMR) & ECMR_DM) | in sh_eth_dev_init()
1350 sh_eth_write(ndev, val, ECMR); in sh_eth_dev_init()
1353 mdp->cd->set_rate(ndev); in sh_eth_dev_init()
1356 sh_eth_write(ndev, mdp->cd->ecsr_value, ECSR); in sh_eth_dev_init()
1360 sh_eth_write(ndev, mdp->cd->ecsipr_value, ECSIPR); in sh_eth_dev_init()
1363 update_mac_address(ndev); in sh_eth_dev_init()
1367 sh_eth_write(ndev, APR_AP, APR); in sh_eth_dev_init()
1369 sh_eth_write(ndev, MPR_MP, MPR); in sh_eth_dev_init()
1371 sh_eth_write(ndev, TPAUSER_UNLIMITED, TPAUSER); in sh_eth_dev_init()
1375 sh_eth_write(ndev, EDRRR_R, EDRRR); in sh_eth_dev_init()
1377 netif_start_queue(ndev); in sh_eth_dev_init()
1383 static void sh_eth_dev_exit(struct net_device *ndev) in sh_eth_dev_exit() argument
1385 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_dev_exit()
1395 sh_eth_rcv_snd_disable(ndev); in sh_eth_dev_exit()
1398 sh_eth_write(ndev, 0, EDRRR); in sh_eth_dev_exit()
1406 sh_eth_get_stats(ndev); in sh_eth_dev_exit()
1407 sh_eth_reset(ndev); in sh_eth_dev_exit()
1410 update_mac_address(ndev); in sh_eth_dev_exit()
1414 static int sh_eth_txfree(struct net_device *ndev) in sh_eth_txfree() argument
1416 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_txfree()
1428 netif_info(mdp, tx_done, ndev, in sh_eth_txfree()
1433 dma_unmap_single(&ndev->dev, in sh_eth_txfree()
1445 ndev->stats.tx_packets++; in sh_eth_txfree()
1446 ndev->stats.tx_bytes += edmac_to_cpu(mdp, txdesc->len) >> 16; in sh_eth_txfree()
1452 static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) in sh_eth_rx() argument
1454 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_rx()
1479 netif_info(mdp, rx_status, ndev, in sh_eth_rx()
1484 ndev->stats.rx_length_errors++; in sh_eth_rx()
1498 ndev->stats.rx_errors++; in sh_eth_rx()
1500 ndev->stats.rx_crc_errors++; in sh_eth_rx()
1502 ndev->stats.rx_frame_errors++; in sh_eth_rx()
1504 ndev->stats.rx_length_errors++; in sh_eth_rx()
1506 ndev->stats.rx_length_errors++; in sh_eth_rx()
1508 ndev->stats.rx_missed_errors++; in sh_eth_rx()
1510 ndev->stats.rx_over_errors++; in sh_eth_rx()
1520 dma_unmap_single(&ndev->dev, dma_addr, in sh_eth_rx()
1524 skb->protocol = eth_type_trans(skb, ndev); in sh_eth_rx()
1526 ndev->stats.rx_packets++; in sh_eth_rx()
1527 ndev->stats.rx_bytes += pkt_len; in sh_eth_rx()
1529 ndev->stats.multicast++; in sh_eth_rx()
1544 skb = netdev_alloc_skb(ndev, skbuff_size); in sh_eth_rx()
1548 dma_addr = dma_map_single(&ndev->dev, skb->data, in sh_eth_rx()
1550 if (dma_mapping_error(&ndev->dev, dma_addr)) { in sh_eth_rx()
1570 if (!(sh_eth_read(ndev, EDRRR) & EDRRR_R)) { in sh_eth_rx()
1574 u32 count = (sh_eth_read(ndev, RDFAR) - in sh_eth_rx()
1575 sh_eth_read(ndev, RDLAR)) >> 4; in sh_eth_rx()
1580 sh_eth_write(ndev, EDRRR_R, EDRRR); in sh_eth_rx()
1588 static void sh_eth_rcv_snd_disable(struct net_device *ndev) in sh_eth_rcv_snd_disable() argument
1591 sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & in sh_eth_rcv_snd_disable()
1595 static void sh_eth_rcv_snd_enable(struct net_device *ndev) in sh_eth_rcv_snd_enable() argument
1598 sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | in sh_eth_rcv_snd_enable()
1603 static void sh_eth_error(struct net_device *ndev, u32 intr_status) in sh_eth_error() argument
1605 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_error()
1611 felic_stat = sh_eth_read(ndev, ECSR); in sh_eth_error()
1612 sh_eth_write(ndev, felic_stat, ECSR); /* clear int */ in sh_eth_error()
1614 ndev->stats.tx_carrier_errors++; in sh_eth_error()
1620 link_stat = (sh_eth_read(ndev, PSR)); in sh_eth_error()
1625 sh_eth_rcv_snd_disable(ndev); in sh_eth_error()
1628 sh_eth_write(ndev, sh_eth_read(ndev, EESIPR) & in sh_eth_error()
1631 sh_eth_write(ndev, sh_eth_read(ndev, ECSR), in sh_eth_error()
1633 sh_eth_write(ndev, sh_eth_read(ndev, EESIPR) | in sh_eth_error()
1636 sh_eth_rcv_snd_enable(ndev); in sh_eth_error()
1645 ndev->stats.tx_aborted_errors++; in sh_eth_error()
1646 netif_err(mdp, tx_err, ndev, "Transmit Abort\n"); in sh_eth_error()
1654 ndev->stats.rx_frame_errors++; in sh_eth_error()
1660 ndev->stats.tx_fifo_errors++; in sh_eth_error()
1661 netif_err(mdp, tx_err, ndev, "Transmit Descriptor Empty\n"); in sh_eth_error()
1666 ndev->stats.tx_fifo_errors++; in sh_eth_error()
1667 netif_err(mdp, tx_err, ndev, "Transmit FIFO Under flow\n"); in sh_eth_error()
1672 ndev->stats.rx_over_errors++; in sh_eth_error()
1677 ndev->stats.rx_fifo_errors++; in sh_eth_error()
1682 ndev->stats.tx_fifo_errors++; in sh_eth_error()
1683 netif_err(mdp, tx_err, ndev, "Address Error\n"); in sh_eth_error()
1691 u32 edtrr = sh_eth_read(ndev, EDTRR); in sh_eth_error()
1694 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()
1696 (u32)ndev->state, edtrr); in sh_eth_error()
1698 sh_eth_txfree(ndev); in sh_eth_error()
1703 sh_eth_write(ndev, sh_eth_get_edtrr_trns(mdp), EDTRR); in sh_eth_error()
1706 netif_wake_queue(ndev); in sh_eth_error()
1712 struct net_device *ndev = netdev; in sh_eth_interrupt() local
1713 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_interrupt()
1721 intr_status = sh_eth_read(ndev, EESR); in sh_eth_interrupt()
1727 intr_enable = sh_eth_read(ndev, EESIPR); in sh_eth_interrupt()
1735 sh_eth_write(ndev, 0, EESIPR); in sh_eth_interrupt()
1742 sh_eth_write(ndev, intr_enable & ~EESR_RX_CHECK, in sh_eth_interrupt()
1746 netdev_warn(ndev, in sh_eth_interrupt()
1755 sh_eth_write(ndev, intr_status & cd->tx_check, EESR); in sh_eth_interrupt()
1757 sh_eth_txfree(ndev); in sh_eth_interrupt()
1758 netif_wake_queue(ndev); in sh_eth_interrupt()
1763 sh_eth_write(ndev, intr_status & cd->eesr_err_check, EESR); in sh_eth_interrupt()
1765 sh_eth_error(ndev, intr_status); in sh_eth_interrupt()
1778 struct net_device *ndev = napi->dev; in sh_eth_poll() local
1783 intr_status = sh_eth_read(ndev, EESR); in sh_eth_poll()
1787 sh_eth_write(ndev, intr_status & EESR_RX_CHECK, EESR); in sh_eth_poll()
1789 if (sh_eth_rx(ndev, intr_status, "a)) in sh_eth_poll()
1797 sh_eth_write(ndev, mdp->cd->eesipr_value, EESIPR); in sh_eth_poll()
1803 static void sh_eth_adjust_link(struct net_device *ndev) in sh_eth_adjust_link() argument
1805 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_adjust_link()
1814 mdp->cd->set_duplex(ndev); in sh_eth_adjust_link()
1821 mdp->cd->set_rate(ndev); in sh_eth_adjust_link()
1824 sh_eth_write(ndev, in sh_eth_adjust_link()
1825 sh_eth_read(ndev, ECMR) & ~ECMR_TXF, in sh_eth_adjust_link()
1830 sh_eth_rcv_snd_enable(ndev); in sh_eth_adjust_link()
1838 sh_eth_rcv_snd_disable(ndev); in sh_eth_adjust_link()
1846 static int sh_eth_phy_init(struct net_device *ndev) in sh_eth_phy_init() argument
1848 struct device_node *np = ndev->dev.parent->of_node; in sh_eth_phy_init()
1849 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_phy_init()
1861 phydev = of_phy_connect(ndev, pn, in sh_eth_phy_init()
1873 phydev = phy_connect(ndev, phy_id, sh_eth_adjust_link, in sh_eth_phy_init()
1878 netdev_err(ndev, "failed to connect PHY\n"); in sh_eth_phy_init()
1882 netdev_info(ndev, "attached PHY %d (IRQ %d) to driver %s\n", in sh_eth_phy_init()
1891 static int sh_eth_phy_start(struct net_device *ndev) in sh_eth_phy_start() argument
1893 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_phy_start()
1896 ret = sh_eth_phy_init(ndev); in sh_eth_phy_start()
1905 static int sh_eth_get_settings(struct net_device *ndev, in sh_eth_get_settings() argument
1908 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_settings()
1922 static int sh_eth_set_settings(struct net_device *ndev, in sh_eth_set_settings() argument
1925 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_settings()
1935 sh_eth_rcv_snd_disable(ndev); in sh_eth_set_settings()
1947 mdp->cd->set_duplex(ndev); in sh_eth_set_settings()
1953 sh_eth_rcv_snd_enable(ndev); in sh_eth_set_settings()
1968 static size_t __sh_eth_get_regs(struct net_device *ndev, u32 *buf) in __sh_eth_get_regs() argument
1970 struct sh_eth_private *mdp = netdev_priv(ndev); in __sh_eth_get_regs()
2003 #define add_reg(reg) add_reg_from(reg, sh_eth_read(ndev, reg)) in __sh_eth_get_regs()
2129 static int sh_eth_get_regs_len(struct net_device *ndev) in sh_eth_get_regs_len() argument
2131 return __sh_eth_get_regs(ndev, NULL); in sh_eth_get_regs_len()
2134 static void sh_eth_get_regs(struct net_device *ndev, struct ethtool_regs *regs, in sh_eth_get_regs() argument
2137 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_regs()
2142 __sh_eth_get_regs(ndev, buf); in sh_eth_get_regs()
2146 static int sh_eth_nway_reset(struct net_device *ndev) in sh_eth_nway_reset() argument
2148 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_nway_reset()
2162 static u32 sh_eth_get_msglevel(struct net_device *ndev) in sh_eth_get_msglevel() argument
2164 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_msglevel()
2168 static void sh_eth_set_msglevel(struct net_device *ndev, u32 value) in sh_eth_set_msglevel() argument
2170 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_msglevel()
2190 static void sh_eth_get_ethtool_stats(struct net_device *ndev, in sh_eth_get_ethtool_stats() argument
2193 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_ethtool_stats()
2203 static void sh_eth_get_strings(struct net_device *ndev, u32 stringset, u8 *data) in sh_eth_get_strings() argument
2213 static void sh_eth_get_ringparam(struct net_device *ndev, in sh_eth_get_ringparam() argument
2216 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_ringparam()
2224 static int sh_eth_set_ringparam(struct net_device *ndev, in sh_eth_set_ringparam() argument
2227 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_ringparam()
2238 if (netif_running(ndev)) { in sh_eth_set_ringparam()
2239 netif_device_detach(ndev); in sh_eth_set_ringparam()
2240 netif_tx_disable(ndev); in sh_eth_set_ringparam()
2248 synchronize_irq(ndev->irq); in sh_eth_set_ringparam()
2250 sh_eth_write(ndev, 0x0000, EESIPR); in sh_eth_set_ringparam()
2252 sh_eth_dev_exit(ndev); in sh_eth_set_ringparam()
2255 sh_eth_ring_free(ndev); in sh_eth_set_ringparam()
2262 if (netif_running(ndev)) { in sh_eth_set_ringparam()
2263 ret = sh_eth_ring_init(ndev); in sh_eth_set_ringparam()
2265 netdev_err(ndev, "%s: sh_eth_ring_init failed.\n", in sh_eth_set_ringparam()
2269 ret = sh_eth_dev_init(ndev, false); in sh_eth_set_ringparam()
2271 netdev_err(ndev, "%s: sh_eth_dev_init failed.\n", in sh_eth_set_ringparam()
2277 sh_eth_write(ndev, mdp->cd->eesipr_value, EESIPR); in sh_eth_set_ringparam()
2279 sh_eth_write(ndev, EDRRR_R, EDRRR); in sh_eth_set_ringparam()
2280 netif_device_attach(ndev); in sh_eth_set_ringparam()
2303 static int sh_eth_open(struct net_device *ndev) in sh_eth_open() argument
2306 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_open()
2312 ret = request_irq(ndev->irq, sh_eth_interrupt, in sh_eth_open()
2313 mdp->cd->irq_flags, ndev->name, ndev); in sh_eth_open()
2315 netdev_err(ndev, "Can not assign IRQ number\n"); in sh_eth_open()
2320 ret = sh_eth_ring_init(ndev); in sh_eth_open()
2325 ret = sh_eth_dev_init(ndev, true); in sh_eth_open()
2330 ret = sh_eth_phy_start(ndev); in sh_eth_open()
2339 free_irq(ndev->irq, ndev); in sh_eth_open()
2347 static void sh_eth_tx_timeout(struct net_device *ndev) in sh_eth_tx_timeout() argument
2349 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tx_timeout()
2353 netif_stop_queue(ndev); in sh_eth_tx_timeout()
2355 netif_err(mdp, timer, ndev, in sh_eth_tx_timeout()
2357 sh_eth_read(ndev, EESR)); in sh_eth_tx_timeout()
2360 ndev->stats.tx_errors++; in sh_eth_tx_timeout()
2376 sh_eth_dev_init(ndev, true); in sh_eth_tx_timeout()
2380 static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev) in sh_eth_start_xmit() argument
2382 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_start_xmit()
2390 if (!sh_eth_txfree(ndev)) { in sh_eth_start_xmit()
2391 netif_warn(mdp, tx_queued, ndev, "TxFD exhausted.\n"); in sh_eth_start_xmit()
2392 netif_stop_queue(ndev); in sh_eth_start_xmit()
2408 dma_addr = dma_map_single(&ndev->dev, skb->data, skb->len, in sh_eth_start_xmit()
2410 if (dma_mapping_error(&ndev->dev, dma_addr)) { in sh_eth_start_xmit()
2425 if (!(sh_eth_read(ndev, EDTRR) & sh_eth_get_edtrr_trns(mdp))) in sh_eth_start_xmit()
2426 sh_eth_write(ndev, sh_eth_get_edtrr_trns(mdp), EDTRR); in sh_eth_start_xmit()
2437 sh_eth_update_stat(struct net_device *ndev, unsigned long *stat, int reg) in sh_eth_update_stat() argument
2439 u32 delta = sh_eth_read(ndev, reg); in sh_eth_update_stat()
2443 sh_eth_write(ndev, 0, reg); in sh_eth_update_stat()
2447 static struct net_device_stats *sh_eth_get_stats(struct net_device *ndev) in sh_eth_get_stats() argument
2449 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_get_stats()
2452 return &ndev->stats; in sh_eth_get_stats()
2455 return &ndev->stats; in sh_eth_get_stats()
2457 sh_eth_update_stat(ndev, &ndev->stats.tx_dropped, TROCR); in sh_eth_get_stats()
2458 sh_eth_update_stat(ndev, &ndev->stats.collisions, CDCR); in sh_eth_get_stats()
2459 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, LCCR); in sh_eth_get_stats()
2462 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, in sh_eth_get_stats()
2464 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, in sh_eth_get_stats()
2467 sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, in sh_eth_get_stats()
2471 return &ndev->stats; in sh_eth_get_stats()
2475 static int sh_eth_close(struct net_device *ndev) in sh_eth_close() argument
2477 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_close()
2479 netif_stop_queue(ndev); in sh_eth_close()
2486 synchronize_irq(ndev->irq); in sh_eth_close()
2488 sh_eth_write(ndev, 0x0000, EESIPR); in sh_eth_close()
2490 sh_eth_dev_exit(ndev); in sh_eth_close()
2499 free_irq(ndev->irq, ndev); in sh_eth_close()
2502 sh_eth_ring_free(ndev); in sh_eth_close()
2512 static int sh_eth_do_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd) in sh_eth_do_ioctl() argument
2514 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_do_ioctl()
2517 if (!netif_running(ndev)) in sh_eth_do_ioctl()
2543 static void sh_eth_tsu_enable_cam_entry_post(struct net_device *ndev, in sh_eth_tsu_enable_cam_entry_post() argument
2546 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_enable_cam_entry_post()
2555 static bool sh_eth_tsu_disable_cam_entry_post(struct net_device *ndev, in sh_eth_tsu_disable_cam_entry_post() argument
2558 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_disable_cam_entry_post()
2573 static int sh_eth_tsu_busy(struct net_device *ndev) in sh_eth_tsu_busy() argument
2576 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_busy()
2582 netdev_err(ndev, "%s: timeout\n", __func__); in sh_eth_tsu_busy()
2590 static int sh_eth_tsu_write_entry(struct net_device *ndev, void *reg, in sh_eth_tsu_write_entry() argument
2597 if (sh_eth_tsu_busy(ndev) < 0) in sh_eth_tsu_write_entry()
2602 if (sh_eth_tsu_busy(ndev) < 0) in sh_eth_tsu_write_entry()
2623 static int sh_eth_tsu_find_entry(struct net_device *ndev, const u8 *addr) in sh_eth_tsu_find_entry() argument
2625 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_find_entry()
2639 static int sh_eth_tsu_find_empty(struct net_device *ndev) in sh_eth_tsu_find_empty() argument
2645 entry = sh_eth_tsu_find_entry(ndev, blank); in sh_eth_tsu_find_empty()
2649 static int sh_eth_tsu_disable_cam_entry_table(struct net_device *ndev, in sh_eth_tsu_disable_cam_entry_table() argument
2652 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_disable_cam_entry_table()
2661 ret = sh_eth_tsu_write_entry(ndev, reg_offset + entry * 8, blank); in sh_eth_tsu_disable_cam_entry_table()
2667 static int sh_eth_tsu_add_entry(struct net_device *ndev, const u8 *addr) in sh_eth_tsu_add_entry() argument
2669 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_add_entry()
2676 i = sh_eth_tsu_find_entry(ndev, addr); in sh_eth_tsu_add_entry()
2679 i = sh_eth_tsu_find_empty(ndev); in sh_eth_tsu_add_entry()
2682 ret = sh_eth_tsu_write_entry(ndev, reg_offset + i * 8, addr); in sh_eth_tsu_add_entry()
2692 sh_eth_tsu_enable_cam_entry_post(ndev, i); in sh_eth_tsu_add_entry()
2697 static int sh_eth_tsu_del_entry(struct net_device *ndev, const u8 *addr) in sh_eth_tsu_del_entry() argument
2699 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_del_entry()
2705 i = sh_eth_tsu_find_entry(ndev, addr); in sh_eth_tsu_del_entry()
2708 if (sh_eth_tsu_disable_cam_entry_post(ndev, i)) in sh_eth_tsu_del_entry()
2712 ret = sh_eth_tsu_disable_cam_entry_table(ndev, i); in sh_eth_tsu_del_entry()
2720 static int sh_eth_tsu_purge_all(struct net_device *ndev) in sh_eth_tsu_purge_all() argument
2722 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_purge_all()
2729 if (sh_eth_tsu_disable_cam_entry_post(ndev, i)) in sh_eth_tsu_purge_all()
2733 ret = sh_eth_tsu_disable_cam_entry_table(ndev, i); in sh_eth_tsu_purge_all()
2741 static void sh_eth_tsu_purge_mcast(struct net_device *ndev) in sh_eth_tsu_purge_mcast() argument
2743 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_tsu_purge_mcast()
2754 sh_eth_tsu_del_entry(ndev, addr); in sh_eth_tsu_purge_mcast()
2759 static void sh_eth_set_rx_mode(struct net_device *ndev) in sh_eth_set_rx_mode() argument
2761 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_set_rx_mode()
2770 ecmr_bits = sh_eth_read(ndev, ECMR) & ~ECMR_PRM; in sh_eth_set_rx_mode()
2774 if (!(ndev->flags & IFF_MULTICAST)) { in sh_eth_set_rx_mode()
2775 sh_eth_tsu_purge_mcast(ndev); in sh_eth_set_rx_mode()
2778 if (ndev->flags & IFF_ALLMULTI) { in sh_eth_set_rx_mode()
2779 sh_eth_tsu_purge_mcast(ndev); in sh_eth_set_rx_mode()
2784 if (ndev->flags & IFF_PROMISC) { in sh_eth_set_rx_mode()
2785 sh_eth_tsu_purge_all(ndev); in sh_eth_set_rx_mode()
2789 netdev_for_each_mc_addr(ha, ndev) { in sh_eth_set_rx_mode()
2793 if (sh_eth_tsu_add_entry(ndev, ha->addr) < 0) { in sh_eth_set_rx_mode()
2795 sh_eth_tsu_purge_mcast(ndev); in sh_eth_set_rx_mode()
2804 sh_eth_write(ndev, ecmr_bits, ECMR); in sh_eth_set_rx_mode()
2817 static int sh_eth_vlan_rx_add_vid(struct net_device *ndev, in sh_eth_vlan_rx_add_vid() argument
2820 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_vlan_rx_add_vid()
2847 static int sh_eth_vlan_rx_kill_vid(struct net_device *ndev, in sh_eth_vlan_rx_kill_vid() argument
2850 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_vlan_rx_kill_vid()
3079 struct net_device *ndev = NULL; in sh_eth_drv_probe() local
3087 ndev = alloc_etherdev(sizeof(struct sh_eth_private)); in sh_eth_drv_probe()
3088 if (!ndev) in sh_eth_drv_probe()
3098 ndev->dma = -1; in sh_eth_drv_probe()
3102 ndev->irq = ret; in sh_eth_drv_probe()
3104 SET_NETDEV_DEV(ndev, &pdev->dev); in sh_eth_drv_probe()
3106 mdp = netdev_priv(ndev); in sh_eth_drv_probe()
3115 ndev->base_addr = res->start; in sh_eth_drv_probe()
3157 ndev->netdev_ops = &sh_eth_netdev_ops_tsu; in sh_eth_drv_probe()
3159 ndev->netdev_ops = &sh_eth_netdev_ops; in sh_eth_drv_probe()
3160 ndev->ethtool_ops = &sh_eth_ethtool_ops; in sh_eth_drv_probe()
3161 ndev->watchdog_timeo = TX_TIMEOUT; in sh_eth_drv_probe()
3167 read_mac_address(ndev, pd->mac_addr); in sh_eth_drv_probe()
3168 if (!is_valid_ether_addr(ndev->dev_addr)) { in sh_eth_drv_probe()
3171 eth_hw_addr_random(ndev); in sh_eth_drv_probe()
3184 ndev->features = NETIF_F_HW_VLAN_CTAG_FILTER; in sh_eth_drv_probe()
3190 mdp->cd->chip_reset(ndev); in sh_eth_drv_probe()
3199 sh_eth_write(ndev, 0x1, RMIIMODE); in sh_eth_drv_probe()
3204 dev_err(&ndev->dev, "failed to initialise MDIO\n"); in sh_eth_drv_probe()
3208 netif_napi_add(ndev, &mdp->napi, sh_eth_poll, 64); in sh_eth_drv_probe()
3211 ret = register_netdev(ndev); in sh_eth_drv_probe()
3216 netdev_info(ndev, "Base address at 0x%x, %pM, IRQ %d.\n", in sh_eth_drv_probe()
3217 (u32)ndev->base_addr, ndev->dev_addr, ndev->irq); in sh_eth_drv_probe()
3220 platform_set_drvdata(pdev, ndev); in sh_eth_drv_probe()
3230 if (ndev) in sh_eth_drv_probe()
3231 free_netdev(ndev); in sh_eth_drv_probe()
3240 struct net_device *ndev = platform_get_drvdata(pdev); in sh_eth_drv_remove() local
3241 struct sh_eth_private *mdp = netdev_priv(ndev); in sh_eth_drv_remove()
3243 unregister_netdev(ndev); in sh_eth_drv_remove()
3247 free_netdev(ndev); in sh_eth_drv_remove()
3256 struct net_device *ndev = dev_get_drvdata(dev); in sh_eth_suspend() local
3259 if (netif_running(ndev)) { in sh_eth_suspend()
3260 netif_device_detach(ndev); in sh_eth_suspend()
3261 ret = sh_eth_close(ndev); in sh_eth_suspend()
3269 struct net_device *ndev = dev_get_drvdata(dev); in sh_eth_resume() local
3272 if (netif_running(ndev)) { in sh_eth_resume()
3273 ret = sh_eth_open(ndev); in sh_eth_resume()
3276 netif_device_attach(ndev); in sh_eth_resume()