orinoco: Move FID allocation to hw.c
authorDavid Kilroy <kilroyd@googlemail.com>
Thu, 18 Jun 2009 22:21:20 +0000 (23:21 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 10 Jul 2009 19:01:43 +0000 (15:01 -0400)
This is part of refactorring the initialisation code so that we can
load the firmware before registerring with netdev.

Signed-off-by: David Kilroy <kilroyd@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/orinoco/hw.c
drivers/net/wireless/orinoco/hw.h
drivers/net/wireless/orinoco/main.c

index 40dc25c7d0ebc67b6e4a7cc96ddba794aa56e9a1..0f6426d54f28bc90b12f7e3745d8e92b298653b8 100644 (file)
@@ -15,6 +15,9 @@
 
 #define SYMBOL_MAX_VER_LEN     (14)
 
+/* Symbol firmware has a bug allocating buffers larger than this */
+#define TX_NICBUF_SIZE_BUG     1585
+
 /********************************************************************/
 /* Data tables                                                      */
 /********************************************************************/
@@ -364,6 +367,26 @@ out:
        return err;
 }
 
+int orinoco_hw_allocate_fid(struct orinoco_private *priv)
+{
+       struct net_device *dev = priv->ndev;
+       struct hermes *hw = &priv->hw;
+       int err;
+
+       err = hermes_allocate(hw, priv->nicbuf_size, &priv->txfid);
+       if (err == -EIO && priv->nicbuf_size > TX_NICBUF_SIZE_BUG) {
+               /* Try workaround for old Symbol firmware bug */
+               priv->nicbuf_size = TX_NICBUF_SIZE_BUG;
+               err = hermes_allocate(hw, priv->nicbuf_size, &priv->txfid);
+
+               printk(KERN_WARNING "%s: firmware ALLOC bug detected "
+                      "(old Symbol firmware?). Work around %s\n",
+                      dev->name, err ? "failed!" : "ok.");
+       }
+
+       return err;
+}
+
 int orinoco_get_bitratemode(int bitrate, int automatic)
 {
        int ratemode = -1;
index 6186e44f54e98911357dfce72ccf0e4653279721..89277de9087607ea5cadf201cfd853fc826c3987 100644 (file)
@@ -25,6 +25,7 @@ struct dev_addr_list;
 
 int determine_fw_capabilities(struct orinoco_private *priv);
 int orinoco_hw_read_card_settings(struct orinoco_private *priv, u8 *dev_addr);
+int orinoco_hw_allocate_fid(struct orinoco_private *priv);
 int orinoco_get_bitratemode(int bitrate, int automatic);
 void orinoco_get_ratemode_cfg(int ratemode, int *bitrate, int *automatic);
 
index 0fe9420c4905900d9760f0e49fe5a91d7b5636ce..58a48db692e3ed86404f5f7bd1691f1d5be4dd05 100644 (file)
@@ -147,7 +147,6 @@ static const u8 encaps_hdr[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00};
                                            * how many events the
                                            * device could
                                            * legitimately generate */
-#define TX_NICBUF_SIZE_BUG     1585            /* Bug in Symbol firmware */
 
 #define DUMMY_FID              0xFFFF
 
@@ -1574,26 +1573,6 @@ int __orinoco_down(struct net_device *dev)
 }
 EXPORT_SYMBOL(__orinoco_down);
 
-static int orinoco_allocate_fid(struct net_device *dev)
-{
-       struct orinoco_private *priv = netdev_priv(dev);
-       struct hermes *hw = &priv->hw;
-       int err;
-
-       err = hermes_allocate(hw, priv->nicbuf_size, &priv->txfid);
-       if (err == -EIO && priv->nicbuf_size > TX_NICBUF_SIZE_BUG) {
-               /* Try workaround for old Symbol firmware bug */
-               priv->nicbuf_size = TX_NICBUF_SIZE_BUG;
-               err = hermes_allocate(hw, priv->nicbuf_size, &priv->txfid);
-
-               printk(KERN_WARNING "%s: firmware ALLOC bug detected "
-                      "(old Symbol firmware?). Work around %s\n",
-                      dev->name, err ? "failed!" : "ok.");
-       }
-
-       return err;
-}
-
 int orinoco_reinit_firmware(struct net_device *dev)
 {
        struct orinoco_private *priv = netdev_priv(dev);
@@ -1607,7 +1586,7 @@ int orinoco_reinit_firmware(struct net_device *dev)
                        priv->do_fw_download = 0;
        }
        if (!err)
-               err = orinoco_allocate_fid(dev);
+               err = orinoco_hw_allocate_fid(priv);
 
        return err;
 }
@@ -2167,7 +2146,7 @@ static int orinoco_init(struct net_device *dev)
        if (err)
                goto out;
 
-       err = orinoco_allocate_fid(dev);
+       err = orinoco_hw_allocate_fid(priv);
        if (err) {
                printk(KERN_ERR "%s: failed to allocate NIC buffer!\n",
                       dev->name);