Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
73da2ff6
Commit
73da2ff6
authored
Apr 16, 2004
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[netdrvr via-rhine] Fix MII phy scanning
Noticed by Roger Luethi, via-rhine maintainer.
parent
1e785100
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
22 additions
and
20 deletions
+22
-20
drivers/net/via-rhine.c
drivers/net/via-rhine.c
+22
-20
No files found.
drivers/net/via-rhine.c
View file @
73da2ff6
...
@@ -28,10 +28,10 @@
...
@@ -28,10 +28,10 @@
Linux kernel version history:
Linux kernel version history:
LK1.1.0:
LK1.1.0:
- Jeff Garzik: softnet 'n stuff
- Jeff Garzik: softnet 'n stuff
LK1.1.1:
LK1.1.1:
- Justin Guyett: softnet and locking fixes
- Justin Guyett: softnet and locking fixes
- Jeff Garzik: use PCI interface
- Jeff Garzik: use PCI interface
...
@@ -58,7 +58,7 @@
...
@@ -58,7 +58,7 @@
LK1.1.6:
LK1.1.6:
- Urban Widmark: merges from Beckers 1.08b version (VT6102 + mdio)
- Urban Widmark: merges from Beckers 1.08b version (VT6102 + mdio)
set netif_running_on/off on startup, del_timer_sync
set netif_running_on/off on startup, del_timer_sync
LK1.1.7:
LK1.1.7:
- Manfred Spraul: added reset into tx_timeout
- Manfred Spraul: added reset into tx_timeout
...
@@ -83,7 +83,7 @@
...
@@ -83,7 +83,7 @@
LK1.1.13 (jgarzik):
LK1.1.13 (jgarzik):
- Add ethtool support
- Add ethtool support
- Replace some MII-related magic numbers with constants
- Replace some MII-related magic numbers with constants
LK1.1.14 (Ivan G.):
LK1.1.14 (Ivan G.):
- fixes comments for Rhine-III
- fixes comments for Rhine-III
- removes W_MAX_TIMEOUT (unused)
- removes W_MAX_TIMEOUT (unused)
...
@@ -92,7 +92,7 @@
...
@@ -92,7 +92,7 @@
- sends chip_id as a parameter to wait_for_reset since np is not
- sends chip_id as a parameter to wait_for_reset since np is not
initialized on first call
initialized on first call
- changes mmio "else if (chip_id==VT6102)" to "else" so it will work
- 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
- transmit frame queue message is off by one - fixed
- adds IntrNormalSummary to "Something Wicked" exclusion list
- adds IntrNormalSummary to "Something Wicked" exclusion list
so normal interrupts will not trigger the message (src: Donald Becker)
so normal interrupts will not trigger the message (src: Donald Becker)
...
@@ -316,10 +316,10 @@ IIId. Synchronization
...
@@ -316,10 +316,10 @@ IIId. Synchronization
The driver runs as two independent, single-threaded flows of control. One
The driver runs as two independent, single-threaded flows of control. One
is the send-packet routine, which enforces single-threaded use by the
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.
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
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.
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,
...
@@ -639,7 +639,7 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
#ifdef USE_MEM
#ifdef USE_MEM
long
ioaddr0
;
long
ioaddr0
;
#endif
#endif
/* when built into the kernel, we only print version if device is found */
/* when built into the kernel, we only print version if device is found */
#ifndef MODULE
#ifndef MODULE
static
int
printed_version
;
static
int
printed_version
;
...
@@ -660,7 +660,7 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
...
@@ -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
"
);
printk
(
KERN_ERR
"32-bit PCI DMA addresses not supported by the card!?
\n
"
);
goto
err_out
;
goto
err_out
;
}
}
/* sanity check */
/* sanity check */
if
((
pci_resource_len
(
pdev
,
0
)
<
io_size
)
||
if
((
pci_resource_len
(
pdev
,
0
)
<
io_size
)
||
(
pci_resource_len
(
pdev
,
1
)
<
io_size
))
{
(
pci_resource_len
(
pdev
,
1
)
<
io_size
))
{
...
@@ -681,7 +681,7 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
...
@@ -681,7 +681,7 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
}
}
SET_MODULE_OWNER
(
dev
);
SET_MODULE_OWNER
(
dev
);
SET_NETDEV_DEV
(
dev
,
&
pdev
->
dev
);
SET_NETDEV_DEV
(
dev
,
&
pdev
->
dev
);
if
(
pci_request_regions
(
pdev
,
shortname
))
if
(
pci_request_regions
(
pdev
,
shortname
))
goto
err_out_free_netdev
;
goto
err_out_free_netdev
;
...
@@ -847,6 +847,8 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
...
@@ -847,6 +847,8 @@ static int __devinit via_rhine_init_one (struct pci_dev *pdev,
netif_carrier_on
(
dev
);
netif_carrier_on
(
dev
);
else
else
netif_carrier_off
(
dev
);
netif_carrier_off
(
dev
);
break
;
}
}
}
}
np
->
mii_cnt
=
phy_idx
;
np
->
mii_cnt
=
phy_idx
;
...
@@ -891,7 +893,7 @@ static int alloc_ring(struct net_device* dev)
...
@@ -891,7 +893,7 @@ static int alloc_ring(struct net_device* dev)
void
*
ring
;
void
*
ring
;
dma_addr_t
ring_dma
;
dma_addr_t
ring_dma
;
ring
=
pci_alloc_consistent
(
np
->
pdev
,
ring
=
pci_alloc_consistent
(
np
->
pdev
,
RX_RING_SIZE
*
sizeof
(
struct
rx_desc
)
+
RX_RING_SIZE
*
sizeof
(
struct
rx_desc
)
+
TX_RING_SIZE
*
sizeof
(
struct
tx_desc
),
TX_RING_SIZE
*
sizeof
(
struct
tx_desc
),
&
ring_dma
);
&
ring_dma
);
...
@@ -903,7 +905,7 @@ static int alloc_ring(struct net_device* dev)
...
@@ -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
=
pci_alloc_consistent
(
np
->
pdev
,
PKT_BUF_SZ
*
TX_RING_SIZE
,
&
np
->
tx_bufs_dma
);
&
np
->
tx_bufs_dma
);
if
(
np
->
tx_bufs
==
NULL
)
{
if
(
np
->
tx_bufs
==
NULL
)
{
pci_free_consistent
(
np
->
pdev
,
pci_free_consistent
(
np
->
pdev
,
RX_RING_SIZE
*
sizeof
(
struct
rx_desc
)
+
RX_RING_SIZE
*
sizeof
(
struct
rx_desc
)
+
TX_RING_SIZE
*
sizeof
(
struct
tx_desc
),
TX_RING_SIZE
*
sizeof
(
struct
tx_desc
),
ring
,
ring_dma
);
ring
,
ring_dma
);
...
@@ -923,7 +925,7 @@ void free_ring(struct net_device* dev)
...
@@ -923,7 +925,7 @@ void free_ring(struct net_device* dev)
{
{
struct
netdev_private
*
np
=
dev
->
priv
;
struct
netdev_private
*
np
=
dev
->
priv
;
pci_free_consistent
(
np
->
pdev
,
pci_free_consistent
(
np
->
pdev
,
RX_RING_SIZE
*
sizeof
(
struct
rx_desc
)
+
RX_RING_SIZE
*
sizeof
(
struct
rx_desc
)
+
TX_RING_SIZE
*
sizeof
(
struct
tx_desc
),
TX_RING_SIZE
*
sizeof
(
struct
tx_desc
),
np
->
rx_ring
,
np
->
rx_ring_dma
);
np
->
rx_ring
,
np
->
rx_ring_dma
);
...
@@ -948,7 +950,7 @@ static void alloc_rbufs(struct net_device *dev)
...
@@ -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_buf_sz
=
(
dev
->
mtu
<=
1500
?
PKT_BUF_SZ
:
dev
->
mtu
+
32
);
np
->
rx_head_desc
=
&
np
->
rx_ring
[
0
];
np
->
rx_head_desc
=
&
np
->
rx_ring
[
0
];
next
=
np
->
rx_ring_dma
;
next
=
np
->
rx_ring_dma
;
/* Init the ring entries */
/* Init the ring entries */
for
(
i
=
0
;
i
<
RX_RING_SIZE
;
i
++
)
{
for
(
i
=
0
;
i
<
RX_RING_SIZE
;
i
++
)
{
np
->
rx_ring
[
i
].
rx_status
=
0
;
np
->
rx_ring
[
i
].
rx_status
=
0
;
...
@@ -1151,7 +1153,7 @@ static int via_rhine_open(struct net_device *dev)
...
@@ -1151,7 +1153,7 @@ static int via_rhine_open(struct net_device *dev)
if
(
debug
>
1
)
if
(
debug
>
1
)
printk
(
KERN_DEBUG
"%s: via_rhine_open() irq %d.
\n
"
,
printk
(
KERN_DEBUG
"%s: via_rhine_open() irq %d.
\n
"
,
dev
->
name
,
np
->
pdev
->
irq
);
dev
->
name
,
np
->
pdev
->
irq
);
i
=
alloc_ring
(
dev
);
i
=
alloc_ring
(
dev
);
if
(
i
)
if
(
i
)
return
i
;
return
i
;
...
@@ -1266,7 +1268,7 @@ static void via_rhine_tx_timeout (struct net_device *dev)
...
@@ -1266,7 +1268,7 @@ static void via_rhine_tx_timeout (struct net_device *dev)
/* Reinitialize the hardware. */
/* Reinitialize the hardware. */
wait_for_reset
(
dev
,
np
->
chip_id
,
dev
->
name
);
wait_for_reset
(
dev
,
np
->
chip_id
,
dev
->
name
);
init_registers
(
dev
);
init_registers
(
dev
);
spin_unlock
(
&
np
->
lock
);
spin_unlock
(
&
np
->
lock
);
enable_irq
(
np
->
pdev
->
irq
);
enable_irq
(
np
->
pdev
->
irq
);
...
@@ -1316,7 +1318,7 @@ static int via_rhine_start_tx(struct sk_buff *skb, struct net_device *dev)
...
@@ -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
].
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
));
cpu_to_le32
(
TXDESC
|
(
skb
->
len
>=
ETH_ZLEN
?
skb
->
len
:
ETH_ZLEN
));
/* lock eth irq */
/* lock eth irq */
...
@@ -1364,7 +1366,7 @@ static irqreturn_t via_rhine_interrupt(int irq, void *dev_instance, struct pt_re
...
@@ -1364,7 +1366,7 @@ static irqreturn_t via_rhine_interrupt(int irq, void *dev_instance, struct pt_re
int
handled
=
0
;
int
handled
=
0
;
ioaddr
=
dev
->
base_addr
;
ioaddr
=
dev
->
base_addr
;
while
((
intr_status
=
get_intr_status
(
dev
)))
{
while
((
intr_status
=
get_intr_status
(
dev
)))
{
handled
=
1
;
handled
=
1
;
...
@@ -1584,7 +1586,7 @@ static void via_rhine_rx(struct net_device *dev)
...
@@ -1584,7 +1586,7 @@ static void via_rhine_rx(struct net_device *dev)
break
;
/* Better luck next round. */
break
;
/* Better luck next round. */
skb
->
dev
=
dev
;
/* Mark as being used by this device. */
skb
->
dev
=
dev
;
/* Mark as being used by this device. */
np
->
rx_skbuff_dma
[
entry
]
=
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
);
PCI_DMA_FROMDEVICE
);
np
->
rx_ring
[
entry
].
addr
=
cpu_to_le32
(
np
->
rx_skbuff_dma
[
entry
]);
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)
...
@@ -1892,7 +1894,7 @@ static int via_rhine_close(struct net_device *dev)
static
void
__devexit
via_rhine_remove_one
(
struct
pci_dev
*
pdev
)
static
void
__devexit
via_rhine_remove_one
(
struct
pci_dev
*
pdev
)
{
{
struct
net_device
*
dev
=
pci_get_drvdata
(
pdev
);
struct
net_device
*
dev
=
pci_get_drvdata
(
pdev
);
unregister_netdev
(
dev
);
unregister_netdev
(
dev
);
pci_release_regions
(
pdev
);
pci_release_regions
(
pdev
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment