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

Commit 09d7a96f authored by Jean Delvare's avatar Jean Delvare Committed by Stefan Richter
Browse files

ieee1394: eth1394: Move common recv_init code to helper function



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: default avatarJean Delvare <khali@linux-fr.org>
Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent 70093cfd
Loading
Loading
Loading
Loading
+31 −40
Original line number Diff line number Diff line
@@ -208,15 +208,10 @@ static struct hpsb_highlevel eth1394_highlevel = {
};


/* This is called after an "ifup" */
static int ether1394_open (struct net_device *dev)
static int ether1394_recv_init(struct net_device *dev)
{
	struct eth1394_priv *priv = netdev_priv(dev);
	int ret = 0;

	/* 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,
@@ -228,17 +223,29 @@ static int ether1394_open (struct net_device *dev)
			      "Could not allocate isochronous receive "
			      "context for the broadcast channel\n");
		priv->bc_state = ETHER1394_BC_ERROR;
			ret = -EAGAIN;
		} else {
		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)
{
	struct eth1394_priv *priv = netdev_priv(dev);
	int ret;

	/* Something bad happened, don't even try */
	if (priv->bc_state == ETHER1394_BC_ERROR) {
		/* we'll try again */
		ret = ether1394_recv_init(dev);
		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)