ieee1394: eth1394: Move common recv_init code to helper function
authorJean Delvare <khali@linux-fr.org>
Sun, 1 Apr 2007 08:06:33 +0000 (10:06 +0200)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Sun, 29 Apr 2007 22:00:30 +0000 (00:00 +0200)
There is some common code between ether1394_open and ether1394_add_host
which can be moved to a separate helper function for a slightly smaller
eth1394 driver (-160 bytes on i386.)

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
drivers/ieee1394/eth1394.c

index b4fa754..f7b47b9 100644 (file)
@@ -208,38 +208,45 @@ static struct hpsb_highlevel eth1394_highlevel = {
 };
 
 
+static int ether1394_recv_init(struct net_device *dev)
+{
+       struct eth1394_priv *priv = netdev_priv(dev);
+
+       priv->iso = hpsb_iso_recv_init(priv->host,
+                                      ETHER1394_ISO_BUF_SIZE,
+                                      ETHER1394_GASP_BUFFERS,
+                                      priv->broadcast_channel,
+                                      HPSB_ISO_DMA_PACKET_PER_BUFFER,
+                                      1, ether1394_iso);
+       if (priv->iso == NULL) {
+               ETH1394_PRINT(KERN_ERR, dev->name,
+                             "Could not allocate isochronous receive "
+                             "context for the broadcast channel\n");
+               priv->bc_state = ETHER1394_BC_ERROR;
+               return -EAGAIN;
+       }
+
+       if (hpsb_iso_recv_start(priv->iso, -1, (1 << 3), -1) < 0)
+               priv->bc_state = ETHER1394_BC_STOPPED;
+       else
+               priv->bc_state = ETHER1394_BC_RUNNING;
+       return 0;
+}
+
 /* This is called after an "ifup" */
-static int ether1394_open (struct net_device *dev)
+static int ether1394_open(struct net_device *dev)
 {
        struct eth1394_priv *priv = netdev_priv(dev);
-       int ret = 0;
+       int ret;
 
        /* Something bad happened, don't even try */
        if (priv->bc_state == ETHER1394_BC_ERROR) {
                /* we'll try again */
-               priv->iso = hpsb_iso_recv_init(priv->host,
-                                              ETHER1394_ISO_BUF_SIZE,
-                                              ETHER1394_GASP_BUFFERS,
-                                              priv->broadcast_channel,
-                                              HPSB_ISO_DMA_PACKET_PER_BUFFER,
-                                              1, ether1394_iso);
-               if (priv->iso == NULL) {
-                       ETH1394_PRINT(KERN_ERR, dev->name,
-                                     "Could not allocate isochronous receive "
-                                     "context for the broadcast channel\n");
-                       priv->bc_state = ETHER1394_BC_ERROR;
-                       ret = -EAGAIN;
-               } else {
-                       if (hpsb_iso_recv_start(priv->iso, -1, (1 << 3), -1) < 0)
-                               priv->bc_state = ETHER1394_BC_STOPPED;
-                       else
-                               priv->bc_state = ETHER1394_BC_RUNNING;
-               }
+               ret = ether1394_recv_init(dev);
+               if (ret)
+                       return ret;
        }
 
-       if (ret)
-               return ret;
-
        netif_start_queue (dev);
        return 0;
 }
@@ -628,23 +635,7 @@ static void ether1394_add_host (struct hpsb_host *host)
         * be checked when the eth device is opened. */
        priv->broadcast_channel = host->csr.broadcast_channel & 0x3f;
 
-       priv->iso = hpsb_iso_recv_init(host,
-                                      ETHER1394_ISO_BUF_SIZE,
-                                      ETHER1394_GASP_BUFFERS,
-                                      priv->broadcast_channel,
-                                      HPSB_ISO_DMA_PACKET_PER_BUFFER,
-                                      1, ether1394_iso);
-       if (priv->iso == NULL) {
-               ETH1394_PRINT(KERN_ERR, dev->name,
-                             "Could not allocate isochronous receive context "
-                             "for the broadcast channel\n");
-               priv->bc_state = ETHER1394_BC_ERROR;
-       } else {
-               if (hpsb_iso_recv_start(priv->iso, -1, (1 << 3), -1) < 0)
-                       priv->bc_state = ETHER1394_BC_STOPPED;
-               else
-                       priv->bc_state = ETHER1394_BC_RUNNING;
-       }
+       ether1394_recv_init(dev);
        return;
 out:
        if (dev)