netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] More dgrs cleanup
       [not found] ` <20040124070450.GN21151@parcelfarce.linux.theplanet.co.uk>
@ 2004-01-26 18:10   ` Stephen Hemminger
  0 siblings, 0 replies; only message in thread
From: Stephen Hemminger @ 2004-01-26 18:10 UTC (permalink / raw)
  To: viro; +Cc: Andrew Morton, Jeff Garzik, netdev

On Sat, 24 Jan 2004 07:04:50 +0000
viro@parcelfarce.linux.theplanet.co.uk wrote:

> On Fri, Jan 23, 2004 at 10:24:59PM -0800, Andrew Morton wrote:
> > static int __init dgrs_eisa_probe (struct device *gendev)
> > {
> > 	struct net_device *dev;
> > 	struct eisa_device *edev = to_eisa_device(gendev);
> > 	uint	io = edev->base_addr;
> > 	uint	mem;
> > 	uint	irq;
> > 	int 	rc = -ENODEV; /* Not EISA configured */
> > 
> > 	if (!request_region(io, 256, "RightSwitch")) {
> > 		printk(KERN_ERR "%s: io 0x%3lX, which is busy.\n", dev->name,
> > 				dev->base_addr);
> > 		return -EBUSY;
> > 	}
> > 
> > `dev' is uninitialised when we do that printk.
> 
> IIRC, dgrs patch was from Stephen.  AFAICS, we want edev->base_addr instead
> of dev->base_addr.  

Yes, that is what the eisa probe code passes in for the base address.
dev->base_addr is then set in dgrs_found_device.

>Fsck knows what should replace dev->name - for pci
> I'd say pci_name(edev), dunno about eisa...

I just kept what the original code was doing... the name doesn't matter that much.
Many drivers have a problem now when they do setup before register-netdev and print
error messages.

For now how about this which just uses "dgrs" which is what everything else does.
Al can clean it out in the next purge...
---------------------------------------
# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.1594  -> 1.1595 
#	  drivers/net/dgrs.c	1.23    -> 1.24   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 04/01/26	shemminger@osdl.org	1.1595
# More cleanup.
#  * get rid of typedef for private data struct
#  * tag most of the printk's with priority
#  * don't print "eth%d" when name not set
#  * reserve resources as "dgrs" not "RightSwitch"
#  * avoid race in irq detect logic
# --------------------------------------------
#
diff -Nru a/drivers/net/dgrs.c b/drivers/net/dgrs.c
--- a/drivers/net/dgrs.c	Mon Jan 26 10:08:44 2004
+++ b/drivers/net/dgrs.c	Mon Jan 26 10:08:44 2004
@@ -192,7 +192,7 @@
 /*
  *	Private per-board data structure (dev->priv)
  */
-typedef struct
+struct dgrs_priv
 {
 	/*
 	 *	Stuff for generic ethercard I/F
@@ -242,9 +242,7 @@
 	int		nports;		/* Number of physical ports (4 or 6) */
 	int		chan;		/* Channel # (1-6) for this device */
 	struct net_device	*devtbl[6];	/* Ptrs to N device structs */
-
-} DGRS_PRIV;
-
+};
 
 /*
  *	reset or un-reset the IDT processor
@@ -252,7 +250,7 @@
 static void
 proc_reset(struct net_device *dev0, int reset)
 {
-	DGRS_PRIV	*priv0 = (DGRS_PRIV *) dev0->priv;
+	struct dgrs_priv *priv0 = dev0->priv;
 
 	if (priv0->plxreg)
 	{
@@ -276,7 +274,7 @@
 static int
 check_board_dma(struct net_device *dev0)
 {
-	DGRS_PRIV	*priv0 = (DGRS_PRIV *) dev0->priv;
+	struct dgrs_priv *priv0 = dev0->priv;
 	ulong	x;
 
 	/*
@@ -357,7 +355,7 @@
 {
         int     	i;
         ulong   	csr = 0;
-	DGRS_PRIV	*priv = (DGRS_PRIV *) dev->priv;
+	struct dgrs_priv *priv = dev->priv;
 
 	if (pciaddr)
 	{
@@ -455,7 +453,7 @@
 void
 dgrs_rcv_frame(
 	struct net_device	*dev0,
-	DGRS_PRIV	*priv0,
+	struct dgrs_priv *priv0,
 	I596_CB		*cbp
 )
 {
@@ -465,7 +463,7 @@
 	uchar		*putp;
 	uchar		*p;
 	struct net_device	*devN;
-	DGRS_PRIV	*privN;
+	struct dgrs_priv *privN;
 
 	/*
 	 *	Determine Nth priv and dev structure pointers
@@ -481,7 +479,7 @@
 		 */
 		if (devN == NULL)
 			goto out;
-		privN = (DGRS_PRIV *) devN->priv;
+		privN = devN->priv;
 	}
 	else
 	{	/* Switch mode */
@@ -489,8 +487,6 @@
 		privN = priv0;
 	}
 
-	if (0) printk("%s: rcv len=%ld\n", devN->name, cbp->xmit.count);
-
 	/*
 	 *	Allocate a message block big enough to hold the whole frame
 	 */
@@ -694,9 +690,9 @@
 
 static int dgrs_start_xmit(struct sk_buff *skb, struct net_device *devN)
 {
-	DGRS_PRIV	*privN = (DGRS_PRIV *) devN->priv;
+	struct dgrs_priv *privN = devN->priv;
 	struct net_device	*dev0;
-	DGRS_PRIV	*priv0;
+	struct dgrs_priv *priv0;
 	I596_RBD	*rbdp;
 	int		count;
 	int		i, len, amt;
@@ -707,7 +703,7 @@
 	if (dgrs_nicmode)
 	{
 		dev0 = privN->devtbl[0];
-		priv0 = (DGRS_PRIV *) dev0->priv;
+		priv0 = dev0->priv;
 	}
 	else
 	{
@@ -810,7 +806,7 @@
  */
 static struct net_device_stats *dgrs_get_stats( struct net_device *dev )
 {
-	DGRS_PRIV	*priv = (DGRS_PRIV *) dev->priv;
+	struct dgrs_priv *priv = dev->priv;
 
 	return (&priv->stats);
 }
@@ -821,7 +817,7 @@
 
 static void dgrs_set_multicast_list( struct net_device *dev)
 {
-	DGRS_PRIV	*priv = (DGRS_PRIV *) dev->priv;
+	struct dgrs_priv *priv = dev->priv;
 
 	priv->port->is_promisc = (dev->flags & IFF_PROMISC) ? 1 : 0;
 }
@@ -831,7 +827,7 @@
  */
 static int dgrs_ioctl(struct net_device *devN, struct ifreq *ifr, int cmd)
 {
-	DGRS_PRIV	*privN = (DGRS_PRIV *) devN->priv;
+	struct dgrs_priv *privN = devN->priv;
 	DGRS_IOCTL	ioc;
 	int		i;
 
@@ -897,7 +893,7 @@
 static irqreturn_t dgrs_intr(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct net_device	*dev0 = (struct net_device *) dev_id;
-	DGRS_PRIV	*priv0 = (DGRS_PRIV *) dev0->priv;
+	struct dgrs_priv *priv0 = dev0->priv;
 	I596_CB		*cbp;
 	int		cmd;
 	int		i;
@@ -987,7 +983,7 @@
 static int __init 
 dgrs_download(struct net_device *dev0)
 {
-	DGRS_PRIV	*priv0 = (DGRS_PRIV *) dev0->priv;
+	struct dgrs_priv *priv0 = dev0->priv;
 	int		is;
 	unsigned long	i;
 
@@ -1147,12 +1143,12 @@
 int __init 
 dgrs_probe1(struct net_device *dev)
 {
-	DGRS_PRIV	*priv = (DGRS_PRIV *) dev->priv;
+	struct dgrs_priv *priv = dev->priv;
 	unsigned long	i;
 	int		rc;
 
-	printk("%s: Digi RightSwitch io=%lx mem=%lx irq=%d plx=%lx dma=%lx\n",
-		dev->name, dev->base_addr, dev->mem_start, dev->irq,
+	printk(KERN_INFO "dgrs: Digi RightSwitch io=%lx mem=%lx irq=%d plx=%lx dma=%lx\n",
+		dev->base_addr, dev->mem_start, dev->irq,
 		priv->plxreg, priv->plxdma);
 
 	/*
@@ -1165,19 +1161,24 @@
 	/*
 	 * Get ether address of board
 	 */
-	printk("%s: Ethernet address", dev->name);
 	memcpy(dev->dev_addr, priv->port->ethaddr, 6);
-	for (i = 0; i < 6; ++i)
-		printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]);
-	printk("\n");
 
-	if (dev->dev_addr[0] & 1)
-	{
-		printk("%s: Illegal Ethernet Address\n", dev->name);
+	if (dev->dev_addr[0] & 1) {
+		printk(KERN_ERR "dgrs: Illegal Ethernet Address");
+		for (i = 0; i < 6; ++i)
+			printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]);
+		printk("\n");
+
 		rc = -ENXIO;
 		goto err_out;
 	}
 
+	rc = request_irq(dev->irq, &dgrs_intr, SA_SHIRQ, "dgrs", dev);
+	if (rc)
+		goto err_out;
+
+	priv->intrcnt = 0;
+
 	/*
 	 *	ACK outstanding interrupts, hook the interrupt,
 	 *	and verify that we are getting interrupts from the board.
@@ -1185,21 +1186,17 @@
 	if (priv->plxreg)
 		OUTL(dev->base_addr + PLX_LCL2PCI_DOORBELL, 1);
 	
-	rc = request_irq(dev->irq, &dgrs_intr, SA_SHIRQ, "RightSwitch", dev);
-	if (rc)
-		goto err_out;
-
-	priv->intrcnt = 0;
 	for (i = jiffies + 2*HZ + HZ/2; time_after(i, jiffies); )
 	{
 		cpu_relax();
 		if (priv->intrcnt >= 2)
 			break;
 	}
+
 	if (priv->intrcnt < 2)
 	{
-		printk(KERN_ERR "%s: Not interrupting on IRQ %d (%d)\n",
-				dev->name, dev->irq, priv->intrcnt);
+		printk(KERN_ERR "dgrs%x: Not interrupting on IRQ %d (%d)\n",
+				dev->base_addr, dev->irq, priv->intrcnt);
 		rc = -ENXIO;
 		goto err_free_irq;
 	}
@@ -1222,21 +1219,6 @@
        	return rc;
 }
 
-int __init 
-dgrs_initclone(struct net_device *dev)
-{
-	DGRS_PRIV	*priv = (DGRS_PRIV *) dev->priv;
-	int		i;
-
-	printk("%s: Digi RightSwitch port %d ",
-		dev->name, priv->chan);
-	for (i = 0; i < 6; ++i)
-		printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]);
-	printk("\n");
-
-	return (0);
-}
-
 static struct net_device * __init 
 dgrs_found_device(
 	int		io,
@@ -1247,15 +1229,15 @@
 	struct device   *pdev
 )
 {
-	DGRS_PRIV *priv;
+	struct dgrs_priv *priv;
 	struct net_device *dev;
 	int i, ret = -ENOMEM;
 
-	dev = alloc_etherdev(sizeof(DGRS_PRIV));
+	dev = alloc_etherdev(sizeof(struct dgrs_priv));
 	if (!dev)
 		goto err0;
 
-	priv = (DGRS_PRIV *)dev->priv;
+	priv = (struct dgrs_priv *)dev->priv;
 
 	dev->base_addr = io;
 	dev->mem_start = mem;
@@ -1291,9 +1273,9 @@
 	for (i = 1; i < priv->nports; ++i)
 	{
 		struct net_device	*devN;
-		DGRS_PRIV	*privN;
+		struct dgrs_priv *privN;
 			/* Allocate new dev and priv structures */
-		devN = alloc_etherdev(sizeof(DGRS_PRIV));
+		devN = alloc_etherdev(sizeof(struct dgrs_priv));
 		ret = -ENOMEM;
 		if (!devN) 
 			goto fail;
@@ -1301,7 +1283,7 @@
 		/* Don't copy the network device structure! */
 
 		/* copy the priv structure of dev[0] */
-		privN = (DGRS_PRIV *)devN->priv;
+		privN = (struct dgrs_priv *)devN->priv;
 		*privN = *priv;
 
 			/* ... and zero out VM areas */
@@ -1312,9 +1294,11 @@
 			/* ... and base MAC address off address of 1st port */
 		devN->dev_addr[5] += i;
 
-		ret = dgrs_initclone(devN);
-		if (ret)
-			goto fail;
+		printk(KERN_INFO "%s: Digi RightSwitch port %d ",
+		       dev->name, priv->chan);
+		for (i = 0; i < 6; ++i)
+			printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]);
+		printk("\n");
 
 		SET_MODULE_OWNER(devN);
 		SET_NETDEV_DEV(dev, pdev);
@@ -1346,7 +1330,7 @@
 
 static void __devexit dgrs_remove(struct net_device *dev)
 {
-	DGRS_PRIV *priv = dev->priv;
+	struct dgrs_priv *priv = dev->priv;
 	int i;
 
 	unregister_netdev(dev);
@@ -1397,7 +1381,8 @@
 	err = pci_enable_device(pdev);
 	if (err)
 		return err;
-	err = pci_request_regions(pdev, "RightSwitch");
+
+	err = pci_request_regions(pdev, "dgrs");
 	if (err)
 		return err;
 
@@ -1467,8 +1452,8 @@
 	uint	irq;
 	int 	rc = -ENODEV; /* Not EISA configured */
 
-	if (!request_region(io, 256, "RightSwitch")) {
-		printk(KERN_ERR "%s: io 0x%3lX, which is busy.\n", dev->name,
+	if (!request_region(io, 256, "dgrs")) {
+		printk(KERN_ERR "dgrs: io 0x%3lX, which is busy.\n", 
 				dev->base_addr);
 		return -EBUSY;
 	}

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2004-01-26 18:10 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20040123222459.58b4413a.akpm@osdl.org>
     [not found] ` <20040124070450.GN21151@parcelfarce.linux.theplanet.co.uk>
2004-01-26 18:10   ` [PATCH] More dgrs cleanup Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).