Commit 00e8b3aa authored by Gary Zambrano's avatar Gary Zambrano Committed by Jeff Garzik

[PATCH] b44: add parameter

This patch adds a parameter to init_hw() to not completely initialize
the nic for wol.
Signed-off-by: default avatarGary Zambrano <zambrano@broadcom.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 52cafd96
...@@ -101,7 +101,7 @@ MODULE_DEVICE_TABLE(pci, b44_pci_tbl); ...@@ -101,7 +101,7 @@ MODULE_DEVICE_TABLE(pci, b44_pci_tbl);
static void b44_halt(struct b44 *); static void b44_halt(struct b44 *);
static void b44_init_rings(struct b44 *); static void b44_init_rings(struct b44 *);
static void b44_init_hw(struct b44 *); static void b44_init_hw(struct b44 *, int);
static int dma_desc_align_mask; static int dma_desc_align_mask;
static int dma_desc_sync_size; static int dma_desc_sync_size;
...@@ -873,7 +873,7 @@ static int b44_poll(struct net_device *netdev, int *budget) ...@@ -873,7 +873,7 @@ static int b44_poll(struct net_device *netdev, int *budget)
spin_lock_irq(&bp->lock); spin_lock_irq(&bp->lock);
b44_halt(bp); b44_halt(bp);
b44_init_rings(bp); b44_init_rings(bp);
b44_init_hw(bp); b44_init_hw(bp, 1);
netif_wake_queue(bp->dev); netif_wake_queue(bp->dev);
spin_unlock_irq(&bp->lock); spin_unlock_irq(&bp->lock);
done = 1; done = 1;
...@@ -942,7 +942,7 @@ static void b44_tx_timeout(struct net_device *dev) ...@@ -942,7 +942,7 @@ static void b44_tx_timeout(struct net_device *dev)
b44_halt(bp); b44_halt(bp);
b44_init_rings(bp); b44_init_rings(bp);
b44_init_hw(bp); b44_init_hw(bp, 1);
spin_unlock_irq(&bp->lock); spin_unlock_irq(&bp->lock);
...@@ -1059,7 +1059,7 @@ static int b44_change_mtu(struct net_device *dev, int new_mtu) ...@@ -1059,7 +1059,7 @@ static int b44_change_mtu(struct net_device *dev, int new_mtu)
b44_halt(bp); b44_halt(bp);
dev->mtu = new_mtu; dev->mtu = new_mtu;
b44_init_rings(bp); b44_init_rings(bp);
b44_init_hw(bp); b44_init_hw(bp, 1);
spin_unlock_irq(&bp->lock); spin_unlock_irq(&bp->lock);
b44_enable_ints(bp); b44_enable_ints(bp);
...@@ -1356,13 +1356,15 @@ static int b44_set_mac_addr(struct net_device *dev, void *p) ...@@ -1356,13 +1356,15 @@ static int b44_set_mac_addr(struct net_device *dev, void *p)
* packet processing. Invoked with bp->lock held. * packet processing. Invoked with bp->lock held.
*/ */
static void __b44_set_rx_mode(struct net_device *); static void __b44_set_rx_mode(struct net_device *);
static void b44_init_hw(struct b44 *bp) static void b44_init_hw(struct b44 *bp, int full_reset)
{ {
u32 val; u32 val;
b44_chip_reset(bp); b44_chip_reset(bp);
if (full_reset) {
b44_phy_reset(bp); b44_phy_reset(bp);
b44_setup_phy(bp); b44_setup_phy(bp);
}
/* Enable CRC32, set proper LED modes and power on PHY */ /* Enable CRC32, set proper LED modes and power on PHY */
bw32(bp, B44_MAC_CTRL, MAC_CTRL_CRC32_ENAB | MAC_CTRL_PHY_LEDCTRL); bw32(bp, B44_MAC_CTRL, MAC_CTRL_CRC32_ENAB | MAC_CTRL_PHY_LEDCTRL);
...@@ -1376,6 +1378,7 @@ static void b44_init_hw(struct b44 *bp) ...@@ -1376,6 +1378,7 @@ static void b44_init_hw(struct b44 *bp)
bw32(bp, B44_TXMAXLEN, bp->dev->mtu + ETH_HLEN + 8 + RX_HEADER_LEN); bw32(bp, B44_TXMAXLEN, bp->dev->mtu + ETH_HLEN + 8 + RX_HEADER_LEN);
bw32(bp, B44_TX_WMARK, 56); /* XXX magic */ bw32(bp, B44_TX_WMARK, 56); /* XXX magic */
if (full_reset) {
bw32(bp, B44_DMATX_CTRL, DMATX_CTRL_ENABLE); bw32(bp, B44_DMATX_CTRL, DMATX_CTRL_ENABLE);
bw32(bp, B44_DMATX_ADDR, bp->tx_ring_dma + bp->dma_offset); bw32(bp, B44_DMATX_ADDR, bp->tx_ring_dma + bp->dma_offset);
bw32(bp, B44_DMARX_CTRL, (DMARX_CTRL_ENABLE | bw32(bp, B44_DMARX_CTRL, (DMARX_CTRL_ENABLE |
...@@ -1386,6 +1389,10 @@ static void b44_init_hw(struct b44 *bp) ...@@ -1386,6 +1389,10 @@ static void b44_init_hw(struct b44 *bp)
bp->rx_prod = bp->rx_pending; bp->rx_prod = bp->rx_pending;
bw32(bp, B44_MIB_CTRL, MIB_CTRL_CLR_ON_READ); bw32(bp, B44_MIB_CTRL, MIB_CTRL_CLR_ON_READ);
} else {
bw32(bp, B44_DMARX_CTRL, (DMARX_CTRL_ENABLE |
(bp->rx_offset << DMARX_CTRL_ROSHIFT)));
}
val = br32(bp, B44_ENET_CTRL); val = br32(bp, B44_ENET_CTRL);
bw32(bp, B44_ENET_CTRL, (val | ENET_CTRL_ENABLE)); bw32(bp, B44_ENET_CTRL, (val | ENET_CTRL_ENABLE));
...@@ -1401,7 +1408,7 @@ static int b44_open(struct net_device *dev) ...@@ -1401,7 +1408,7 @@ static int b44_open(struct net_device *dev)
goto out; goto out;
b44_init_rings(bp); b44_init_rings(bp);
b44_init_hw(bp); b44_init_hw(bp, 1);
b44_check_phy(bp); b44_check_phy(bp);
...@@ -1511,7 +1518,7 @@ static int b44_close(struct net_device *dev) ...@@ -1511,7 +1518,7 @@ static int b44_close(struct net_device *dev)
netif_poll_enable(dev); netif_poll_enable(dev);
if (bp->flags & B44_FLAG_WOL_ENABLE) { if (bp->flags & B44_FLAG_WOL_ENABLE) {
b44_init_hw(bp); b44_init_hw(bp, 0);
b44_setup_wol(bp); b44_setup_wol(bp);
} }
...@@ -1786,7 +1793,7 @@ static int b44_set_ringparam(struct net_device *dev, ...@@ -1786,7 +1793,7 @@ static int b44_set_ringparam(struct net_device *dev,
b44_halt(bp); b44_halt(bp);
b44_init_rings(bp); b44_init_rings(bp);
b44_init_hw(bp); b44_init_hw(bp, 1);
netif_wake_queue(bp->dev); netif_wake_queue(bp->dev);
spin_unlock_irq(&bp->lock); spin_unlock_irq(&bp->lock);
...@@ -1829,7 +1836,7 @@ static int b44_set_pauseparam(struct net_device *dev, ...@@ -1829,7 +1836,7 @@ static int b44_set_pauseparam(struct net_device *dev,
if (bp->flags & B44_FLAG_PAUSE_AUTO) { if (bp->flags & B44_FLAG_PAUSE_AUTO) {
b44_halt(bp); b44_halt(bp);
b44_init_rings(bp); b44_init_rings(bp);
b44_init_hw(bp); b44_init_hw(bp, 1);
} else { } else {
__b44_set_flow_ctrl(bp, bp->flags); __b44_set_flow_ctrl(bp, bp->flags);
} }
...@@ -2188,7 +2195,7 @@ static int b44_suspend(struct pci_dev *pdev, pm_message_t state) ...@@ -2188,7 +2195,7 @@ static int b44_suspend(struct pci_dev *pdev, pm_message_t state)
free_irq(dev->irq, dev); free_irq(dev->irq, dev);
if (bp->flags & B44_FLAG_WOL_ENABLE) { if (bp->flags & B44_FLAG_WOL_ENABLE) {
b44_init_hw(bp); b44_init_hw(bp, 0);
b44_setup_wol(bp); b44_setup_wol(bp);
} }
pci_disable_device(pdev); pci_disable_device(pdev);
...@@ -2213,7 +2220,7 @@ static int b44_resume(struct pci_dev *pdev) ...@@ -2213,7 +2220,7 @@ static int b44_resume(struct pci_dev *pdev)
spin_lock_irq(&bp->lock); spin_lock_irq(&bp->lock);
b44_init_rings(bp); b44_init_rings(bp);
b44_init_hw(bp); b44_init_hw(bp, 1);
netif_device_attach(bp->dev); netif_device_attach(bp->dev);
spin_unlock_irq(&bp->lock); spin_unlock_irq(&bp->lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment