|
@@ -1418,7 +1418,7 @@ int orinoco_reinit_firmware(struct net_device *dev)
|
|
return err;
|
|
return err;
|
|
|
|
|
|
err = hermes_allocate(hw, priv->nicbuf_size, &priv->txfid);
|
|
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 */
|
|
/* Try workaround for old Symbol firmware bug */
|
|
printk(KERN_WARNING "%s: firmware ALLOC bug detected "
|
|
printk(KERN_WARNING "%s: firmware ALLOC bug detected "
|
|
"(old Symbol firmware?). Trying to work around... ",
|
|
"(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;
|
|
priv->nicbuf_size = IEEE802_11_FRAME_LEN + ETH_HLEN;
|
|
|
|
|
|
/* Initialize the firmware */
|
|
/* Initialize the firmware */
|
|
- err = hermes_init(hw);
|
|
|
|
|
|
+ err = orinoco_reinit_firmware(dev);
|
|
if (err != 0) {
|
|
if (err != 0) {
|
|
printk(KERN_ERR "%s: failed to initialize firmware (err = %d)\n",
|
|
printk(KERN_ERR "%s: failed to initialize firmware (err = %d)\n",
|
|
dev->name, err);
|
|
dev->name, err);
|
|
@@ -2409,25 +2409,6 @@ static int orinoco_init(struct net_device *dev)
|
|
priv->wep_on = 0;
|
|
priv->wep_on = 0;
|
|
priv->tx_key = 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
|
|
/* Make the hardware available, as long as it hasn't been
|
|
* removed elsewhere (e.g. by PCMCIA hot unplug) */
|
|
* removed elsewhere (e.g. by PCMCIA hot unplug) */
|
|
spin_lock_irq(&priv->lock);
|
|
spin_lock_irq(&priv->lock);
|