Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[linux-drm-fsl-dcu.git] / drivers / net / ethernet / 8390 / ne2k-pci.c
index fc14a85e4d5ffdde31d42c40dac5f6af7e80c946..f395c967262e98e0464ec7a01726a6e3a83d0e56 100644 (file)
@@ -33,8 +33,6 @@
 /* The user-configurable values.
    These may be modified when a driver module is loaded.*/
 
-static int debug = 1;                  /* 1 normal messages, 0 quiet .. 7 verbose. */
-
 #define MAX_UNITS 8                            /* More are supported, limit only on options */
 /* Used to pass the full-duplex flag, etc. */
 static int full_duplex[MAX_UNITS];
@@ -60,6 +58,8 @@ static int options[MAX_UNITS];
 
 #include "8390.h"
 
+static u32 ne2k_msg_enable;
+
 /* These identify the driver base version and may not be removed. */
 static const char version[] =
        KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE
@@ -76,10 +76,10 @@ MODULE_AUTHOR("Donald Becker / Paul Gortmaker");
 MODULE_DESCRIPTION("PCI NE2000 clone driver");
 MODULE_LICENSE("GPL");
 
-module_param(debug, int, 0);
+module_param_named(msg_enable, ne2k_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH));
 module_param_array(options, int, NULL, 0);
 module_param_array(full_duplex, int, NULL, 0);
-MODULE_PARM_DESC(debug, "debug level (1-2)");
+MODULE_PARM_DESC(msg_enable, "Debug message level (see linux/netdevice.h for bitmap)");
 MODULE_PARM_DESC(options, "Bit 5: full duplex");
 MODULE_PARM_DESC(full_duplex, "full duplex setting(s) (1)");
 
@@ -226,6 +226,7 @@ static int ne2k_pci_init_one(struct pci_dev *pdev,
        static unsigned int fnd_cnt;
        long ioaddr;
        int flags = pci_clone_list[chip_idx].flags;
+       struct ei_device *ei_local;
 
 /* when built into the kernel, we only print version if device is found */
 #ifndef MODULE
@@ -280,6 +281,8 @@ static int ne2k_pci_init_one(struct pci_dev *pdev,
                goto err_out_free_res;
        }
        dev->netdev_ops = &ne2k_netdev_ops;
+       ei_local = netdev_priv(dev);
+       ei_local->msg_enable = ne2k_msg_enable;
 
        SET_NETDEV_DEV(dev, &pdev->dev);
 
@@ -379,9 +382,9 @@ static int ne2k_pci_init_one(struct pci_dev *pdev,
        if (i)
                goto err_out_free_netdev;
 
-       printk("%s: %s found at %#lx, IRQ %d, %pM.\n",
-              dev->name, pci_clone_list[chip_idx].name, ioaddr, dev->irq,
-              dev->dev_addr);
+       netdev_info(dev, "%s found at %#lx, IRQ %d, %pM.\n",
+                   pci_clone_list[chip_idx].name, ioaddr, dev->irq,
+                   dev->dev_addr);
 
        return 0;
 
@@ -450,9 +453,10 @@ static int ne2k_pci_close(struct net_device *dev)
 static void ne2k_pci_reset_8390(struct net_device *dev)
 {
        unsigned long reset_start_time = jiffies;
+       struct ei_device *ei_local = netdev_priv(dev);
 
-       if (debug > 1) printk("%s: Resetting the 8390 t=%ld...",
-                                                 dev->name, jiffies);
+       netif_dbg(ei_local, hw, dev, "resetting the 8390 t=%ld...\n",
+                 jiffies);
 
        outb(inb(NE_BASE + NE_RESET), NE_BASE + NE_RESET);
 
@@ -462,7 +466,7 @@ static void ne2k_pci_reset_8390(struct net_device *dev)
        /* This check _should_not_ be necessary, omit eventually. */
        while ((inb(NE_BASE+EN0_ISR) & ENISR_RESET) == 0)
                if (jiffies - reset_start_time > 2) {
-                       printk("%s: ne2k_pci_reset_8390() did not complete.\n", dev->name);
+                       netdev_err(dev, "ne2k_pci_reset_8390() did not complete.\n");
                        break;
                }
        outb(ENISR_RESET, NE_BASE + EN0_ISR);   /* Ack intr. */
@@ -479,9 +483,9 @@ static void ne2k_pci_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *
 
        /* This *shouldn't* happen. If it does, it's the last thing you'll see */
        if (ei_status.dmaing) {
-               printk("%s: DMAing conflict in ne2k_pci_get_8390_hdr "
+               netdev_err(dev, "DMAing conflict in ne2k_pci_get_8390_hdr "
                           "[DMAstat:%d][irqlock:%d].\n",
-                          dev->name, ei_status.dmaing, ei_status.irqlock);
+                          ei_status.dmaing, ei_status.irqlock);
                return;
        }
 
@@ -517,9 +521,9 @@ static void ne2k_pci_block_input(struct net_device *dev, int count,
 
        /* This *shouldn't* happen. If it does, it's the last thing you'll see */
        if (ei_status.dmaing) {
-               printk("%s: DMAing conflict in ne2k_pci_block_input "
+               netdev_err(dev, "DMAing conflict in ne2k_pci_block_input "
                           "[DMAstat:%d][irqlock:%d].\n",
-                          dev->name, ei_status.dmaing, ei_status.irqlock);
+                          ei_status.dmaing, ei_status.irqlock);
                return;
        }
        ei_status.dmaing |= 0x01;
@@ -572,9 +576,9 @@ static void ne2k_pci_block_output(struct net_device *dev, int count,
 
        /* This *shouldn't* happen. If it does, it's the last thing you'll see */
        if (ei_status.dmaing) {
-               printk("%s: DMAing conflict in ne2k_pci_block_output."
+               netdev_err(dev, "DMAing conflict in ne2k_pci_block_output."
                           "[DMAstat:%d][irqlock:%d]\n",
-                          dev->name, ei_status.dmaing, ei_status.irqlock);
+                          ei_status.dmaing, ei_status.irqlock);
                return;
        }
        ei_status.dmaing |= 0x01;
@@ -619,7 +623,7 @@ static void ne2k_pci_block_output(struct net_device *dev, int count,
 
        while ((inb(nic_base + EN0_ISR) & ENISR_RDC) == 0)
                if (jiffies - dma_start > 2) {                  /* Avoid clock roll-over. */
-                       printk(KERN_WARNING "%s: timeout waiting for Tx RDC.\n", dev->name);
+                       netdev_warn(dev, "timeout waiting for Tx RDC.\n");
                        ne2k_pci_reset_8390(dev);
                        NS8390_init(dev,1);
                        break;
@@ -640,8 +644,24 @@ static void ne2k_pci_get_drvinfo(struct net_device *dev,
        strlcpy(info->bus_info, pci_name(pci_dev), sizeof(info->bus_info));
 }
 
+static u32 ne2k_pci_get_msglevel(struct net_device *dev)
+{
+       struct ei_device *ei_local = netdev_priv(dev);
+
+       return ei_local->msg_enable;
+}
+
+static void ne2k_pci_set_msglevel(struct net_device *dev, u32 v)
+{
+       struct ei_device *ei_local = netdev_priv(dev);
+
+       ei_local->msg_enable = v;
+}
+
 static const struct ethtool_ops ne2k_pci_ethtool_ops = {
        .get_drvinfo            = ne2k_pci_get_drvinfo,
+       .get_msglevel           = ne2k_pci_get_msglevel,
+       .set_msglevel           = ne2k_pci_set_msglevel,
 };
 
 static void ne2k_pci_remove_one(struct pci_dev *pdev)