[PATCH] Orinoco: consolidate allocation code
authorDavid Gibson <hermes@gibson.dropbear.id.au>
Fri, 13 May 2005 00:04:16 +0000 (20:04 -0400)
committerJeff Garzik <jgarzik@pobox.com>
Fri, 13 May 2005 00:04:16 +0000 (20:04 -0400)
  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

index b79aebf..d910b89 100644 (file)
@@ -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);