12 #include <linux/module.h>
14 #include <linux/kernel.h>
15 #include <linux/types.h>
16 #include <linux/slab.h>
20 #include <linux/netdevice.h>
63 static void __dnet_set_hwaddr(
struct dnet *bp)
99 if (is_valid_ether_addr(addr))
100 memcpy(bp->
dev->dev_addr, addr,
sizeof(addr));
103 static int dnet_mdio_read(
struct mii_bus *
bus,
int mii_id,
int regnum)
117 value = (mii_id << 8);
125 & DNET_INTERNAL_GMII_MNG_CMD_FIN))
130 pr_debug(
"mdio_read %02x:%02x <- %04x\n", mii_id, regnum, value);
135 static int dnet_mdio_write(
struct mii_bus *bus,
int mii_id,
int regnum,
141 pr_debug(
"mdio_write %02x:%02x <- %04x\n", mii_id, regnum, value);
144 & DNET_INTERNAL_GMII_MNG_CMD_FIN))
158 tmp |= (mii_id << 8);
168 & DNET_INTERNAL_GMII_MNG_CMD_FIN))
174 static int dnet_mdio_reset(
struct mii_bus *bus)
181 struct dnet *bp = netdev_priv(dev);
184 u32 mode_reg, ctl_reg;
186 int status_change = 0;
208 switch (phydev->
speed) {
218 "%s: Ack! Speed (%d) is not "
219 "10/100/1000!\n", dev->
name,
248 spin_unlock_irqrestore(&bp->
lock, flags);
260 static int dnet_mii_probe(
struct net_device *dev)
262 struct dnet *bp = netdev_priv(dev);
267 for (phy_addr = 0; phy_addr <
PHY_MAX_ADDR; phy_addr++) {
268 if (bp->
mii_bus->phy_map[phy_addr]) {
269 phydev = bp->
mii_bus->phy_map[phy_addr];
284 &dnet_handle_link_change, 0,
288 &dnet_handle_link_change, 0,
292 if (IS_ERR(phydev)) {
294 return PTR_ERR(phydev);
315 static int dnet_mii_init(
struct dnet *bp)
323 bp->
mii_bus->name =
"dnet_mii_bus";
324 bp->
mii_bus->read = &dnet_mdio_read;
325 bp->
mii_bus->write = &dnet_mdio_write;
326 bp->
mii_bus->reset = &dnet_mdio_reset;
344 goto err_out_free_mdio_irq;
347 if (dnet_mii_probe(bp->
dev) != 0) {
349 goto err_out_unregister_bus;
354 err_out_unregister_bus:
356 err_out_free_mdio_irq:
364 static int dnet_phy_marvell_fixup(
struct phy_device *phydev)
369 static void dnet_update_stats(
struct dnet *bp)
375 WARN_ON((
unsigned long)(end - p - 1) !=
378 for (; p <
end; p++, reg++)
385 WARN_ON((
unsigned long)(end - p - 1) !=
388 for (; p <
end; p++, reg++)
399 unsigned int *data_ptr;
404 while (npackets < budget) {
418 pkt_len = cmd_word & 0xFFFF;
420 if (cmd_word & 0xDF180000)
424 skb = netdev_alloc_skb(dev, pkt_len + 5);
432 data_ptr = (
unsigned int *)
skb_put(skb, pkt_len);
433 for (i = 0; i < (pkt_len + 3) >> 2; i++)
440 "%s: No memory to allocate a sk_buff of "
441 "size %u.\n", dev->
name, pkt_len);
446 if (npackets < budget) {
463 struct dnet *bp = netdev_priv(dev);
466 unsigned int handled = 0;
480 netif_wake_queue(dev);
509 if (napi_schedule_prep(&bp->
napi)) {
516 int_enable &= ~DNET_INTR_SRC_RX_CMDFIFOAF;
524 pr_debug(
"%s: irq %x remains\n", __func__, int_current);
526 spin_unlock_irqrestore(&bp->
lock, flags);
536 for (k = 0; k < skb->
len; k++)
541 #define dnet_print_skb(skb) do {} while (0)
547 struct dnet *bp = netdev_priv(dev);
555 pr_debug(
"start_xmit: len %u head %p data %p\n",
560 len = (skb->
len + 3) >> 2;
566 bufp = (
unsigned int *)(((
unsigned long) skb->
data) & ~0x3
UL);
567 wrsz = (
u32) skb->
len + 3;
568 wrsz += ((
unsigned long) skb->
data) & 0x3;
570 tx_cmd = ((((
unsigned long)(skb->
data)) & 0x03) << 16) | (
u32) skb->
len;
574 for (i = 0; i < wrsz; i++)
585 netif_stop_queue(dev);
592 skb_tx_timestamp(skb);
597 spin_unlock_irqrestore(&bp->
lock, flags);
602 static void dnet_reset_hw(
struct dnet *bp)
625 static void dnet_init_hw(
struct dnet *bp)
630 __dnet_set_hwaddr(bp);
661 struct dnet *bp = netdev_priv(dev);
667 if (!is_valid_ether_addr(dev->
dev_addr))
670 napi_enable(&bp->
napi);
678 netif_start_queue(dev);
685 struct dnet *bp = netdev_priv(dev);
687 netif_stop_queue(dev);
688 napi_disable(&bp->
napi);
699 static inline void dnet_print_pretty_hwstats(
struct dnet_stats *hwstat)
702 pr_debug(
"----------------------------- RX statistics "
703 "-------------------------------\n");
720 pr_debug(
"----------------------------- TX statistics "
721 "-------------------------------\n");
735 struct dnet *bp = netdev_priv(dev);
740 dnet_update_stats(bp);
764 dnet_print_pretty_hwstats(hwstat);
771 struct dnet *bp = netdev_priv(dev);
782 struct dnet *bp = netdev_priv(dev);
793 struct dnet *bp = netdev_priv(dev);
796 if (!netif_running(dev))
805 static void dnet_get_drvinfo(
struct net_device *dev,
813 static const struct ethtool_ops dnet_ethtool_ops = {
814 .get_settings = dnet_get_settings,
815 .set_settings = dnet_set_settings,
816 .get_drvinfo = dnet_get_drvinfo,
822 .ndo_open = dnet_open,
823 .ndo_stop = dnet_close,
824 .ndo_get_stats = dnet_get_stats,
825 .ndo_start_xmit = dnet_start_xmit,
826 .ndo_do_ioctl = dnet_ioctl,
843 dev_err(&pdev->
dev,
"no mmio resource defined\n");
846 mem_base = res->
start;
847 mem_size = resource_size(res);
851 dev_err(&pdev->
dev,
"no memory region available\n");
857 dev = alloc_etherdev(
sizeof(*bp));
859 goto err_out_release_mem;
864 bp = netdev_priv(dev);
867 platform_set_drvdata(pdev, dev);
874 dev_err(&pdev->
dev,
"failed to map registers, aborting.\n");
876 goto err_out_free_dev;
882 dev_err(&pdev->
dev,
"Unable to request IRQ %d (error %d)\n",
884 goto err_out_iounmap;
897 if (!is_valid_ether_addr(dev->
dev_addr)) {
899 eth_hw_addr_random(dev);
900 __dnet_set_hwaddr(bp);
905 dev_err(&pdev->
dev,
"Cannot register net device, aborting.\n");
906 goto err_out_free_irq;
911 dnet_phy_marvell_fixup);
914 dev_warn(&pdev->
dev,
"Cannot register PHY board fixup.\n");
916 err = dnet_mii_init(bp);
918 goto err_out_unregister_netdev;
920 dev_info(&pdev->
dev,
"Dave DNET at 0x%p (0x%08x) irq %d %pM\n",
922 dev_info(&pdev->
dev,
"has %smdio, %sirq, %sgigabit, %sdma\n",
929 "(mii_bus:phy_addr=%s, irq=%d)\n",
930 phydev->
drv->name, dev_name(&phydev->
dev), phydev->
irq);
934 err_out_unregister_netdev:
954 dev = platform_get_drvdata(pdev);
957 bp = netdev_priv(dev);