diff options
Diffstat (limited to 'drivers/net/wan/dscc4.c')
| -rw-r--r-- | drivers/net/wan/dscc4.c | 129 | 
1 files changed, 54 insertions, 75 deletions
diff --git a/drivers/net/wan/dscc4.c b/drivers/net/wan/dscc4.c index d45b08d1dbc..288610df205 100644 --- a/drivers/net/wan/dscc4.c +++ b/drivers/net/wan/dscc4.c @@ -56,7 +56,7 @@   * IV. Notes   * The current error (XDU, RFO) recovery code is untested.   * So far, RDO takes his RX channel down and the right sequence to enable it - * again is still a mistery. If RDO happens, plan a reboot. More details + * again is still a mystery. If RDO happens, plan a reboot. More details   * in the code (NB: as this happens, TX still works).   * Don't mess the cables during operation, especially on DTE ports. I don't   * suggest it for DCE either but at least one can get some messages instead @@ -80,6 +80,8 @@   * - misc crapectomy.   */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +  #include <linux/module.h>  #include <linux/sched.h>  #include <linux/types.h> @@ -91,7 +93,6 @@  #include <linux/mm.h>  #include <linux/slab.h> -#include <asm/system.h>  #include <asm/cache.h>  #include <asm/byteorder.h>  #include <asm/uaccess.h> @@ -99,6 +100,7 @@  #include <asm/irq.h>  #include <linux/init.h> +#include <linux/interrupt.h>  #include <linux/string.h>  #include <linux/if_arp.h> @@ -125,7 +127,7 @@ static u32 dscc4_pci_config_store[16];  /* Module parameters */  MODULE_AUTHOR("Maintainer: Francois Romieu <romieu@cogenit.fr>"); -MODULE_DESCRIPTION("Siemens PEB20534 PCI Controler"); +MODULE_DESCRIPTION("Siemens PEB20534 PCI Controller");  MODULE_LICENSE("GPL");  module_param(debug, int, 0);  MODULE_PARM_DESC(debug,"Enable/disable extra messages"); @@ -552,7 +554,7 @@ static int dscc4_wait_ack_cec(struct dscc4_dev_priv *dpriv,  		schedule_timeout_uninterruptible(10);  		rmb();  	} while (++i > 0); -	printk(KERN_ERR "%s: %s timeout\n", dev->name, msg); +	netdev_err(dev, "%s timeout\n", msg);  done:  	return (i >= 0) ? i : -EAGAIN;  } @@ -568,18 +570,18 @@ static int dscc4_do_action(struct net_device *dev, char *msg)  		u32 state = readl(ioaddr);  		if (state & ArAck) { -			printk(KERN_DEBUG "%s: %s ack\n", dev->name, msg); +			netdev_dbg(dev, "%s ack\n", msg);  			writel(ArAck, ioaddr);  			goto done;  		} else if (state & Arf) { -			printk(KERN_ERR "%s: %s failed\n", dev->name, msg); +			netdev_err(dev, "%s failed\n", msg);  			writel(Arf, ioaddr);  			i = -1;  			goto done;  	}  		rmb();  	} while (++i > 0); -	printk(KERN_ERR "%s: %s timeout\n", dev->name, msg); +	netdev_err(dev, "%s timeout\n", msg);  done:  	return i;  } @@ -635,7 +637,7 @@ static void dscc4_tx_reset(struct dscc4_dev_priv *dpriv, struct net_device *dev)  	writel(MTFi|Rdt, dpriv->base_addr + dpriv->dev_id*0x0c + CH0CFG);  	if (dscc4_do_action(dev, "Rdt") < 0) -		printk(KERN_ERR "%s: Tx reset failed\n", dev->name); +		netdev_err(dev, "Tx reset failed\n");  }  #endif @@ -697,16 +699,13 @@ static void dscc4_free1(struct pci_dev *pdev)  	for (i = 0; i < dev_per_card; i++)  		unregister_hdlc_device(dscc4_to_dev(root + i)); -	pci_set_drvdata(pdev, NULL); -  	for (i = 0; i < dev_per_card; i++)  		free_netdev(root[i].dev);  	kfree(root);  	kfree(ppriv);  } -static int __devinit dscc4_init_one(struct pci_dev *pdev, -				  const struct pci_device_id *ent) +static int dscc4_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)  {  	struct dscc4_pci_priv *priv;  	struct dscc4_dev_priv *dpriv; @@ -721,22 +720,20 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,  	rc = pci_request_region(pdev, 0, "registers");  	if (rc < 0) { -	        printk(KERN_ERR "%s: can't reserve MMIO region (regs)\n", -			DRV_NAME); +		pr_err("can't reserve MMIO region (regs)\n");  	        goto err_disable_0;  	}  	rc = pci_request_region(pdev, 1, "LBI interface");  	if (rc < 0) { -	        printk(KERN_ERR "%s: can't reserve MMIO region (lbi)\n", -			DRV_NAME); +		pr_err("can't reserve MMIO region (lbi)\n");  	        goto err_free_mmio_region_1;  	}  	ioaddr = pci_ioremap_bar(pdev, 0);  	if (!ioaddr) { -		printk(KERN_ERR "%s: cannot remap MMIO region %llx @ %llx\n", -			DRV_NAME, (unsigned long long)pci_resource_len(pdev, 0), -			(unsigned long long)pci_resource_start(pdev, 0)); +		pr_err("cannot remap MMIO region %llx @ %llx\n", +		       (unsigned long long)pci_resource_len(pdev, 0), +		       (unsigned long long)pci_resource_start(pdev, 0));  		rc = -EIO;  		goto err_free_mmio_regions_2;  	} @@ -756,7 +753,7 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,  	rc = request_irq(pdev->irq, dscc4_irq, IRQF_SHARED, DRV_NAME, priv->root);  	if (rc < 0) { -		printk(KERN_WARNING "%s: IRQ %d busy\n", DRV_NAME, pdev->irq); +		pr_warn("IRQ %d busy\n", pdev->irq);  		goto err_release_4;  	} @@ -774,14 +771,15 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,  	}  	/* Global interrupt queue */  	writel((u32)(((IRQ_RING_SIZE >> 5) - 1) << 20), ioaddr + IQLENR1); + +	rc = -ENOMEM; +  	priv->iqcfg = (__le32 *) pci_alloc_consistent(pdev,  		IRQ_RING_SIZE*sizeof(__le32), &priv->iqcfg_dma);  	if (!priv->iqcfg)  		goto err_free_irq_5;  	writel(priv->iqcfg_dma, ioaddr + IQCFG); -	rc = -ENOMEM; -  	/*  	 * SCC 0-3 private rx/tx irq structures  	 * IQRX/TXi needs to be set soon. Learned it the hard way... @@ -902,10 +900,8 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr)  	int i, ret = -ENOMEM;  	root = kcalloc(dev_per_card, sizeof(*root), GFP_KERNEL); -	if (!root) { -		printk(KERN_ERR "%s: can't allocate data\n", DRV_NAME); +	if (!root)  		goto err_out; -	}  	for (i = 0; i < dev_per_card; i++) {  		root[i].dev = alloc_hdlcdev(root + i); @@ -914,10 +910,8 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr)  	}  	ppriv = kzalloc(sizeof(*ppriv), GFP_KERNEL); -	if (!ppriv) { -		printk(KERN_ERR "%s: can't allocate private data\n", DRV_NAME); +	if (!ppriv)  		goto err_free_dev; -	}  	ppriv->root = root;  	spin_lock_init(&ppriv->lock); @@ -951,7 +945,7 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr)  		ret = register_hdlc_device(d);  		if (ret < 0) { -			printk(KERN_ERR "%s: unable to register\n", DRV_NAME); +			pr_err("unable to register\n");  			dscc4_release_ring(dpriv);  			goto err_unregister;  	        } @@ -1004,7 +998,7 @@ static int dscc4_loopback_check(struct dscc4_dev_priv *dpriv)  	if (settings->loopback && (settings->clock_type != CLOCK_INT)) {  		struct net_device *dev = dscc4_to_dev(dpriv); -		printk(KERN_INFO "%s: loopback requires clock\n", dev->name); +		netdev_info(dev, "loopback requires clock\n");  		return -1;  	}  	return 0; @@ -1065,7 +1059,7 @@ static int dscc4_open(struct net_device *dev)  	/*  	 * Due to various bugs, there is no way to reliably reset a -	 * specific port (manufacturer's dependant special PCI #RST wiring +	 * specific port (manufacturer's dependent special PCI #RST wiring  	 * apart: it affects all ports). Thus the device goes in the best  	 * silent mode possible at dscc4_close() time and simply claims to  	 * be up if it's opened again. It still isn't possible to change @@ -1077,7 +1071,7 @@ static int dscc4_open(struct net_device *dev)  		scc_patchl(0, PowerUp, dpriv, dev, CCR0);  		scc_patchl(0, 0x00050000, dpriv, dev, CCR2);  		scc_writel(EventsMask, dpriv, dev, IMR); -		printk(KERN_INFO "%s: up again.\n", dev->name); +		netdev_info(dev, "up again\n");  		goto done;  	} @@ -1094,11 +1088,11 @@ static int dscc4_open(struct net_device *dev)  	 * situations.  	 */  	if (scc_readl_star(dpriv, dev) & SccBusy) { -		printk(KERN_ERR "%s busy. Try later\n", dev->name); +		netdev_err(dev, "busy - try later\n");  		ret = -EAGAIN;  		goto err_out;  	} else -		printk(KERN_INFO "%s: available. Good\n", dev->name); +		netdev_info(dev, "available - good\n");  	scc_writel(EventsMask, dpriv, dev, IMR); @@ -1116,7 +1110,7 @@ static int dscc4_open(struct net_device *dev)  	 * reset is needed. Suggestions anyone ?  	 */  	if ((ret = dscc4_xpr_ack(dpriv)) < 0) { -		printk(KERN_ERR "%s: %s timeout\n", DRV_NAME, "XPR"); +		pr_err("XPR timeout\n");  		goto err_disable_scc_events;  	} @@ -1230,9 +1224,9 @@ static inline int dscc4_check_clock_ability(int port)   *   scaling. Of course some rounding may take place.   * - no high speed mode (40Mb/s). May be trivial to do but I don't have an   *   appropriate external clocking device for testing. - * - no time-slot/clock mode 5: shameless lazyness. + * - no time-slot/clock mode 5: shameless laziness.   * - * The clock signals wiring can be (is ?) manufacturer dependant. Good luck. + * The clock signals wiring can be (is ?) manufacturer dependent. Good luck.   *   * BIG FAT WARNING: if the device isn't provided enough clocking signal, it   * won't pass the init sequence. For example, straight back-to-back DTE without @@ -1341,8 +1335,7 @@ static int dscc4_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)  			return -EPERM;  		if (dpriv->flags & FakeReset) { -			printk(KERN_INFO "%s: please reset the device" -			       " before this command\n", dev->name); +			netdev_info(dev, "please reset the device before this command\n");  			return -EPERM;  		}  		if (copy_from_user(&dpriv->settings, line, size)) @@ -1358,7 +1351,7 @@ static int dscc4_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)  	return ret;  } -static int dscc4_match(struct thingie *p, int value) +static int dscc4_match(const struct thingie *p, int value)  {  	int i; @@ -1403,7 +1396,7 @@ done:  static int dscc4_encoding_setting(struct dscc4_dev_priv *dpriv,  				  struct net_device *dev)  { -	struct thingie encoding[] = { +	static const struct thingie encoding[] = {  		{ ENCODING_NRZ,		0x00000000 },  		{ ENCODING_NRZI,	0x00200000 },  		{ ENCODING_FM_MARK,	0x00400000 }, @@ -1442,7 +1435,7 @@ static int dscc4_loopback_setting(struct dscc4_dev_priv *dpriv,  static int dscc4_crc_setting(struct dscc4_dev_priv *dpriv,  			     struct net_device *dev)  { -	struct thingie crc[] = { +	static const struct thingie crc[] = {  		{ PARITY_CRC16_PR0_CCITT,	0x00000010 },  		{ PARITY_CRC16_PR1_CCITT,	0x00000000 },  		{ PARITY_CRC32_PR0_CCITT,	0x00000011 }, @@ -1505,8 +1498,7 @@ static irqreturn_t dscc4_irq(int irq, void *token)  	writel(state, ioaddr + GSTAR);  	if (state & Arf) { -		printk(KERN_ERR "%s: failure (Arf). Harass the maintener\n", -		       dev->name); +		netdev_err(dev, "failure (Arf). Harass the maintainer\n");  		goto out;  	}  	state &= ~ArAck; @@ -1514,7 +1506,7 @@ static irqreturn_t dscc4_irq(int irq, void *token)  		if (debug > 0)  			printk(KERN_DEBUG "%s: CfgIV\n", DRV_NAME);  		if (priv->iqcfg[priv->cfg_cur++%IRQ_RING_SIZE] & cpu_to_le32(Arf)) -			printk(KERN_ERR "%s: %s failed\n", dev->name, "CFG"); +			netdev_err(dev, "CFG failed\n");  		if (!(state &= ~Cfg))  			goto out;  	} @@ -1595,8 +1587,8 @@ try:  				++dpriv->tx_dirty;  			} else {  				if (debug > 1) -					printk(KERN_ERR "%s Tx: NULL skb %d\n", -						dev->name, cur); +					netdev_err(dev, "Tx: NULL skb %d\n", +						   cur);  			}  			/*  			 * If the driver ends sending crap on the wire, it @@ -1615,7 +1607,7 @@ try:  		 * Transmit Data Underrun  		 */  		if (state & Xdu) { -			printk(KERN_ERR "%s: XDU. Ask maintainer\n", DRV_NAME); +			netdev_err(dev, "Tx Data Underrun. Ask maintainer\n");  			dpriv->flags = NeedIDT;  			/* Tx reset */  			writel(MTFi | Rdt, @@ -1624,13 +1616,13 @@ try:  			return;  		}  		if (state & Cts) { -			printk(KERN_INFO "%s: CTS transition\n", dev->name); +			netdev_info(dev, "CTS transition\n");  			if (!(state &= ~Cts)) /* DEBUG */  				goto try;  		}  		if (state & Xmr) {  			/* Frame needs to be sent again - FIXME */ -			printk(KERN_ERR "%s: Xmr. Ask maintainer\n", DRV_NAME); +			netdev_err(dev, "Tx ReTx. Ask maintainer\n");  			if (!(state &= ~Xmr)) /* DEBUG */  				goto try;  		} @@ -1648,7 +1640,7 @@ try:  					break;  			}  			if (!i) -				printk(KERN_INFO "%s busy in irq\n", dev->name); +				netdev_info(dev, "busy in irq\n");  			scc_addr = dpriv->base_addr + 0x0c*dpriv->dev_id;  			/* Keep this order: IDT before IDR */ @@ -1685,7 +1677,7 @@ try:  		}  		if (state & Cd) {  			if (debug > 0) -				printk(KERN_INFO "%s: CD transition\n", dev->name); +				netdev_info(dev, "CD transition\n");  			if (!(state &= ~Cd)) /* DEBUG */  				goto try;  		} @@ -1694,11 +1686,11 @@ try:  #ifdef DSCC4_POLLING  			while (!dscc4_tx_poll(dpriv, dev));  #endif -			printk(KERN_INFO "%s: Tx Hi\n", dev->name); +			netdev_info(dev, "Tx Hi\n");  			state &= ~Hi;  		}  		if (state & Err) { -			printk(KERN_INFO "%s: Tx ERR\n", dev->name); +			netdev_info(dev, "Tx ERR\n");  			dev->stats.tx_errors++;  			state &= ~Err;  		} @@ -1768,7 +1760,7 @@ try:  			goto try;  		}  		if (state & Hi ) { /* HI bit */ -			printk(KERN_INFO "%s: Rx Hi\n", dev->name); +			netdev_info(dev, "Rx Hi\n");  			state &= ~Hi;  			goto try;  		} @@ -1799,7 +1791,7 @@ try:  				goto try;  		}  		if (state & Cts) { -			printk(KERN_INFO "%s: CTS transition\n", dev->name); +			netdev_info(dev, "CTS transition\n");  			if (!(state &= ~Cts)) /* DEBUG */  				goto try;  		} @@ -1858,14 +1850,12 @@ try:  			       sizeof(struct RxFD), scc_addr + CH0BRDA);  			writel(MTFi|Rdr|Idr, scc_addr + CH0CFG);  			if (dscc4_do_action(dev, "RDR") < 0) { -				printk(KERN_ERR "%s: RDO recovery failed(%s)\n", -				       dev->name, "RDR"); +				netdev_err(dev, "RDO recovery failed(RDR)\n");  				goto rdo_end;  			}  			writel(MTFi|Idr, scc_addr + CH0CFG);  			if (dscc4_do_action(dev, "IDR") < 0) { -				printk(KERN_ERR "%s: RDO recovery failed(%s)\n", -				       dev->name, "IDR"); +				netdev_err(dev, "RDO recovery failed(IDR)\n");  				goto rdo_end;  			}  		rdo_end: @@ -1874,7 +1864,7 @@ try:  			goto try;  		}  		if (state & Cd) { -			printk(KERN_INFO "%s: CD transition\n", dev->name); +			netdev_info(dev, "CD transition\n");  			if (!(state &= ~Cd)) /* DEBUG */  				goto try;  		} @@ -1975,7 +1965,7 @@ err_out:  	return -ENOMEM;  } -static void __devexit dscc4_remove_one(struct pci_dev *pdev) +static void dscc4_remove_one(struct pci_dev *pdev)  {  	struct dscc4_pci_priv *ppriv;  	struct dscc4_dev_priv *root; @@ -2060,18 +2050,7 @@ static struct pci_driver dscc4_driver = {  	.name		= DRV_NAME,  	.id_table	= dscc4_pci_tbl,  	.probe		= dscc4_init_one, -	.remove		= __devexit_p(dscc4_remove_one), +	.remove		= dscc4_remove_one,  }; -static int __init dscc4_init_module(void) -{ -	return pci_register_driver(&dscc4_driver); -} - -static void __exit dscc4_cleanup_module(void) -{ -	pci_unregister_driver(&dscc4_driver); -} - -module_init(dscc4_init_module); -module_exit(dscc4_cleanup_module); +module_pci_driver(dscc4_driver);  | 
