| .. | .. |
|---|
| 40 | 40 | #include <linux/of_platform.h> |
|---|
| 41 | 41 | #include <linux/of_gpio.h> |
|---|
| 42 | 42 | #include <linux/of_net.h> |
|---|
| 43 | +#include <linux/pgtable.h> |
|---|
| 43 | 44 | |
|---|
| 44 | 45 | #include <linux/vmalloc.h> |
|---|
| 45 | | -#include <asm/pgtable.h> |
|---|
| 46 | 46 | #include <asm/irq.h> |
|---|
| 47 | 47 | #include <linux/uaccess.h> |
|---|
| 48 | 48 | |
|---|
| .. | .. |
|---|
| 53 | 53 | MODULE_AUTHOR("Pantelis Antoniou <panto@intracom.gr>"); |
|---|
| 54 | 54 | MODULE_DESCRIPTION("Freescale Ethernet Driver"); |
|---|
| 55 | 55 | MODULE_LICENSE("GPL"); |
|---|
| 56 | | -MODULE_VERSION(DRV_MODULE_VERSION); |
|---|
| 57 | 56 | |
|---|
| 58 | 57 | static int fs_enet_debug = -1; /* -1 == use FS_ENET_DEF_MSG_ENABLE as value */ |
|---|
| 59 | 58 | module_param(fs_enet_debug, int, 0); |
|---|
| .. | .. |
|---|
| 501 | 500 | nr_frags = skb_shinfo(skb)->nr_frags; |
|---|
| 502 | 501 | frag = skb_shinfo(skb)->frags; |
|---|
| 503 | 502 | for (i = 0; i < nr_frags; i++, frag++) { |
|---|
| 504 | | - if (!IS_ALIGNED(frag->page_offset, 4)) { |
|---|
| 503 | + if (!IS_ALIGNED(skb_frag_off(frag), 4)) { |
|---|
| 505 | 504 | is_aligned = 0; |
|---|
| 506 | 505 | break; |
|---|
| 507 | 506 | } |
|---|
| .. | .. |
|---|
| 563 | 562 | BD_ENET_TX_TC); |
|---|
| 564 | 563 | CBDS_SC(bdp, BD_ENET_TX_READY); |
|---|
| 565 | 564 | |
|---|
| 566 | | - if ((CBDR_SC(bdp) & BD_ENET_TX_WRAP) == 0) |
|---|
| 567 | | - bdp++, curidx++; |
|---|
| 568 | | - else |
|---|
| 569 | | - bdp = fep->tx_bd_base, curidx = 0; |
|---|
| 565 | + if ((CBDR_SC(bdp) & BD_ENET_TX_WRAP) == 0) { |
|---|
| 566 | + bdp++; |
|---|
| 567 | + curidx++; |
|---|
| 568 | + } else { |
|---|
| 569 | + bdp = fep->tx_bd_base; |
|---|
| 570 | + curidx = 0; |
|---|
| 571 | + } |
|---|
| 570 | 572 | |
|---|
| 571 | 573 | len = skb_frag_size(frag); |
|---|
| 572 | 574 | CBDW_BUFADDR(bdp, skb_frag_dma_map(fep->dev, frag, 0, len, |
|---|
| .. | .. |
|---|
| 641 | 643 | netif_wake_queue(dev); |
|---|
| 642 | 644 | } |
|---|
| 643 | 645 | |
|---|
| 644 | | -static void fs_timeout(struct net_device *dev) |
|---|
| 646 | +static void fs_timeout(struct net_device *dev, unsigned int txqueue) |
|---|
| 645 | 647 | { |
|---|
| 646 | 648 | struct fs_enet_private *fep = netdev_priv(dev); |
|---|
| 647 | 649 | |
|---|
| .. | .. |
|---|
| 790 | 792 | struct ethtool_drvinfo *info) |
|---|
| 791 | 793 | { |
|---|
| 792 | 794 | strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); |
|---|
| 793 | | - strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version)); |
|---|
| 794 | 795 | } |
|---|
| 795 | 796 | |
|---|
| 796 | 797 | static int fs_get_regs_len(struct net_device *dev) |
|---|
| .. | .. |
|---|
| 882 | 883 | .set_tunable = fs_set_tunable, |
|---|
| 883 | 884 | }; |
|---|
| 884 | 885 | |
|---|
| 885 | | -static int fs_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) |
|---|
| 886 | | -{ |
|---|
| 887 | | - if (!netif_running(dev)) |
|---|
| 888 | | - return -EINVAL; |
|---|
| 889 | | - |
|---|
| 890 | | - return phy_mii_ioctl(dev->phydev, rq, cmd); |
|---|
| 891 | | -} |
|---|
| 892 | | - |
|---|
| 893 | 886 | extern int fs_mii_connect(struct net_device *dev); |
|---|
| 894 | 887 | extern void fs_mii_disconnect(struct net_device *dev); |
|---|
| 895 | 888 | |
|---|
| .. | .. |
|---|
| 907 | 900 | .ndo_start_xmit = fs_enet_start_xmit, |
|---|
| 908 | 901 | .ndo_tx_timeout = fs_timeout, |
|---|
| 909 | 902 | .ndo_set_rx_mode = fs_set_multicast_list, |
|---|
| 910 | | - .ndo_do_ioctl = fs_ioctl, |
|---|
| 903 | + .ndo_do_ioctl = phy_do_ioctl_running, |
|---|
| 911 | 904 | .ndo_validate_addr = eth_validate_addr, |
|---|
| 912 | 905 | .ndo_set_mac_address = eth_mac_addr, |
|---|
| 913 | 906 | #ifdef CONFIG_NET_POLL_CONTROLLER |
|---|
| .. | .. |
|---|
| 1014 | 1007 | spin_lock_init(&fep->tx_lock); |
|---|
| 1015 | 1008 | |
|---|
| 1016 | 1009 | mac_addr = of_get_mac_address(ofdev->dev.of_node); |
|---|
| 1017 | | - if (mac_addr) |
|---|
| 1018 | | - memcpy(ndev->dev_addr, mac_addr, ETH_ALEN); |
|---|
| 1010 | + if (!IS_ERR(mac_addr)) |
|---|
| 1011 | + ether_addr_copy(ndev->dev_addr, mac_addr); |
|---|
| 1019 | 1012 | |
|---|
| 1020 | 1013 | ret = fep->ops->allocate_bd(ndev); |
|---|
| 1021 | 1014 | if (ret) |
|---|
| .. | .. |
|---|
| 1053 | 1046 | out_free_dev: |
|---|
| 1054 | 1047 | free_netdev(ndev); |
|---|
| 1055 | 1048 | out_put: |
|---|
| 1056 | | - if (fpi->clk_per) |
|---|
| 1057 | | - clk_disable_unprepare(fpi->clk_per); |
|---|
| 1049 | + clk_disable_unprepare(fpi->clk_per); |
|---|
| 1058 | 1050 | out_deregister_fixed_link: |
|---|
| 1059 | 1051 | of_node_put(fpi->phy_node); |
|---|
| 1060 | 1052 | if (of_phy_is_fixed_link(ofdev->dev.of_node)) |
|---|
| .. | .. |
|---|
| 1075 | 1067 | fep->ops->cleanup_data(ndev); |
|---|
| 1076 | 1068 | dev_set_drvdata(fep->dev, NULL); |
|---|
| 1077 | 1069 | of_node_put(fep->fpi->phy_node); |
|---|
| 1078 | | - if (fep->fpi->clk_per) |
|---|
| 1079 | | - clk_disable_unprepare(fep->fpi->clk_per); |
|---|
| 1070 | + clk_disable_unprepare(fep->fpi->clk_per); |
|---|
| 1080 | 1071 | if (of_phy_is_fixed_link(ofdev->dev.of_node)) |
|---|
| 1081 | 1072 | of_phy_deregister_fixed_link(ofdev->dev.of_node); |
|---|
| 1082 | 1073 | free_netdev(ndev); |
|---|