[ar71xx] define some bits of the ethernet controller's registers
[openwrt/svn-archive/archive.git] / target / linux / ar71xx / files / drivers / net / ag71xx / ag71xx_main.c
index 88ed22a4204c17214ada0af6168a593c83c9418b..53376fa817308a97e128c62177486e81bc9a9aa2 100644 (file)
 
 #include "ag71xx.h"
 
+#define AG71XX_DEFAULT_MSG_ENABLE      \
+       ( NETIF_MSG_DRV                 \
+       | NETIF_MSG_PROBE               \
+       | NETIF_MSG_LINK                \
+       | NETIF_MSG_TIMER               \
+       | NETIF_MSG_IFDOWN              \
+       | NETIF_MSG_IFUP                \
+       | NETIF_MSG_RX_ERR              \
+       | NETIF_MSG_TX_ERR )
+
+static int ag71xx_debug = -1;
+
+module_param(ag71xx_debug, int, 0);
+MODULE_PARM_DESC(ag71xx_debug, "Debug level (-1=defaults,0=none,...,16=all)");
+
 static void ag71xx_dump_regs(struct ag71xx *ag)
 {
        DBG("%s: mac_cfg1=%08x, mac_cfg2=%08x, ipg=%08x, hdx=%08x, mfl=%08x\n",
@@ -70,7 +85,7 @@ static int ag71xx_ring_alloc(struct ag71xx_ring *ring, unsigned int size)
 
        return 0;
 
-err:
+ err:
        return err;
 }
 
@@ -253,6 +268,8 @@ static void ag71xx_hw_set_macaddr(struct ag71xx *ag, unsigned char *mac)
 #define MAC_CFG1_INIT  (MAC_CFG1_RXE | MAC_CFG1_TXE | MAC_CFG1_SRX \
                        | MAC_CFG1_STX)
 
+#define FIFO_CFG0_INIT (FIFO_CFG0_ALL << FIFO_CFG0_ENABLE_SHIFT)
+
 static void ag71xx_hw_init(struct ag71xx *ag)
 {
        struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag);
@@ -272,7 +289,7 @@ static void ag71xx_hw_init(struct ag71xx *ag)
        ag71xx_sb(ag, AG71XX_REG_MAC_CFG2,
                  MAC_CFG2_PAD_CRC_EN | MAC_CFG2_LEN_CHECK);
 
-       ag71xx_wr(ag, AG71XX_REG_FIFO_CFG0, 0x00001f00);
+       ag71xx_wr(ag, AG71XX_REG_FIFO_CFG0, FIFO_CFG0_INIT);
 
        ag71xx_mii_ctrl_set_if(ag, pdata->mii_if);
 
@@ -326,7 +343,7 @@ static int ag71xx_open(struct net_device *dev)
 
        return 0;
 
-err:
+ err:
        ag71xx_rings_cleanup(ag);
        return ret;
 }
@@ -404,7 +421,7 @@ static int ag71xx_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
        return 0;
 
-err_drop:
+ err_drop:
        dev->stats.tx_dropped++;
 
        dev_kfree_skb(skb);
@@ -601,8 +618,9 @@ static int ag71xx_poll(struct napi_struct *napi, int limit)
        }
 
        if (status & AG71XX_INT_RX_OF) {
-               printk(KERN_ALERT "%s: rx owerflow, restarting dma\n",
-                       dev->name);
+               if (netif_msg_rx_err(ag))
+                       printk(KERN_ALERT "%s: rx owerflow, restarting dma\n",
+                               dev->name);
 
                /* ack interrupt */
                ag71xx_wr(ag, AG71XX_REG_RX_STATUS, RX_STATUS_OF);
@@ -692,6 +710,8 @@ static int __init ag71xx_probe(struct platform_device *pdev)
        ag->pdev = pdev;
        ag->dev = dev;
        ag->mii_bus = &ag71xx_mdio_bus->mii_bus;
+       ag->msg_enable = netif_msg_init(ag71xx_debug,
+                                       AG71XX_DEFAULT_MSG_ENABLE);
        spin_lock_init(&ag->lock);
 
        res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mac_base");
@@ -794,19 +814,19 @@ static int __init ag71xx_probe(struct platform_device *pdev)
 
        return 0;
 
-err_unregister_netdev:
+ err_unregister_netdev:
        unregister_netdev(dev);
-err_free_irq:
+ err_free_irq:
        free_irq(dev->irq, dev);
-err_unmap_mii_ctrl:
+ err_unmap_mii_ctrl:
        iounmap(ag->mii_ctrl);
-err_unmap_base2:
+ err_unmap_base2:
        iounmap(ag->mac_base2);
-err_unmap_base1:
+ err_unmap_base1:
        iounmap(ag->mac_base);
-err_free_dev:
+ err_free_dev:
        kfree(dev);
-err_out:
+ err_out:
        platform_set_drvdata(pdev, NULL);
        return err;
 }
@@ -853,9 +873,9 @@ static int __init ag71xx_module_init(void)
 
        return 0;
 
-err_mdio_exit:
+ err_mdio_exit:
        ag71xx_mdio_driver_exit();
-err_out:
+ err_out:
        return ret;
 }