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
f3b197ac
Commit
f3b197ac
authored
May 26, 2006
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[netdrvr] trim trailing whitespace: 8139*.c, epic100, forcedeth, tulip/*
parent
4c0c2fd4
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
686 additions
and
686 deletions
+686
-686
drivers/net/8139cp.c
drivers/net/8139cp.c
+7
-7
drivers/net/8139too.c
drivers/net/8139too.c
+7
-7
drivers/net/epic100.c
drivers/net/epic100.c
+28
-28
drivers/net/forcedeth.c
drivers/net/forcedeth.c
+20
-20
drivers/net/tulip/de2104x.c
drivers/net/tulip/de2104x.c
+29
-29
drivers/net/tulip/de4x5.c
drivers/net/tulip/de4x5.c
+358
-358
drivers/net/tulip/de4x5.h
drivers/net/tulip/de4x5.h
+7
-7
drivers/net/tulip/dmfe.c
drivers/net/tulip/dmfe.c
+1
-1
drivers/net/tulip/eeprom.c
drivers/net/tulip/eeprom.c
+4
-4
drivers/net/tulip/interrupt.c
drivers/net/tulip/interrupt.c
+63
-63
drivers/net/tulip/media.c
drivers/net/tulip/media.c
+1
-1
drivers/net/tulip/tulip.h
drivers/net/tulip/tulip.h
+1
-1
drivers/net/tulip/tulip_core.c
drivers/net/tulip/tulip_core.c
+3
-3
drivers/net/tulip/uli526x.c
drivers/net/tulip/uli526x.c
+40
-40
drivers/net/tulip/winbond-840.c
drivers/net/tulip/winbond-840.c
+13
-13
drivers/net/tulip/xircom_cb.c
drivers/net/tulip/xircom_cb.c
+104
-104
No files found.
drivers/net/8139cp.c
View file @
f3b197ac
...
...
@@ -19,11 +19,11 @@
See the file COPYING in this distribution for more information.
Contributors:
Wake-on-LAN support - Felipe Damasio <felipewd@terra.com.br>
PCI suspend/resume - Felipe Damasio <felipewd@terra.com.br>
LinkChg interrupt - Felipe Damasio <felipewd@terra.com.br>
TODO:
* Test Tx checksumming thoroughly
* Implement dev->tx_timeout
...
...
@@ -461,7 +461,7 @@ static void cp_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
static
inline
void
cp_set_rxbufsize
(
struct
cp_private
*
cp
)
{
unsigned
int
mtu
=
cp
->
dev
->
mtu
;
if
(
mtu
>
ETH_DATA_LEN
)
/* MTU + ethernet header + FCS + optional VLAN tag */
cp
->
rx_buf_sz
=
mtu
+
ETH_HLEN
+
8
;
...
...
@@ -510,7 +510,7 @@ static void cp_rx_err_acct (struct cp_private *cp, unsigned rx_tail,
static
inline
unsigned
int
cp_rx_csum_ok
(
u32
status
)
{
unsigned
int
protocol
=
(
status
>>
16
)
&
0x3
;
if
(
likely
((
protocol
==
RxProtoTCP
)
&&
(
!
(
status
&
TCPFail
))))
return
1
;
else
if
((
protocol
==
RxProtoUDP
)
&&
(
!
(
status
&
UDPFail
)))
...
...
@@ -1061,7 +1061,7 @@ static void cp_init_hw (struct cp_private *cp)
cpw8
(
Config3
,
PARMEnable
);
cp
->
wol_enabled
=
0
;
cpw8
(
Config5
,
cpr8
(
Config5
)
&
PMEStatus
);
cpw8
(
Config5
,
cpr8
(
Config5
)
&
PMEStatus
);
cpw32_f
(
HiTxRingAddr
,
0
);
cpw32_f
(
HiTxRingAddr
+
4
,
0
);
...
...
@@ -1351,7 +1351,7 @@ static void netdev_get_wol (struct cp_private *cp,
WAKE_MCAST
|
WAKE_UCAST
;
/* We don't need to go on if WOL is disabled */
if
(
!
cp
->
wol_enabled
)
return
;
options
=
cpr8
(
Config3
);
if
(
options
&
LinkUp
)
wol
->
wolopts
|=
WAKE_PHY
;
if
(
options
&
MagicPacket
)
wol
->
wolopts
|=
WAKE_MAGIC
;
...
...
@@ -1919,7 +1919,7 @@ static int cp_resume (struct pci_dev *pdev)
mii_check_media
(
&
cp
->
mii_if
,
netif_msg_link
(
cp
),
FALSE
);
spin_unlock_irqrestore
(
&
cp
->
lock
,
flags
);
return
0
;
}
#endif
/* CONFIG_PM */
...
...
drivers/net/8139too.c
View file @
f3b197ac
...
...
@@ -165,7 +165,7 @@ static int multicast_filter_limit = 32;
static
int
debug
=
-
1
;
/*
* Receive ring size
* Receive ring size
* Warning: 64K ring has hardware issues and may lock up.
*/
#if defined(CONFIG_SH_DREAMCAST)
...
...
@@ -257,7 +257,7 @@ static struct pci_device_id rtl8139_pci_tbl[] = {
{
0x018a
,
0x0106
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
RTL8139
},
{
0x126c
,
0x1211
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
RTL8139
},
{
0x1743
,
0x8139
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
RTL8139
},
{
0x021b
,
0x8139
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
RTL8139
},
{
0x021b
,
0x8139
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
RTL8139
},
#ifdef CONFIG_SH_SECUREEDGE5410
/* Bogus 8139 silicon reports 8129 without external PROM :-( */
...
...
@@ -1824,7 +1824,7 @@ static void rtl8139_rx_err (u32 rx_status, struct net_device *dev,
int
tmp_work
;
#endif
if
(
netif_msg_rx_err
(
tp
))
if
(
netif_msg_rx_err
(
tp
))
printk
(
KERN_DEBUG
"%s: Ethernet frame had errors, status %8.8x.
\n
"
,
dev
->
name
,
rx_status
);
tp
->
stats
.
rx_errors
++
;
...
...
@@ -1944,7 +1944,7 @@ static int rtl8139_rx(struct net_device *dev, struct rtl8139_private *tp,
RTL_R16
(
RxBufAddr
),
RTL_R16
(
RxBufPtr
),
RTL_R8
(
ChipCmd
));
while
(
netif_running
(
dev
)
&&
received
<
budget
while
(
netif_running
(
dev
)
&&
received
<
budget
&&
(
RTL_R8
(
ChipCmd
)
&
RxBufEmpty
)
==
0
)
{
u32
ring_offset
=
cur_rx
%
RX_BUF_LEN
;
u32
rx_status
;
...
...
@@ -2031,7 +2031,7 @@ static int rtl8139_rx(struct net_device *dev, struct rtl8139_private *tp,
netif_receive_skb
(
skb
);
}
else
{
if
(
net_ratelimit
())
if
(
net_ratelimit
())
printk
(
KERN_WARNING
"%s: Memory squeeze, dropping packet.
\n
"
,
dev
->
name
);
...
...
@@ -2158,13 +2158,13 @@ static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance,
status
=
RTL_R16
(
IntrStatus
);
/* shared irq? */
if
(
unlikely
((
status
&
rtl8139_intr_mask
)
==
0
))
if
(
unlikely
((
status
&
rtl8139_intr_mask
)
==
0
))
goto
out
;
handled
=
1
;
/* h/w no longer present (hotplug?) or major error, bail */
if
(
unlikely
(
status
==
0xFFFF
))
if
(
unlikely
(
status
==
0xFFFF
))
goto
out
;
/* close possible race's with dev_close */
...
...
drivers/net/epic100.c
View file @
f3b197ac
...
...
@@ -21,15 +21,15 @@
http://www.scyld.com/network/epic100.html
---------------------------------------------------------------------
Linux kernel-specific changes:
LK1.1.2 (jgarzik):
* Merge becker version 1.09 (4/08/2000)
LK1.1.3:
* Major bugfix to 1.09 driver (Francis Romieu)
LK1.1.4 (jgarzik):
* Merge becker test version 1.09 (5/29/2000)
...
...
@@ -66,7 +66,7 @@
LK1.1.14 (Kryzsztof Halasa):
* fix spurious bad initializations
* pound phy a la SMSC's app note on the subject
AC1.1.14ac
* fix power up/down for ethtool that broke in 1.11
...
...
@@ -244,7 +244,7 @@ static struct pci_device_id epic_pci_tbl[] = {
};
MODULE_DEVICE_TABLE
(
pci
,
epic_pci_tbl
);
#ifndef USE_IO_OPS
#undef inb
#undef inw
...
...
@@ -370,7 +370,7 @@ static int epic_close(struct net_device *dev);
static
struct
net_device_stats
*
epic_get_stats
(
struct
net_device
*
dev
);
static
void
set_rx_mode
(
struct
net_device
*
dev
);
static
int
__devinit
epic_init_one
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
...
...
@@ -392,9 +392,9 @@ static int __devinit epic_init_one (struct pci_dev *pdev,
printk
(
KERN_INFO
"%s"
KERN_INFO
"%s"
KERN_INFO
"%s"
,
version
,
version2
,
version3
);
#endif
card_idx
++
;
ret
=
pci_enable_device
(
pdev
);
if
(
ret
)
goto
out
;
...
...
@@ -405,7 +405,7 @@ static int __devinit epic_init_one (struct pci_dev *pdev,
ret
=
-
ENODEV
;
goto
err_out_disable
;
}
pci_set_master
(
pdev
);
ret
=
pci_request_regions
(
pdev
,
DRV_NAME
);
...
...
@@ -498,7 +498,7 @@ static int __devinit epic_init_one (struct pci_dev *pdev,
ep
->
pci_dev
=
pdev
;
ep
->
chip_id
=
chip_idx
;
ep
->
chip_flags
=
pci_id_tbl
[
chip_idx
].
drv_flags
;
ep
->
irq_mask
=
ep
->
irq_mask
=
(
ep
->
chip_flags
&
TYPE2_INTR
?
PCIBusErr175
:
PCIBusErr170
)
|
CntFull
|
TxUnderrun
|
EpicNapiEvent
;
...
...
@@ -587,7 +587,7 @@ static int __devinit epic_init_one (struct pci_dev *pdev,
pci_disable_device
(
pdev
);
goto
out
;
}
/* Serial EEPROM section. */
/* EEPROM_Ctrl bits. */
...
...
@@ -709,7 +709,7 @@ static void mdio_write(struct net_device *dev, int phy_id, int loc, int value)
outw
(
value
,
ioaddr
+
MIIData
);
outl
((
phy_id
<<
9
)
|
(
loc
<<
4
)
|
MII_WRITEOP
,
ioaddr
+
MIICtrl
);
for
(
i
=
10000
;
i
>
0
;
i
--
)
{
for
(
i
=
10000
;
i
>
0
;
i
--
)
{
barrier
();
if
((
inl
(
ioaddr
+
MIICtrl
)
&
MII_WRITEOP
)
==
0
)
break
;
...
...
@@ -717,7 +717,7 @@ static void mdio_write(struct net_device *dev, int phy_id, int loc, int value)
return
;
}
static
int
epic_open
(
struct
net_device
*
dev
)
{
struct
epic_private
*
ep
=
dev
->
priv
;
...
...
@@ -760,7 +760,7 @@ static int epic_open(struct net_device *dev)
#endif
udelay
(
20
);
/* Looks like EPII needs that if you want reliable RX init. FIXME: pci posting bug? */
for
(
i
=
0
;
i
<
3
;
i
++
)
outl
(
cpu_to_le16
(((
u16
*
)
dev
->
dev_addr
)[
i
]),
ioaddr
+
LAN0
+
i
*
4
);
...
...
@@ -803,7 +803,7 @@ static int epic_open(struct net_device *dev)
/* Enable interrupts by setting the interrupt mask. */
outl
((
ep
->
chip_flags
&
TYPE2_INTR
?
PCIBusErr175
:
PCIBusErr170
)
|
CntFull
|
TxUnderrun
|
CntFull
|
TxUnderrun
|
RxError
|
RxHeader
|
EpicNapiEvent
,
ioaddr
+
INTMASK
);
if
(
debug
>
1
)
...
...
@@ -831,7 +831,7 @@ static void epic_pause(struct net_device *dev)
struct
epic_private
*
ep
=
dev
->
priv
;
netif_stop_queue
(
dev
);
/* Disable interrupts by clearing the interrupt mask. */
outl
(
0x00000000
,
ioaddr
+
INTMASK
);
/* Stop the chip's Tx and Rx DMA processes. */
...
...
@@ -987,7 +987,7 @@ static void epic_init_ring(struct net_device *dev)
for
(
i
=
0
;
i
<
RX_RING_SIZE
;
i
++
)
{
ep
->
rx_ring
[
i
].
rxstatus
=
0
;
ep
->
rx_ring
[
i
].
buflength
=
cpu_to_le32
(
ep
->
rx_buf_sz
);
ep
->
rx_ring
[
i
].
next
=
ep
->
rx_ring_dma
+
ep
->
rx_ring
[
i
].
next
=
ep
->
rx_ring_dma
+
(
i
+
1
)
*
sizeof
(
struct
epic_rx_desc
);
ep
->
rx_skbuff
[
i
]
=
NULL
;
}
...
...
@@ -1002,7 +1002,7 @@ static void epic_init_ring(struct net_device *dev)
break
;
skb
->
dev
=
dev
;
/* Mark as being used by this device. */
skb_reserve
(
skb
,
2
);
/* 16 byte align the IP header. */
ep
->
rx_ring
[
i
].
bufaddr
=
pci_map_single
(
ep
->
pci_dev
,
ep
->
rx_ring
[
i
].
bufaddr
=
pci_map_single
(
ep
->
pci_dev
,
skb
->
data
,
ep
->
rx_buf_sz
,
PCI_DMA_FROMDEVICE
);
ep
->
rx_ring
[
i
].
rxstatus
=
cpu_to_le32
(
DescOwn
);
}
...
...
@@ -1013,7 +1013,7 @@ static void epic_init_ring(struct net_device *dev)
for
(
i
=
0
;
i
<
TX_RING_SIZE
;
i
++
)
{
ep
->
tx_skbuff
[
i
]
=
NULL
;
ep
->
tx_ring
[
i
].
txstatus
=
0x0000
;
ep
->
tx_ring
[
i
].
next
=
ep
->
tx_ring_dma
+
ep
->
tx_ring
[
i
].
next
=
ep
->
tx_ring_dma
+
(
i
+
1
)
*
sizeof
(
struct
epic_tx_desc
);
}
ep
->
tx_ring
[
i
-
1
].
next
=
ep
->
tx_ring_dma
;
...
...
@@ -1026,7 +1026,7 @@ static int epic_start_xmit(struct sk_buff *skb, struct net_device *dev)
int
entry
,
free_count
;
u32
ctrl_word
;
unsigned
long
flags
;
if
(
skb
->
len
<
ETH_ZLEN
)
{
skb
=
skb_padto
(
skb
,
ETH_ZLEN
);
if
(
skb
==
NULL
)
...
...
@@ -1042,7 +1042,7 @@ static int epic_start_xmit(struct sk_buff *skb, struct net_device *dev)
entry
=
ep
->
cur_tx
%
TX_RING_SIZE
;
ep
->
tx_skbuff
[
entry
]
=
skb
;
ep
->
tx_ring
[
entry
].
bufaddr
=
pci_map_single
(
ep
->
pci_dev
,
skb
->
data
,
ep
->
tx_ring
[
entry
].
bufaddr
=
pci_map_single
(
ep
->
pci_dev
,
skb
->
data
,
skb
->
len
,
PCI_DMA_TODEVICE
);
if
(
free_count
<
TX_QUEUE_LEN
/
2
)
{
/* Typical path */
ctrl_word
=
cpu_to_le32
(
0x100000
);
/* No interrupt */
...
...
@@ -1126,7 +1126,7 @@ static void epic_tx(struct net_device *dev, struct epic_private *ep)
/* Free the original skb. */
skb
=
ep
->
tx_skbuff
[
entry
];
pci_unmap_single
(
ep
->
pci_dev
,
ep
->
tx_ring
[
entry
].
bufaddr
,
pci_unmap_single
(
ep
->
pci_dev
,
ep
->
tx_ring
[
entry
].
bufaddr
,
skb
->
len
,
PCI_DMA_TODEVICE
);
dev_kfree_skb_irq
(
skb
);
ep
->
tx_skbuff
[
entry
]
=
NULL
;
...
...
@@ -1281,8 +1281,8 @@ static int epic_rx(struct net_device *dev, int budget)
ep
->
rx_buf_sz
,
PCI_DMA_FROMDEVICE
);
}
else
{
pci_unmap_single
(
ep
->
pci_dev
,
ep
->
rx_ring
[
entry
].
bufaddr
,
pci_unmap_single
(
ep
->
pci_dev
,
ep
->
rx_ring
[
entry
].
bufaddr
,
ep
->
rx_buf_sz
,
PCI_DMA_FROMDEVICE
);
skb_put
(
skb
=
ep
->
rx_skbuff
[
entry
],
pkt_len
);
ep
->
rx_skbuff
[
entry
]
=
NULL
;
...
...
@@ -1307,7 +1307,7 @@ static int epic_rx(struct net_device *dev, int budget)
break
;
skb
->
dev
=
dev
;
/* Mark as being used by this device. */
skb_reserve
(
skb
,
2
);
/* Align IP on 16 byte boundaries */
ep
->
rx_ring
[
entry
].
bufaddr
=
pci_map_single
(
ep
->
pci_dev
,
ep
->
rx_ring
[
entry
].
bufaddr
=
pci_map_single
(
ep
->
pci_dev
,
skb
->
data
,
ep
->
rx_buf_sz
,
PCI_DMA_FROMDEVICE
);
work_done
++
;
}
...
...
@@ -1403,7 +1403,7 @@ static int epic_close(struct net_device *dev)
ep
->
rx_ring
[
i
].
rxstatus
=
0
;
/* Not owned by Epic chip. */
ep
->
rx_ring
[
i
].
buflength
=
0
;
if
(
skb
)
{
pci_unmap_single
(
ep
->
pci_dev
,
ep
->
rx_ring
[
i
].
bufaddr
,
pci_unmap_single
(
ep
->
pci_dev
,
ep
->
rx_ring
[
i
].
bufaddr
,
ep
->
rx_buf_sz
,
PCI_DMA_FROMDEVICE
);
dev_kfree_skb
(
skb
);
}
...
...
@@ -1414,7 +1414,7 @@ static int epic_close(struct net_device *dev)
ep
->
tx_skbuff
[
i
]
=
NULL
;
if
(
!
skb
)
continue
;
pci_unmap_single
(
ep
->
pci_dev
,
ep
->
tx_ring
[
i
].
bufaddr
,
pci_unmap_single
(
ep
->
pci_dev
,
ep
->
tx_ring
[
i
].
bufaddr
,
skb
->
len
,
PCI_DMA_TODEVICE
);
dev_kfree_skb
(
skb
);
}
...
...
@@ -1607,7 +1607,7 @@ static void __devexit epic_remove_one (struct pci_dev *pdev)
{
struct
net_device
*
dev
=
pci_get_drvdata
(
pdev
);
struct
epic_private
*
ep
=
dev
->
priv
;
pci_free_consistent
(
pdev
,
TX_TOTAL_SIZE
,
ep
->
tx_ring
,
ep
->
tx_ring_dma
);
pci_free_consistent
(
pdev
,
RX_TOTAL_SIZE
,
ep
->
rx_ring
,
ep
->
rx_ring_dma
);
unregister_netdev
(
dev
);
...
...
drivers/net/forcedeth.c
View file @
f3b197ac
...
...
@@ -458,7 +458,7 @@ typedef union _ring_type {
#define RX_RING 128
#define TX_RING 256
/*
/*
* If your nic mysteriously hangs then try to reduce the limits
* to 1/0: It might be required to set NV_TX_LASTPACKET in the
* last valid ring entry. But this would be impossible to
...
...
@@ -480,7 +480,7 @@ typedef union _ring_type {
#define POLL_WAIT (1+HZ/100)
#define LINK_TIMEOUT (3*HZ)
/*
/*
* desc_ver values:
* The nic supports three different descriptor types:
* - DESC_VER_1: Original
...
...
@@ -619,7 +619,7 @@ static int max_interrupt_work = 5;
/*
* Optimization can be either throuput mode or cpu mode
*
*
* Throughput Mode: Every tx and rx packet will generate an interrupt.
* CPU Mode: Interrupts are controlled by a timer.
*/
...
...
@@ -1119,7 +1119,7 @@ static void nv_do_rx_refill(unsigned long data)
}
}
static
void
nv_init_rx
(
struct
net_device
*
dev
)
static
void
nv_init_rx
(
struct
net_device
*
dev
)
{
struct
fe_priv
*
np
=
netdev_priv
(
dev
);
int
i
;
...
...
@@ -1183,7 +1183,7 @@ static void nv_drain_tx(struct net_device *dev)
{
struct
fe_priv
*
np
=
netdev_priv
(
dev
);
unsigned
int
i
;
for
(
i
=
0
;
i
<
TX_RING
;
i
++
)
{
if
(
np
->
desc_ver
==
DESC_VER_1
||
np
->
desc_ver
==
DESC_VER_2
)
np
->
tx_ring
.
orig
[
i
].
FlagLen
=
0
;
...
...
@@ -1329,7 +1329,7 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
}
else
{
np
->
tx_ring
.
ex
[
start_nr
].
TxVlan
=
cpu_to_le32
(
tx_flags_vlan
);
np
->
tx_ring
.
ex
[
start_nr
].
FlagLen
|=
cpu_to_le32
(
tx_flags
|
tx_flags_extra
);
}
}
dprintk
(
KERN_DEBUG
"%s: nv_start_xmit: packet %d (entries %d) queued for transmission. tx_flags_extra: %x
\n
"
,
dev
->
name
,
np
->
next_tx
,
entries
,
tx_flags_extra
);
...
...
@@ -1404,7 +1404,7 @@ static void nv_tx_done(struct net_device *dev)
}
else
{
np
->
stats
.
tx_packets
++
;
np
->
stats
.
tx_bytes
+=
skb
->
len
;
}
}
}
}
nv_release_txskb
(
dev
,
i
);
...
...
@@ -1450,7 +1450,7 @@ static void nv_tx_timeout(struct net_device *dev)
for
(
i
=
0
;
i
<
TX_RING
;
i
+=
4
)
{
if
(
np
->
desc_ver
==
DESC_VER_1
||
np
->
desc_ver
==
DESC_VER_2
)
{
printk
(
KERN_INFO
"%03x: %08x %08x // %08x %08x // %08x %08x // %08x %08x
\n
"
,
i
,
i
,
le32_to_cpu
(
np
->
tx_ring
.
orig
[
i
].
PacketBuffer
),
le32_to_cpu
(
np
->
tx_ring
.
orig
[
i
].
FlagLen
),
le32_to_cpu
(
np
->
tx_ring
.
orig
[
i
+
1
].
PacketBuffer
),
...
...
@@ -1461,7 +1461,7 @@ static void nv_tx_timeout(struct net_device *dev)
le32_to_cpu
(
np
->
tx_ring
.
orig
[
i
+
3
].
FlagLen
));
}
else
{
printk
(
KERN_INFO
"%03x: %08x %08x %08x // %08x %08x %08x // %08x %08x %08x // %08x %08x %08x
\n
"
,
i
,
i
,
le32_to_cpu
(
np
->
tx_ring
.
ex
[
i
].
PacketBufferHigh
),
le32_to_cpu
(
np
->
tx_ring
.
ex
[
i
].
PacketBufferLow
),
le32_to_cpu
(
np
->
tx_ring
.
ex
[
i
].
FlagLen
),
...
...
@@ -2067,7 +2067,7 @@ static int nv_update_linkspeed(struct net_device *dev)
if
(
lpa_pause
==
LPA_PAUSE_ASYM
)
{
np
->
pause_flags
|=
NV_PAUSEFRAME_RX_ENABLE
;
}
}
break
;
}
}
...
...
@@ -2086,7 +2086,7 @@ static int nv_update_linkspeed(struct net_device *dev)
writel
(
regmisc
|
NVREG_MISC1_PAUSE_TX
,
base
+
NvRegMisc1
);
}
else
{
writel
(
NVREG_TX_PAUSEFRAME_DISABLE
,
base
+
NvRegTxPauseFrame
);
writel
(
regmisc
,
base
+
NvRegMisc1
);
writel
(
regmisc
,
base
+
NvRegMisc1
);
}
}
...
...
@@ -2150,7 +2150,7 @@ static irqreturn_t nv_nic_irq(int foo, void *data, struct pt_regs *regs)
spin_lock
(
&
np
->
lock
);
nv_tx_done
(
dev
);
spin_unlock
(
&
np
->
lock
);
nv_rx_process
(
dev
);
if
(
nv_alloc_rx
(
dev
))
{
spin_lock
(
&
np
->
lock
);
...
...
@@ -2158,7 +2158,7 @@ static irqreturn_t nv_nic_irq(int foo, void *data, struct pt_regs *regs)
mod_timer
(
&
np
->
oom_kick
,
jiffies
+
OOM_REFILL
);
spin_unlock
(
&
np
->
lock
);
}
if
(
events
&
NVREG_IRQ_LINK
)
{
spin_lock
(
&
np
->
lock
);
nv_link_irq
(
dev
);
...
...
@@ -2223,7 +2223,7 @@ static irqreturn_t nv_nic_irq_tx(int foo, void *data, struct pt_regs *regs)
spin_lock_irq
(
&
np
->
lock
);
nv_tx_done
(
dev
);
spin_unlock_irq
(
&
np
->
lock
);
if
(
events
&
(
NVREG_IRQ_TX_ERR
))
{
dprintk
(
KERN_DEBUG
"%s: received irq with events 0x%x. Probably TX fail.
\n
"
,
dev
->
name
,
events
);
...
...
@@ -2266,7 +2266,7 @@ static irqreturn_t nv_nic_irq_rx(int foo, void *data, struct pt_regs *regs)
dprintk
(
KERN_DEBUG
"%s: rx irq: %08x
\n
"
,
dev
->
name
,
events
);
if
(
!
(
events
&
np
->
irqmask
))
break
;
nv_rx_process
(
dev
);
if
(
nv_alloc_rx
(
dev
))
{
spin_lock_irq
(
&
np
->
lock
);
...
...
@@ -2274,7 +2274,7 @@ static irqreturn_t nv_nic_irq_rx(int foo, void *data, struct pt_regs *regs)
mod_timer
(
&
np
->
oom_kick
,
jiffies
+
OOM_REFILL
);
spin_unlock_irq
(
&
np
->
lock
);
}
if
(
i
>
max_interrupt_work
)
{
spin_lock_irq
(
&
np
->
lock
);
/* disable interrupts on the nic */
...
...
@@ -2313,7 +2313,7 @@ static irqreturn_t nv_nic_irq_other(int foo, void *data, struct pt_regs *regs)
dprintk
(
KERN_DEBUG
"%s: irq: %08x
\n
"
,
dev
->
name
,
events
);
if
(
!
(
events
&
np
->
irqmask
))
break
;
if
(
events
&
NVREG_IRQ_LINK
)
{
spin_lock_irq
(
&
np
->
lock
);
nv_link_irq
(
dev
);
...
...
@@ -2386,7 +2386,7 @@ static void nv_do_nic_poll(unsigned long data)
np
->
nic_poll_irq
=
0
;
/* FIXME: Do we need synchronize_irq(dev->irq) here? */
writel
(
mask
,
base
+
NvRegIrqMask
);
pci_push
(
base
);
...
...
@@ -3165,7 +3165,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
if
(
id
->
driver_data
&
DEV_HAS_PAUSEFRAME_TX
)
{
np
->
pause_flags
|=
NV_PAUSEFRAME_TX_CAPABLE
;
}
err
=
-
ENOMEM
;
np
->
base
=
ioremap
(
addr
,
np
->
register_size
);
...
...
@@ -3313,7 +3313,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
pci_name
(
pci_dev
));
goto
out_freering
;
}
/* reset it */
phy_init
(
dev
);
...
...
drivers/net/tulip/de2104x.c
View file @
f3b197ac
...
...
@@ -227,12 +227,12 @@ enum {
SROMC0InfoLeaf
=
27
,
MediaBlockMask
=
0x3f
,
MediaCustomCSRs
=
(
1
<<
6
),
/* PCIPM bits */
PM_Sleep
=
(
1
<<
31
),
PM_Snooze
=
(
1
<<
30
),
PM_Mask
=
PM_Sleep
|
PM_Snooze
,
/* SIAStatus bits */
NWayState
=
(
1
<<
14
)
|
(
1
<<
13
)
|
(
1
<<
12
),
NWayRestart
=
(
1
<<
12
),
...
...
@@ -858,7 +858,7 @@ static void de_stop_rxtx (struct de_private *de)
return
;
cpu_relax
();
}
printk
(
KERN_WARNING
"%s: timeout expired stopping DMA
\n
"
,
de
->
dev
->
name
);
}
...
...
@@ -931,7 +931,7 @@ static void de_set_media (struct de_private *de)
macmode
|=
FullDuplex
;
else
macmode
&=
~
FullDuplex
;
if
(
netif_msg_link
(
de
))
{
printk
(
KERN_INFO
"%s: set link %s
\n
"
KERN_INFO
"%s: mode 0x%x, sia 0x%x,0x%x,0x%x,0x%x
\n
"
...
...
@@ -966,9 +966,9 @@ static void de21040_media_timer (unsigned long data)
u32
status
=
dr32
(
SIAStatus
);
unsigned
int
carrier
;
unsigned
long
flags
;
carrier
=
(
status
&
NetCxnErr
)
?
0
:
1
;
if
(
carrier
)
{
if
(
de
->
media_type
!=
DE_MEDIA_AUI
&&
(
status
&
LinkFailStatus
))
goto
no_link_yet
;
...
...
@@ -985,7 +985,7 @@ static void de21040_media_timer (unsigned long data)
return
;
}
de_link_down
(
de
);
de_link_down
(
de
);
if
(
de
->
media_lock
)
return
;
...
...
@@ -1039,7 +1039,7 @@ static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media)
return
0
;
break
;
}
return
1
;
}
...
...
@@ -1050,9 +1050,9 @@ static void de21041_media_timer (unsigned long data)
u32
status
=
dr32
(
SIAStatus
);
unsigned
int
carrier
;
unsigned
long
flags
;
carrier
=
(
status
&
NetCxnErr
)
?
0
:
1
;
if
(
carrier
)
{
if
((
de
->
media_type
==
DE_MEDIA_TP_AUTO
||
de
->
media_type
==
DE_MEDIA_TP
||
...
...
@@ -1072,7 +1072,7 @@ static void de21041_media_timer (unsigned long data)
return
;
}
de_link_down
(
de
);
de_link_down
(
de
);
/* if media type locked, don't switch media */
if
(
de
->
media_lock
)
...
...
@@ -1124,7 +1124,7 @@ static void de21041_media_timer (unsigned long data)
u32
next_states
[]
=
{
DE_MEDIA_AUI
,
DE_MEDIA_BNC
,
DE_MEDIA_TP_AUTO
};
de_next_media
(
de
,
next_states
,
ARRAY_SIZE
(
next_states
));
}
set_media:
spin_lock_irqsave
(
&
de
->
lock
,
flags
);
de_stop_rxtx
(
de
);
...
...
@@ -1148,7 +1148,7 @@ static void de_media_interrupt (struct de_private *de, u32 status)
mod_timer
(
&
de
->
media_timer
,
jiffies
+
DE_TIMER_LINK
);
return
;
}
BUG_ON
(
!
(
status
&
LinkFail
));
if
(
netif_carrier_ok
(
de
->
dev
))
{
...
...
@@ -1227,7 +1227,7 @@ static int de_init_hw (struct de_private *de)
int
rc
;
de_adapter_wake
(
de
);
macmode
=
dr32
(
MacMode
)
&
~
MacModeClear
;
rc
=
de_reset_mac
(
de
);
...
...
@@ -1413,7 +1413,7 @@ static int de_close (struct net_device *dev)
netif_stop_queue
(
dev
);
netif_carrier_off
(
dev
);
spin_unlock_irqrestore
(
&
de
->
lock
,
flags
);
free_irq
(
dev
->
irq
,
dev
);
de_free_rings
(
de
);
...
...
@@ -1441,7 +1441,7 @@ static void de_tx_timeout (struct net_device *dev)
spin_unlock_irq
(
&
de
->
lock
);
enable_irq
(
dev
->
irq
);
/* Update the error counts. */
__de_get_stats
(
de
);
...
...
@@ -1451,7 +1451,7 @@ static void de_tx_timeout (struct net_device *dev)
de_init_rings
(
de
);
de_init_hw
(
de
);
netif_wake_queue
(
dev
);
}
...
...
@@ -1459,7 +1459,7 @@ static void __de_get_regs(struct de_private *de, u8 *buf)
{
int
i
;
u32
*
rbuf
=
(
u32
*
)
buf
;
/* read all CSRs */
for
(
i
=
0
;
i
<
DE_NUM_REGS
;
i
++
)
rbuf
[
i
]
=
dr32
(
i
*
8
);
...
...
@@ -1474,7 +1474,7 @@ static int __de_get_settings(struct de_private *de, struct ethtool_cmd *ecmd)
ecmd
->
transceiver
=
XCVR_INTERNAL
;
ecmd
->
phy_address
=
0
;
ecmd
->
advertising
=
de
->
media_advertise
;
switch
(
de
->
media_type
)
{
case
DE_MEDIA_AUI
:
ecmd
->
port
=
PORT_AUI
;
...
...
@@ -1489,7 +1489,7 @@ static int __de_get_settings(struct de_private *de, struct ethtool_cmd *ecmd)
ecmd
->
speed
=
SPEED_10
;
break
;
}
if
(
dr32
(
MacMode
)
&
FullDuplex
)
ecmd
->
duplex
=
DUPLEX_FULL
;
else
...
...
@@ -1529,7 +1529,7 @@ static int __de_set_settings(struct de_private *de, struct ethtool_cmd *ecmd)
if
(
ecmd
->
autoneg
==
AUTONEG_ENABLE
&&
(
!
(
ecmd
->
advertising
&
ADVERTISED_Autoneg
)))
return
-
EINVAL
;
switch
(
ecmd
->
port
)
{
case
PORT_AUI
:
new_media
=
DE_MEDIA_AUI
;
...
...
@@ -1554,22 +1554,22 @@ static int __de_set_settings(struct de_private *de, struct ethtool_cmd *ecmd)
return
-
EINVAL
;
break
;
}
media_lock
=
(
ecmd
->
autoneg
==
AUTONEG_ENABLE
)
?
0
:
1
;
if
((
new_media
==
de
->
media_type
)
&&
(
media_lock
==
de
->
media_lock
)
&&
(
ecmd
->
advertising
==
de
->
media_advertise
))
return
0
;
/* nothing to change */
de_link_down
(
de
);
de_stop_rxtx
(
de
);
de
->
media_type
=
new_media
;
de
->
media_lock
=
media_lock
;
de
->
media_advertise
=
ecmd
->
advertising
;
de_set_media
(
de
);
return
0
;
}
...
...
@@ -1817,7 +1817,7 @@ static void __init de21041_get_srom_info (struct de_private *de)
case
0x0204
:
de
->
media_type
=
DE_MEDIA_TP_FD
;
break
;
default:
de
->
media_type
=
DE_MEDIA_TP_AUTO
;
break
;
}
if
(
netif_msg_probe
(
de
))
printk
(
KERN_INFO
"de%d: SROM leaf offset %u, default media %s
\n
"
,
de
->
board_idx
,
ofs
,
...
...
@@ -1886,7 +1886,7 @@ static void __init de21041_get_srom_info (struct de_private *de)
de
->
media
[
idx
].
csr13
,
de
->
media
[
idx
].
csr14
,
de
->
media
[
idx
].
csr15
);
}
else
if
(
netif_msg_probe
(
de
))
printk
(
"
\n
"
);
...
...
@@ -2118,7 +2118,7 @@ static int de_suspend (struct pci_dev *pdev, pm_message_t state)
spin_unlock_irq
(
&
de
->
lock
);
enable_irq
(
dev
->
irq
);
/* Update the error counts. */
__de_get_stats
(
de
);
...
...
drivers/net/tulip/de4x5.c
View file @
f3b197ac
...
...
@@ -41,11 +41,11 @@
Digital Semiconductor SROM Specification. The driver currently
recognises the following chips:
DC21040 (no SROM)
DC21041[A]
DC21140[A]
DC21142
DC21143
DC21040 (no SROM)
DC21041[A]
DC21140[A]
DC21142
DC21143
So far the driver is known to work with the following cards:
...
...
@@ -55,7 +55,7 @@
SMC8432
SMC9332 (w/new SROM)
ZNYX31[45]
ZNYX346 10/100 4 port (can act as a 10/100 bridge!)
ZNYX346 10/100 4 port (can act as a 10/100 bridge!)
The driver has been tested on a relatively busy network using the DE425,
DE434, DE435 and DE500 cards and benchmarked with 'ttcp': it transferred
...
...
@@ -106,7 +106,7 @@
loading by:
insmod de4x5 io=0xghh where g = bus number
hh = device number
hh = device number
NB: autoprobing for modules is now supported by default. You may just
use:
...
...
@@ -120,11 +120,11 @@
4) if you are wanting to add a new card, goto 5. Otherwise, recompile a
kernel with the de4x5 configuration turned off and reboot.
5) insmod de4x5 [io=0xghh]
6) run the net startup bits for your new eth?? interface(s) manually
(usually /etc/rc.inet[12] at boot time).
6) run the net startup bits for your new eth?? interface(s) manually
(usually /etc/rc.inet[12] at boot time).
7) enjoy!
To unload a module, turn off the associated interface(s)
To unload a module, turn off the associated interface(s)
'ifconfig eth?? down' then 'rmmod de4x5'.
Automedia detection is included so that in principal you can disconnect
...
...
@@ -135,7 +135,7 @@
By default, the driver will now autodetect any DECchip based card.
Should you have a need to restrict the driver to DIGITAL only cards, you
can compile with a DEC_ONLY define, or if loading as a module, use the
'dec_only=1' parameter.
'dec_only=1' parameter.
I've changed the timing routines to use the kernel timer and scheduling
functions so that the hangs and other assorted problems that occurred
...
...
@@ -204,7 +204,7 @@
following parameters are allowed:
fdx for full duplex
autosense to set the media/speed; with the following
autosense to set the media/speed; with the following
sub-parameters:
TP, TP_NW, BNC, AUI, BNC_AUI, 100Mb, 10Mb, AUTO
...
...
@@ -235,14 +235,14 @@
this automatically or include #define DE4X5_FORCE_EISA on or before
line 1040 in the driver.
TO DO:
TO DO:
------
Revision History
----------------
Version Date Description
0.1 17-Nov-94 Initial writing. ALPHA code release.
0.2 13-Jan-95 Added PCI support for DE435's.
0.21 19-Jan-95 Added auto media detection.
...
...
@@ -251,7 +251,7 @@
Add request/release_region code.
Add loadable modules support for PCI.
Clean up loadable modules support.
0.23 28-Feb-95 Added DC21041 and DC21140 support.
0.23 28-Feb-95 Added DC21041 and DC21140 support.
Fix missed frame counter value and initialisation.
Fixed EISA probe.
0.24 11-Apr-95 Change delay routine to use <linux/udelay>.
...
...
@@ -280,7 +280,7 @@
Add kernel timer code (h/w is too flaky).
Add MII based PHY autosense.
Add new multicasting code.
Add new autosense algorithms for media/mode
Add new autosense algorithms for media/mode
selection using kernel scheduling/timing.
Re-formatted.
Made changes suggested by <jeff@router.patch.net>:
...
...
@@ -307,10 +307,10 @@
Add Accton to the list of broken cards.
Fix TX under-run bug for non DC21140 chips.
Fix boot command probe bug in alloc_device() as
reported by <koen.gadeyne@barco.com> and
reported by <koen.gadeyne@barco.com> and
<orava@nether.tky.hut.fi>.
Add cache locks to prevent a race condition as
reported by <csd@microplex.com> and
reported by <csd@microplex.com> and
<baba@beckman.uiuc.edu>.
Upgraded alloc_device() code.
0.431 28-Jun-96 Fix potential bug in queue_pkt() from discussion
...
...
@@ -322,7 +322,7 @@
with a loopback packet.
0.442 9-Sep-96 Include AUI in dc21041 media printout. Bug reported
by <bhat@mundook.cs.mu.OZ.AU>
0.45 8-Dec-96 Include endian functions for PPC use, from work
0.45 8-Dec-96 Include endian functions for PPC use, from work
by <cort@cs.nmt.edu> and <g.thomas@opengroup.org>.
0.451 28-Dec-96 Added fix to allow autoprobe for modules after
suggestion from <mjacob@feral.com>.
...
...
@@ -346,14 +346,14 @@
<paubert@iram.es>.
0.52 26-Apr-97 Some changes may not credit the right people -
a disk crash meant I lost some mail.
Change RX interrupt routine to drop rather than
defer packets to avoid hang reported by
Change RX interrupt routine to drop rather than
defer packets to avoid hang reported by
<g.thomas@opengroup.org>.
Fix srom_exec() to return for COMPACT and type 1
infoblocks.
Added DC21142 and DC21143 functions.
Added byte counters from <phil@tazenda.demon.co.uk>
Added SA_INTERRUPT temporary fix from
Added SA_INTERRUPT temporary fix from
<mjacob@feral.com>.
0.53 12-Nov-97 Fix the *_probe() to include 'eth??' name during
module load: bug reported by
...
...
@@ -363,10 +363,10 @@
Make above search independent of BIOS device scan
direction.
Completed DC2114[23] autosense functions.
0.531 21-Dec-97 Fix DE500-XA 100Mb/s bug reported by
0.531 21-Dec-97 Fix DE500-XA 100Mb/s bug reported by
<robin@intercore.com
Fix type1_infoblock() bug introduced in 0.53, from
problem reports by
problem reports by
<parmee@postecss.ncrfran.france.ncr.com> and
<jo@ice.dillingen.baynet.de>.
Added argument list to set up each board from either
...
...
@@ -374,7 +374,7 @@
Added generic MII PHY functionality to deal with
newer PHY chips.
Fix the mess in 2.1.67.
0.532 5-Jan-98 Fix bug in mii_get_phy() reported by
0.532 5-Jan-98 Fix bug in mii_get_phy() reported by
<redhat@cococo.net>.
Fix bug in pci_probe() for 64 bit systems reported
by <belliott@accessone.com>.
...
...
@@ -398,7 +398,7 @@
version. I hope nothing is broken...
Add TX done interrupt modification from suggestion
by <Austin.Donnelly@cl.cam.ac.uk>.
Fix is_anc_capable() bug reported by
Fix is_anc_capable() bug reported by
<Austin.Donnelly@cl.cam.ac.uk>.
Fix type[13]_infoblock() bug: during MII search, PHY
lp->rst not run because lp->ibn not initialised -
...
...
@@ -413,7 +413,7 @@
Add an_exception() for old ZYNX346 and fix compile
warning on PPC & SPARC, from <ecd@skynet.be>.
Fix lastPCI to correctly work with compiled in
kernels and modules from bug report by
kernels and modules from bug report by
<Zlatko.Calusic@CARNet.hr> et al.
0.542 15-Sep-98 Fix dc2114x_autoconf() to stop multiple messages
when media is unconnected.
...
...
@@ -425,7 +425,7 @@
0.544 8-May-99 Fix for buggy SROM in Motorola embedded boards using
a 21143 by <mmporter@home.com>.
Change PCI/EISA bus probing order.
0.545 28-Nov-99 Further Moto SROM bug fix from
0.545 28-Nov-99 Further Moto SROM bug fix from
<mporter@eng.mcd.mot.com>
Remove double checking for DEBUG_RX in de4x5_dbg_rx()
from report by <geert@linux-m68k.org>
...
...
@@ -434,8 +434,8 @@
variable 'pb', on a non de4x5 PCI device, in this
case a PCI bridge (DEC chip 21152). The value of
'pb' is now only initialized if a de4x5 chip is
present.
<france@handhelds.org>
present.
<france@handhelds.org>
0.547 08-Nov-01 Use library crc32 functions by <Matt_Domsch@dell.com>
0.548 30-Aug-03 Big 2.6 cleanup. Ported to PCI/EISA probing and
generic DMA APIs. Fixed DE425 support on Alpha.
...
...
@@ -584,7 +584,7 @@ static int de4x5_debug = (DEBUG_MEDIA | DEBUG_VERSION);
/*
** Allow per adapter set up. For modules this is simply a command line
** parameter, e.g.:
** parameter, e.g.:
** insmod de4x5 args='eth1:fdx autosense=BNC eth0:autosense=100Mb'.
**
** For a compiled in driver, place e.g.
...
...
@@ -655,7 +655,7 @@ static c_char *de4x5_signatures[] = DE4X5_SIGNATURE;
** Memory Alignment. Each descriptor is 4 longwords long. To force a
** particular alignment on the TX descriptor, adjust DESC_SKIP_LEN and
** DESC_ALIGN. ALIGN aligns the start address of the private memory area
** and hence the RX descriptor ring's first entry.
** and hence the RX descriptor ring's first entry.
*/
#define DE4X5_ALIGN4 ((u_long)4 - 1)
/* 1 longword align */
#define DE4X5_ALIGN8 ((u_long)8 - 1)
/* 2 longword align */
...
...
@@ -1081,8 +1081,8 @@ static int (*dc_infoblock[])(struct net_device *dev, u_char, u_char *) = {
mdelay(2);
/* Wait for 2ms */
\
}
static
int
__devinit
static
int
__devinit
de4x5_hw_init
(
struct
net_device
*
dev
,
u_long
iobase
,
struct
device
*
gendev
)
{
char
name
[
DE4X5_NAME_LENGTH
+
1
];
...
...
@@ -1102,12 +1102,12 @@ de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev)
mdelay
(
10
);
RESET_DE4X5
;
if
((
inl
(
DE4X5_STS
)
&
(
STS_TS
|
STS_RS
))
!=
0
)
{
return
-
ENXIO
;
/* Hardware could not reset */
}
/*
/*
** Now find out what kind of DC21040/DC21041/DC21140 board we have.
*/
lp
->
useSROM
=
FALSE
;
...
...
@@ -1116,21 +1116,21 @@ de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev)
}
else
{
EISA_signature
(
name
,
gendev
);
}
if
(
*
name
==
'\0'
)
{
/* Not found a board signature */
return
-
ENXIO
;
}
dev
->
base_addr
=
iobase
;
printk
(
"%s: %s at 0x%04lx"
,
gendev
->
bus_id
,
name
,
iobase
);
printk
(
", h/w address "
);
status
=
get_hw_addr
(
dev
);
for
(
i
=
0
;
i
<
ETH_ALEN
-
1
;
i
++
)
{
/* get the ethernet addr. */
printk
(
"%2.2x:"
,
dev
->
dev_addr
[
i
]);
}
printk
(
"%2.2x,
\n
"
,
dev
->
dev_addr
[
i
]);
if
(
status
!=
0
)
{
printk
(
" which has an Ethernet PROM CRC error.
\n
"
);
return
-
ENXIO
;
...
...
@@ -1171,10 +1171,10 @@ de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev)
}
lp
->
tx_ring
=
lp
->
rx_ring
+
NUM_RX_DESC
;
/*
** Set up the RX descriptor ring (Intels)
** Allocate contiguous receive buffers, long word aligned (Alphas)
** Allocate contiguous receive buffers, long word aligned (Alphas)
*/
#if !defined(__alpha__) && !defined(__powerpc__) && !defined(__sparc_v9__) && !defined(DE4X5_DO_MEMCPY)
for
(
i
=
0
;
i
<
NUM_RX_DESC
;
i
++
)
{
...
...
@@ -1210,7 +1210,7 @@ de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev)
lp
->
rxRingSize
=
NUM_RX_DESC
;
lp
->
txRingSize
=
NUM_TX_DESC
;
/* Write the end of list marker to the descriptor lists */
lp
->
rx_ring
[
lp
->
rxRingSize
-
1
].
des1
|=
cpu_to_le32
(
RD_RER
);
lp
->
tx_ring
[
lp
->
txRingSize
-
1
].
des1
|=
cpu_to_le32
(
TD_TER
);
...
...
@@ -1219,7 +1219,7 @@ de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev)
outl
(
lp
->
dma_rings
,
DE4X5_RRBA
);
outl
(
lp
->
dma_rings
+
NUM_RX_DESC
*
sizeof
(
struct
de4x5_desc
),
DE4X5_TRBA
);
/* Initialise the IRQ mask and Enable/Disable */
lp
->
irq_mask
=
IMR_RIM
|
IMR_TIM
|
IMR_TUM
|
IMR_UNM
;
lp
->
irq_en
=
IMR_NIM
|
IMR_AIM
;
...
...
@@ -1252,7 +1252,7 @@ de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev)
if
((
lp
->
chipset
!=
DC21040
)
&&
(
lp
->
chipset
!=
DC21041
))
{
mii_get_phy
(
dev
);
}
#ifndef __sparc_v9__
printk
(
" and requires IRQ%d (provided by %s).
\n
"
,
dev
->
irq
,
#else
...
...
@@ -1260,11 +1260,11 @@ de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev)
#endif
((
lp
->
bus
==
PCI
)
?
"PCI BIOS"
:
"EISA CNFG"
));
}
if
(
de4x5_debug
&
DEBUG_VERSION
)
{
printk
(
version
);
}
/* The DE4X5-specific entries in the device structure. */
SET_MODULE_OWNER
(
dev
);
SET_NETDEV_DEV
(
dev
,
gendev
);
...
...
@@ -1274,23 +1274,23 @@ de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev)
dev
->
get_stats
=
&
de4x5_get_stats
;
dev
->
set_multicast_list
=
&
set_multicast_list
;
dev
->
do_ioctl
=
&
de4x5_ioctl
;
dev
->
mem_start
=
0
;
/* Fill in the generic fields of the device structure. */
if
((
status
=
register_netdev
(
dev
)))
{
dma_free_coherent
(
gendev
,
lp
->
dma_size
,
lp
->
rx_ring
,
lp
->
dma_rings
);
return
status
;
}
/* Let the adapter sleep to save power */
yawn
(
dev
,
SLEEP
);
return
status
;
}
static
int
de4x5_open
(
struct
net_device
*
dev
)
{
...
...
@@ -1312,15 +1312,15 @@ de4x5_open(struct net_device *dev)
*/
yawn
(
dev
,
WAKEUP
);
/*
** Re-initialize the DE4X5...
/*
** Re-initialize the DE4X5...
*/
status
=
de4x5_init
(
dev
);
spin_lock_init
(
&
lp
->
lock
);
lp
->
state
=
OPEN
;
de4x5_dbg_open
(
dev
);
if
(
request_irq
(
dev
->
irq
,
(
void
*
)
de4x5_interrupt
,
SA_SHIRQ
,
if
(
request_irq
(
dev
->
irq
,
(
void
*
)
de4x5_interrupt
,
SA_SHIRQ
,
lp
->
adapter_name
,
dev
))
{
printk
(
"de4x5_open(): Requested IRQ%d is busy - attemping FAST/SHARE..."
,
dev
->
irq
);
if
(
request_irq
(
dev
->
irq
,
de4x5_interrupt
,
SA_INTERRUPT
|
SA_SHIRQ
,
...
...
@@ -1340,11 +1340,11 @@ de4x5_open(struct net_device *dev)
lp
->
interrupt
=
UNMASK_INTERRUPTS
;
dev
->
trans_start
=
jiffies
;
START_DE4X5
;
de4x5_setup_intr
(
dev
);
if
(
de4x5_debug
&
DEBUG_OPEN
)
{
printk
(
"
\t
sts: 0x%08x
\n
"
,
inl
(
DE4X5_STS
));
printk
(
"
\t
bmr: 0x%08x
\n
"
,
inl
(
DE4X5_BMR
));
...
...
@@ -1355,7 +1355,7 @@ de4x5_open(struct net_device *dev)
printk
(
"
\t
strr: 0x%08x
\n
"
,
inl
(
DE4X5_STRR
));
printk
(
"
\t
sigr: 0x%08x
\n
"
,
inl
(
DE4X5_SIGR
));
}
return
status
;
}
...
...
@@ -1369,15 +1369,15 @@ de4x5_open(struct net_device *dev)
*/
static
int
de4x5_init
(
struct
net_device
*
dev
)
{
{
/* Lock out other processes whilst setting up the hardware */
netif_stop_queue
(
dev
);
de4x5_sw_reset
(
dev
);
/* Autoconfigure the connected port */
autoconf_media
(
dev
);
return
0
;
}
...
...
@@ -1388,7 +1388,7 @@ de4x5_sw_reset(struct net_device *dev)
u_long
iobase
=
dev
->
base_addr
;
int
i
,
j
,
status
=
0
;
s32
bmr
,
omr
;
/* Select the MII or SRL port now and RESET the MAC */
if
(
!
lp
->
useSROM
)
{
if
(
lp
->
phy
[
lp
->
active
].
id
!=
0
)
{
...
...
@@ -1399,7 +1399,7 @@ de4x5_sw_reset(struct net_device *dev)
de4x5_switch_mac_port
(
dev
);
}
/*
/*
** Set the programmable burst length to 8 longwords for all the DC21140
** Fasternet chips and 4 longwords for all others: DMA errors result
** without these values. Cache align 16 long.
...
...
@@ -1416,23 +1416,23 @@ de4x5_sw_reset(struct net_device *dev)
outl
(
lp
->
dma_rings
,
DE4X5_RRBA
);
outl
(
lp
->
dma_rings
+
NUM_RX_DESC
*
sizeof
(
struct
de4x5_desc
),
DE4X5_TRBA
);
lp
->
rx_new
=
lp
->
rx_old
=
0
;
lp
->
tx_new
=
lp
->
tx_old
=
0
;
for
(
i
=
0
;
i
<
lp
->
rxRingSize
;
i
++
)
{
lp
->
rx_ring
[
i
].
status
=
cpu_to_le32
(
R_OWN
);
}
for
(
i
=
0
;
i
<
lp
->
txRingSize
;
i
++
)
{
lp
->
tx_ring
[
i
].
status
=
cpu_to_le32
(
0
);
}
barrier
();
/* Build the setup frame depending on filtering mode */
SetMulticastFilter
(
dev
);
load_packet
(
dev
,
lp
->
setup_frame
,
PERFECT_F
|
TD_SET
|
SETUP_FRAME_LEN
,
(
struct
sk_buff
*
)
1
);
outl
(
omr
|
OMR_ST
,
DE4X5_OMR
);
...
...
@@ -1445,18 +1445,18 @@ de4x5_sw_reset(struct net_device *dev)
outl
(
omr
,
DE4X5_OMR
);
/* Stop everything! */
if
(
j
==
0
)
{
printk
(
"%s: Setup frame timed out, status %08x
\n
"
,
dev
->
name
,
printk
(
"%s: Setup frame timed out, status %08x
\n
"
,
dev
->
name
,
inl
(
DE4X5_STS
));
status
=
-
EIO
;
}
lp
->
tx_new
=
(
++
lp
->
tx_new
)
%
lp
->
txRingSize
;
lp
->
tx_old
=
lp
->
tx_new
;
return
status
;
}
/*
/*
** Writes a socket buffer address to the next available transmit descriptor.
*/
static
int
...
...
@@ -1469,9 +1469,9 @@ de4x5_queue_pkt(struct sk_buff *skb, struct net_device *dev)
netif_stop_queue
(
dev
);
if
(
lp
->
tx_enable
==
NO
)
{
/* Cannot send for now */
return
-
1
;
return
-
1
;
}
/*
** Clean out the TX ring asynchronously to interrupts - sometimes the
** interrupts are lost by delayed descriptor status updates relative to
...
...
@@ -1482,7 +1482,7 @@ de4x5_queue_pkt(struct sk_buff *skb, struct net_device *dev)
spin_unlock_irqrestore
(
&
lp
->
lock
,
flags
);
/* Test if cache is already locked - requeue skb if so */
if
(
test_and_set_bit
(
0
,
(
void
*
)
&
lp
->
cache
.
lock
)
&&
!
lp
->
interrupt
)
if
(
test_and_set_bit
(
0
,
(
void
*
)
&
lp
->
cache
.
lock
)
&&
!
lp
->
interrupt
)
return
-
1
;
/* Transmit descriptor ring full or stale skb */
...
...
@@ -1509,10 +1509,10 @@ de4x5_queue_pkt(struct sk_buff *skb, struct net_device *dev)
load_packet
(
dev
,
skb
->
data
,
TD_IC
|
TD_LS
|
TD_FS
|
skb
->
len
,
skb
);
lp
->
stats
.
tx_bytes
+=
skb
->
len
;
outl
(
POLL_DEMAND
,
DE4X5_TPD
);
/* Start the TX */
lp
->
tx_new
=
(
++
lp
->
tx_new
)
%
lp
->
txRingSize
;
dev
->
trans_start
=
jiffies
;
if
(
TX_BUFFS_AVAIL
)
{
netif_start_queue
(
dev
);
/* Another pkt may be queued */
}
...
...
@@ -1521,15 +1521,15 @@ de4x5_queue_pkt(struct sk_buff *skb, struct net_device *dev)
}
if
(
skb
)
de4x5_putb_cache
(
dev
,
skb
);
}
lp
->
cache
.
lock
=
0
;
return
status
;
}
/*
** The DE4X5 interrupt handler.
**
** The DE4X5 interrupt handler.
**
** I/O Read/Writes through intermediate PCI bridges are never 'posted',
** so that the asserted interrupt always has some real data to work with -
** if these I/O accesses are ever changed to memory accesses, ensure the
...
...
@@ -1546,7 +1546,7 @@ de4x5_interrupt(int irq, void *dev_id, struct pt_regs *regs)
s32
imr
,
omr
,
sts
,
limit
;
u_long
iobase
;
unsigned
int
handled
=
0
;
if
(
dev
==
NULL
)
{
printk
(
"de4x5_interrupt(): irq %d for unknown device.
\n
"
,
irq
);
return
IRQ_NONE
;
...
...
@@ -1554,35 +1554,35 @@ de4x5_interrupt(int irq, void *dev_id, struct pt_regs *regs)
lp
=
netdev_priv
(
dev
);
spin_lock
(
&
lp
->
lock
);
iobase
=
dev
->
base_addr
;
DISABLE_IRQs
;
/* Ensure non re-entrancy */
if
(
test_and_set_bit
(
MASK_INTERRUPTS
,
(
void
*
)
&
lp
->
interrupt
))
printk
(
"%s: Re-entering the interrupt handler.
\n
"
,
dev
->
name
);
synchronize_irq
(
dev
->
irq
);
for
(
limit
=
0
;
limit
<
8
;
limit
++
)
{
sts
=
inl
(
DE4X5_STS
);
/* Read IRQ status */
outl
(
sts
,
DE4X5_STS
);
/* Reset the board interrupts */
if
(
!
(
sts
&
lp
->
irq_mask
))
break
;
/* All done */
handled
=
1
;
if
(
sts
&
(
STS_RI
|
STS_RU
))
/* Rx interrupt (packet[s] arrived) */
de4x5_rx
(
dev
);
if
(
sts
&
(
STS_TI
|
STS_TU
))
/* Tx interrupt (packet sent) */
de4x5_tx
(
dev
);
de4x5_tx
(
dev
);
if
(
sts
&
STS_LNF
)
{
/* TP Link has failed */
lp
->
irq_mask
&=
~
IMR_LFM
;
}
if
(
sts
&
STS_UNF
)
{
/* Transmit underrun */
de4x5_txur
(
dev
);
}
if
(
sts
&
STS_SE
)
{
/* Bus Error */
STOP_DE4X5
;
printk
(
"%s: Fatal bus error occurred, sts=%#8x, device stopped.
\n
"
,
...
...
@@ -1603,7 +1603,7 @@ de4x5_interrupt(int irq, void *dev_id, struct pt_regs *regs)
lp
->
interrupt
=
UNMASK_INTERRUPTS
;
ENABLE_IRQs
;
spin_unlock
(
&
lp
->
lock
);
return
IRQ_RETVAL
(
handled
);
}
...
...
@@ -1614,11 +1614,11 @@ de4x5_rx(struct net_device *dev)
u_long
iobase
=
dev
->
base_addr
;
int
entry
;
s32
status
;
for
(
entry
=
lp
->
rx_new
;
(
s32
)
le32_to_cpu
(
lp
->
rx_ring
[
entry
].
status
)
>=
0
;
entry
=
lp
->
rx_new
)
{
status
=
(
s32
)
le32_to_cpu
(
lp
->
rx_ring
[
entry
].
status
);
if
(
lp
->
rx_ovf
)
{
if
(
inl
(
DE4X5_MFC
)
&
MFC_FOCM
)
{
de4x5_rx_ovfc
(
dev
);
...
...
@@ -1629,7 +1629,7 @@ de4x5_rx(struct net_device *dev)
if
(
status
&
RD_FS
)
{
/* Remember the start of frame */
lp
->
rx_old
=
entry
;
}
if
(
status
&
RD_LS
)
{
/* Valid frame status */
if
(
lp
->
tx_enable
)
lp
->
linkOK
++
;
if
(
status
&
RD_ES
)
{
/* There was an error. */
...
...
@@ -1646,9 +1646,9 @@ de4x5_rx(struct net_device *dev)
struct
sk_buff
*
skb
;
short
pkt_len
=
(
short
)(
le32_to_cpu
(
lp
->
rx_ring
[
entry
].
status
)
>>
16
)
-
4
;
if
((
skb
=
de4x5_alloc_rx_buff
(
dev
,
entry
,
pkt_len
))
==
NULL
)
{
printk
(
"%s: Insufficient memory; nuking packet.
\n
"
,
printk
(
"%s: Insufficient memory; nuking packet.
\n
"
,
dev
->
name
);
lp
->
stats
.
rx_dropped
++
;
}
else
{
...
...
@@ -1658,14 +1658,14 @@ de4x5_rx(struct net_device *dev)
skb
->
protocol
=
eth_type_trans
(
skb
,
dev
);
de4x5_local_stats
(
dev
,
skb
->
data
,
pkt_len
);
netif_rx
(
skb
);
/* Update stats */
dev
->
last_rx
=
jiffies
;
lp
->
stats
.
rx_packets
++
;
lp
->
stats
.
rx_bytes
+=
pkt_len
;
}
}
/* Change buffer ownership for this frame, back to the adapter */
for
(;
lp
->
rx_old
!=
entry
;
lp
->
rx_old
=
(
++
lp
->
rx_old
)
%
lp
->
rxRingSize
)
{
lp
->
rx_ring
[
lp
->
rx_old
].
status
=
cpu_to_le32
(
R_OWN
);
...
...
@@ -1674,13 +1674,13 @@ de4x5_rx(struct net_device *dev)
lp
->
rx_ring
[
entry
].
status
=
cpu_to_le32
(
R_OWN
);
barrier
();
}
/*
** Update entry information
*/
lp
->
rx_new
=
(
++
lp
->
rx_new
)
%
lp
->
rxRingSize
;
}
return
0
;
}
...
...
@@ -1705,20 +1705,20 @@ de4x5_tx(struct net_device *dev)
u_long
iobase
=
dev
->
base_addr
;
int
entry
;
s32
status
;
for
(
entry
=
lp
->
tx_old
;
entry
!=
lp
->
tx_new
;
entry
=
lp
->
tx_old
)
{
status
=
(
s32
)
le32_to_cpu
(
lp
->
tx_ring
[
entry
].
status
);
if
(
status
<
0
)
{
/* Buffer not sent yet */
break
;
}
else
if
(
status
!=
0x7fffffff
)
{
/* Not setup frame */
if
(
status
&
TD_ES
)
{
/* An error happened */
lp
->
stats
.
tx_errors
++
;
lp
->
stats
.
tx_errors
++
;
if
(
status
&
TD_NC
)
lp
->
stats
.
tx_carrier_errors
++
;
if
(
status
&
TD_LC
)
lp
->
stats
.
tx_window_errors
++
;
if
(
status
&
TD_UF
)
lp
->
stats
.
tx_fifo_errors
++
;
if
(
status
&
TD_EC
)
lp
->
pktStats
.
excessive_collisions
++
;
if
(
status
&
TD_DE
)
lp
->
stats
.
tx_aborted_errors
++
;
if
(
TX_PKT_PENDING
)
{
outl
(
POLL_DEMAND
,
DE4X5_TPD
);
/* Restart a stalled TX */
}
...
...
@@ -1727,14 +1727,14 @@ de4x5_tx(struct net_device *dev)
if
(
lp
->
tx_enable
)
lp
->
linkOK
++
;
}
/* Update the collision counter */
lp
->
stats
.
collisions
+=
((
status
&
TD_EC
)
?
16
:
lp
->
stats
.
collisions
+=
((
status
&
TD_EC
)
?
16
:
((
status
&
TD_CC
)
>>
3
));
/* Free the buffer. */
if
(
lp
->
tx_skb
[
entry
]
!=
NULL
)
de4x5_free_tx_buff
(
lp
,
entry
);
}
/* Update all the pointers */
lp
->
tx_old
=
(
++
lp
->
tx_old
)
%
lp
->
txRingSize
;
}
...
...
@@ -1746,7 +1746,7 @@ de4x5_tx(struct net_device *dev)
else
netif_start_queue
(
dev
);
}
return
0
;
}
...
...
@@ -1755,9 +1755,9 @@ de4x5_ast(struct net_device *dev)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
int
next_tick
=
DE4X5_AUTOSENSE_MS
;
disable_ast
(
dev
);
if
(
lp
->
useSROM
)
{
next_tick
=
srom_autoconf
(
dev
);
}
else
if
(
lp
->
chipset
==
DC21140
)
{
...
...
@@ -1769,7 +1769,7 @@ de4x5_ast(struct net_device *dev)
}
lp
->
linkOK
=
0
;
enable_ast
(
dev
,
next_tick
);
return
0
;
}
...
...
@@ -1792,11 +1792,11 @@ de4x5_txur(struct net_device *dev)
}
outl
(
omr
|
OMR_ST
|
OMR_SR
,
DE4X5_OMR
);
}
return
0
;
}
static
int
static
int
de4x5_rx_ovfc
(
struct
net_device
*
dev
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -1813,7 +1813,7 @@ de4x5_rx_ovfc(struct net_device *dev)
}
outl
(
omr
,
DE4X5_OMR
);
return
0
;
}
...
...
@@ -1823,22 +1823,22 @@ de4x5_close(struct net_device *dev)
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
s32
imr
,
omr
;
disable_ast
(
dev
);
netif_stop_queue
(
dev
);
if
(
de4x5_debug
&
DEBUG_CLOSE
)
{
printk
(
"%s: Shutting down ethercard, status was %8.8x.
\n
"
,
dev
->
name
,
inl
(
DE4X5_STS
));
}
/*
/*
** We stop the DE4X5 here... mask interrupts and stop TX & RX
*/
DISABLE_IRQs
;
STOP_DE4X5
;
/* Free the associated irq */
free_irq
(
dev
->
irq
,
dev
);
lp
->
state
=
CLOSED
;
...
...
@@ -1846,10 +1846,10 @@ de4x5_close(struct net_device *dev)
/* Free any socket buffers */
de4x5_free_rx_buffs
(
dev
);
de4x5_free_tx_buffs
(
dev
);
/* Put the adapter to sleep to save power */
yawn
(
dev
,
SLEEP
);
return
0
;
}
...
...
@@ -1858,9 +1858,9 @@ de4x5_get_stats(struct net_device *dev)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
lp
->
stats
.
rx_missed_errors
=
(
int
)(
inl
(
DE4X5_MFC
)
&
(
MFC_OVFL
|
MFC_CNTR
));
return
&
lp
->
stats
;
}
...
...
@@ -1886,7 +1886,7 @@ de4x5_local_stats(struct net_device *dev, char *buf, int pkt_len)
(
*
(
s16
*
)
&
buf
[
4
]
==
*
(
s16
*
)
&
dev
->
dev_addr
[
4
]))
{
lp
->
pktStats
.
unicast
++
;
}
lp
->
pktStats
.
bins
[
0
]
++
;
/* Duplicates stats.rx_packets */
if
(
lp
->
pktStats
.
bins
[
0
]
==
0
)
{
/* Reset counters */
memset
((
char
*
)
&
lp
->
pktStats
,
0
,
sizeof
(
lp
->
pktStats
));
...
...
@@ -1937,11 +1937,11 @@ set_multicast_list(struct net_device *dev)
omr
=
inl
(
DE4X5_OMR
);
omr
|=
OMR_PR
;
outl
(
omr
,
DE4X5_OMR
);
}
else
{
}
else
{
SetMulticastFilter
(
dev
);
load_packet
(
dev
,
lp
->
setup_frame
,
TD_IC
|
PERFECT_F
|
TD_SET
|
load_packet
(
dev
,
lp
->
setup_frame
,
TD_IC
|
PERFECT_F
|
TD_SET
|
SETUP_FRAME_LEN
,
(
struct
sk_buff
*
)
1
);
lp
->
tx_new
=
(
++
lp
->
tx_new
)
%
lp
->
txRingSize
;
outl
(
POLL_DEMAND
,
DE4X5_TPD
);
/* Start the TX */
dev
->
trans_start
=
jiffies
;
...
...
@@ -1969,20 +1969,20 @@ SetMulticastFilter(struct net_device *dev)
omr
=
inl
(
DE4X5_OMR
);
omr
&=
~
(
OMR_PR
|
OMR_PM
);
pa
=
build_setup_frame
(
dev
,
ALL
);
/* Build the basic frame */
if
((
dev
->
flags
&
IFF_ALLMULTI
)
||
(
dev
->
mc_count
>
14
))
{
omr
|=
OMR_PM
;
/* Pass all multicasts */
}
else
if
(
lp
->
setup_f
==
HASH_PERF
)
{
/* Hash Filtering */
for
(
i
=
0
;
i
<
dev
->
mc_count
;
i
++
)
{
/* for each address in the list */
addrs
=
dmi
->
dmi_addr
;
dmi
=
dmi
->
next
;
if
((
*
addrs
&
0x01
)
==
1
)
{
/* multicast address? */
if
((
*
addrs
&
0x01
)
==
1
)
{
/* multicast address? */
crc
=
ether_crc_le
(
ETH_ALEN
,
addrs
);
hashcode
=
crc
&
HASH_BITS
;
/* hashcode is 9 LSb of CRC */
byte
=
hashcode
>>
3
;
/* bit[3-8] -> byte in filter */
bit
=
1
<<
(
hashcode
&
0x07
);
/* bit[0-2] -> bit in byte */
byte
<<=
1
;
/* calc offset into setup frame */
if
(
byte
&
0x02
)
{
byte
-=
1
;
...
...
@@ -1994,14 +1994,14 @@ SetMulticastFilter(struct net_device *dev)
for
(
j
=
0
;
j
<
dev
->
mc_count
;
j
++
)
{
addrs
=
dmi
->
dmi_addr
;
dmi
=
dmi
->
next
;
for
(
i
=
0
;
i
<
ETH_ALEN
;
i
++
)
{
for
(
i
=
0
;
i
<
ETH_ALEN
;
i
++
)
{
*
(
pa
+
(
i
&
1
))
=
*
addrs
++
;
if
(
i
&
0x01
)
pa
+=
4
;
}
}
}
outl
(
omr
,
DE4X5_OMR
);
return
;
}
...
...
@@ -2031,18 +2031,18 @@ static int __init de4x5_eisa_probe (struct device *gendev)
status
=
-
EBUSY
;
goto
release_reg_1
;
}
if
(
!
(
dev
=
alloc_etherdev
(
sizeof
(
struct
de4x5_private
))))
{
status
=
-
ENOMEM
;
goto
release_reg_2
;
}
lp
=
netdev_priv
(
dev
);
cfid
=
(
u32
)
inl
(
PCI_CFID
);
lp
->
cfrv
=
(
u_short
)
inl
(
PCI_CFRV
);
device
=
(
cfid
>>
8
)
&
0x00ffff00
;
vendor
=
(
u_short
)
cfid
;
/* Read the EISA Configuration Registers */
regval
=
inb
(
EISA_REG0
)
&
(
ER0_INTL
|
ER0_INTT
);
#ifdef CONFIG_ALPHA
...
...
@@ -2050,7 +2050,7 @@ static int __init de4x5_eisa_probe (struct device *gendev)
* care about the EISA configuration, and thus doesn't
* configure the PLX bridge properly. Oh well... Simply mimic
* the EISA config file to sort it out. */
/* EISA REG1: Assert DecChip 21040 HW Reset */
outb
(
ER1_IAM
|
1
,
EISA_REG1
);
mdelay
(
1
);
...
...
@@ -2061,12 +2061,12 @@ static int __init de4x5_eisa_probe (struct device *gendev)
/* EISA REG3: R/W Burst Transfer Enable */
outb
(
ER3_BWE
|
ER3_BRE
,
EISA_REG3
);
/* 32_bit slave/master, Preempt Time=23 bclks, Unlatched Interrupt */
outb
(
ER0_BSW
|
ER0_BMW
|
ER0_EPT
|
regval
,
EISA_REG0
);
#endif
irq
=
de4x5_irq
[(
regval
>>
1
)
&
0x03
];
if
(
is_DC2114x
)
{
device
=
((
lp
->
cfrv
&
CFRV_RN
)
<
DC2114x_BRK
?
DC21142
:
DC21143
);
}
...
...
@@ -2077,7 +2077,7 @@ static int __init de4x5_eisa_probe (struct device *gendev)
outl
(
PCI_COMMAND_IO
|
PCI_COMMAND_MASTER
,
PCI_CFCS
);
outl
(
0x00006000
,
PCI_CFLT
);
outl
(
iobase
,
PCI_CBIO
);
DevicePresent
(
dev
,
EISA_APROM
);
dev
->
irq
=
irq
;
...
...
@@ -2102,7 +2102,7 @@ static int __devexit de4x5_eisa_remove (struct device *device)
dev
=
device
->
driver_data
;
iobase
=
dev
->
base_addr
;
unregister_netdev
(
dev
);
free_netdev
(
dev
);
release_region
(
iobase
+
DE4X5_EISA_IO_PORTS
,
DE4X5_EISA_TOTAL_SIZE
);
...
...
@@ -2131,11 +2131,11 @@ MODULE_DEVICE_TABLE(eisa, de4x5_eisa_ids);
/*
** This function searches the current bus (which is >0) for a DECchip with an
** SROM, so that in multiport cards that have one SROM shared between multiple
** SROM, so that in multiport cards that have one SROM shared between multiple
** DECchips, we can find the base SROM irrespective of the BIOS scan direction.
** For single port cards this is a time waster...
*/
static
void
__devinit
static
void
__devinit
srom_search
(
struct
net_device
*
dev
,
struct
pci_dev
*
pdev
)
{
u_char
pb
;
...
...
@@ -2163,7 +2163,7 @@ srom_search(struct net_device *dev, struct pci_dev *pdev)
/* Set the device number information */
lp
->
device
=
PCI_SLOT
(
this_dev
->
devfn
);
lp
->
bus_num
=
pb
;
/* Set the chipset information */
if
(
is_DC2114x
)
{
device
=
((
cfrv
&
CFRV_RN
)
<
DC2114x_BRK
?
DC21142
:
DC21143
);
...
...
@@ -2176,7 +2176,7 @@ srom_search(struct net_device *dev, struct pci_dev *pdev)
/* Fetch the IRQ to be used */
irq
=
this_dev
->
irq
;
if
((
irq
==
0
)
||
(
irq
==
0xff
)
||
((
int
)
irq
==
-
1
))
continue
;
/* Check if I/O accesses are enabled */
pci_read_config_word
(
this_dev
,
PCI_COMMAND
,
&
status
);
if
(
!
(
status
&
PCI_COMMAND_IO
))
continue
;
...
...
@@ -2254,7 +2254,7 @@ static int __devinit de4x5_pci_probe (struct pci_dev *pdev,
lp
=
netdev_priv
(
dev
);
lp
->
bus
=
PCI
;
lp
->
bus_num
=
0
;
/* Search for an SROM on this bus */
if
(
lp
->
bus_num
!=
pb
)
{
lp
->
bus_num
=
pb
;
...
...
@@ -2267,7 +2267,7 @@ static int __devinit de4x5_pci_probe (struct pci_dev *pdev,
/* Set the device number information */
lp
->
device
=
dev_num
;
lp
->
bus_num
=
pb
;
/* Set the chipset information */
if
(
is_DC2114x
)
{
device
=
((
lp
->
cfrv
&
CFRV_RN
)
<
DC2114x_BRK
?
DC21142
:
DC21143
);
...
...
@@ -2283,7 +2283,7 @@ static int __devinit de4x5_pci_probe (struct pci_dev *pdev,
error
=
-
ENODEV
;
goto
free_dev
;
}
/* Check if I/O accesses and Bus Mastering are enabled */
pci_read_config_word
(
pdev
,
PCI_COMMAND
,
&
status
);
#ifdef __powerpc__
...
...
@@ -2322,7 +2322,7 @@ static int __devinit de4x5_pci_probe (struct pci_dev *pdev,
}
dev
->
irq
=
irq
;
if
((
error
=
de4x5_hw_init
(
dev
,
iobase
,
&
pdev
->
dev
)))
{
goto
release
;
}
...
...
@@ -2377,7 +2377,7 @@ static struct pci_driver de4x5_pci_driver = {
** Auto configure the media here rather than setting the port at compile
** time. This routine is called by de4x5_init() and when a loss of media is
** detected (excessive collisions, loss of carrier, no carrier or link fail
** [TP] or no recent receive activity) to check whether the user has been
** [TP] or no recent receive activity) to check whether the user has been
** sneaky and changed the port on us.
*/
static
int
...
...
@@ -2405,7 +2405,7 @@ autoconf_media(struct net_device *dev)
}
enable_ast
(
dev
,
next_tick
);
return
(
lp
->
media
);
}
...
...
@@ -2428,7 +2428,7 @@ dc21040_autoconf(struct net_device *dev)
u_long
iobase
=
dev
->
base_addr
;
int
next_tick
=
DE4X5_AUTOSENSE_MS
;
s32
imr
;
switch
(
lp
->
media
)
{
case
INIT
:
DISABLE_IRQs
;
...
...
@@ -2447,36 +2447,36 @@ dc21040_autoconf(struct net_device *dev)
lp
->
local_state
=
0
;
next_tick
=
dc21040_autoconf
(
dev
);
break
;
case
TP
:
next_tick
=
dc21040_state
(
dev
,
0x8f01
,
0xffff
,
0x0000
,
3000
,
BNC_AUI
,
next_tick
=
dc21040_state
(
dev
,
0x8f01
,
0xffff
,
0x0000
,
3000
,
BNC_AUI
,
TP_SUSPECT
,
test_tp
);
break
;
case
TP_SUSPECT
:
next_tick
=
de4x5_suspect_state
(
dev
,
1000
,
TP
,
test_tp
,
dc21040_autoconf
);
break
;
case
BNC
:
case
AUI
:
case
BNC_AUI
:
next_tick
=
dc21040_state
(
dev
,
0x8f09
,
0x0705
,
0x0006
,
3000
,
EXT_SIA
,
next_tick
=
dc21040_state
(
dev
,
0x8f09
,
0x0705
,
0x0006
,
3000
,
EXT_SIA
,
BNC_AUI_SUSPECT
,
ping_media
);
break
;
case
BNC_AUI_SUSPECT
:
next_tick
=
de4x5_suspect_state
(
dev
,
1000
,
BNC_AUI
,
ping_media
,
dc21040_autoconf
);
break
;
case
EXT_SIA
:
next_tick
=
dc21040_state
(
dev
,
0x3041
,
0x0000
,
0x0006
,
3000
,
next_tick
=
dc21040_state
(
dev
,
0x3041
,
0x0000
,
0x0006
,
3000
,
NC
,
EXT_SIA_SUSPECT
,
ping_media
);
break
;
case
EXT_SIA_SUSPECT
:
next_tick
=
de4x5_suspect_state
(
dev
,
1000
,
EXT_SIA
,
ping_media
,
dc21040_autoconf
);
break
;
case
NC
:
/* default to TP for all */
reset_init_sia
(
dev
,
0x8f01
,
0xffff
,
0x0000
);
...
...
@@ -2488,13 +2488,13 @@ dc21040_autoconf(struct net_device *dev)
lp
->
tx_enable
=
NO
;
break
;
}
return
next_tick
;
}
static
int
dc21040_state
(
struct
net_device
*
dev
,
int
csr13
,
int
csr14
,
int
csr15
,
int
timeout
,
int
next_state
,
int
suspect_state
,
int
next_state
,
int
suspect_state
,
int
(
*
fn
)(
struct
net_device
*
,
int
))
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -2507,7 +2507,7 @@ dc21040_state(struct net_device *dev, int csr13, int csr14, int csr15, int timeo
lp
->
local_state
++
;
next_tick
=
500
;
break
;
case
1
:
if
(
!
lp
->
tx_enable
)
{
linkBad
=
fn
(
dev
,
timeout
);
...
...
@@ -2527,7 +2527,7 @@ dc21040_state(struct net_device *dev, int csr13, int csr14, int csr15, int timeo
}
break
;
}
return
next_tick
;
}
...
...
@@ -2582,7 +2582,7 @@ dc21041_autoconf(struct net_device *dev)
u_long
iobase
=
dev
->
base_addr
;
s32
sts
,
irqs
,
irq_mask
,
imr
,
omr
;
int
next_tick
=
DE4X5_AUTOSENSE_MS
;
switch
(
lp
->
media
)
{
case
INIT
:
DISABLE_IRQs
;
...
...
@@ -2603,7 +2603,7 @@ dc21041_autoconf(struct net_device *dev)
lp
->
local_state
=
0
;
next_tick
=
dc21041_autoconf
(
dev
);
break
;
case
TP_NW
:
if
(
lp
->
timeout
<
0
)
{
omr
=
inl
(
DE4X5_OMR
);
/* Set up full duplex for the autonegotiate */
...
...
@@ -2623,7 +2623,7 @@ dc21041_autoconf(struct net_device *dev)
next_tick
=
dc21041_autoconf
(
dev
);
}
break
;
case
ANS
:
if
(
!
lp
->
tx_enable
)
{
irqs
=
STS_LNP
;
...
...
@@ -2645,11 +2645,11 @@ dc21041_autoconf(struct net_device *dev)
next_tick
=
3000
;
}
break
;
case
ANS_SUSPECT
:
next_tick
=
de4x5_suspect_state
(
dev
,
1000
,
ANS
,
test_tp
,
dc21041_autoconf
);
break
;
case
TP
:
if
(
!
lp
->
tx_enable
)
{
if
(
lp
->
timeout
<
0
)
{
...
...
@@ -2679,11 +2679,11 @@ dc21041_autoconf(struct net_device *dev)
next_tick
=
3000
;
}
break
;
case
TP_SUSPECT
:
next_tick
=
de4x5_suspect_state
(
dev
,
1000
,
TP
,
test_tp
,
dc21041_autoconf
);
break
;
case
AUI
:
if
(
!
lp
->
tx_enable
)
{
if
(
lp
->
timeout
<
0
)
{
...
...
@@ -2709,11 +2709,11 @@ dc21041_autoconf(struct net_device *dev)
next_tick
=
3000
;
}
break
;
case
AUI_SUSPECT
:
next_tick
=
de4x5_suspect_state
(
dev
,
1000
,
AUI
,
ping_media
,
dc21041_autoconf
);
break
;
case
BNC
:
switch
(
lp
->
local_state
)
{
case
0
:
...
...
@@ -2731,7 +2731,7 @@ dc21041_autoconf(struct net_device *dev)
next_tick
=
dc21041_autoconf
(
dev
);
}
break
;
case
1
:
if
(
!
lp
->
tx_enable
)
{
if
((
sts
=
ping_media
(
dev
,
3000
))
<
0
)
{
...
...
@@ -2751,11 +2751,11 @@ dc21041_autoconf(struct net_device *dev)
break
;
}
break
;
case
BNC_SUSPECT
:
next_tick
=
de4x5_suspect_state
(
dev
,
1000
,
BNC
,
ping_media
,
dc21041_autoconf
);
break
;
case
NC
:
omr
=
inl
(
DE4X5_OMR
);
/* Set up full duplex for the autonegotiate */
outl
(
omr
|
OMR_FDX
,
DE4X5_OMR
);
...
...
@@ -2768,7 +2768,7 @@ dc21041_autoconf(struct net_device *dev)
lp
->
tx_enable
=
NO
;
break
;
}
return
next_tick
;
}
...
...
@@ -2784,9 +2784,9 @@ dc21140m_autoconf(struct net_device *dev)
int
ana
,
anlpa
,
cap
,
cr
,
slnk
,
sr
;
int
next_tick
=
DE4X5_AUTOSENSE_MS
;
u_long
imr
,
omr
,
iobase
=
dev
->
base_addr
;
switch
(
lp
->
media
)
{
case
INIT
:
case
INIT
:
if
(
lp
->
timeout
<
0
)
{
DISABLE_IRQs
;
lp
->
tx_enable
=
FALSE
;
...
...
@@ -2813,7 +2813,7 @@ dc21140m_autoconf(struct net_device *dev)
lp
->
media
=
_100Mb
;
}
else
if
(
lp
->
autosense
==
_10Mb
)
{
lp
->
media
=
_10Mb
;
}
else
if
((
lp
->
autosense
==
AUTO
)
&&
}
else
if
((
lp
->
autosense
==
AUTO
)
&&
((
sr
=
is_anc_capable
(
dev
))
&
MII_SR_ANC
))
{
ana
=
(((
sr
>>
6
)
&
MII_ANA_TAF
)
|
MII_ANA_CSMA
);
ana
&=
(
lp
->
fdx
?
~
0
:
~
MII_ANA_FDAM
);
...
...
@@ -2831,7 +2831,7 @@ dc21140m_autoconf(struct net_device *dev)
next_tick
=
dc21140m_autoconf
(
dev
);
}
break
;
case
ANS
:
switch
(
lp
->
local_state
)
{
case
0
:
...
...
@@ -2851,7 +2851,7 @@ dc21140m_autoconf(struct net_device *dev)
next_tick
=
dc21140m_autoconf
(
dev
);
}
break
;
case
1
:
if
((
sr
=
test_mii_reg
(
dev
,
MII_SR
,
MII_SR_ASSC
,
TRUE
,
2000
))
<
0
)
{
next_tick
=
sr
&
~
TIMER_CB
;
...
...
@@ -2862,7 +2862,7 @@ dc21140m_autoconf(struct net_device *dev)
lp
->
tmp
=
MII_SR_ASSC
;
anlpa
=
mii_rd
(
MII_ANLPA
,
lp
->
phy
[
lp
->
active
].
addr
,
DE4X5_MII
);
ana
=
mii_rd
(
MII_ANA
,
lp
->
phy
[
lp
->
active
].
addr
,
DE4X5_MII
);
if
(
!
(
anlpa
&
MII_ANLPA_RF
)
&&
if
(
!
(
anlpa
&
MII_ANLPA_RF
)
&&
(
cap
=
anlpa
&
MII_ANLPA_TAF
&
ana
))
{
if
(
cap
&
MII_ANA_100M
)
{
lp
->
fdx
=
((
ana
&
anlpa
&
MII_ANA_FDAM
&
MII_ANA_100M
)
?
TRUE
:
FALSE
);
...
...
@@ -2879,10 +2879,10 @@ dc21140m_autoconf(struct net_device *dev)
break
;
}
break
;
case
SPD_DET
:
/* Choose 10Mb/s or 100Mb/s */
if
(
lp
->
timeout
<
0
)
{
lp
->
tmp
=
(
lp
->
phy
[
lp
->
active
].
id
?
MII_SR_LKS
:
lp
->
tmp
=
(
lp
->
phy
[
lp
->
active
].
id
?
MII_SR_LKS
:
(
~
gep_rd
(
dev
)
&
GEP_LNP
));
SET_100Mb_PDET
;
}
...
...
@@ -2899,7 +2899,7 @@ dc21140m_autoconf(struct net_device *dev)
next_tick
=
dc21140m_autoconf
(
dev
);
}
break
;
case
_100Mb
:
/* Set 100Mb/s */
next_tick
=
3000
;
if
(
!
lp
->
tx_enable
)
{
...
...
@@ -2933,7 +2933,7 @@ dc21140m_autoconf(struct net_device *dev)
}
}
break
;
case
NC
:
if
(
lp
->
media
!=
lp
->
c_media
)
{
de4x5_dbg_media
(
dev
);
...
...
@@ -2943,7 +2943,7 @@ dc21140m_autoconf(struct net_device *dev)
lp
->
tx_enable
=
FALSE
;
break
;
}
return
next_tick
;
}
...
...
@@ -3002,7 +3002,7 @@ dc2114x_autoconf(struct net_device *dev)
lp
->
media
=
AUI
;
}
else
{
lp
->
media
=
SPD_DET
;
if
((
lp
->
infoblock_media
==
ANS
)
&&
if
((
lp
->
infoblock_media
==
ANS
)
&&
((
sr
=
is_anc_capable
(
dev
))
&
MII_SR_ANC
))
{
ana
=
(((
sr
>>
6
)
&
MII_ANA_TAF
)
|
MII_ANA_CSMA
);
ana
&=
(
lp
->
fdx
?
~
0
:
~
MII_ANA_FDAM
);
...
...
@@ -3014,7 +3014,7 @@ dc2114x_autoconf(struct net_device *dev)
next_tick
=
dc2114x_autoconf
(
dev
);
}
break
;
case
ANS
:
switch
(
lp
->
local_state
)
{
case
0
:
...
...
@@ -3034,7 +3034,7 @@ dc2114x_autoconf(struct net_device *dev)
next_tick
=
dc2114x_autoconf
(
dev
);
}
break
;
case
1
:
if
((
sr
=
test_mii_reg
(
dev
,
MII_SR
,
MII_SR_ASSC
,
TRUE
,
2000
))
<
0
)
{
next_tick
=
sr
&
~
TIMER_CB
;
...
...
@@ -3045,7 +3045,7 @@ dc2114x_autoconf(struct net_device *dev)
lp
->
tmp
=
MII_SR_ASSC
;
anlpa
=
mii_rd
(
MII_ANLPA
,
lp
->
phy
[
lp
->
active
].
addr
,
DE4X5_MII
);
ana
=
mii_rd
(
MII_ANA
,
lp
->
phy
[
lp
->
active
].
addr
,
DE4X5_MII
);
if
(
!
(
anlpa
&
MII_ANLPA_RF
)
&&
if
(
!
(
anlpa
&
MII_ANLPA_RF
)
&&
(
cap
=
anlpa
&
MII_ANLPA_TAF
&
ana
))
{
if
(
cap
&
MII_ANA_100M
)
{
lp
->
fdx
=
((
ana
&
anlpa
&
MII_ANA_FDAM
&
MII_ANA_100M
)
?
TRUE
:
FALSE
);
...
...
@@ -3087,11 +3087,11 @@ dc2114x_autoconf(struct net_device *dev)
next_tick
=
3000
;
}
break
;
case
AUI_SUSPECT
:
next_tick
=
de4x5_suspect_state
(
dev
,
1000
,
AUI
,
ping_media
,
dc2114x_autoconf
);
break
;
case
BNC
:
switch
(
lp
->
local_state
)
{
case
0
:
...
...
@@ -3109,7 +3109,7 @@ dc2114x_autoconf(struct net_device *dev)
next_tick
=
dc2114x_autoconf
(
dev
);
}
break
;
case
1
:
if
(
!
lp
->
tx_enable
)
{
if
((
sts
=
ping_media
(
dev
,
3000
))
<
0
)
{
...
...
@@ -3130,11 +3130,11 @@ dc2114x_autoconf(struct net_device *dev)
break
;
}
break
;
case
BNC_SUSPECT
:
next_tick
=
de4x5_suspect_state
(
dev
,
1000
,
BNC
,
ping_media
,
dc2114x_autoconf
);
break
;
case
SPD_DET
:
/* Choose 10Mb/s or 100Mb/s */
if
(
srom_map_media
(
dev
)
<
0
)
{
lp
->
tcount
++
;
...
...
@@ -3161,7 +3161,7 @@ dc2114x_autoconf(struct net_device *dev)
next_tick
=
dc2114x_autoconf
(
dev
);
}
else
if
(((
lp
->
media
==
_100Mb
)
&&
is_100_up
(
dev
))
||
(((
lp
->
media
==
_10Mb
)
||
(
lp
->
media
==
TP
)
||
(
lp
->
media
==
BNC
)
||
(
lp
->
media
==
AUI
))
&&
(
lp
->
media
==
BNC
)
||
(
lp
->
media
==
AUI
))
&&
is_10_up
(
dev
)))
{
next_tick
=
dc2114x_autoconf
(
dev
);
}
else
{
...
...
@@ -3169,7 +3169,7 @@ dc2114x_autoconf(struct net_device *dev)
lp
->
media
=
INIT
;
}
break
;
case
_10Mb
:
next_tick
=
3000
;
if
(
!
lp
->
tx_enable
)
{
...
...
@@ -3208,7 +3208,7 @@ printk("Huh?: media:%02x\n", lp->media);
lp
->
media
=
INIT
;
break
;
}
return
next_tick
;
}
...
...
@@ -3231,7 +3231,7 @@ srom_map_media(struct net_device *dev)
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
lp
->
fdx
=
0
;
if
(
lp
->
infoblock_media
==
lp
->
media
)
if
(
lp
->
infoblock_media
==
lp
->
media
)
return
0
;
switch
(
lp
->
infoblock_media
)
{
...
...
@@ -3270,7 +3270,7 @@ srom_map_media(struct net_device *dev)
case
SROM_100BASEFF
:
if
(
!
lp
->
params
.
fdx
)
return
-
1
;
lp
->
fdx
=
TRUE
;
case
SROM_100BASEF
:
case
SROM_100BASEF
:
if
(
lp
->
params
.
fdx
&&
!
lp
->
fdx
)
return
-
1
;
lp
->
media
=
_100Mb
;
break
;
...
...
@@ -3280,8 +3280,8 @@ srom_map_media(struct net_device *dev)
lp
->
fdx
=
lp
->
params
.
fdx
;
break
;
default:
printk
(
"%s: Bad media code [%d] detected in SROM!
\n
"
,
dev
->
name
,
default:
printk
(
"%s: Bad media code [%d] detected in SROM!
\n
"
,
dev
->
name
,
lp
->
infoblock_media
);
return
-
1
;
break
;
...
...
@@ -3359,7 +3359,7 @@ test_media(struct net_device *dev, s32 irqs, s32 irq_mask, s32 csr13, s32 csr14,
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
s32
sts
,
csr12
;
if
(
lp
->
timeout
<
0
)
{
lp
->
timeout
=
msec
/
100
;
if
(
!
lp
->
useSROM
)
{
/* Already done if by SROM, else dc2104[01] */
...
...
@@ -3372,22 +3372,22 @@ test_media(struct net_device *dev, s32 irqs, s32 irq_mask, s32 csr13, s32 csr14,
/* clear all pending interrupts */
sts
=
inl
(
DE4X5_STS
);
outl
(
sts
,
DE4X5_STS
);
/* clear csr12 NRA and SRA bits */
if
((
lp
->
chipset
==
DC21041
)
||
lp
->
useSROM
)
{
csr12
=
inl
(
DE4X5_SISR
);
outl
(
csr12
,
DE4X5_SISR
);
}
}
sts
=
inl
(
DE4X5_STS
)
&
~
TIMER_CB
;
if
(
!
(
sts
&
irqs
)
&&
--
lp
->
timeout
)
{
sts
=
100
|
TIMER_CB
;
}
else
{
lp
->
timeout
=
-
1
;
}
return
sts
;
}
...
...
@@ -3397,11 +3397,11 @@ test_tp(struct net_device *dev, s32 msec)
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
int
sisr
;
if
(
lp
->
timeout
<
0
)
{
lp
->
timeout
=
msec
/
100
;
}
sisr
=
(
inl
(
DE4X5_SISR
)
&
~
TIMER_CB
)
&
(
SISR_LKF
|
SISR_NCR
);
if
(
sisr
&&
--
lp
->
timeout
)
{
...
...
@@ -3409,7 +3409,7 @@ test_tp(struct net_device *dev, s32 msec)
}
else
{
lp
->
timeout
=
-
1
;
}
return
sisr
;
}
...
...
@@ -3436,7 +3436,7 @@ test_for_100Mb(struct net_device *dev, int msec)
lp
->
timeout
=
msec
/
SAMPLE_INTERVAL
;
}
}
if
(
lp
->
phy
[
lp
->
active
].
id
||
lp
->
useSROM
)
{
gep
=
is_100_up
(
dev
)
|
is_spd_100
(
dev
);
}
else
{
...
...
@@ -3447,7 +3447,7 @@ test_for_100Mb(struct net_device *dev, int msec)
}
else
{
lp
->
timeout
=
-
1
;
}
return
gep
;
}
...
...
@@ -3459,13 +3459,13 @@ wait_for_link(struct net_device *dev)
if
(
lp
->
timeout
<
0
)
{
lp
->
timeout
=
1
;
}
if
(
lp
->
timeout
--
)
{
return
TIMER_CB
;
}
else
{
lp
->
timeout
=
-
1
;
}
return
0
;
}
...
...
@@ -3479,21 +3479,21 @@ test_mii_reg(struct net_device *dev, int reg, int mask, int pol, long msec)
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
int
test
;
u_long
iobase
=
dev
->
base_addr
;
if
(
lp
->
timeout
<
0
)
{
lp
->
timeout
=
msec
/
100
;
}
if
(
pol
)
pol
=
~
0
;
reg
=
mii_rd
((
u_char
)
reg
,
lp
->
phy
[
lp
->
active
].
addr
,
DE4X5_MII
)
&
mask
;
test
=
(
reg
^
pol
)
&
mask
;
if
(
test
&&
--
lp
->
timeout
)
{
reg
=
100
|
TIMER_CB
;
}
else
{
lp
->
timeout
=
-
1
;
}
return
reg
;
}
...
...
@@ -3503,7 +3503,7 @@ is_spd_100(struct net_device *dev)
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
int
spd
;
if
(
lp
->
useMII
)
{
spd
=
mii_rd
(
lp
->
phy
[
lp
->
active
].
spd
.
reg
,
lp
->
phy
[
lp
->
active
].
addr
,
DE4X5_MII
);
spd
=
~
(
spd
^
lp
->
phy
[
lp
->
active
].
spd
.
value
);
...
...
@@ -3517,7 +3517,7 @@ is_spd_100(struct net_device *dev)
spd
=
(
lp
->
asBitValid
&
(
lp
->
asPolarity
^
(
gep_rd
(
dev
)
&
lp
->
asBit
)))
|
(
lp
->
linkOK
&
~
lp
->
asBitValid
);
}
return
spd
;
}
...
...
@@ -3526,7 +3526,7 @@ is_100_up(struct net_device *dev)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
if
(
lp
->
useMII
)
{
/* Double read for sticky bits & temporary drops */
mii_rd
(
MII_SR
,
lp
->
phy
[
lp
->
active
].
addr
,
DE4X5_MII
);
...
...
@@ -3547,7 +3547,7 @@ is_10_up(struct net_device *dev)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
if
(
lp
->
useMII
)
{
/* Double read for sticky bits & temporary drops */
mii_rd
(
MII_SR
,
lp
->
phy
[
lp
->
active
].
addr
,
DE4X5_MII
);
...
...
@@ -3570,7 +3570,7 @@ is_anc_capable(struct net_device *dev)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
if
(
lp
->
phy
[
lp
->
active
].
id
&&
(
!
lp
->
useSROM
||
lp
->
useMII
))
{
return
(
mii_rd
(
MII_SR
,
lp
->
phy
[
lp
->
active
].
addr
,
DE4X5_MII
));
}
else
if
((
lp
->
chipset
&
~
0x00ff
)
==
DC2114x
)
{
...
...
@@ -3590,24 +3590,24 @@ ping_media(struct net_device *dev, int msec)
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
int
sisr
;
if
(
lp
->
timeout
<
0
)
{
lp
->
timeout
=
msec
/
100
;
lp
->
tmp
=
lp
->
tx_new
;
/* Remember the ring position */
load_packet
(
dev
,
lp
->
frame
,
TD_LS
|
TD_FS
|
sizeof
(
lp
->
frame
),
(
struct
sk_buff
*
)
1
);
lp
->
tx_new
=
(
++
lp
->
tx_new
)
%
lp
->
txRingSize
;
outl
(
POLL_DEMAND
,
DE4X5_TPD
);
}
sisr
=
inl
(
DE4X5_SISR
);
if
((
!
(
sisr
&
SISR_NCR
))
&&
((
s32
)
le32_to_cpu
(
lp
->
tx_ring
[
lp
->
tmp
].
status
)
<
0
)
&&
if
((
!
(
sisr
&
SISR_NCR
))
&&
((
s32
)
le32_to_cpu
(
lp
->
tx_ring
[
lp
->
tmp
].
status
)
<
0
)
&&
(
--
lp
->
timeout
))
{
sisr
=
100
|
TIMER_CB
;
}
else
{
if
((
!
(
sisr
&
SISR_NCR
))
&&
if
((
!
(
sisr
&
SISR_NCR
))
&&
!
(
le32_to_cpu
(
lp
->
tx_ring
[
lp
->
tmp
].
status
)
&
(
T_OWN
|
TD_ES
))
&&
lp
->
timeout
)
{
sisr
=
0
;
...
...
@@ -3616,7 +3616,7 @@ ping_media(struct net_device *dev, int msec)
}
lp
->
timeout
=
-
1
;
}
return
sisr
;
}
...
...
@@ -3668,7 +3668,7 @@ de4x5_alloc_rx_buff(struct net_device *dev, int index, int len)
}
else
{
/* Linear buffer */
memcpy
(
skb_put
(
p
,
len
),
lp
->
rx_bufs
+
lp
->
rx_old
*
RX_BUFF_SZ
,
len
);
}
return
p
;
#endif
}
...
...
@@ -3751,23 +3751,23 @@ de4x5_rst_desc_ring(struct net_device *dev)
outl
(
lp
->
dma_rings
,
DE4X5_RRBA
);
outl
(
lp
->
dma_rings
+
NUM_RX_DESC
*
sizeof
(
struct
de4x5_desc
),
DE4X5_TRBA
);
lp
->
rx_new
=
lp
->
rx_old
=
0
;
lp
->
tx_new
=
lp
->
tx_old
=
0
;
for
(
i
=
0
;
i
<
lp
->
rxRingSize
;
i
++
)
{
lp
->
rx_ring
[
i
].
status
=
cpu_to_le32
(
R_OWN
);
}
for
(
i
=
0
;
i
<
lp
->
txRingSize
;
i
++
)
{
lp
->
tx_ring
[
i
].
status
=
cpu_to_le32
(
0
);
}
barrier
();
lp
->
cache
.
save_cnt
--
;
START_DE4X5
;
}
return
;
}
...
...
@@ -3792,7 +3792,7 @@ de4x5_cache_state(struct net_device *dev, int flag)
gep_wr
(
lp
->
cache
.
gepc
,
dev
);
gep_wr
(
lp
->
cache
.
gep
,
dev
);
}
else
{
reset_init_sia
(
dev
,
lp
->
cache
.
csr13
,
lp
->
cache
.
csr14
,
reset_init_sia
(
dev
,
lp
->
cache
.
csr13
,
lp
->
cache
.
csr14
,
lp
->
cache
.
csr15
);
}
break
;
...
...
@@ -3854,25 +3854,25 @@ test_ans(struct net_device *dev, s32 irqs, s32 irq_mask, s32 msec)
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
s32
sts
,
ans
;
if
(
lp
->
timeout
<
0
)
{
lp
->
timeout
=
msec
/
100
;
outl
(
irq_mask
,
DE4X5_IMR
);
/* clear all pending interrupts */
sts
=
inl
(
DE4X5_STS
);
outl
(
sts
,
DE4X5_STS
);
}
ans
=
inl
(
DE4X5_SISR
)
&
SISR_ANS
;
sts
=
inl
(
DE4X5_STS
)
&
~
TIMER_CB
;
if
(
!
(
sts
&
irqs
)
&&
(
ans
^
ANS_NWOK
)
&&
--
lp
->
timeout
)
{
sts
=
100
|
TIMER_CB
;
}
else
{
lp
->
timeout
=
-
1
;
}
return
sts
;
}
...
...
@@ -3882,7 +3882,7 @@ de4x5_setup_intr(struct net_device *dev)
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
s32
imr
,
sts
;
if
(
inl
(
DE4X5_OMR
)
&
OMR_SR
)
{
/* Only unmask if TX/RX is enabled */
imr
=
0
;
UNMASK_IRQs
;
...
...
@@ -3890,7 +3890,7 @@ de4x5_setup_intr(struct net_device *dev)
outl
(
sts
,
DE4X5_STS
);
ENABLE_IRQs
;
}
return
;
}
...
...
@@ -3936,17 +3936,17 @@ create_packet(struct net_device *dev, char *frame, int len)
{
int
i
;
char
*
buf
=
frame
;
for
(
i
=
0
;
i
<
ETH_ALEN
;
i
++
)
{
/* Use this source address */
*
buf
++
=
dev
->
dev_addr
[
i
];
}
for
(
i
=
0
;
i
<
ETH_ALEN
;
i
++
)
{
/* Use this destination address */
*
buf
++
=
dev
->
dev_addr
[
i
];
}
*
buf
++
=
0
;
/* Packet length (2 bytes) */
*
buf
++
=
1
;
return
;
}
...
...
@@ -3978,7 +3978,7 @@ static int
PCI_signature
(
char
*
name
,
struct
de4x5_private
*
lp
)
{
int
i
,
status
=
0
,
siglen
=
sizeof
(
de4x5_signatures
)
/
sizeof
(
c_char
*
);
if
(
lp
->
chipset
==
DC21040
)
{
strcpy
(
name
,
"DE434/5"
);
return
status
;
...
...
@@ -4007,7 +4007,7 @@ PCI_signature(char *name, struct de4x5_private *lp)
}
else
if
((
lp
->
chipset
&
~
0x00ff
)
==
DC2114x
)
{
lp
->
useSROM
=
TRUE
;
}
return
status
;
}
...
...
@@ -4024,7 +4024,7 @@ DevicePresent(struct net_device *dev, u_long aprom_addr)
{
int
i
,
j
=
0
;
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
if
(
lp
->
chipset
==
DC21040
)
{
if
(
lp
->
bus
==
EISA
)
{
enet_addr_rst
(
aprom_addr
);
/* Reset Ethernet Address ROM Pointer */
...
...
@@ -4049,7 +4049,7 @@ DevicePresent(struct net_device *dev, u_long aprom_addr)
}
de4x5_dbg_srom
((
struct
de4x5_srom
*
)
&
lp
->
srom
);
}
return
;
}
...
...
@@ -4071,11 +4071,11 @@ enet_addr_rst(u_long aprom_addr)
short
sigLength
=
0
;
s8
data
;
int
i
,
j
;
dev
.
llsig
.
a
=
ETH_PROM_SIG
;
dev
.
llsig
.
b
=
ETH_PROM_SIG
;
sigLength
=
sizeof
(
u32
)
<<
1
;
for
(
i
=
0
,
j
=
0
;
j
<
sigLength
&&
i
<
PROBE_LENGTH
+
sigLength
-
1
;
i
++
)
{
data
=
inb
(
aprom_addr
);
if
(
dev
.
Sig
[
j
]
==
data
)
{
/* track signature */
...
...
@@ -4088,7 +4088,7 @@ enet_addr_rst(u_long aprom_addr)
}
}
}
return
;
}
...
...
@@ -4111,7 +4111,7 @@ get_hw_addr(struct net_device *dev)
for
(
i
=
0
,
k
=
0
,
j
=
0
;
j
<
3
;
j
++
)
{
k
<<=
1
;
if
(
k
>
0xffff
)
k
-=
0xffff
;
if
(
lp
->
bus
==
PCI
)
{
if
(
lp
->
chipset
==
DC21040
)
{
while
((
tmp
=
inl
(
DE4X5_APROM
))
<
0
);
...
...
@@ -4133,11 +4133,11 @@ get_hw_addr(struct net_device *dev)
k
+=
(
u_short
)
((
tmp
=
inb
(
EISA_APROM
))
<<
8
);
dev
->
dev_addr
[
i
++
]
=
(
u_char
)
tmp
;
}
if
(
k
>
0xffff
)
k
-=
0xffff
;
}
if
(
k
==
0xffff
)
k
=
0
;
if
(
lp
->
bus
==
PCI
)
{
if
(
lp
->
chipset
==
DC21040
)
{
while
((
tmp
=
inl
(
DE4X5_APROM
))
<
0
);
...
...
@@ -4156,7 +4156,7 @@ get_hw_addr(struct net_device *dev)
srom_repair
(
dev
,
broken
);
#ifdef CONFIG_PPC_MULTIPLATFORM
/*
/*
** If the address starts with 00 a0, we have to bit-reverse
** each byte of the address.
*/
...
...
@@ -4245,7 +4245,7 @@ test_bad_enet(struct net_device *dev, int status)
for
(
tmp
=
0
,
i
=
0
;
i
<
ETH_ALEN
;
i
++
)
tmp
+=
(
u_char
)
dev
->
dev_addr
[
i
];
if
((
tmp
==
0
)
||
(
tmp
==
0x5fa
))
{
if
((
lp
->
chipset
==
last
.
chipset
)
&&
if
((
lp
->
chipset
==
last
.
chipset
)
&&
(
lp
->
bus_num
==
last
.
bus
)
&&
(
lp
->
bus_num
>
0
))
{
for
(
i
=
0
;
i
<
ETH_ALEN
;
i
++
)
dev
->
dev_addr
[
i
]
=
last
.
addr
[
i
];
for
(
i
=
ETH_ALEN
-
1
;
i
>
2
;
--
i
)
{
...
...
@@ -4275,7 +4275,7 @@ test_bad_enet(struct net_device *dev, int status)
static
int
an_exception
(
struct
de4x5_private
*
lp
)
{
if
((
*
(
u_short
*
)
lp
->
srom
.
sub_vendor_id
==
0x00c0
)
&&
if
((
*
(
u_short
*
)
lp
->
srom
.
sub_vendor_id
==
0x00c0
)
&&
(
*
(
u_short
*
)
lp
->
srom
.
sub_system_id
==
0x95e0
))
{
return
-
1
;
}
...
...
@@ -4290,11 +4290,11 @@ static short
srom_rd
(
u_long
addr
,
u_char
offset
)
{
sendto_srom
(
SROM_RD
|
SROM_SR
,
addr
);
srom_latch
(
SROM_RD
|
SROM_SR
|
DT_CS
,
addr
);
srom_command
(
SROM_RD
|
SROM_SR
|
DT_IN
|
DT_CS
,
addr
);
srom_address
(
SROM_RD
|
SROM_SR
|
DT_CS
,
addr
,
offset
);
return
srom_data
(
SROM_RD
|
SROM_SR
|
DT_CS
,
addr
);
}
...
...
@@ -4304,7 +4304,7 @@ srom_latch(u_int command, u_long addr)
sendto_srom
(
command
,
addr
);
sendto_srom
(
command
|
DT_CLK
,
addr
);
sendto_srom
(
command
,
addr
);
return
;
}
...
...
@@ -4314,7 +4314,7 @@ srom_command(u_int command, u_long addr)
srom_latch
(
command
,
addr
);
srom_latch
(
command
,
addr
);
srom_latch
((
command
&
0x0000ff00
)
|
DT_CS
,
addr
);
return
;
}
...
...
@@ -4322,15 +4322,15 @@ static void
srom_address
(
u_int
command
,
u_long
addr
,
u_char
offset
)
{
int
i
,
a
;
a
=
offset
<<
2
;
for
(
i
=
0
;
i
<
6
;
i
++
,
a
<<=
1
)
{
srom_latch
(
command
|
((
a
&
0x80
)
?
DT_IN
:
0
),
addr
);
}
udelay
(
1
);
i
=
(
getfrom_srom
(
addr
)
>>
3
)
&
0x01
;
return
;
}
...
...
@@ -4340,17 +4340,17 @@ srom_data(u_int command, u_long addr)
int
i
;
short
word
=
0
;
s32
tmp
;
for
(
i
=
0
;
i
<
16
;
i
++
)
{
sendto_srom
(
command
|
DT_CLK
,
addr
);
tmp
=
getfrom_srom
(
addr
);
sendto_srom
(
command
,
addr
);
word
=
(
word
<<
1
)
|
((
tmp
>>
3
)
&
0x01
);
}
sendto_srom
(
command
&
0x0000ff00
,
addr
);
return
word
;
}
...
...
@@ -4359,13 +4359,13 @@ static void
srom_busy(u_int command, u_long addr)
{
sendto_srom((command & 0x0000ff00) | DT_CS, addr);
while (!((getfrom_srom(addr) >> 3) & 0x01)) {
mdelay(1);
}
sendto_srom(command & 0x0000ff00, addr);
return;
}
*/
...
...
@@ -4375,7 +4375,7 @@ sendto_srom(u_int command, u_long addr)
{
outl
(
command
,
addr
);
udelay
(
1
);
return
;
}
...
...
@@ -4383,10 +4383,10 @@ static int
getfrom_srom
(
u_long
addr
)
{
s32
tmp
;
tmp
=
inl
(
addr
);
udelay
(
1
);
return
tmp
;
}
...
...
@@ -4403,7 +4403,7 @@ srom_infoleaf_info(struct net_device *dev)
}
if
(
i
==
INFOLEAF_SIZE
)
{
lp
->
useSROM
=
FALSE
;
printk
(
"%s: Cannot find correct chipset for SROM decoding!
\n
"
,
printk
(
"%s: Cannot find correct chipset for SROM decoding!
\n
"
,
dev
->
name
);
return
-
ENXIO
;
}
...
...
@@ -4420,7 +4420,7 @@ srom_infoleaf_info(struct net_device *dev)
}
if
(
i
==
0
)
{
lp
->
useSROM
=
FALSE
;
printk
(
"%s: Cannot find correct PCI device [%d] for SROM decoding!
\n
"
,
printk
(
"%s: Cannot find correct PCI device [%d] for SROM decoding!
\n
"
,
dev
->
name
,
lp
->
device
);
return
-
ENXIO
;
}
...
...
@@ -4494,9 +4494,9 @@ srom_exec(struct net_device *dev, u_char *p)
if
(((
lp
->
ibn
!=
1
)
&&
(
lp
->
ibn
!=
3
)
&&
(
lp
->
ibn
!=
5
))
||
!
count
)
return
;
if
(
lp
->
chipset
!=
DC21140
)
RESET_SIA
;
while
(
count
--
)
{
gep_wr
(((
lp
->
chipset
==
DC21140
)
&&
(
lp
->
ibn
!=
5
)
?
gep_wr
(((
lp
->
chipset
==
DC21140
)
&&
(
lp
->
ibn
!=
5
)
?
*
p
++
:
TWIDDLE
(
w
++
)),
dev
);
mdelay
(
2
);
/* 2ms per action */
}
...
...
@@ -4514,13 +4514,13 @@ srom_exec(struct net_device *dev, u_char *p)
** unless I implement the DC21041 SROM functions. There's no need
** since the existing code will be satisfactory for all boards.
*/
static
int
static
int
dc21041_infoleaf
(
struct
net_device
*
dev
)
{
return
DE4X5_AUTOSENSE_MS
;
}
static
int
static
int
dc21140_infoleaf
(
struct
net_device
*
dev
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -4558,7 +4558,7 @@ dc21140_infoleaf(struct net_device *dev)
return
next_tick
&
~
TIMER_CB
;
}
static
int
static
int
dc21142_infoleaf
(
struct
net_device
*
dev
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -4593,7 +4593,7 @@ dc21142_infoleaf(struct net_device *dev)
return
next_tick
&
~
TIMER_CB
;
}
static
int
static
int
dc21143_infoleaf
(
struct
net_device
*
dev
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -4631,7 +4631,7 @@ dc21143_infoleaf(struct net_device *dev)
** The compact infoblock is only designed for DC21140[A] chips, so
** we'll reuse the dc21140m_autoconf function. Non MII media only.
*/
static
int
static
int
compact_infoblock
(
struct
net_device
*
dev
,
u_char
count
,
u_char
*
p
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -4671,7 +4671,7 @@ compact_infoblock(struct net_device *dev, u_char count, u_char *p)
/*
** This block describes non MII media for the DC21140[A] only.
*/
static
int
static
int
type0_infoblock
(
struct
net_device
*
dev
,
u_char
count
,
u_char
*
p
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -4711,7 +4711,7 @@ type0_infoblock(struct net_device *dev, u_char count, u_char *p)
/* These functions are under construction! */
static
int
static
int
type1_infoblock
(
struct
net_device
*
dev
,
u_char
count
,
u_char
*
p
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -4750,7 +4750,7 @@ type1_infoblock(struct net_device *dev, u_char count, u_char *p)
return
dc21140m_autoconf
(
dev
);
}
static
int
static
int
type2_infoblock
(
struct
net_device
*
dev
,
u_char
count
,
u_char
*
p
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -4791,7 +4791,7 @@ type2_infoblock(struct net_device *dev, u_char count, u_char *p)
return
dc2114x_autoconf
(
dev
);
}
static
int
static
int
type3_infoblock
(
struct
net_device
*
dev
,
u_char
count
,
u_char
*
p
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -4833,7 +4833,7 @@ type3_infoblock(struct net_device *dev, u_char count, u_char *p)
return
dc2114x_autoconf
(
dev
);
}
static
int
static
int
type4_infoblock
(
struct
net_device
*
dev
,
u_char
count
,
u_char
*
p
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -4878,7 +4878,7 @@ type4_infoblock(struct net_device *dev, u_char count, u_char *p)
** This block type provides information for resetting external devices
** (chips) through the General Purpose Register.
*/
static
int
static
int
type5_infoblock
(
struct
net_device
*
dev
,
u_char
count
,
u_char
*
p
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
...
...
@@ -4916,7 +4916,7 @@ mii_rd(u_char phyreg, u_char phyaddr, u_long ioaddr)
mii_address
(
phyaddr
,
ioaddr
);
/* PHY address to be accessed */
mii_address
(
phyreg
,
ioaddr
);
/* PHY Register to read */
mii_ta
(
MII_STRD
,
ioaddr
);
/* Turn around time - 2 MDC */
return
mii_rdata
(
ioaddr
);
/* Read data */
}
...
...
@@ -4931,7 +4931,7 @@ mii_wr(int data, u_char phyreg, u_char phyaddr, u_long ioaddr)
mii_ta
(
MII_STWR
,
ioaddr
);
/* Turn around time - 2 MDC */
data
=
mii_swap
(
data
,
16
);
/* Swap data bit ordering */
mii_wdata
(
data
,
16
,
ioaddr
);
/* Write data */
return
;
}
...
...
@@ -4940,12 +4940,12 @@ mii_rdata(u_long ioaddr)
{
int
i
;
s32
tmp
=
0
;
for
(
i
=
0
;
i
<
16
;
i
++
)
{
tmp
<<=
1
;
tmp
|=
getfrom_mii
(
MII_MRD
|
MII_RD
,
ioaddr
);
}
return
tmp
;
}
...
...
@@ -4953,12 +4953,12 @@ static void
mii_wdata
(
int
data
,
int
len
,
u_long
ioaddr
)
{
int
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
sendto_mii
(
MII_MWR
|
MII_WR
,
data
,
ioaddr
);
data
>>=
1
;
}
return
;
}
...
...
@@ -4966,13 +4966,13 @@ static void
mii_address
(
u_char
addr
,
u_long
ioaddr
)
{
int
i
;
addr
=
mii_swap
(
addr
,
5
);
for
(
i
=
0
;
i
<
5
;
i
++
)
{
sendto_mii
(
MII_MWR
|
MII_WR
,
addr
,
ioaddr
);
addr
>>=
1
;
}
return
;
}
...
...
@@ -4980,12 +4980,12 @@ static void
mii_ta
(
u_long
rw
,
u_long
ioaddr
)
{
if
(
rw
==
MII_STWR
)
{
sendto_mii
(
MII_MWR
|
MII_WR
,
1
,
ioaddr
);
sendto_mii
(
MII_MWR
|
MII_WR
,
0
,
ioaddr
);
sendto_mii
(
MII_MWR
|
MII_WR
,
1
,
ioaddr
);
sendto_mii
(
MII_MWR
|
MII_WR
,
0
,
ioaddr
);
}
else
{
getfrom_mii
(
MII_MRD
|
MII_RD
,
ioaddr
);
/* Tri-state MDIO */
}
return
;
}
...
...
@@ -4993,13 +4993,13 @@ static int
mii_swap
(
int
data
,
int
len
)
{
int
i
,
tmp
=
0
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
tmp
<<=
1
;
tmp
|=
(
data
&
1
);
data
>>=
1
;
}
return
tmp
;
}
...
...
@@ -5007,13 +5007,13 @@ static void
sendto_mii
(
u32
command
,
int
data
,
u_long
ioaddr
)
{
u32
j
;
j
=
(
data
&
1
)
<<
17
;
outl
(
command
|
j
,
ioaddr
);
udelay
(
1
);
outl
(
command
|
MII_MDC
|
j
,
ioaddr
);
udelay
(
1
);
return
;
}
...
...
@@ -5024,7 +5024,7 @@ getfrom_mii(u32 command, u_long ioaddr)
udelay
(
1
);
outl
(
command
|
MII_MDC
,
ioaddr
);
udelay
(
1
);
return
((
inl
(
ioaddr
)
>>
19
)
&
1
);
}
...
...
@@ -5085,7 +5085,7 @@ mii_get_phy(struct net_device *dev)
u_long
iobase
=
dev
->
base_addr
;
int
i
,
j
,
k
,
n
,
limit
=
sizeof
(
phy_info
)
/
sizeof
(
struct
phy_table
);
int
id
;
lp
->
active
=
0
;
lp
->
useMII
=
TRUE
;
...
...
@@ -5094,7 +5094,7 @@ mii_get_phy(struct net_device *dev)
lp
->
phy
[
lp
->
active
].
addr
=
i
;
if
(
i
==
0
)
n
++
;
/* Count cycles */
while
(
de4x5_reset_phy
(
dev
)
<
0
)
udelay
(
100
);
/* Wait for reset */
id
=
mii_get_oui
(
i
,
DE4X5_MII
);
id
=
mii_get_oui
(
i
,
DE4X5_MII
);
if
((
id
==
0
)
||
(
id
==
65535
))
continue
;
/* Valid ID? */
for
(
j
=
0
;
j
<
limit
;
j
++
)
{
/* Search PHY table */
if
(
id
!=
phy_info
[
j
].
id
)
continue
;
/* ID match? */
...
...
@@ -5133,7 +5133,7 @@ mii_get_phy(struct net_device *dev)
for
(
k
=
0
;
lp
->
phy
[
k
].
id
&&
(
k
<
DE4X5_MAX_PHY
);
k
++
)
{
/*For each PHY*/
mii_wr
(
MII_CR_RST
,
MII_CR
,
lp
->
phy
[
k
].
addr
,
DE4X5_MII
);
while
(
mii_rd
(
MII_CR
,
lp
->
phy
[
k
].
addr
,
DE4X5_MII
)
&
MII_CR_RST
);
de4x5_dbg_mii
(
dev
,
k
);
}
}
...
...
@@ -5148,12 +5148,12 @@ build_setup_frame(struct net_device *dev, int mode)
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
int
i
;
char
*
pa
=
lp
->
setup_frame
;
/* Initialise the setup frame */
if
(
mode
==
ALL
)
{
memset
(
lp
->
setup_frame
,
0
,
SETUP_FRAME_LEN
);
}
if
(
lp
->
setup_f
==
HASH_PERF
)
{
for
(
pa
=
lp
->
setup_frame
+
IMPERF_PA_OFFSET
,
i
=
0
;
i
<
ETH_ALEN
;
i
++
)
{
*
(
pa
+
i
)
=
dev
->
dev_addr
[
i
];
/* Host address */
...
...
@@ -5170,7 +5170,7 @@ build_setup_frame(struct net_device *dev, int mode)
if
(
i
&
0x01
)
pa
+=
4
;
}
}
return
pa
;
/* Points to the next entry */
}
...
...
@@ -5178,7 +5178,7 @@ static void
enable_ast
(
struct
net_device
*
dev
,
u32
time_out
)
{
timeout
(
dev
,
(
void
*
)
&
de4x5_ast
,
(
u_long
)
dev
,
time_out
);
return
;
}
...
...
@@ -5186,9 +5186,9 @@ static void
disable_ast
(
struct
net_device
*
dev
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
del_timer
(
&
lp
->
timer
);
return
;
}
...
...
@@ -5207,10 +5207,10 @@ de4x5_switch_mac_port(struct net_device *dev)
omr
|=
lp
->
infoblock_csr6
;
if
(
omr
&
OMR_PS
)
omr
|=
OMR_HBD
;
outl
(
omr
,
DE4X5_OMR
);
/* Soft Reset */
RESET_DE4X5
;
/* Restore the GEP - especially for COMPACT and Type 0 Infoblocks */
if
(
lp
->
chipset
==
DC21140
)
{
gep_wr
(
lp
->
cache
.
gepc
,
dev
);
...
...
@@ -5263,21 +5263,21 @@ timeout(struct net_device *dev, void (*fn)(u_long data), u_long data, u_long mse
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
int
dt
;
/* First, cancel any pending timer events */
del_timer
(
&
lp
->
timer
);
/* Convert msec to ticks */
dt
=
(
msec
*
HZ
)
/
1000
;
if
(
dt
==
0
)
dt
=
1
;
/* Set up timer */
init_timer
(
&
lp
->
timer
);
lp
->
timer
.
expires
=
jiffies
+
dt
;
lp
->
timer
.
function
=
fn
;
lp
->
timer
.
data
=
data
;
add_timer
(
&
lp
->
timer
);
return
;
}
...
...
@@ -5375,7 +5375,7 @@ de4x5_dbg_open(struct net_device *dev)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
int
i
;
if
(
de4x5_debug
&
DEBUG_OPEN
)
{
printk
(
"%s: de4x5 opening with irq %d
\n
"
,
dev
->
name
,
dev
->
irq
);
printk
(
"
\t
physical address: "
);
...
...
@@ -5413,11 +5413,11 @@ de4x5_dbg_open(struct net_device *dev)
}
}
printk
(
"...0x%8.8x
\n
"
,
le32_to_cpu
(
lp
->
tx_ring
[
i
].
buf
));
printk
(
"Ring size:
\n
RX: %d
\n
TX: %d
\n
"
,
(
short
)
lp
->
rxRingSize
,
(
short
)
lp
->
txRingSize
);
printk
(
"Ring size:
\n
RX: %d
\n
TX: %d
\n
"
,
(
short
)
lp
->
rxRingSize
,
(
short
)
lp
->
txRingSize
);
}
return
;
}
...
...
@@ -5426,7 +5426,7 @@ de4x5_dbg_mii(struct net_device *dev, int k)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
u_long
iobase
=
dev
->
base_addr
;
if
(
de4x5_debug
&
DEBUG_MII
)
{
printk
(
"
\n
MII device address: %d
\n
"
,
lp
->
phy
[
k
].
addr
);
printk
(
"MII CR: %x
\n
"
,
mii_rd
(
MII_CR
,
lp
->
phy
[
k
].
addr
,
DE4X5_MII
));
...
...
@@ -5445,7 +5445,7 @@ de4x5_dbg_mii(struct net_device *dev, int k)
printk
(
"MII 20: %x
\n
"
,
mii_rd
(
0x14
,
lp
->
phy
[
k
].
addr
,
DE4X5_MII
));
}
}
return
;
}
...
...
@@ -5453,17 +5453,17 @@ static void
de4x5_dbg_media
(
struct
net_device
*
dev
)
{
struct
de4x5_private
*
lp
=
netdev_priv
(
dev
);
if
(
lp
->
media
!=
lp
->
c_media
)
{
if
(
de4x5_debug
&
DEBUG_MEDIA
)
{
printk
(
"%s: media is %s%s
\n
"
,
dev
->
name
,
(
lp
->
media
==
NC
?
"unconnected, link down or incompatible connection"
:
(
lp
->
media
==
TP
?
"TP"
:
(
lp
->
media
==
ANS
?
"TP/Nway"
:
(
lp
->
media
==
BNC
?
"BNC"
:
(
lp
->
media
==
AUI
?
"AUI"
:
(
lp
->
media
==
BNC_AUI
?
"BNC/AUI"
:
(
lp
->
media
==
EXT_SIA
?
"EXT SIA"
:
(
lp
->
media
==
BNC
?
"BNC"
:
(
lp
->
media
==
AUI
?
"AUI"
:
(
lp
->
media
==
BNC_AUI
?
"BNC/AUI"
:
(
lp
->
media
==
EXT_SIA
?
"EXT SIA"
:
(
lp
->
media
==
_100Mb
?
"100Mb/s"
:
(
lp
->
media
==
_10Mb
?
"10Mb/s"
:
"???"
...
...
@@ -5471,7 +5471,7 @@ de4x5_dbg_media(struct net_device *dev)
}
lp
->
c_media
=
lp
->
media
;
}
return
;
}
...
...
@@ -5554,7 +5554,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
u32
lval
[
36
];
}
tmp
;
u_long
flags
=
0
;
switch
(
ioc
->
cmd
)
{
case
DE4X5_GET_HWADDR
:
/* Get the hardware address */
ioc
->
len
=
ETH_ALEN
;
...
...
@@ -5575,7 +5575,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
}
build_setup_frame
(
dev
,
PHYS_ADDR_ONLY
);
/* Set up the descriptor and give ownership to the card */
load_packet
(
dev
,
lp
->
setup_frame
,
TD_IC
|
PERFECT_F
|
TD_SET
|
load_packet
(
dev
,
lp
->
setup_frame
,
TD_IC
|
PERFECT_F
|
TD_SET
|
SETUP_FRAME_LEN
,
(
struct
sk_buff
*
)
1
);
lp
->
tx_new
=
(
++
lp
->
tx_new
)
%
lp
->
txRingSize
;
outl
(
POLL_DEMAND
,
DE4X5_TPD
);
/* Start the TX */
...
...
@@ -5617,8 +5617,8 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
spin_lock_irqsave
(
&
lp
->
lock
,
flags
);
memcpy
(
&
statbuf
,
&
lp
->
pktStats
,
ioc
->
len
);
spin_unlock_irqrestore
(
&
lp
->
lock
,
flags
);
if
(
copy_to_user
(
ioc
->
data
,
&
statbuf
,
ioc
->
len
))
return
-
EFAULT
;
if
(
copy_to_user
(
ioc
->
data
,
&
statbuf
,
ioc
->
len
))
return
-
EFAULT
;
break
;
}
case
DE4X5_CLR_STATS
:
/* Zero out the driver statistics */
...
...
@@ -5652,9 +5652,9 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
ioc
->
len
=
j
;
if
(
copy_to_user
(
ioc
->
data
,
tmp
.
addr
,
ioc
->
len
))
return
-
EFAULT
;
break
;
#define DE4X5_DUMP 0x0f
/* Dump the DE4X5 Status */
/*
/*
case DE4X5_DUMP:
j = 0;
tmp.addr[j++] = dev->irq;
...
...
@@ -5664,7 +5664,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
tmp.addr[j++] = lp->rxRingSize;
tmp.lval[j>>2] = (long)lp->rx_ring; j+=4;
tmp.lval[j>>2] = (long)lp->tx_ring; j+=4;
for (i=0;i<lp->rxRingSize-1;i++){
if (i < 3) {
tmp.lval[j>>2] = (long)&lp->rx_ring[i].status; j+=4;
...
...
@@ -5677,7 +5677,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
}
}
tmp.lval[j>>2] = (long)&lp->tx_ring[i].status; j+=4;
for (i=0;i<lp->rxRingSize-1;i++){
if (i < 3) {
tmp.lval[j>>2] = (s32)le32_to_cpu(lp->rx_ring[i].buf); j+=4;
...
...
@@ -5690,14 +5690,14 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
}
}
tmp.lval[j>>2] = (s32)le32_to_cpu(lp->tx_ring[i].buf); j+=4;
for (i=0;i<lp->rxRingSize;i++){
tmp.lval[j>>2] = le32_to_cpu(lp->rx_ring[i].status); j+=4;
}
for (i=0;i<lp->txRingSize;i++){
tmp.lval[j>>2] = le32_to_cpu(lp->tx_ring[i].status); j+=4;
}
tmp.lval[j>>2] = inl(DE4X5_BMR); j+=4;
tmp.lval[j>>2] = inl(DE4X5_TPD); j+=4;
tmp.lval[j>>2] = inl(DE4X5_RPD); j+=4;
...
...
@@ -5706,18 +5706,18 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
tmp.lval[j>>2] = inl(DE4X5_STS); j+=4;
tmp.lval[j>>2] = inl(DE4X5_OMR); j+=4;
tmp.lval[j>>2] = inl(DE4X5_IMR); j+=4;
tmp.lval[j>>2] = lp->chipset; j+=4;
tmp.lval[j>>2] = lp->chipset; j+=4;
if (lp->chipset == DC21140) {
tmp.lval[j>>2] = gep_rd(dev); j+=4;
} else {
tmp.lval[j>>2] = inl(DE4X5_SISR); j+=4;
tmp.lval[j>>2] = inl(DE4X5_SICR); j+=4;
tmp.lval[j>>2] = inl(DE4X5_STRR); j+=4;
tmp.lval[j>>2] = inl(DE4X5_SIGR); j+=4;
tmp.lval[j>>2] = inl(DE4X5_SIGR); j+=4;
}
tmp.lval[j>>2] = lp->phy[lp->active].id; j+=4;
tmp.lval[j>>2] = lp->phy[lp->active].id; j+=4;
if (lp->phy[lp->active].id && (!lp->useSROM || lp->useMII)) {
tmp.lval[j>>2] = lp->active; j+=4;
tmp.lval[j>>2] = lp->active; j+=4;
tmp.lval[j>>2]=mii_rd(MII_CR,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
tmp.lval[j>>2]=mii_rd(MII_SR,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
tmp.lval[j>>2]=mii_rd(MII_ID0,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
...
...
@@ -5734,10 +5734,10 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
tmp.lval[j>>2]=mii_rd(0x14,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
}
}
tmp.addr[j++] = lp->txRingSize;
tmp.addr[j++] = netif_queue_stopped(dev);
ioc->len = j;
if (copy_to_user(ioc->data, tmp.addr, ioc->len)) return -EFAULT;
break;
...
...
@@ -5746,7 +5746,7 @@ de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
default:
return
-
EOPNOTSUPP
;
}
return
status
;
}
...
...
drivers/net/tulip/de4x5.h
View file @
f3b197ac
...
...
@@ -38,11 +38,11 @@
/*
** EISA Register Address Map
*/
#define EISA_ID iobase+0x0c80
/* EISA ID Registers */
#define EISA_ID0 iobase+0x0c80
/* EISA ID Register 0 */
#define EISA_ID1 iobase+0x0c81
/* EISA ID Register 1 */
#define EISA_ID2 iobase+0x0c82
/* EISA ID Register 2 */
#define EISA_ID3 iobase+0x0c83
/* EISA ID Register 3 */
#define EISA_ID iobase+0x0c80
/* EISA ID Registers */
#define EISA_ID0 iobase+0x0c80
/* EISA ID Register 0 */
#define EISA_ID1 iobase+0x0c81
/* EISA ID Register 1 */
#define EISA_ID2 iobase+0x0c82
/* EISA ID Register 2 */
#define EISA_ID3 iobase+0x0c83
/* EISA ID Register 3 */
#define EISA_CR iobase+0x0c84
/* EISA Control Register */
#define EISA_REG0 iobase+0x0c88
/* EISA Configuration Register 0 */
#define EISA_REG1 iobase+0x0c89
/* EISA Configuration Register 1 */
...
...
@@ -1008,8 +1008,8 @@ struct de4x5_ioctl {
unsigned
char
__user
*
data
;
/* Pointer to the data buffer */
};
/*
** Recognised commands for the driver
/*
** Recognised commands for the driver
*/
#define DE4X5_GET_HWADDR 0x01
/* Get the hardware address */
#define DE4X5_SET_HWADDR 0x02
/* Set the hardware address */
...
...
drivers/net/tulip/dmfe.c
View file @
f3b197ac
...
...
@@ -50,7 +50,7 @@
forget to unmap PCI mapped skbs.
Alan Cox <alan@redhat.com>
Added new PCI identifiers provided by Clear Zhang at ALi
Added new PCI identifiers provided by Clear Zhang at ALi
for their 1563 ethernet device.
TODO
...
...
drivers/net/tulip/eeprom.c
View file @
f3b197ac
...
...
@@ -96,11 +96,11 @@ static const char *block_name[] __devinitdata = {
* tulip_build_fake_mediatable - Build a fake mediatable entry.
* @tp: Ptr to the tulip private data.
*
* Some cards like the 3x5 HSC cards (J3514A) do not have a standard
* Some cards like the 3x5 HSC cards (J3514A) do not have a standard
* srom and can not be handled under the fixup routine. These cards
* still need a valid mediatable entry for correct csr12 setup and
* still need a valid mediatable entry for correct csr12 setup and
* mii handling.
*
*
* Since this is currently a parisc-linux specific function, the
* #ifdef __hppa__ should completely optimize this function away for
* non-parisc hardware.
...
...
@@ -140,7 +140,7 @@ static void __devinit tulip_build_fake_mediatable(struct tulip_private *tp)
tp
->
flags
|=
HAS_PHY_IRQ
;
tp
->
csr12_shadow
=
-
1
;
}
#endif
#endif
}
void
__devinit
tulip_parse_eeprom
(
struct
net_device
*
dev
)
...
...
drivers/net/tulip/interrupt.c
View file @
f3b197ac
...
...
@@ -139,22 +139,22 @@ int tulip_poll(struct net_device *dev, int *budget)
}
/* Acknowledge current RX interrupt sources. */
iowrite32
((
RxIntr
|
RxNoBuf
),
tp
->
base_addr
+
CSR5
);
/* If we own the next entry, it is a new packet. Send it up. */
while
(
!
(
tp
->
rx_ring
[
entry
].
status
&
cpu_to_le32
(
DescOwned
)))
{
s32
status
=
le32_to_cpu
(
tp
->
rx_ring
[
entry
].
status
);
if
(
tp
->
dirty_rx
+
RX_RING_SIZE
==
tp
->
cur_rx
)
break
;
if
(
tulip_debug
>
5
)
printk
(
KERN_DEBUG
"%s: In tulip_rx(), entry %d %8.8x.
\n
"
,
dev
->
name
,
entry
,
status
);
if
(
--
rx_work_limit
<
0
)
goto
not_done
;
if
((
status
&
0x38008300
)
!=
0x0300
)
{
if
((
status
&
0x38000300
)
!=
0x0300
)
{
/* Ingore earlier buffers. */
...
...
@@ -180,7 +180,7 @@ int tulip_poll(struct net_device *dev, int *budget)
/* Omit the four octet CRC from the length. */
short
pkt_len
=
((
status
>>
16
)
&
0x7ff
)
-
4
;
struct
sk_buff
*
skb
;
#ifndef final_version
if
(
pkt_len
>
1518
)
{
printk
(
KERN_WARNING
"%s: Bogus packet size of %d (%#x).
\n
"
,
...
...
@@ -213,7 +213,7 @@ int tulip_poll(struct net_device *dev, int *budget)
}
else
{
/* Pass up the skb already on the Rx ring. */
char
*
temp
=
skb_put
(
skb
=
tp
->
rx_buffers
[
entry
].
skb
,
pkt_len
);
#ifndef final_version
if
(
tp
->
rx_buffers
[
entry
].
mapping
!=
le32_to_cpu
(
tp
->
rx_ring
[
entry
].
buffer1
))
{
...
...
@@ -225,17 +225,17 @@ int tulip_poll(struct net_device *dev, int *budget)
skb
->
head
,
temp
);
}
#endif
pci_unmap_single
(
tp
->
pdev
,
tp
->
rx_buffers
[
entry
].
mapping
,
PKT_BUF_SZ
,
PCI_DMA_FROMDEVICE
);
tp
->
rx_buffers
[
entry
].
skb
=
NULL
;
tp
->
rx_buffers
[
entry
].
mapping
=
0
;
}
skb
->
protocol
=
eth_type_trans
(
skb
,
dev
);
netif_receive_skb
(
skb
);
dev
->
last_rx
=
jiffies
;
tp
->
stats
.
rx_packets
++
;
tp
->
stats
.
rx_bytes
+=
pkt_len
;
...
...
@@ -245,12 +245,12 @@ int tulip_poll(struct net_device *dev, int *budget)
entry
=
(
++
tp
->
cur_rx
)
%
RX_RING_SIZE
;
if
(
tp
->
cur_rx
-
tp
->
dirty_rx
>
RX_RING_SIZE
/
4
)
tulip_refill_rx
(
dev
);
}
/* New ack strategy... irq does not ack Rx any longer
hopefully this helps */
/* Really bad things can happen here... If new packet arrives
* and an irq arrives (tx or just due to occasionally unset
* mask), it will be acked by irq handler, but new thread
...
...
@@ -259,28 +259,28 @@ int tulip_poll(struct net_device *dev, int *budget)
* tomorrow (night 011029). If it will not fail, we won
* finally: amount of IO did not increase at all. */
}
while
((
ioread32
(
tp
->
base_addr
+
CSR5
)
&
RxIntr
));
done:
#ifdef CONFIG_TULIP_NAPI_HW_MITIGATION
/* We use this simplistic scheme for IM. It's proven by
real life installations. We can have IM enabled
continuesly but this would cause unnecessary latency.
Unfortunely we can't use all the NET_RX_* feedback here.
This would turn on IM for devices that is not contributing
to backlog congestion with unnecessary latency.
continuesly but this would cause unnecessary latency.
Unfortunely we can't use all the NET_RX_* feedback here.
This would turn on IM for devices that is not contributing
to backlog congestion with unnecessary latency.
We monitor the the device RX-ring and have:
HW Interrupt Mitigation either ON or OFF.
ON: More then 1 pkt received (per intr.) OR we are dropping
ON: More then 1 pkt received (per intr.) OR we are dropping
OFF: Only 1 pkt received
Note. We only use min and max (0, 15) settings from mit_table */
if
(
tp
->
flags
&
HAS_INTR_MITIGATION
)
{
if
(
received
>
1
)
{
if
(
!
tp
->
mit_on
)
{
...
...
@@ -297,20 +297,20 @@ int tulip_poll(struct net_device *dev, int *budget)
}
#endif
/* CONFIG_TULIP_NAPI_HW_MITIGATION */
dev
->
quota
-=
received
;
*
budget
-=
received
;
tulip_refill_rx
(
dev
);
/* If RX ring is not full we are out of memory. */
if
(
tp
->
rx_buffers
[
tp
->
dirty_rx
%
RX_RING_SIZE
].
skb
==
NULL
)
goto
oom
;
/* Remove us from polling list and enable RX intr. */
netif_rx_complete
(
dev
);
iowrite32
(
tulip_tbl
[
tp
->
chip_id
].
valid_intrs
,
tp
->
base_addr
+
CSR7
);
/* The last op happens after poll completion. Which means the following:
* 1. it can race with disabling irqs in irq handler
* 2. it can race with dise/enabling irqs in other poll threads
...
...
@@ -321,9 +321,9 @@ int tulip_poll(struct net_device *dev, int *budget)
* due to races in masking and due to too late acking of already
* processed irqs. But it must not result in losing events.
*/
return
0
;
not_done:
if
(
!
received
)
{
...
...
@@ -331,29 +331,29 @@ int tulip_poll(struct net_device *dev, int *budget)
}
dev
->
quota
-=
received
;
*
budget
-=
received
;
if
(
tp
->
cur_rx
-
tp
->
dirty_rx
>
RX_RING_SIZE
/
2
||
tp
->
rx_buffers
[
tp
->
dirty_rx
%
RX_RING_SIZE
].
skb
==
NULL
)
tulip_refill_rx
(
dev
);
if
(
tp
->
rx_buffers
[
tp
->
dirty_rx
%
RX_RING_SIZE
].
skb
==
NULL
)
goto
oom
;
return
1
;
oom:
/* Executed with RX ints disabled */
/* Start timer, stop polling, but do not enable rx interrupts. */
mod_timer
(
&
tp
->
oom_timer
,
jiffies
+
1
);
/* Think: timer_pending() was an explicit signature of bug.
* Timer can be pending now but fired and completed
* before we did netif_rx_complete(). See? We would lose it. */
/* remove ourselves from the polling list */
netif_rx_complete
(
dev
);
return
0
;
}
...
...
@@ -521,9 +521,9 @@ irqreturn_t tulip_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
/* Let's see whether the interrupt really is for us */
csr5
=
ioread32
(
ioaddr
+
CSR5
);
if
(
tp
->
flags
&
HAS_PHY_IRQ
)
if
(
tp
->
flags
&
HAS_PHY_IRQ
)
handled
=
phy_interrupt
(
dev
);
if
((
csr5
&
(
NormalIntr
|
AbnormalIntr
))
==
0
)
return
IRQ_RETVAL
(
handled
);
...
...
@@ -538,17 +538,17 @@ irqreturn_t tulip_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
/* Mask RX intrs and add the device to poll list. */
iowrite32
(
tulip_tbl
[
tp
->
chip_id
].
valid_intrs
&~
RxPollInt
,
ioaddr
+
CSR7
);
netif_rx_schedule
(
dev
);
if
(
!
(
csr5
&~
(
AbnormalIntr
|
NormalIntr
|
RxPollInt
|
TPLnkPass
)))
break
;
}
/* Acknowledge the interrupt sources we handle here ASAP
the poll function does Rx and RxNoBuf acking */
iowrite32
(
csr5
&
0x0001ff3f
,
ioaddr
+
CSR5
);
#else
#else
/* Acknowledge all of the current interrupt sources ASAP. */
iowrite32
(
csr5
&
0x0001ffff
,
ioaddr
+
CSR5
);
...
...
@@ -559,11 +559,11 @@ irqreturn_t tulip_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
}
#endif
/* CONFIG_TULIP_NAPI */
if
(
tulip_debug
>
4
)
printk
(
KERN_DEBUG
"%s: interrupt csr5=%#8.8x new csr5=%#8.8x.
\n
"
,
dev
->
name
,
csr5
,
ioread32
(
ioaddr
+
CSR5
));
if
(
csr5
&
(
TxNoBuf
|
TxDied
|
TxIntr
|
TimerInt
))
{
unsigned
int
dirty_tx
;
...
...
@@ -737,17 +737,17 @@ irqreturn_t tulip_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
#ifdef CONFIG_TULIP_NAPI
if
(
rxd
)
csr5
&=
~
RxPollInt
;
}
while
((
csr5
&
(
TxNoBuf
|
TxDied
|
TxIntr
|
}
while
((
csr5
&
(
TxNoBuf
|
TxDied
|
TxIntr
|
TimerInt
|
/* Abnormal intr. */
RxDied
|
TxFIFOUnderflow
|
TxJabber
|
TPLnkFail
|
RxDied
|
TxFIFOUnderflow
|
TxJabber
|
TPLnkFail
|
SytemError
))
!=
0
);
#else
#else
}
while
((
csr5
&
(
NormalIntr
|
AbnormalIntr
))
!=
0
);
tulip_refill_rx
(
dev
);
...
...
drivers/net/tulip/media.c
View file @
f3b197ac
...
...
@@ -140,7 +140,7 @@ void tulip_mdio_write(struct net_device *dev, int phy_id, int location, int val)
spin_unlock_irqrestore
(
&
tp
->
mii_lock
,
flags
);
return
;
}
/* Establish sync by sending 32 logic ones. */
for
(
i
=
32
;
i
>=
0
;
i
--
)
{
iowrite32
(
MDIO_ENB
|
MDIO_DATA_WRITE1
,
mdio_addr
);
...
...
drivers/net/tulip/tulip.h
View file @
f3b197ac
...
...
@@ -259,7 +259,7 @@ enum t21143_csr6_bits {
There are no ill effects from too-large receive rings. */
#define TX_RING_SIZE 32
#define RX_RING_SIZE 128
#define RX_RING_SIZE 128
#define MEDIA_MASK 31
#define PKT_BUF_SZ 1536
/* Size of each temporary Rx buffer. */
...
...
drivers/net/tulip/tulip_core.c
View file @
f3b197ac
...
...
@@ -1224,7 +1224,7 @@ static void __devinit tulip_mwi_config (struct pci_dev *pdev,
* Chips that have the MRM/reserved bit quirk and the burst quirk. That
* is the DM910X and the on chip ULi devices
*/
static
int
tulip_uli_dm_quirk
(
struct
pci_dev
*
pdev
)
{
if
(
pdev
->
vendor
==
0x1282
&&
pdev
->
device
==
0x9102
)
...
...
@@ -1297,7 +1297,7 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,
*/
/* 1. Intel Saturn. Switch to 8 long words burst, 8 long word cache
aligned. Aries might need this too. The Saturn errata are not
aligned. Aries might need this too. The Saturn errata are not
pretty reading but thankfully it's an old 486 chipset.
2. The dreaded SiS496 486 chipset. Same workaround as Intel
...
...
@@ -1500,7 +1500,7 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,
}
#endif
#ifdef CONFIG_MIPS_COBALT
if
((
pdev
->
bus
->
number
==
0
)
&&
if
((
pdev
->
bus
->
number
==
0
)
&&
((
PCI_SLOT
(
pdev
->
devfn
)
==
7
)
||
(
PCI_SLOT
(
pdev
->
devfn
)
==
12
)))
{
/* Cobalt MAC address in first EEPROM locations. */
...
...
drivers/net/tulip/uli526x.c
View file @
f3b197ac
...
...
@@ -9,7 +9,7 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
#define DRV_NAME "uli526x"
...
...
@@ -185,7 +185,7 @@ struct uli526x_board_info {
/* NIC SROM data */
unsigned
char
srom
[
128
];
u8
init
;
u8
init
;
};
enum
uli526x_offsets
{
...
...
@@ -258,7 +258,7 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev,
struct
uli526x_board_info
*
db
;
/* board information structure */
struct
net_device
*
dev
;
int
i
,
err
;
ULI526X_DBUG
(
0
,
"uli526x_init_one()"
,
0
);
if
(
!
printed_version
++
)
...
...
@@ -316,7 +316,7 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev,
err
=
-
ENOMEM
;
goto
err_out_nomem
;
}
db
->
first_tx_desc
=
(
struct
tx_desc
*
)
db
->
desc_pool_ptr
;
db
->
first_tx_desc_dma
=
db
->
desc_pool_dma_ptr
;
db
->
buf_pool_start
=
db
->
buf_pool_ptr
;
...
...
@@ -324,14 +324,14 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev,
db
->
chip_id
=
ent
->
driver_data
;
db
->
ioaddr
=
pci_resource_start
(
pdev
,
0
);
db
->
pdev
=
pdev
;
db
->
init
=
1
;
dev
->
base_addr
=
db
->
ioaddr
;
dev
->
irq
=
pdev
->
irq
;
pci_set_drvdata
(
pdev
,
dev
);
/* Register some necessary functions */
dev
->
open
=
&
uli526x_open
;
dev
->
hard_start_xmit
=
&
uli526x_start_xmit
;
...
...
@@ -341,7 +341,7 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev,
dev
->
ethtool_ops
=
&
netdev_ethtool_ops
;
spin_lock_init
(
&
db
->
lock
);
/* read 64 word srom data */
for
(
i
=
0
;
i
<
64
;
i
++
)
((
u16
*
)
db
->
srom
)[
i
]
=
cpu_to_le16
(
read_srom_word
(
db
->
ioaddr
,
i
));
...
...
@@ -374,7 +374,7 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev,
goto
err_out_res
;
printk
(
KERN_INFO
"%s: ULi M%04lx at pci%s,"
,
dev
->
name
,
ent
->
driver_data
>>
16
,
pci_name
(
pdev
));
for
(
i
=
0
;
i
<
6
;
i
++
)
printk
(
"%c%02x"
,
i
?
':'
:
' '
,
dev
->
dev_addr
[
i
]);
printk
(
", irq %d.
\n
"
,
dev
->
irq
);
...
...
@@ -389,7 +389,7 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev,
if
(
db
->
desc_pool_ptr
)
pci_free_consistent
(
pdev
,
sizeof
(
struct
tx_desc
)
*
DESC_ALL_CNT
+
0x20
,
db
->
desc_pool_ptr
,
db
->
desc_pool_dma_ptr
);
if
(
db
->
buf_pool_ptr
!=
NULL
)
pci_free_consistent
(
pdev
,
TX_BUF_ALLOC
*
TX_DESC_CNT
+
4
,
db
->
buf_pool_ptr
,
db
->
buf_pool_dma_ptr
);
...
...
@@ -433,7 +433,7 @@ static int uli526x_open(struct net_device *dev)
{
int
ret
;
struct
uli526x_board_info
*
db
=
netdev_priv
(
dev
);
ULI526X_DBUG
(
0
,
"uli526x_open"
,
0
);
ret
=
request_irq
(
dev
->
irq
,
&
uli526x_interrupt
,
SA_SHIRQ
,
dev
->
name
,
dev
);
...
...
@@ -454,7 +454,7 @@ static int uli526x_open(struct net_device *dev)
/* CR6 operation mode decision */
db
->
cr6_data
|=
ULI526X_TXTH_256
;
db
->
cr0_data
=
CR0_DEFAULT
;
/* Initialize ULI526X board */
uli526x_init
(
dev
);
...
...
@@ -604,7 +604,7 @@ static int uli526x_start_xmit(struct sk_buff *skb, struct net_device *dev)
/* Restore CR7 to enable interrupt */
spin_unlock_irqrestore
(
&
db
->
lock
,
flags
);
outl
(
db
->
cr7_data
,
dev
->
base_addr
+
DCR7
);
/* free this SKB */
dev_kfree_skb
(
skb
);
...
...
@@ -782,7 +782,7 @@ static void uli526x_rx_packet(struct net_device *dev, struct uli526x_board_info
struct
sk_buff
*
skb
;
int
rxlen
;
u32
rdes0
;
rxptr
=
db
->
rx_ready_ptr
;
while
(
db
->
rx_avail_cnt
)
{
...
...
@@ -821,7 +821,7 @@ static void uli526x_rx_packet(struct net_device *dev, struct uli526x_board_info
if
(
!
(
rdes0
&
0x8000
)
||
((
db
->
cr6_data
&
CR6_PM
)
&&
(
rxlen
>
6
))
)
{
skb
=
rxptr
->
rx_skb_ptr
;
/* Good packet, send to upper layer */
/* Shorst packet used new SKB */
if
(
(
rxlen
<
RX_COPY_SIZE
)
&&
...
...
@@ -841,7 +841,7 @@ static void uli526x_rx_packet(struct net_device *dev, struct uli526x_board_info
dev
->
last_rx
=
jiffies
;
db
->
stats
.
rx_packets
++
;
db
->
stats
.
rx_bytes
+=
rxlen
;
}
else
{
/* Reuse SKB buffer when the packet is error */
ULI526X_DBUG
(
0
,
"Reuse SK buffer, rdes0"
,
rdes0
);
...
...
@@ -911,7 +911,7 @@ ULi_ethtool_gset(struct uli526x_board_info *db, struct ethtool_cmd *ecmd)
SUPPORTED_100baseT_Full
|
SUPPORTED_Autoneg
|
SUPPORTED_MII
);
ecmd
->
advertising
=
(
ADVERTISED_10baseT_Half
|
ADVERTISED_10baseT_Full
|
ADVERTISED_100baseT_Half
|
...
...
@@ -924,13 +924,13 @@ ULi_ethtool_gset(struct uli526x_board_info *db, struct ethtool_cmd *ecmd)
ecmd
->
phy_address
=
db
->
phy_addr
;
ecmd
->
transceiver
=
XCVR_EXTERNAL
;
ecmd
->
speed
=
10
;
ecmd
->
duplex
=
DUPLEX_HALF
;
if
(
db
->
op_mode
==
ULI526X_100MHF
||
db
->
op_mode
==
ULI526X_100MFD
)
{
ecmd
->
speed
=
100
;
ecmd
->
speed
=
100
;
}
if
(
db
->
op_mode
==
ULI526X_10MFD
||
db
->
op_mode
==
ULI526X_100MFD
)
{
...
...
@@ -939,11 +939,11 @@ ULi_ethtool_gset(struct uli526x_board_info *db, struct ethtool_cmd *ecmd)
if
(
db
->
link_failed
)
{
ecmd
->
speed
=
-
1
;
ecmd
->
duplex
=
-
1
;
ecmd
->
duplex
=
-
1
;
}
if
(
db
->
media_mode
&
ULI526X_AUTO
)
{
{
ecmd
->
autoneg
=
AUTONEG_ENABLE
;
}
}
...
...
@@ -964,15 +964,15 @@ static void netdev_get_drvinfo(struct net_device *dev,
static
int
netdev_get_settings
(
struct
net_device
*
dev
,
struct
ethtool_cmd
*
cmd
)
{
struct
uli526x_board_info
*
np
=
netdev_priv
(
dev
);
ULi_ethtool_gset
(
np
,
cmd
);
return
0
;
}
static
u32
netdev_get_link
(
struct
net_device
*
dev
)
{
struct
uli526x_board_info
*
np
=
netdev_priv
(
dev
);
if
(
np
->
link_failed
)
return
0
;
else
...
...
@@ -1005,11 +1005,11 @@ static void uli526x_timer(unsigned long data)
struct
uli526x_board_info
*
db
=
netdev_priv
(
dev
);
unsigned
long
flags
;
u8
TmpSpeed
=
10
;
//ULI526X_DBUG(0, "uli526x_timer()", 0);
spin_lock_irqsave
(
&
db
->
lock
,
flags
);
/* Dynamic reset ULI526X : system error or transmit time-out */
tmp_cr8
=
inl
(
db
->
ioaddr
+
DCR8
);
if
(
(
db
->
interval_rx_cnt
==
0
)
&&
(
tmp_cr8
)
)
{
...
...
@@ -1021,9 +1021,9 @@ static void uli526x_timer(unsigned long data)
/* TX polling kick monitor */
if
(
db
->
tx_packet_cnt
&&
time_after
(
jiffies
,
dev
->
trans_start
+
ULI526X_TX_KICK
)
)
{
outl
(
0x1
,
dev
->
base_addr
+
DCR1
);
// Tx polling again
outl
(
0x1
,
dev
->
base_addr
+
DCR1
);
// Tx polling again
// TX Timeout
// TX Timeout
if
(
time_after
(
jiffies
,
dev
->
trans_start
+
ULI526X_TX_TIMEOUT
)
)
{
db
->
reset_TXtimeout
++
;
db
->
wait_reset
=
1
;
...
...
@@ -1073,7 +1073,7 @@ static void uli526x_timer(unsigned long data)
uli526x_sense_speed
(
db
)
)
db
->
link_failed
=
1
;
uli526x_process_mode
(
db
);
if
(
db
->
link_failed
==
0
)
{
if
(
db
->
op_mode
==
ULI526X_100MHF
||
db
->
op_mode
==
ULI526X_100MFD
)
...
...
@@ -1404,7 +1404,7 @@ static u8 uli526x_sense_speed(struct uli526x_board_info * db)
phy_mode
=
phy_read
(
db
->
ioaddr
,
db
->
phy_addr
,
1
,
db
->
chip_id
);
if
(
(
phy_mode
&
0x24
)
==
0x24
)
{
phy_mode
=
((
phy_read
(
db
->
ioaddr
,
db
->
phy_addr
,
5
,
db
->
chip_id
)
&
0x01e0
)
<<
7
);
if
(
phy_mode
&
0x8000
)
phy_mode
=
0x8000
;
...
...
@@ -1414,7 +1414,7 @@ static u8 uli526x_sense_speed(struct uli526x_board_info * db)
phy_mode
=
0x2000
;
else
phy_mode
=
0x1000
;
/* printk(DRV_NAME ": Phy_mode %x ",phy_mode); */
switch
(
phy_mode
)
{
case
0x1000
:
db
->
op_mode
=
ULI526X_10MHF
;
break
;
...
...
@@ -1442,7 +1442,7 @@ static u8 uli526x_sense_speed(struct uli526x_board_info * db)
static
void
uli526x_set_phyxcer
(
struct
uli526x_board_info
*
db
)
{
u16
phy_reg
;
/* Phyxcer capability setting */
phy_reg
=
phy_read
(
db
->
ioaddr
,
db
->
phy_addr
,
4
,
db
->
chip_id
)
&
~
0x01e0
;
...
...
@@ -1457,7 +1457,7 @@ static void uli526x_set_phyxcer(struct uli526x_board_info *db)
case
ULI526X_100MHF
:
phy_reg
|=
0x80
;
break
;
case
ULI526X_100MFD
:
phy_reg
|=
0x100
;
break
;
}
}
/* Write new capability to Phyxcer Reg4 */
...
...
@@ -1556,7 +1556,7 @@ static void phy_write(unsigned long iobase, u8 phy_addr, u8 offset, u16 phy_data
/* Write a word data to PHY controller */
for
(
i
=
0x8000
;
i
>
0
;
i
>>=
1
)
phy_write_1bit
(
ioaddr
,
phy_data
&
i
?
PHY_DATA_1
:
PHY_DATA_0
,
chip_id
);
}
...
...
@@ -1574,7 +1574,7 @@ static u16 phy_read(unsigned long iobase, u8 phy_addr, u8 offset, u32 chip_id)
return
phy_readby_cr10
(
iobase
,
phy_addr
,
offset
);
/* M5261/M5263 Chip */
ioaddr
=
iobase
+
DCR9
;
/* Send 33 synchronization clock to Phy controller */
for
(
i
=
0
;
i
<
35
;
i
++
)
phy_write_1bit
(
ioaddr
,
PHY_DATA_1
,
chip_id
);
...
...
@@ -1610,7 +1610,7 @@ static u16 phy_read(unsigned long iobase, u8 phy_addr, u8 offset, u32 chip_id)
static
u16
phy_readby_cr10
(
unsigned
long
iobase
,
u8
phy_addr
,
u8
offset
)
{
unsigned
long
ioaddr
,
cr10_value
;
ioaddr
=
iobase
+
DCR10
;
cr10_value
=
phy_addr
;
cr10_value
=
(
cr10_value
<<
5
)
+
offset
;
...
...
@@ -1629,7 +1629,7 @@ static u16 phy_readby_cr10(unsigned long iobase, u8 phy_addr, u8 offset)
static
void
phy_writeby_cr10
(
unsigned
long
iobase
,
u8
phy_addr
,
u8
offset
,
u16
phy_data
)
{
unsigned
long
ioaddr
,
cr10_value
;
ioaddr
=
iobase
+
DCR10
;
cr10_value
=
phy_addr
;
cr10_value
=
(
cr10_value
<<
5
)
+
offset
;
...
...
@@ -1659,7 +1659,7 @@ static void phy_write_1bit(unsigned long ioaddr, u32 phy_data, u32 chip_id)
static
u16
phy_read_1bit
(
unsigned
long
ioaddr
,
u32
chip_id
)
{
u16
phy_data
;
outl
(
0x50000
,
ioaddr
);
udelay
(
1
);
phy_data
=
(
inl
(
ioaddr
)
>>
19
)
&
0x1
;
...
...
drivers/net/tulip/winbond-840.c
View file @
f3b197ac
...
...
@@ -38,12 +38,12 @@
Copyright (C) 2001 Manfred Spraul
* ethtool support (jgarzik)
* Replace some MII-related magic numbers with constants (jgarzik)
TODO:
* enable pci_power_off
* Wake-On-LAN
*/
#define DRV_NAME "winbond-840"
#define DRV_VERSION "1.01-d"
#define DRV_RELDATE "Nov-17-2001"
...
...
@@ -57,7 +57,7 @@ c-help-name: Winbond W89c840 PCI Ethernet support
c-help-symbol: CONFIG_WINBOND_840
c-help: This driver is for the Winbond W89c840 chip. It also works with
c-help: the TX9882 chip on the Compex RL100-ATX board.
c-help: More specific information and updates are available from
c-help: More specific information and updates are available from
c-help: http://www.scyld.com/network/drivers.html
*/
...
...
@@ -207,7 +207,7 @@ Test with 'ping -s 10000' on a fast computer.
*/
/*
PCI probe table.
...
...
@@ -374,7 +374,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
static
struct
ethtool_ops
netdev_ethtool_ops
;
static
int
netdev_close
(
struct
net_device
*
dev
);
static
int
__devinit
w840_probe1
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
...
...
@@ -434,7 +434,7 @@ static int __devinit w840_probe1 (struct pci_dev *pdev,
np
->
mii_if
.
mdio_read
=
mdio_read
;
np
->
mii_if
.
mdio_write
=
mdio_write
;
np
->
base_addr
=
ioaddr
;
pci_set_drvdata
(
pdev
,
dev
);
if
(
dev
->
mem_start
)
...
...
@@ -510,7 +510,7 @@ static int __devinit w840_probe1 (struct pci_dev *pdev,
return
-
ENODEV
;
}
/* Read the EEPROM and MII Management Data I/O (MDIO) interfaces. These are
often serial bit streams generated by the host processor.
The example below is for the common 93c46 EEPROM, 64 16 bit words. */
...
...
@@ -660,7 +660,7 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val
return
;
}
static
int
netdev_open
(
struct
net_device
*
dev
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
...
...
@@ -731,7 +731,7 @@ static int update_link(struct net_device *dev)
dev
->
name
,
np
->
phys
[
0
]);
netif_carrier_on
(
dev
);
}
if
((
np
->
mii
&
~
0xf
)
==
MII_DAVICOM_DM9101
)
{
/* If the link partner doesn't support autonegotiation
* the MII detects it's abilities with the "parallel detection".
...
...
@@ -761,7 +761,7 @@ static int update_link(struct net_device *dev)
result
|=
0x20000000
;
if
(
result
!=
np
->
csr6
&&
debug
)
printk
(
KERN_INFO
"%s: Setting %dMBit-%s-duplex based on MII#%d
\n
"
,
dev
->
name
,
fasteth
?
100
:
10
,
dev
->
name
,
fasteth
?
100
:
10
,
duplex
?
"full"
:
"half"
,
np
->
phys
[
0
]);
return
result
;
}
...
...
@@ -947,7 +947,7 @@ static void init_registers(struct net_device *dev)
iowrite32
(
i
,
ioaddr
+
PCIBusCfg
);
np
->
csr6
=
0
;
/* 128 byte Tx threshold;
/* 128 byte Tx threshold;
Transmit on; Receive on; */
update_csr6
(
dev
,
0x00022002
|
update_link
(
dev
)
|
__set_rx_mode
(
dev
));
...
...
@@ -1584,7 +1584,7 @@ static int netdev_close(struct net_device *dev)
static
void
__devexit
w840_remove1
(
struct
pci_dev
*
pdev
)
{
struct
net_device
*
dev
=
pci_get_drvdata
(
pdev
);
if
(
dev
)
{
struct
netdev_private
*
np
=
netdev_priv
(
dev
);
unregister_netdev
(
dev
);
...
...
@@ -1640,7 +1640,7 @@ static int w840_suspend (struct pci_dev *pdev, pm_message_t state)
spin_unlock_wait
(
&
dev
->
xmit_lock
);
synchronize_irq
(
dev
->
irq
);
np
->
stats
.
rx_missed_errors
+=
ioread32
(
ioaddr
+
RxMissed
)
&
0xffff
;
/* no more hardware accesses behind this line. */
...
...
drivers/net/tulip/xircom_cb.c
View file @
f3b197ac
/*
* xircom_cb: A driver for the (tulip-like) Xircom Cardbus ethernet cards
* xircom_cb: A driver for the (tulip-like) Xircom Cardbus ethernet cards
*
* This software is (C) by the respective authors, and licensed under the GPL
* License.
*
* Written by Arjan van de Ven for Red Hat, Inc.
* Based on work by Jeff Garzik, Doug Ledford and Donald Becker
* Based on work by Jeff Garzik, Doug Ledford and Donald Becker
*
* This software may be used and distributed according to the terms
* of the GNU General Public License, incorporated herein by reference.
...
...
@@ -93,7 +93,7 @@ struct xircom_private {
unsigned
long
io_port
;
int
open
;
/* transmit_used is the rotating counter that indicates which transmit
descriptor has to be used next */
int
transmit_used
;
...
...
@@ -153,10 +153,10 @@ static struct pci_device_id xircom_pci_table[] = {
MODULE_DEVICE_TABLE
(
pci
,
xircom_pci_table
);
static
struct
pci_driver
xircom_ops
=
{
.
name
=
"xircom_cb"
,
.
id_table
=
xircom_pci_table
,
.
probe
=
xircom_probe
,
.
remove
=
xircom_remove
,
.
name
=
"xircom_cb"
,
.
id_table
=
xircom_pci_table
,
.
probe
=
xircom_probe
,
.
remove
=
xircom_remove
,
.
suspend
=
NULL
,
.
resume
=
NULL
};
...
...
@@ -174,7 +174,7 @@ static void print_binary(unsigned int number)
buffer
[
i2
++
]
=
'1'
;
else
buffer
[
i2
++
]
=
'0'
;
if
((
i
&
3
)
==
0
)
if
((
i
&
3
)
==
0
)
buffer
[
i2
++
]
=
' '
;
}
printk
(
"%s
\n
"
,
buffer
);
...
...
@@ -196,10 +196,10 @@ static struct ethtool_ops netdev_ethtool_ops = {
/* xircom_probe is the code that gets called on device insertion.
it sets up the hardware and registers the device to the networklayer.
TODO: Send 1 or 2 "dummy" packets here as the card seems to discard the
first two packets that get send, and pump hates that.
*/
static
int
__devinit
xircom_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
id
)
{
...
...
@@ -209,7 +209,7 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
unsigned
long
flags
;
unsigned
short
tmp16
;
enter
(
"xircom_probe"
);
/* First do the PCI initialisation */
if
(
pci_enable_device
(
pdev
))
...
...
@@ -217,24 +217,24 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
/* disable all powermanagement */
pci_write_config_dword
(
pdev
,
PCI_POWERMGMT
,
0x0000
);
pci_set_master
(
pdev
);
/* Why isn't this done by pci_enable_device ?*/
/* clear PCI status, if any */
pci_read_config_word
(
pdev
,
PCI_STATUS
,
&
tmp16
);
/* clear PCI status, if any */
pci_read_config_word
(
pdev
,
PCI_STATUS
,
&
tmp16
);
pci_write_config_word
(
pdev
,
PCI_STATUS
,
tmp16
);
pci_read_config_byte
(
pdev
,
PCI_REVISION_ID
,
&
chip_rev
);
if
(
!
request_region
(
pci_resource_start
(
pdev
,
0
),
128
,
"xircom_cb"
))
{
printk
(
KERN_ERR
"xircom_probe: failed to allocate io-region
\n
"
);
return
-
ENODEV
;
}
/*
/*
Before changing the hardware, allocate the memory.
This way, we can fail gracefully if not enough memory
is available.
is available.
*/
dev
=
alloc_etherdev
(
sizeof
(
struct
xircom_private
));
if
(
!
dev
)
{
...
...
@@ -242,13 +242,13 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
goto
device_fail
;
}
private
=
netdev_priv
(
dev
);
/* Allocate the send/receive buffers */
private
->
rx_buffer
=
pci_alloc_consistent
(
pdev
,
8192
,
&
private
->
rx_dma_handle
);
if
(
private
->
rx_buffer
==
NULL
)
{
printk
(
KERN_ERR
"xircom_probe: no memory for rx buffer
\n
"
);
goto
rx_buf_fail
;
}
}
private
->
tx_buffer
=
pci_alloc_consistent
(
pdev
,
8192
,
&
private
->
tx_dma_handle
);
if
(
private
->
tx_buffer
==
NULL
)
{
printk
(
KERN_ERR
"xircom_probe: no memory for tx buffer
\n
"
);
...
...
@@ -265,11 +265,11 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
spin_lock_init
(
&
private
->
lock
);
dev
->
irq
=
pdev
->
irq
;
dev
->
base_addr
=
private
->
io_port
;
initialize_card
(
private
);
read_mac_address
(
private
);
setup_descriptors
(
private
);
dev
->
open
=
&
xircom_open
;
dev
->
hard_start_xmit
=
&
xircom_start_xmit
;
dev
->
stop
=
&
xircom_close
;
...
...
@@ -285,19 +285,19 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
printk
(
KERN_ERR
"xircom_probe: netdevice registration failed.
\n
"
);
goto
reg_fail
;
}
printk
(
KERN_INFO
"%s: Xircom cardbus revision %i at irq %i
\n
"
,
dev
->
name
,
chip_rev
,
pdev
->
irq
);
/* start the transmitter to get a heartbeat */
/* TODO: send 2 dummy packets here */
transceiver_voodoo
(
private
);
spin_lock_irqsave
(
&
private
->
lock
,
flags
);
activate_transmitter
(
private
);
activate_receiver
(
private
);
spin_unlock_irqrestore
(
&
private
->
lock
,
flags
);
trigger_receive
(
private
);
leave
(
"xircom_probe"
);
return
0
;
...
...
@@ -332,7 +332,7 @@ static void __devexit xircom_remove(struct pci_dev *pdev)
free_netdev
(
dev
);
pci_set_drvdata
(
pdev
,
NULL
);
leave
(
"xircom_remove"
);
}
}
static
irqreturn_t
xircom_interrupt
(
int
irq
,
void
*
dev_instance
,
struct
pt_regs
*
regs
)
{
...
...
@@ -346,11 +346,11 @@ static irqreturn_t xircom_interrupt(int irq, void *dev_instance, struct pt_regs
spin_lock
(
&
card
->
lock
);
status
=
inl
(
card
->
io_port
+
CSR5
);
#ifdef DEBUG
#ifdef DEBUG
print_binary
(
status
);
printk
(
"tx status 0x%08x 0x%08x
\n
"
,
card
->
tx_buffer
[
0
],
card
->
tx_buffer
[
4
]);
printk
(
"rx status 0x%08x 0x%08x
\n
"
,
card
->
rx_buffer
[
0
],
card
->
rx_buffer
[
4
]);
#endif
#endif
/* Handle shared irq and hotplug */
if
(
status
==
0
||
status
==
0xffffffff
)
{
spin_unlock
(
&
card
->
lock
);
...
...
@@ -366,21 +366,21 @@ static irqreturn_t xircom_interrupt(int irq, void *dev_instance, struct pt_regs
netif_carrier_on
(
dev
);
else
netif_carrier_off
(
dev
);
}
/* Clear all remaining interrupts */
/* Clear all remaining interrupts */
status
|=
0xffffffff
;
/* FIXME: make this clear only the
real existing bits */
outl
(
status
,
card
->
io_port
+
CSR5
);
for
(
i
=
0
;
i
<
NUMDESCRIPTORS
;
i
++
)
for
(
i
=
0
;
i
<
NUMDESCRIPTORS
;
i
++
)
investigate_write_descriptor
(
dev
,
card
,
i
,
bufferoffsets
[
i
]);
for
(
i
=
0
;
i
<
NUMDESCRIPTORS
;
i
++
)
for
(
i
=
0
;
i
<
NUMDESCRIPTORS
;
i
++
)
investigate_read_descriptor
(
dev
,
card
,
i
,
bufferoffsets
[
i
]);
spin_unlock
(
&
card
->
lock
);
leave
(
"xircom_interrupt"
);
return
IRQ_HANDLED
;
...
...
@@ -393,38 +393,38 @@ static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev)
int
nextdescriptor
;
int
desc
;
enter
(
"xircom_start_xmit"
);
card
=
netdev_priv
(
dev
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
/* First see if we can free some descriptors */
for
(
desc
=
0
;
desc
<
NUMDESCRIPTORS
;
desc
++
)
for
(
desc
=
0
;
desc
<
NUMDESCRIPTORS
;
desc
++
)
investigate_write_descriptor
(
dev
,
card
,
desc
,
bufferoffsets
[
desc
]);
nextdescriptor
=
(
card
->
transmit_used
+
1
)
%
(
NUMDESCRIPTORS
);
desc
=
card
->
transmit_used
;
/* only send the packet if the descriptor is free */
if
(
card
->
tx_buffer
[
4
*
desc
]
==
0
)
{
/* Copy the packet data; zero the memory first as the card
sometimes sends more than you ask it to. */
memset
(
&
card
->
tx_buffer
[
bufferoffsets
[
desc
]
/
4
],
0
,
1536
);
memcpy
(
&
(
card
->
tx_buffer
[
bufferoffsets
[
desc
]
/
4
]),
skb
->
data
,
skb
->
len
);
/* FIXME: The specification tells us that the length we send HAS to be a multiple of
4 bytes. */
card
->
tx_buffer
[
4
*
desc
+
1
]
=
skb
->
len
;
if
(
desc
==
NUMDESCRIPTORS
-
1
)
card
->
tx_buffer
[
4
*
desc
+
1
]
|=
(
1
<<
25
);
/* bit 25: last descriptor of the ring */
card
->
tx_buffer
[
4
*
desc
+
1
]
|=
0xF0000000
;
/* 0xF0... means want interrupts*/
/* 0xF0... means want interrupts*/
card
->
tx_skb
[
desc
]
=
skb
;
wmb
();
/* This gives the descriptor to the card */
card
->
tx_buffer
[
4
*
desc
]
=
0x80000000
;
...
...
@@ -433,18 +433,18 @@ static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev)
netif_stop_queue
(
dev
);
}
card
->
transmit_used
=
nextdescriptor
;
leave
(
"xircom-start_xmit - sent"
);
leave
(
"xircom-start_xmit - sent"
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
return
0
;
}
/* Uh oh... no free descriptor... drop the packet */
netif_stop_queue
(
dev
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
trigger_transmit
(
card
);
return
-
EIO
;
}
...
...
@@ -462,7 +462,7 @@ static int xircom_open(struct net_device *dev)
leave
(
"xircom_open - No IRQ"
);
return
retval
;
}
xircom_up
(
xp
);
xp
->
open
=
1
;
leave
(
"xircom_open"
);
...
...
@@ -473,31 +473,31 @@ static int xircom_close(struct net_device *dev)
{
struct
xircom_private
*
card
;
unsigned
long
flags
;
enter
(
"xircom_close"
);
card
=
netdev_priv
(
dev
);
netif_stop_queue
(
dev
);
/* we don't want new packets */
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
disable_all_interrupts
(
card
);
#if 0
#if 0
/* We can enable this again once we send dummy packets on ifconfig ethX up */
deactivate_receiver(card);
deactivate_transmitter(card);
#endif
#endif
remove_descriptors
(
card
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
card
->
open
=
0
;
free_irq
(
dev
->
irq
,
dev
);
leave
(
"xircom_close"
);
return
0
;
}
...
...
@@ -506,8 +506,8 @@ static struct net_device_stats *xircom_get_stats(struct net_device *dev)
{
struct
xircom_private
*
card
=
netdev_priv
(
dev
);
return
&
card
->
stats
;
}
}
#ifdef CONFIG_NET_POLL_CONTROLLER
static
void
xircom_poll_controller
(
struct
net_device
*
dev
)
...
...
@@ -540,7 +540,7 @@ static void initialize_card(struct xircom_private *card)
outl
(
val
,
card
->
io_port
+
CSR0
);
val
=
0
;
/* Value 0x00 is a safe and conservative value
val
=
0
;
/* Value 0x00 is a safe and conservative value
for the PCI configuration settings */
outl
(
val
,
card
->
io_port
+
CSR0
);
...
...
@@ -617,23 +617,23 @@ static void setup_descriptors(struct xircom_private *card)
/* Rx Descr2: address of the buffer
we store the buffer at the 2nd half of the page */
address
=
(
unsigned
long
)
card
->
rx_dma_handle
;
card
->
rx_buffer
[
i
*
4
+
2
]
=
cpu_to_le32
(
address
+
bufferoffsets
[
i
]);
/* Rx Desc3: address of 2nd buffer -> 0 */
card
->
rx_buffer
[
i
*
4
+
3
]
=
0
;
}
wmb
();
/* Write the receive descriptor ring address to the card */
address
=
(
unsigned
long
)
card
->
rx_dma_handle
;
val
=
cpu_to_le32
(
address
);
val
=
cpu_to_le32
(
address
);
outl
(
val
,
card
->
io_port
+
CSR3
);
/* Receive descr list address */
/* transmit descriptors */
memset
(
card
->
tx_buffer
,
0
,
128
);
/* clear the descriptors */
for
(
i
=
0
;
i
<
NUMDESCRIPTORS
;
i
++
)
{
/* Tx Descr0: Empty, we own it, no errors -> 0x00000000 */
card
->
tx_buffer
[
i
*
4
+
0
]
=
0x00000000
;
...
...
@@ -641,7 +641,7 @@ static void setup_descriptors(struct xircom_private *card)
card
->
tx_buffer
[
i
*
4
+
1
]
=
1536
;
if
(
i
==
NUMDESCRIPTORS
-
1
)
card
->
tx_buffer
[
i
*
4
+
1
]
|=
(
1
<<
25
);
/* bit 25 is "last descriptor" */
/* Tx Descr2: address of the buffer
we store the buffer at the 2nd half of the page */
address
=
(
unsigned
long
)
card
->
tx_dma_handle
;
...
...
@@ -748,7 +748,7 @@ static int receive_active(struct xircom_private *card)
activate_receiver enables the receiver on the card.
Before being allowed to active the receiver, the receiver
must be completely de-activated. To achieve this,
this code actually disables the receiver first; then it waits for the
this code actually disables the receiver first; then it waits for the
receiver to become inactive, then it activates the receiver and then
it waits for the receiver to be active.
...
...
@@ -762,13 +762,13 @@ static void activate_receiver(struct xircom_private *card)
val
=
inl
(
card
->
io_port
+
CSR6
);
/* Operation mode */
/* If the "active" bit is set and the receiver is already
active, no need to do the expensive thing */
if
((
val
&
2
)
&&
(
receive_active
(
card
)))
return
;
val
=
val
&
~
2
;
/* disable the receiver */
outl
(
val
,
card
->
io_port
+
CSR6
);
...
...
@@ -805,7 +805,7 @@ static void activate_receiver(struct xircom_private *card)
/*
deactivate_receiver disables the receiver on the card.
To achieve this this code disables the receiver first;
To achieve this this code disables the receiver first;
then it waits for the receiver to become inactive.
must be called with the lock held and interrupts disabled.
...
...
@@ -840,7 +840,7 @@ static void deactivate_receiver(struct xircom_private *card)
activate_transmitter enables the transmitter on the card.
Before being allowed to active the transmitter, the transmitter
must be completely de-activated. To achieve this,
this code actually disables the transmitter first; then it waits for the
this code actually disables the transmitter first; then it waits for the
transmitter to become inactive, then it activates the transmitter and then
it waits for the transmitter to be active again.
...
...
@@ -856,7 +856,7 @@ static void activate_transmitter(struct xircom_private *card)
val
=
inl
(
card
->
io_port
+
CSR6
);
/* Operation mode */
/* If the "active" bit is set and the receiver is already
active, no need to do the expensive thing */
active, no need to do the expensive thing */
if
((
val
&
(
1
<<
13
))
&&
(
transmit_active
(
card
)))
return
;
...
...
@@ -896,7 +896,7 @@ static void activate_transmitter(struct xircom_private *card)
/*
deactivate_transmitter disables the transmitter on the card.
To achieve this this code disables the transmitter first;
To achieve this this code disables the transmitter first;
then it waits for the transmitter to become inactive.
must be called with the lock held and interrupts disabled.
...
...
@@ -990,7 +990,7 @@ static void disable_all_interrupts(struct xircom_private *card)
{
unsigned
int
val
;
enter
(
"enable_all_interrupts"
);
val
=
0
;
/* disable all interrupts */
outl
(
val
,
card
->
io_port
+
CSR7
);
...
...
@@ -1031,8 +1031,8 @@ static int enable_promisc(struct xircom_private *card)
unsigned
int
val
;
enter
(
"enable_promisc"
);
val
=
inl
(
card
->
io_port
+
CSR6
);
val
=
val
|
(
1
<<
6
);
val
=
inl
(
card
->
io_port
+
CSR6
);
val
=
val
|
(
1
<<
6
);
outl
(
val
,
card
->
io_port
+
CSR6
);
leave
(
"enable_promisc"
);
...
...
@@ -1042,7 +1042,7 @@ static int enable_promisc(struct xircom_private *card)
/*
/*
link_status() checks the the links status and will return 0 for no link, 10 for 10mbit link and 100 for.. guess what.
Must be called in locked state with interrupts disabled
...
...
@@ -1051,15 +1051,15 @@ static int link_status(struct xircom_private *card)
{
unsigned
int
val
;
enter
(
"link_status"
);
val
=
inb
(
card
->
io_port
+
CSR12
);
if
(
!
(
val
&
(
1
<<
2
)))
/* bit 2 is 0 for 10mbit link, 1 for not an 10mbit link */
return
10
;
if
(
!
(
val
&
(
1
<<
1
)))
/* bit 1 is 0 for 100mbit link, 1 for not an 100mbit link */
return
100
;
/* If we get here -> no link at all */
/* If we get here -> no link at all */
leave
(
"link_status"
);
return
0
;
...
...
@@ -1071,7 +1071,7 @@ static int link_status(struct xircom_private *card)
/*
read_mac_address() reads the MAC address from the NIC and stores it in the "dev" structure.
This function will take the spinlock itself and can, as a result, not be called with the lock helt.
*/
static
void
read_mac_address
(
struct
xircom_private
*
card
)
...
...
@@ -1081,7 +1081,7 @@ static void read_mac_address(struct xircom_private *card)
int
i
;
enter
(
"read_mac_address"
);
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
outl
(
1
<<
12
,
card
->
io_port
+
CSR9
);
/* enable boot rom access */
...
...
@@ -1095,7 +1095,7 @@ static void read_mac_address(struct xircom_private *card)
outl
(
i
+
3
,
card
->
io_port
+
CSR10
);
data_count
=
inl
(
card
->
io_port
+
CSR9
)
&
0xff
;
if
((
tuple
==
0x22
)
&&
(
data_id
==
0x04
)
&&
(
data_count
==
0x06
))
{
/*
/*
* This is it. We have the data we want.
*/
for
(
j
=
0
;
j
<
6
;
j
++
)
{
...
...
@@ -1136,12 +1136,12 @@ static void transceiver_voodoo(struct xircom_private *card)
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
outl
(
0x0008
,
card
->
io_port
+
CSR15
);
udelay
(
25
);
udelay
(
25
);
outl
(
0xa8050000
,
card
->
io_port
+
CSR15
);
udelay
(
25
);
outl
(
0xa00f0000
,
card
->
io_port
+
CSR15
);
udelay
(
25
);
spin_unlock_irqrestore
(
&
card
->
lock
,
flags
);
netif_start_queue
(
card
->
dev
);
...
...
@@ -1163,15 +1163,15 @@ static void xircom_up(struct xircom_private *card)
spin_lock_irqsave
(
&
card
->
lock
,
flags
);
enable_link_interrupt
(
card
);
enable_transmit_interrupt
(
card
);
enable_receive_interrupt
(
card
);
enable_common_interrupts
(
card
);
enable_promisc
(
card
);
/* The card can have received packets already, read them away now */
for
(
i
=
0
;
i
<
NUMDESCRIPTORS
;
i
++
)
for
(
i
=
0
;
i
<
NUMDESCRIPTORS
;
i
++
)
investigate_read_descriptor
(
card
->
dev
,
card
,
i
,
bufferoffsets
[
i
]);
...
...
@@ -1185,15 +1185,15 @@ static void xircom_up(struct xircom_private *card)
/* Bufferoffset is in BYTES */
static
void
investigate_read_descriptor
(
struct
net_device
*
dev
,
struct
xircom_private
*
card
,
int
descnr
,
unsigned
int
bufferoffset
)
{
int
status
;
int
status
;
enter
(
"investigate_read_descriptor"
);
status
=
card
->
rx_buffer
[
4
*
descnr
];
if
((
status
>
0
))
{
/* packet received */
/* TODO: discard error packets */
short
pkt_len
=
((
status
>>
16
)
&
0x7ff
)
-
4
;
/* minus 4, we don't want the CRC */
struct
sk_buff
*
skb
;
...
...
@@ -1216,7 +1216,7 @@ static void investigate_read_descriptor(struct net_device *dev,struct xircom_pri
dev
->
last_rx
=
jiffies
;
card
->
stats
.
rx_packets
++
;
card
->
stats
.
rx_bytes
+=
pkt_len
;
out:
/* give the buffer back to the card */
card
->
rx_buffer
[
4
*
descnr
]
=
0x80000000
;
...
...
@@ -1234,9 +1234,9 @@ static void investigate_write_descriptor(struct net_device *dev, struct xircom_p
int
status
;
enter
(
"investigate_write_descriptor"
);
status
=
card
->
tx_buffer
[
4
*
descnr
];
#if 0
#if 0
if (status & 0x8000) { /* Major error */
printk(KERN_ERR "Major transmit error status %x \n", status);
card->tx_buffer[4*descnr] = 0;
...
...
@@ -1258,7 +1258,7 @@ static void investigate_write_descriptor(struct net_device *dev, struct xircom_p
}
leave
(
"investigate_write_descriptor"
);
}
...
...
@@ -1271,8 +1271,8 @@ static int __init xircom_init(void)
static
void
__exit
xircom_exit
(
void
)
{
pci_unregister_driver
(
&
xircom_ops
);
}
}
module_init
(
xircom_init
)
module_init
(
xircom_init
)
module_exit
(
xircom_exit
)
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