summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@redhat.com>2004-04-16 05:01:32 -0400
committerJeff Garzik <jgarzik@redhat.com>2004-04-16 05:01:32 -0400
commit73da2ff683cb51fa5f6590a0d97b23d41b8d524c (patch)
treee1656a70d5b0d9ca50a847fe8058d26a738fff79
parent1e785100aac62a5ce0e467d6cc504b8e7f1d3bc5 (diff)
[netdrvr via-rhine] Fix MII phy scanning
Noticed by Roger Luethi, via-rhine maintainer.
-rw-r--r--drivers/net/via-rhine.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c
index 84289ffeff54..8531002207ac 100644
--- a/drivers/net/via-rhine.c
+++ b/drivers/net/via-rhine.c
@@ -28,10 +28,10 @@
Linux kernel version history:
-
+
LK1.1.0:
- Jeff Garzik: softnet 'n stuff
-
+
LK1.1.1:
- Justin Guyett: softnet and locking fixes
- Jeff Garzik: use PCI interface
@@ -58,7 +58,7 @@
LK1.1.6:
- Urban Widmark: merges from Beckers 1.08b version (VT6102 + mdio)
set netif_running_on/off on startup, del_timer_sync
-
+
LK1.1.7:
- Manfred Spraul: added reset into tx_timeout
@@ -83,7 +83,7 @@
LK1.1.13 (jgarzik):
- Add ethtool support
- Replace some MII-related magic numbers with constants
-
+
LK1.1.14 (Ivan G.):
- fixes comments for Rhine-III
- removes W_MAX_TIMEOUT (unused)
@@ -92,7 +92,7 @@
- sends chip_id as a parameter to wait_for_reset since np is not
initialized on first call
- changes mmio "else if (chip_id==VT6102)" to "else" so it will work
- for Rhine-III's (documentation says same bit is correct)
+ for Rhine-III's (documentation says same bit is correct)
- transmit frame queue message is off by one - fixed
- adds IntrNormalSummary to "Something Wicked" exclusion list
so normal interrupts will not trigger the message (src: Donald Becker)
@@ -316,10 +316,10 @@ IIId. Synchronization
The driver runs as two independent, single-threaded flows of control. One
is the send-packet routine, which enforces single-threaded use by the
-dev->priv->lock spinlock. The other thread is the interrupt handler, which
+dev->priv->lock spinlock. The other thread is the interrupt handler, which
is single threaded by the hardware and interrupt handling software.
-The send packet thread has partial control over the Tx ring. It locks the
+The send packet thread has partial control over the Tx ring. It locks the
dev->priv->lock whenever it's queuing a Tx packet. If the next slot in the ring
is not available it stops the transmit queue by calling netif_stop_queue.
@@ -639,7 +639,7 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
#ifdef USE_MEM
long ioaddr0;
#endif
-
+
/* when built into the kernel, we only print version if device is found */
#ifndef MODULE
static int printed_version;
@@ -660,7 +660,7 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
printk(KERN_ERR "32-bit PCI DMA addresses not supported by the card!?\n");
goto err_out;
}
-
+
/* sanity check */
if ((pci_resource_len (pdev, 0) < io_size) ||
(pci_resource_len (pdev, 1) < io_size)) {
@@ -681,7 +681,7 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
}
SET_MODULE_OWNER(dev);
SET_NETDEV_DEV(dev, &pdev->dev);
-
+
if (pci_request_regions(pdev, shortname))
goto err_out_free_netdev;
@@ -847,6 +847,8 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
netif_carrier_on(dev);
else
netif_carrier_off(dev);
+
+ break;
}
}
np->mii_cnt = phy_idx;
@@ -891,7 +893,7 @@ static int alloc_ring(struct net_device* dev)
void *ring;
dma_addr_t ring_dma;
- ring = pci_alloc_consistent(np->pdev,
+ ring = pci_alloc_consistent(np->pdev,
RX_RING_SIZE * sizeof(struct rx_desc) +
TX_RING_SIZE * sizeof(struct tx_desc),
&ring_dma);
@@ -903,7 +905,7 @@ static int alloc_ring(struct net_device* dev)
np->tx_bufs = pci_alloc_consistent(np->pdev, PKT_BUF_SZ * TX_RING_SIZE,
&np->tx_bufs_dma);
if (np->tx_bufs == NULL) {
- pci_free_consistent(np->pdev,
+ pci_free_consistent(np->pdev,
RX_RING_SIZE * sizeof(struct rx_desc) +
TX_RING_SIZE * sizeof(struct tx_desc),
ring, ring_dma);
@@ -923,7 +925,7 @@ void free_ring(struct net_device* dev)
{
struct netdev_private *np = dev->priv;
- pci_free_consistent(np->pdev,
+ pci_free_consistent(np->pdev,
RX_RING_SIZE * sizeof(struct rx_desc) +
TX_RING_SIZE * sizeof(struct tx_desc),
np->rx_ring, np->rx_ring_dma);
@@ -948,7 +950,7 @@ static void alloc_rbufs(struct net_device *dev)
np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
np->rx_head_desc = &np->rx_ring[0];
next = np->rx_ring_dma;
-
+
/* Init the ring entries */
for (i = 0; i < RX_RING_SIZE; i++) {
np->rx_ring[i].rx_status = 0;
@@ -1151,7 +1153,7 @@ static int via_rhine_open(struct net_device *dev)
if (debug > 1)
printk(KERN_DEBUG "%s: via_rhine_open() irq %d.\n",
dev->name, np->pdev->irq);
-
+
i = alloc_ring(dev);
if (i)
return i;
@@ -1266,7 +1268,7 @@ static void via_rhine_tx_timeout (struct net_device *dev)
/* Reinitialize the hardware. */
wait_for_reset(dev, np->chip_id, dev->name);
init_registers(dev);
-
+
spin_unlock(&np->lock);
enable_irq(np->pdev->irq);
@@ -1316,7 +1318,7 @@ static int via_rhine_start_tx(struct sk_buff *skb, struct net_device *dev)
np->tx_ring[entry].addr = cpu_to_le32(np->tx_skbuff_dma[entry]);
}
- np->tx_ring[entry].desc_length =
+ np->tx_ring[entry].desc_length =
cpu_to_le32(TXDESC | (skb->len >= ETH_ZLEN ? skb->len : ETH_ZLEN));
/* lock eth irq */
@@ -1364,7 +1366,7 @@ static irqreturn_t via_rhine_interrupt(int irq, void *dev_instance, struct pt_re
int handled = 0;
ioaddr = dev->base_addr;
-
+
while ((intr_status = get_intr_status(dev))) {
handled = 1;
@@ -1584,7 +1586,7 @@ static void via_rhine_rx(struct net_device *dev)
break; /* Better luck next round. */
skb->dev = dev; /* Mark as being used by this device. */
np->rx_skbuff_dma[entry] =
- pci_map_single(np->pdev, skb->tail, np->rx_buf_sz,
+ pci_map_single(np->pdev, skb->tail, np->rx_buf_sz,
PCI_DMA_FROMDEVICE);
np->rx_ring[entry].addr = cpu_to_le32(np->rx_skbuff_dma[entry]);
}
@@ -1892,7 +1894,7 @@ static int via_rhine_close(struct net_device *dev)
static void __devexit via_rhine_remove_one (struct pci_dev *pdev)
{
struct net_device *dev = pci_get_drvdata(pdev);
-
+
unregister_netdev(dev);
pci_release_regions(pdev);