Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b24d4582 authored by David Gibson's avatar David Gibson Committed by Jeff Garzik
Browse files

[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: default avatarDavid Gibson <hermes@gibson.dropbear.id.au>
  Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent d51d8b1f
Loading
Loading
Loading
Loading
+2 −21
Original line number Diff line number Diff line
@@ -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);