diff options
author | Mike McCormack <mikem@ring3k.org> | 2010-02-12 06:58:04 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-02-12 16:21:03 -0800 |
commit | ea0f71e59c20ea1e413cacfc971e051b3d6c6f64 (patch) | |
tree | 9b86b5dc7b3f0c34d2b0e53ab025e6d0a3d86782 /drivers/net/sky2.c | |
parent | 200ac492b3c366346fcabd11897fadbd1a7a6599 (diff) | |
download | lwn-ea0f71e59c20ea1e413cacfc971e051b3d6c6f64.tar.gz lwn-ea0f71e59c20ea1e413cacfc971e051b3d6c6f64.zip |
sky2: Refactor sky2_up into two functions
Move hardware initialization into sky2_hw_up.
Signed-off-by: Mike McCormack <mikem@ring3k.org>
Acked-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/sky2.c')
-rw-r--r-- | drivers/net/sky2.c | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 493a82018cbd..1f0180f1f0c3 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c @@ -1525,16 +1525,16 @@ static void sky2_free_buffers(struct sky2_port *sky2) sky2->rx_ring = NULL; } -/* Bring up network interface. */ -static int sky2_up(struct net_device *dev) +static void sky2_hw_up(struct sky2_port *sky2) { - struct sky2_port *sky2 = netdev_priv(dev); struct sky2_hw *hw = sky2->hw; unsigned port = sky2->port; - u32 imask, ramsize; - int cap, err; + u32 ramsize; + int cap; struct net_device *otherdev = hw->dev[sky2->port^1]; + tx_init(sky2); + /* * On dual port PCI-X card, there is an problem where status * can be received out of order due to split transactions @@ -1546,16 +1546,7 @@ static int sky2_up(struct net_device *dev) cmd = sky2_pci_read16(hw, cap + PCI_X_CMD); cmd &= ~PCI_X_CMD_MAX_SPLIT; sky2_pci_write16(hw, cap + PCI_X_CMD, cmd); - - } - - netif_carrier_off(dev); - - err = sky2_alloc_buffers(sky2); - if (err) - goto err_out; - - tx_init(sky2); + } sky2_mac_init(hw, port); @@ -1564,7 +1555,7 @@ static int sky2_up(struct net_device *dev) if (ramsize > 0) { u32 rxspace; - pr_debug(PFX "%s: ram buffer %dK\n", dev->name, ramsize); + pr_debug(PFX "%s: ram buffer %dK\n", sky2->netdev->name, ramsize); if (ramsize < 16) rxspace = ramsize / 2; else @@ -1597,6 +1588,24 @@ static int sky2_up(struct net_device *dev) #endif sky2_rx_start(sky2); +} + +/* Bring up network interface. */ +static int sky2_up(struct net_device *dev) +{ + struct sky2_port *sky2 = netdev_priv(dev); + struct sky2_hw *hw = sky2->hw; + unsigned port = sky2->port; + u32 imask; + int err; + + netif_carrier_off(dev); + + err = sky2_alloc_buffers(sky2); + if (err) + goto err_out; + + sky2_hw_up(sky2); /* Enable interrupts from phy/mac for port */ imask = sky2_read32(hw, B0_IMSK); |