From b24d4582fd93f3654d0a0a89f85e95140efc7fd4 Mon Sep 17 00:00:00 2001
From: David Gibson <hermes@gibson.dropbear.id.au>
Date: Thu, 12 May 2005 20:04:16 -0400
Subject:   [PATCH] Orinoco: consolidate allocation code

  Consolidate allocation of firmware buffers.  In the process, remove
  duplication of a workaround for an old symbol firmware bug, and fix a
  bug where we could retry the workaround, even if it already failed to
  help.

  Signed-off-by: David Gibson <hermes@gibson.dropbear.id.au>
  Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
---
 drivers/net/wireless/orinoco.c | 23 ++---------------------
 1 file changed, 2 insertions(+), 21 deletions(-)

(limited to 'drivers/net/wireless')

diff --git a/drivers/net/wireless/orinoco.c b/drivers/net/wireless/orinoco.c
index b79aebf..d910b89 100644
--- a/drivers/net/wireless/orinoco.c
+++ b/drivers/net/wireless/orinoco.c
@@ -1418,7 +1418,7 @@ int orinoco_reinit_firmware(struct net_device *dev)
 		return err;
 
 	err = hermes_allocate(hw, priv->nicbuf_size, &priv->txfid);
-	if (err == -EIO) {
+	if (err == -EIO && priv->nicbuf_size > TX_NICBUF_SIZE_BUG) {
 		/* Try workaround for old Symbol firmware bug */
 		printk(KERN_WARNING "%s: firmware ALLOC bug detected "
 		       "(old Symbol firmware?). Trying to work around... ",
@@ -2270,7 +2270,7 @@ static int orinoco_init(struct net_device *dev)
 	priv->nicbuf_size = IEEE802_11_FRAME_LEN + ETH_HLEN;
 
 	/* Initialize the firmware */
-	err = hermes_init(hw);
+	err = orinoco_reinit_firmware(dev);
 	if (err != 0) {
 		printk(KERN_ERR "%s: failed to initialize firmware (err = %d)\n",
 		       dev->name, err);
@@ -2409,25 +2409,6 @@ static int orinoco_init(struct net_device *dev)
 	priv->wep_on = 0;
 	priv->tx_key = 0;
 
-	err = hermes_allocate(hw, priv->nicbuf_size, &priv->txfid);
-	if (err == -EIO) {
-		/* Try workaround for old Symbol firmware bug */
-		printk(KERN_WARNING "%s: firmware ALLOC bug detected "
-		       "(old Symbol firmware?). Trying to work around... ",
-		       dev->name);
-		
-		priv->nicbuf_size = TX_NICBUF_SIZE_BUG;
-		err = hermes_allocate(hw, priv->nicbuf_size, &priv->txfid);
-		if (err)
-			printk("failed!\n");
-		else
-			printk("ok.\n");
-	}
-	if (err) {
-		printk("%s: Error %d allocating Tx buffer\n", dev->name, err);
-		goto out;
-	}
-
 	/* Make the hardware available, as long as it hasn't been
 	 * removed elsewhere (e.g. by PCMCIA hot unplug) */
 	spin_lock_irq(&priv->lock);
-- 
cgit v1.1