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
Kirill Smelkov
linux
Commits
5b4f4d19
Commit
5b4f4d19
authored
Feb 18, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://gkernel.bkbits.net/net-drivers-2.5
into ppc970.osdl.org:/home/torvalds/v2.5/linux
parents
6a3e473e
eecc0af5
Changes
56
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
56 changed files
with
915 additions
and
189 deletions
+915
-189
Documentation/networking/bonding.txt
Documentation/networking/bonding.txt
+40
-16
Documentation/networking/sk98lin.txt
Documentation/networking/sk98lin.txt
+3
-3
drivers/net/Kconfig
drivers/net/Kconfig
+3
-0
drivers/net/bonding/bond_3ad.c
drivers/net/bonding/bond_3ad.c
+12
-16
drivers/net/bonding/bond_alb.c
drivers/net/bonding/bond_alb.c
+121
-21
drivers/net/bonding/bond_alb.h
drivers/net/bonding/bond_alb.h
+4
-1
drivers/net/bonding/bond_main.c
drivers/net/bonding/bond_main.c
+524
-63
drivers/net/bonding/bonding.h
drivers/net/bonding/bonding.h
+12
-2
drivers/net/depca.c
drivers/net/depca.c
+1
-1
drivers/net/hamradio/6pack.c
drivers/net/hamradio/6pack.c
+10
-10
drivers/net/hp100.c
drivers/net/hp100.c
+16
-3
drivers/net/pcnet32.c
drivers/net/pcnet32.c
+46
-39
drivers/net/sis190.c
drivers/net/sis190.c
+3
-3
drivers/net/sis900.c
drivers/net/sis900.c
+1
-1
drivers/net/sk98lin/h/lm80.h
drivers/net/sk98lin/h/lm80.h
+2
-0
drivers/net/sk98lin/h/skaddr.h
drivers/net/sk98lin/h/skaddr.h
+2
-0
drivers/net/sk98lin/h/skcsum.h
drivers/net/sk98lin/h/skcsum.h
+2
-0
drivers/net/sk98lin/h/skdebug.h
drivers/net/sk98lin/h/skdebug.h
+2
-0
drivers/net/sk98lin/h/skdrv1st.h
drivers/net/sk98lin/h/skdrv1st.h
+2
-0
drivers/net/sk98lin/h/skdrv2nd.h
drivers/net/sk98lin/h/skdrv2nd.h
+9
-1
drivers/net/sk98lin/h/skerror.h
drivers/net/sk98lin/h/skerror.h
+2
-0
drivers/net/sk98lin/h/skgedrv.h
drivers/net/sk98lin/h/skgedrv.h
+2
-0
drivers/net/sk98lin/h/skgehw.h
drivers/net/sk98lin/h/skgehw.h
+2
-0
drivers/net/sk98lin/h/skgehwt.h
drivers/net/sk98lin/h/skgehwt.h
+2
-0
drivers/net/sk98lin/h/skgei2c.h
drivers/net/sk98lin/h/skgei2c.h
+2
-0
drivers/net/sk98lin/h/skgeinit.h
drivers/net/sk98lin/h/skgeinit.h
+2
-0
drivers/net/sk98lin/h/skgepnm2.h
drivers/net/sk98lin/h/skgepnm2.h
+2
-0
drivers/net/sk98lin/h/skgepnmi.h
drivers/net/sk98lin/h/skgepnmi.h
+2
-0
drivers/net/sk98lin/h/skgesirq.h
drivers/net/sk98lin/h/skgesirq.h
+2
-0
drivers/net/sk98lin/h/ski2c.h
drivers/net/sk98lin/h/ski2c.h
+2
-0
drivers/net/sk98lin/h/skqueue.h
drivers/net/sk98lin/h/skqueue.h
+6
-0
drivers/net/sk98lin/h/skrlmt.h
drivers/net/sk98lin/h/skrlmt.h
+2
-0
drivers/net/sk98lin/h/sktimer.h
drivers/net/sk98lin/h/sktimer.h
+2
-0
drivers/net/sk98lin/h/sktypes.h
drivers/net/sk98lin/h/sktypes.h
+2
-0
drivers/net/sk98lin/h/skversion.h
drivers/net/sk98lin/h/skversion.h
+6
-4
drivers/net/sk98lin/h/skvpd.h
drivers/net/sk98lin/h/skvpd.h
+2
-0
drivers/net/sk98lin/h/xmac_ii.h
drivers/net/sk98lin/h/xmac_ii.h
+2
-0
drivers/net/sk98lin/skaddr.c
drivers/net/sk98lin/skaddr.c
+2
-0
drivers/net/sk98lin/skcsum.c
drivers/net/sk98lin/skcsum.c
+2
-0
drivers/net/sk98lin/skdim.c
drivers/net/sk98lin/skdim.c
+2
-0
drivers/net/sk98lin/skge.c
drivers/net/sk98lin/skge.c
+8
-1
drivers/net/sk98lin/skgehwt.c
drivers/net/sk98lin/skgehwt.c
+2
-0
drivers/net/sk98lin/skgeinit.c
drivers/net/sk98lin/skgeinit.c
+2
-1
drivers/net/sk98lin/skgemib.c
drivers/net/sk98lin/skgemib.c
+2
-0
drivers/net/sk98lin/skgepnmi.c
drivers/net/sk98lin/skgepnmi.c
+3
-0
drivers/net/sk98lin/skgesirq.c
drivers/net/sk98lin/skgesirq.c
+2
-0
drivers/net/sk98lin/ski2c.c
drivers/net/sk98lin/ski2c.c
+2
-0
drivers/net/sk98lin/sklm80.c
drivers/net/sk98lin/sklm80.c
+2
-0
drivers/net/sk98lin/skproc.c
drivers/net/sk98lin/skproc.c
+2
-1
drivers/net/sk98lin/skqueue.c
drivers/net/sk98lin/skqueue.c
+3
-0
drivers/net/sk98lin/skrlmt.c
drivers/net/sk98lin/skrlmt.c
+2
-0
drivers/net/sk98lin/sktimer.c
drivers/net/sk98lin/sktimer.c
+3
-0
drivers/net/sk98lin/skvpd.c
drivers/net/sk98lin/skvpd.c
+2
-0
drivers/net/sk98lin/skxmac2.c
drivers/net/sk98lin/skxmac2.c
+2
-0
drivers/net/tokenring/3c359.c
drivers/net/tokenring/3c359.c
+13
-0
drivers/net/tulip/interrupt.c
drivers/net/tulip/interrupt.c
+2
-2
No files found.
Documentation/networking/bonding.txt
View file @
5b4f4d19
...
@@ -31,6 +31,7 @@ Verifying Bond Configuration
...
@@ -31,6 +31,7 @@ Verifying Bond Configuration
Frequently Asked Questions
Frequently Asked Questions
High Availability
High Availability
Promiscuous Sniffing notes
Promiscuous Sniffing notes
8021q VLAN support
Limitations
Limitations
Resources and Links
Resources and Links
...
@@ -140,10 +141,6 @@ probeall bond0 eth0 eth1 bonding
...
@@ -140,10 +141,6 @@ probeall bond0 eth0 eth1 bonding
Be careful not to reference bond0 itself at the end of the line, or modprobe
Be careful not to reference bond0 itself at the end of the line, or modprobe
will die in an endless recursive loop.
will die in an endless recursive loop.
To have device characteristics (such as MTU size) propagate to slave devices,
set the bond characteristics before enslaving the device. The characteristics
are propagated during the enslave process.
If running SNMP agents, the bonding driver should be loaded before any network
If running SNMP agents, the bonding driver should be loaded before any network
drivers participating in a bond. This requirement is due to the the interface
drivers participating in a bond. This requirement is due to the the interface
index (ipAdEntIfIndex) being associated to the first interface found with a
index (ipAdEntIfIndex) being associated to the first interface found with a
...
@@ -601,7 +598,7 @@ Frequently Asked Questions
...
@@ -601,7 +598,7 @@ Frequently Asked Questions
For ethernet cards not supporting MII status, the arp_interval and
For ethernet cards not supporting MII status, the arp_interval and
arp_ip_target parameters must be specified for bonding to work
arp_ip_target parameters must be specified for bonding to work
correctly. If packets have not been sent or received during the
correctly. If packets have not been sent or received during the
specified arp_interval dur
r
ation, an ARP request is sent to the
specified arp_interval duration, an ARP request is sent to the
targets to generate send and receive traffic. If after this
targets to generate send and receive traffic. If after this
interval, either the successful send and/or receive count has not
interval, either the successful send and/or receive count has not
incremented, the next slave in the sequence will become the active
incremented, the next slave in the sequence will become the active
...
@@ -669,16 +666,8 @@ Frequently Asked Questions
...
@@ -669,16 +666,8 @@ Frequently Asked Questions
that will be added.
that will be added.
To restore your slaves' MAC addresses, you need to detach them
To restore your slaves' MAC addresses, you need to detach them
from the bond (`ifenslave -d bond0 eth0'), set them down
from the bond (`ifenslave -d bond0 eth0'). The bonding driver will then
(`ifconfig eth0 down'), unload the drivers (`rmmod 3c59x', for
restore the MAC addresses that the slaves had before they were enslaved.
example) and reload them to get the MAC addresses from their
eeproms. If the driver is shared by several devices, you need
to turn them all down. Another solution is to look for the MAC
address at boot time (dmesg or tail /var/log/messages) and to
reset it by hand with ifconfig :
# ifconfig eth0 down
# ifconfig eth0 hw ether 00:20:40:60:80:A0
9. Which transmit polices can be used?
9. Which transmit polices can be used?
...
@@ -843,7 +832,7 @@ point of failure" solution.
...
@@ -843,7 +832,7 @@ point of failure" solution.
In this configuration, there is an ISL - Inter Switch Link (could be a trunk),
In this configuration, there is an ISL - Inter Switch Link (could be a trunk),
several servers (host1, host2 ...) attached to both switches each, and one or
several servers (host1, host2 ...) attached to both switches each, and one or
more ports to the outside world (port3...). One an only one slave on each host
more ports to the outside world (port3...). One an
d
only one slave on each host
is active at a time, while all links are still monitored (the system can
is active at a time, while all links are still monitored (the system can
detect a failure of active and backup links).
detect a failure of active and backup links).
...
@@ -933,6 +922,41 @@ capacity aggregating; but it works fine for unnumbered interfaces;
...
@@ -933,6 +922,41 @@ capacity aggregating; but it works fine for unnumbered interfaces;
just ignore all the warnings it emits.
just ignore all the warnings it emits.
8021q VLAN support
==================
It is possible to configure VLAN devices over a bond interface using the 8021q
driver. However, only packets coming from the 8021q driver and passing through
bonding will be tagged by default. Self generated packets, like bonding's
learning packets or ARP packets generated by either ALB mode or the ARP
monitor mechanism, are tagged internally by bonding itself. As a result,
bonding has to "learn" what VLAN IDs are configured on top of it, and it uses
those IDs to tag self generated packets.
For simplicity reasons, and to support the use of adapters that can do VLAN
hardware acceleration offloding, the bonding interface declares itself as
fully hardware offloaing capable, it gets the add_vid/kill_vid notifications
to gather the necessary information, and it propagates those actions to the
slaves.
In case of mixed adapter types, hardware accelerated tagged packets that should
go through an adapter that is not offloading capable are "un-accelerated" by the
bonding driver so the VLAN tag sits in the regular location.
VLAN interfaces *must* be added on top of a bonding interface only after
enslaving at least one slave. This is because until the first slave is added the
bonding interface has a HW address of 00:00:00:00:00:00, which will be copied by
the VLAN interface when it is created.
Notice that a problem would occur if all slaves are released from a bond that
still has VLAN interfaces on top of it. When later coming to add new slaves, the
bonding interface would get a HW address from the first slave, which might not
match that of the VLAN interfaces. It is recommended that either all VLANs are
removed and then re-added, or to manually set the bonding interface's HW
address so it matches the VLAN's. (Note: changing a VLAN interface's HW address
would set the underlying device -- i.e. the bonding interface -- to promiscouos
mode, which might not be what you want).
Limitations
Limitations
===========
===========
The main limitations are :
The main limitations are :
...
...
Documentation/networking/sk98lin.txt
View file @
5b4f4d19
(C)Copyright 1999-200
3
Marvell(R).
(C)Copyright 1999-200
4
Marvell(R).
All rights reserved
All rights reserved
===========================================================================
===========================================================================
sk98lin.txt created 1
5-Dec-2003
sk98lin.txt created 1
3-Feb-2004
Readme File for sk98lin v6.2
1
Readme File for sk98lin v6.2
3
Marvell Yukon/SysKonnect SK-98xx Gigabit Ethernet Adapter family driver for LINUX
Marvell Yukon/SysKonnect SK-98xx Gigabit Ethernet Adapter family driver for LINUX
This file contains
This file contains
...
...
drivers/net/Kconfig
View file @
5b4f4d19
...
@@ -1985,6 +1985,7 @@ config SK98LIN
...
@@ -1985,6 +1985,7 @@ config SK98LIN
- Allied Telesyn AT-2970TX/2TX Gigabit Ethernet Adapter
- Allied Telesyn AT-2970TX/2TX Gigabit Ethernet Adapter
- Allied Telesyn AT-2971SX Gigabit Ethernet Adapter
- Allied Telesyn AT-2971SX Gigabit Ethernet Adapter
- Allied Telesyn AT-2971T Gigabit Ethernet Adapter
- Allied Telesyn AT-2971T Gigabit Ethernet Adapter
- Belkin Gigabit Desktop Card 10/100/1000Base-T Adapter, Copper RJ-45
- DGE-530T Gigabit Ethernet Adapter
- DGE-530T Gigabit Ethernet Adapter
- EG1032 v2 Instant Gigabit Network Adapter
- EG1032 v2 Instant Gigabit Network Adapter
- EG1064 v2 Instant Gigabit Network Adapter
- EG1064 v2 Instant Gigabit Network Adapter
...
@@ -1996,6 +1997,7 @@ config SK98LIN
...
@@ -1996,6 +1997,7 @@ config SK98LIN
- Marvell 88E8001 Gigabit LOM Ethernet Adapter (Foxconn)
- Marvell 88E8001 Gigabit LOM Ethernet Adapter (Foxconn)
- Marvell 88E8001 Gigabit LOM Ethernet Adapter (Gigabyte)
- Marvell 88E8001 Gigabit LOM Ethernet Adapter (Gigabyte)
- Marvell 88E8001 Gigabit LOM Ethernet Adapter (Iwill)
- Marvell 88E8001 Gigabit LOM Ethernet Adapter (Iwill)
- Marvell 88E8050 Gigabit LOM Ethernet Adapter (Intel)
- Marvell RDK-8001 Adapter
- Marvell RDK-8001 Adapter
- Marvell RDK-8002 Adapter
- Marvell RDK-8002 Adapter
- Marvell RDK-8003 Adapter
- Marvell RDK-8003 Adapter
...
@@ -2007,6 +2009,7 @@ config SK98LIN
...
@@ -2007,6 +2009,7 @@ config SK98LIN
- Marvell RDK-8010 Adapter
- Marvell RDK-8010 Adapter
- Marvell RDK-8011 Adapter
- Marvell RDK-8011 Adapter
- Marvell RDK-8012 Adapter
- Marvell RDK-8012 Adapter
- Marvell RDK-8052 Adapter
- Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Adapter (32 bit)
- Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Adapter (32 bit)
- Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Adapter (64 bit)
- Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Adapter (64 bit)
- N-Way PCI-Bus Giga-Card 1000/100/10Mbps(L)
- N-Way PCI-Bus Giga-Card 1000/100/10Mbps(L)
...
...
drivers/net/bonding/bond_3ad.c
View file @
5b4f4d19
...
@@ -2362,6 +2362,7 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
...
@@ -2362,6 +2362,7 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
int
agg_id
;
int
agg_id
;
int
i
;
int
i
;
struct
ad_info
ad_info
;
struct
ad_info
ad_info
;
int
res
=
1
;
/* make sure that the slaves list will
/* make sure that the slaves list will
* not change during tx
* not change during tx
...
@@ -2369,12 +2370,12 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
...
@@ -2369,12 +2370,12 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
read_lock
(
&
bond
->
lock
);
read_lock
(
&
bond
->
lock
);
if
(
!
BOND_IS_OK
(
bond
))
{
if
(
!
BOND_IS_OK
(
bond
))
{
goto
free_
out
;
goto
out
;
}
}
if
(
bond_3ad_get_active_agg_info
(
bond
,
&
ad_info
))
{
if
(
bond_3ad_get_active_agg_info
(
bond
,
&
ad_info
))
{
printk
(
KERN_DEBUG
"ERROR: bond_3ad_get_active_agg_info failed
\n
"
);
printk
(
KERN_DEBUG
"ERROR: bond_3ad_get_active_agg_info failed
\n
"
);
goto
free_
out
;
goto
out
;
}
}
slaves_in_agg
=
ad_info
.
ports
;
slaves_in_agg
=
ad_info
.
ports
;
...
@@ -2383,7 +2384,7 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
...
@@ -2383,7 +2384,7 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
if
(
slaves_in_agg
==
0
)
{
if
(
slaves_in_agg
==
0
)
{
/*the aggregator is empty*/
/*the aggregator is empty*/
printk
(
KERN_DEBUG
"ERROR: active aggregator is empty
\n
"
);
printk
(
KERN_DEBUG
"ERROR: active aggregator is empty
\n
"
);
goto
free_
out
;
goto
out
;
}
}
slave_agg_no
=
(
data
->
h_dest
[
5
]
^
bond
->
dev
->
dev_addr
[
5
])
%
slaves_in_agg
;
slave_agg_no
=
(
data
->
h_dest
[
5
]
^
bond
->
dev
->
dev_addr
[
5
])
%
slaves_in_agg
;
...
@@ -2401,7 +2402,7 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
...
@@ -2401,7 +2402,7 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
if
(
slave_agg_no
>=
0
)
{
if
(
slave_agg_no
>=
0
)
{
printk
(
KERN_ERR
DRV_NAME
": Error: Couldn't find a slave to tx on for aggregator ID %d
\n
"
,
agg_id
);
printk
(
KERN_ERR
DRV_NAME
": Error: Couldn't find a slave to tx on for aggregator ID %d
\n
"
,
agg_id
);
goto
free_
out
;
goto
out
;
}
}
start_at
=
slave
;
start_at
=
slave
;
...
@@ -2414,24 +2415,19 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
...
@@ -2414,24 +2415,19 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
slave_agg_id
=
agg
->
aggregator_identifier
;
slave_agg_id
=
agg
->
aggregator_identifier
;
}
}
if
(
SLAVE_IS_OK
(
slave
)
&&
if
(
SLAVE_IS_OK
(
slave
)
&&
agg
&&
(
slave_agg_id
==
agg_id
))
{
agg
&&
(
slave_agg_id
==
agg_id
))
{
res
=
bond_dev_queue_xmit
(
bond
,
skb
,
slave
->
dev
);
skb
->
dev
=
slave
->
dev
;
break
;
skb
->
priority
=
1
;
dev_queue_xmit
(
skb
);
goto
out
;
}
}
}
}
out:
out:
if
(
res
)
{
/* no suitable interface, frame not sent */
dev_kfree_skb
(
skb
);
}
read_unlock
(
&
bond
->
lock
);
read_unlock
(
&
bond
->
lock
);
return
0
;
return
0
;
free_out:
/* no suitable interface, frame not sent */
dev_kfree_skb
(
skb
);
goto
out
;
}
}
int
bond_3ad_lacpdu_recv
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
,
struct
packet_type
*
ptype
)
int
bond_3ad_lacpdu_recv
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
,
struct
packet_type
*
ptype
)
...
...
drivers/net/bonding/bond_alb.c
View file @
5b4f4d19
...
@@ -34,6 +34,9 @@
...
@@ -34,6 +34,9 @@
*
*
* 2003/12/30 - Amir Noam <amir.noam at intel dot com>
* 2003/12/30 - Amir Noam <amir.noam at intel dot com>
* - Fixed: Cannot remove and re-enslave the original active slave.
* - Fixed: Cannot remove and re-enslave the original active slave.
*
* 2004/01/14 - Shmulik Hen <shmulik.hen at intel dot com>
* - Add capability to tag self generated packets in ALB/TLB modes.
*/
*/
//#define BONDING_DEBUG 1
//#define BONDING_DEBUG 1
...
@@ -50,6 +53,7 @@
...
@@ -50,6 +53,7 @@
#include <linux/if_arp.h>
#include <linux/if_arp.h>
#include <linux/if_ether.h>
#include <linux/if_ether.h>
#include <linux/if_bonding.h>
#include <linux/if_bonding.h>
#include <linux/if_vlan.h>
#include <net/ipx.h>
#include <net/ipx.h>
#include <net/arp.h>
#include <net/arp.h>
#include <asm/byteorder.h>
#include <asm/byteorder.h>
...
@@ -79,7 +83,7 @@
...
@@ -79,7 +83,7 @@
#define TLB_NULL_INDEX 0xffffffff
#define TLB_NULL_INDEX 0xffffffff
#define MAX_LP_
RETRY
3
#define MAX_LP_
BURST
3
/* rlb defs */
/* rlb defs */
#define RLB_HASH_TABLE_SIZE 256
#define RLB_HASH_TABLE_SIZE 256
...
@@ -498,13 +502,33 @@ static void rlb_update_client(struct rlb_client_info *client_info)
...
@@ -498,13 +502,33 @@ static void rlb_update_client(struct rlb_client_info *client_info)
}
}
for
(
i
=
0
;
i
<
RLB_ARP_BURST_SIZE
;
i
++
)
{
for
(
i
=
0
;
i
<
RLB_ARP_BURST_SIZE
;
i
++
)
{
arp_send
(
ARPOP_REPLY
,
ETH_P_ARP
,
struct
sk_buff
*
skb
;
client_info
->
ip_dst
,
client_info
->
slave
->
dev
,
skb
=
arp_create
(
ARPOP_REPLY
,
ETH_P_ARP
,
client_info
->
ip_src
,
client_info
->
ip_dst
,
client_info
->
mac_dst
,
client_info
->
slave
->
dev
,
client_info
->
slave
->
dev
->
dev_addr
,
client_info
->
ip_src
,
client_info
->
mac_dst
);
client_info
->
mac_dst
,
client_info
->
slave
->
dev
->
dev_addr
,
client_info
->
mac_dst
);
if
(
!
skb
)
{
printk
(
KERN_ERR
DRV_NAME
": Error: failed to create an ARP packet
\n
"
);
continue
;
}
skb
->
dev
=
client_info
->
slave
->
dev
;
if
(
client_info
->
tag
)
{
skb
=
vlan_put_tag
(
skb
,
client_info
->
vlan_id
);
if
(
!
skb
)
{
printk
(
KERN_ERR
DRV_NAME
": Error: failed to insert VLAN tag
\n
"
);
continue
;
}
}
arp_xmit
(
skb
);
}
}
}
}
...
@@ -603,9 +627,10 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, u32 src_ip)
...
@@ -603,9 +627,10 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, u32 src_ip)
}
}
/* Caller must hold both bond and ptr locks for read */
/* Caller must hold both bond and ptr locks for read */
struct
slave
*
rlb_choose_channel
(
struct
bonding
*
bond
,
struct
arp_pkt
*
arp
)
struct
slave
*
rlb_choose_channel
(
struct
sk_buff
*
skb
,
struct
bonding
*
bond
)
{
{
struct
alb_bond_info
*
bond_info
=
&
(
BOND_ALB_INFO
(
bond
));
struct
alb_bond_info
*
bond_info
=
&
(
BOND_ALB_INFO
(
bond
));
struct
arp_pkt
*
arp
=
(
struct
arp_pkt
*
)
skb
->
nh
.
raw
;
struct
slave
*
assigned_slave
;
struct
slave
*
assigned_slave
;
struct
rlb_client_info
*
client_info
;
struct
rlb_client_info
*
client_info
;
u32
hash_index
=
0
;
u32
hash_index
=
0
;
...
@@ -661,6 +686,15 @@ struct slave *rlb_choose_channel(struct bonding *bond, struct arp_pkt *arp)
...
@@ -661,6 +686,15 @@ struct slave *rlb_choose_channel(struct bonding *bond, struct arp_pkt *arp)
client_info
->
ntt
=
0
;
client_info
->
ntt
=
0
;
}
}
if
(
!
list_empty
(
&
bond
->
vlan_list
))
{
unsigned
short
vlan_id
;
int
res
=
vlan_get_tag
(
skb
,
&
vlan_id
);
if
(
!
res
)
{
client_info
->
tag
=
1
;
client_info
->
vlan_id
=
vlan_id
;
}
}
if
(
!
client_info
->
assigned
)
{
if
(
!
client_info
->
assigned
)
{
u32
prev_tbl_head
=
bond_info
->
rx_hashtbl_head
;
u32
prev_tbl_head
=
bond_info
->
rx_hashtbl_head
;
bond_info
->
rx_hashtbl_head
=
hash_index
;
bond_info
->
rx_hashtbl_head
=
hash_index
;
...
@@ -691,7 +725,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)
...
@@ -691,7 +725,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)
/* the arp must be sent on the selected
/* the arp must be sent on the selected
* rx channel
* rx channel
*/
*/
tx_slave
=
rlb_choose_channel
(
bond
,
arp
);
tx_slave
=
rlb_choose_channel
(
skb
,
bond
);
if
(
tx_slave
)
{
if
(
tx_slave
)
{
memcpy
(
arp
->
mac_src
,
tx_slave
->
dev
->
dev_addr
,
ETH_ALEN
);
memcpy
(
arp
->
mac_src
,
tx_slave
->
dev
->
dev_addr
,
ETH_ALEN
);
}
}
...
@@ -702,7 +736,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)
...
@@ -702,7 +736,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)
* When the arp reply is received the entry will be updated
* When the arp reply is received the entry will be updated
* with the correct unicast address of the client.
* with the correct unicast address of the client.
*/
*/
rlb_choose_channel
(
bond
,
arp
);
rlb_choose_channel
(
skb
,
bond
);
/* The ARP relpy packets must be delayed so that
/* The ARP relpy packets must be delayed so that
* they can cancel out the influence of the ARP request.
* they can cancel out the influence of the ARP request.
...
@@ -808,6 +842,40 @@ static void rlb_deinitialize(struct bonding *bond)
...
@@ -808,6 +842,40 @@ static void rlb_deinitialize(struct bonding *bond)
kfree
(
bond_info
->
rx_hashtbl
);
kfree
(
bond_info
->
rx_hashtbl
);
bond_info
->
rx_hashtbl
=
NULL
;
bond_info
->
rx_hashtbl
=
NULL
;
bond_info
->
rx_hashtbl_head
=
RLB_NULL_INDEX
;
_unlock_rx_hashtbl
(
bond
);
}
static
void
rlb_clear_vlan
(
struct
bonding
*
bond
,
unsigned
short
vlan_id
)
{
struct
alb_bond_info
*
bond_info
=
&
(
BOND_ALB_INFO
(
bond
));
u32
curr_index
;
_lock_rx_hashtbl
(
bond
);
curr_index
=
bond_info
->
rx_hashtbl_head
;
while
(
curr_index
!=
RLB_NULL_INDEX
)
{
struct
rlb_client_info
*
curr
=
&
(
bond_info
->
rx_hashtbl
[
curr_index
]);
u32
next_index
=
bond_info
->
rx_hashtbl
[
curr_index
].
next
;
u32
prev_index
=
bond_info
->
rx_hashtbl
[
curr_index
].
prev
;
if
(
curr
->
tag
&&
(
curr
->
vlan_id
==
vlan_id
))
{
if
(
curr_index
==
bond_info
->
rx_hashtbl_head
)
{
bond_info
->
rx_hashtbl_head
=
next_index
;
}
if
(
prev_index
!=
RLB_NULL_INDEX
)
{
bond_info
->
rx_hashtbl
[
prev_index
].
next
=
next_index
;
}
if
(
next_index
!=
RLB_NULL_INDEX
)
{
bond_info
->
rx_hashtbl
[
next_index
].
prev
=
prev_index
;
}
rlb_init_table_entry
(
curr
);
}
curr_index
=
next_index
;
}
_unlock_rx_hashtbl
(
bond
);
_unlock_rx_hashtbl
(
bond
);
}
}
...
@@ -816,6 +884,7 @@ static void rlb_deinitialize(struct bonding *bond)
...
@@ -816,6 +884,7 @@ static void rlb_deinitialize(struct bonding *bond)
static
void
alb_send_learning_packets
(
struct
slave
*
slave
,
u8
mac_addr
[])
static
void
alb_send_learning_packets
(
struct
slave
*
slave
,
u8
mac_addr
[])
{
{
struct
bonding
*
bond
=
bond_get_bond_by_slave
(
slave
);
struct
learning_pkt
pkt
;
struct
learning_pkt
pkt
;
int
size
=
sizeof
(
struct
learning_pkt
);
int
size
=
sizeof
(
struct
learning_pkt
);
int
i
;
int
i
;
...
@@ -825,7 +894,7 @@ static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[])
...
@@ -825,7 +894,7 @@ static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[])
memcpy
(
pkt
.
mac_src
,
mac_addr
,
ETH_ALEN
);
memcpy
(
pkt
.
mac_src
,
mac_addr
,
ETH_ALEN
);
pkt
.
type
=
__constant_htons
(
ETH_P_LOOP
);
pkt
.
type
=
__constant_htons
(
ETH_P_LOOP
);
for
(
i
=
0
;
i
<
MAX_LP_
RETRY
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_LP_
BURST
;
i
++
)
{
struct
sk_buff
*
skb
;
struct
sk_buff
*
skb
;
char
*
data
;
char
*
data
;
...
@@ -843,6 +912,26 @@ static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[])
...
@@ -843,6 +912,26 @@ static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[])
skb
->
priority
=
TC_PRIO_CONTROL
;
skb
->
priority
=
TC_PRIO_CONTROL
;
skb
->
dev
=
slave
->
dev
;
skb
->
dev
=
slave
->
dev
;
if
(
!
list_empty
(
&
bond
->
vlan_list
))
{
struct
vlan_entry
*
vlan
;
vlan
=
bond_next_vlan
(
bond
,
bond
->
alb_info
.
current_alb_vlan
);
bond
->
alb_info
.
current_alb_vlan
=
vlan
;
if
(
!
vlan
)
{
kfree_skb
(
skb
);
continue
;
}
skb
=
vlan_put_tag
(
skb
,
vlan
->
vlan_id
);
if
(
!
skb
)
{
printk
(
KERN_ERR
DRV_NAME
": Error: failed to insert VLAN tag
\n
"
);
continue
;
}
}
dev_queue_xmit
(
skb
);
dev_queue_xmit
(
skb
);
}
}
}
}
...
@@ -1193,6 +1282,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
...
@@ -1193,6 +1282,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
int
do_tx_balance
=
1
;
int
do_tx_balance
=
1
;
u32
hash_index
=
0
;
u32
hash_index
=
0
;
u8
*
hash_start
=
NULL
;
u8
*
hash_start
=
NULL
;
int
res
=
1
;
/* make sure that the curr_active_slave and the slaves list do
/* make sure that the curr_active_slave and the slaves list do
* not change during tx
* not change during tx
...
@@ -1201,7 +1291,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
...
@@ -1201,7 +1291,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
read_lock
(
&
bond
->
curr_slave_lock
);
read_lock
(
&
bond
->
curr_slave_lock
);
if
(
!
BOND_IS_OK
(
bond
))
{
if
(
!
BOND_IS_OK
(
bond
))
{
goto
free_
out
;
goto
out
;
}
}
switch
(
ntohs
(
skb
->
protocol
))
{
switch
(
ntohs
(
skb
->
protocol
))
{
...
@@ -1266,29 +1356,27 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
...
@@ -1266,29 +1356,27 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
}
}
if
(
tx_slave
&&
SLAVE_IS_OK
(
tx_slave
))
{
if
(
tx_slave
&&
SLAVE_IS_OK
(
tx_slave
))
{
skb
->
dev
=
tx_slave
->
dev
;
if
(
tx_slave
!=
bond
->
curr_active_slave
)
{
if
(
tx_slave
!=
bond
->
curr_active_slave
)
{
memcpy
(
eth_data
->
h_source
,
memcpy
(
eth_data
->
h_source
,
tx_slave
->
dev
->
dev_addr
,
tx_slave
->
dev
->
dev_addr
,
ETH_ALEN
);
ETH_ALEN
);
}
}
dev_queue_xmit
(
skb
);
res
=
bond_dev_queue_xmit
(
bond
,
skb
,
tx_slave
->
dev
);
}
else
{
}
else
{
/* no suitable interface, frame not sent */
if
(
tx_slave
)
{
if
(
tx_slave
)
{
tlb_clear_slave
(
bond
,
tx_slave
,
0
);
tlb_clear_slave
(
bond
,
tx_slave
,
0
);
}
}
goto
free_out
;
}
}
out:
out:
if
(
res
)
{
/* no suitable interface, frame not sent */
dev_kfree_skb
(
skb
);
}
read_unlock
(
&
bond
->
curr_slave_lock
);
read_unlock
(
&
bond
->
curr_slave_lock
);
read_unlock
(
&
bond
->
lock
);
read_unlock
(
&
bond
->
lock
);
return
0
;
return
0
;
free_out:
dev_kfree_skb
(
skb
);
goto
out
;
}
}
void
bond_alb_monitor
(
struct
bonding
*
bond
)
void
bond_alb_monitor
(
struct
bonding
*
bond
)
...
@@ -1589,3 +1677,15 @@ int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr)
...
@@ -1589,3 +1677,15 @@ int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr)
return
0
;
return
0
;
}
}
void
bond_alb_clear_vlan
(
struct
bonding
*
bond
,
unsigned
short
vlan_id
)
{
if
(
bond
->
alb_info
.
current_alb_vlan
&&
(
bond
->
alb_info
.
current_alb_vlan
->
vlan_id
==
vlan_id
))
{
bond
->
alb_info
.
current_alb_vlan
=
NULL
;
}
if
(
bond
->
alb_info
.
rlb_enabled
)
{
rlb_clear_vlan
(
bond
,
vlan_id
);
}
}
drivers/net/bonding/bond_alb.h
View file @
5b4f4d19
...
@@ -77,6 +77,8 @@ struct rlb_client_info {
...
@@ -77,6 +77,8 @@ struct rlb_client_info {
u8
assigned
;
/* checking whether this entry is assigned */
u8
assigned
;
/* checking whether this entry is assigned */
u8
ntt
;
/* flag - need to transmit client info */
u8
ntt
;
/* flag - need to transmit client info */
struct
slave
*
slave
;
/* the slave assigned to this client */
struct
slave
*
slave
;
/* the slave assigned to this client */
u8
tag
;
/* flag - need to tag skb */
unsigned
short
vlan_id
;
/* VLAN tag associated with IP address */
};
};
struct
tlb_slave_info
{
struct
tlb_slave_info
{
...
@@ -122,6 +124,7 @@ struct alb_bond_info {
...
@@ -122,6 +124,7 @@ struct alb_bond_info {
* rx traffic should be
* rx traffic should be
* rebalanced
* rebalanced
*/
*/
struct
vlan_entry
*
current_alb_vlan
;
};
};
int
bond_alb_initialize
(
struct
bonding
*
bond
,
int
rlb_enabled
);
int
bond_alb_initialize
(
struct
bonding
*
bond
,
int
rlb_enabled
);
...
@@ -133,6 +136,6 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
...
@@ -133,6 +136,6 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
int
bond_alb_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
bond_dev
);
int
bond_alb_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
bond_dev
);
void
bond_alb_monitor
(
struct
bonding
*
bond
);
void
bond_alb_monitor
(
struct
bonding
*
bond
);
int
bond_alb_set_mac_address
(
struct
net_device
*
bond_dev
,
void
*
addr
);
int
bond_alb_set_mac_address
(
struct
net_device
*
bond_dev
,
void
*
addr
);
void
bond_alb_clear_vlan
(
struct
bonding
*
bond
,
unsigned
short
vlan_id
);
#endif
/* __BOND_ALB_H__ */
#endif
/* __BOND_ALB_H__ */
drivers/net/bonding/bond_main.c
View file @
5b4f4d19
This diff is collapsed.
Click to expand it.
drivers/net/bonding/bonding.h
View file @
5b4f4d19
...
@@ -36,8 +36,8 @@
...
@@ -36,8 +36,8 @@
#include "bond_3ad.h"
#include "bond_3ad.h"
#include "bond_alb.h"
#include "bond_alb.h"
#define DRV_VERSION "2.
5.4
"
#define DRV_VERSION "2.
6.0
"
#define DRV_RELDATE "
December 30, 2003
"
#define DRV_RELDATE "
January 14, 2004
"
#define DRV_NAME "bonding"
#define DRV_NAME "bonding"
#define DRV_DESCRIPTION "Ethernet Channel Bonding Driver"
#define DRV_DESCRIPTION "Ethernet Channel Bonding Driver"
...
@@ -147,6 +147,11 @@ struct bond_params {
...
@@ -147,6 +147,11 @@ struct bond_params {
u32
arp_targets
[
BOND_MAX_ARP_TARGETS
];
u32
arp_targets
[
BOND_MAX_ARP_TARGETS
];
};
};
struct
vlan_entry
{
struct
list_head
vlan_list
;
unsigned
short
vlan_id
;
};
struct
slave
{
struct
slave
{
struct
net_device
*
dev
;
/* first - usefull for panic debug */
struct
net_device
*
dev
;
/* first - usefull for panic debug */
struct
slave
*
next
;
struct
slave
*
next
;
...
@@ -196,6 +201,8 @@ struct bonding {
...
@@ -196,6 +201,8 @@ struct bonding {
struct
ad_bond_info
ad_info
;
struct
ad_bond_info
ad_info
;
struct
alb_bond_info
alb_info
;
struct
alb_bond_info
alb_info
;
struct
bond_params
params
;
struct
bond_params
params
;
struct
list_head
vlan_list
;
struct
vlan_group
*
vlgrp
;
};
};
/**
/**
...
@@ -238,5 +245,8 @@ extern inline void bond_set_slave_active_flags(struct slave *slave)
...
@@ -238,5 +245,8 @@ extern inline void bond_set_slave_active_flags(struct slave *slave)
slave
->
dev
->
flags
&=
~
IFF_NOARP
;
slave
->
dev
->
flags
&=
~
IFF_NOARP
;
}
}
struct
vlan_entry
*
bond_next_vlan
(
struct
bonding
*
bond
,
struct
vlan_entry
*
curr
);
int
bond_dev_queue_xmit
(
struct
bonding
*
bond
,
struct
sk_buff
*
skb
,
struct
net_device
*
slave_dev
);
#endif
/* _LINUX_BONDING_H */
#endif
/* _LINUX_BONDING_H */
drivers/net/depca.c
View file @
5b4f4d19
...
@@ -1461,7 +1461,7 @@ static int __init depca_mca_probe(struct device *device)
...
@@ -1461,7 +1461,7 @@ static int __init depca_mca_probe(struct device *device)
out_unclaim:
out_unclaim:
mca_device_set_claim
(
mdev
,
0
);
mca_device_set_claim
(
mdev
,
0
);
return
err
;
;
return
err
;
}
}
#endif
#endif
...
...
drivers/net/hamradio/6pack.c
View file @
5b4f4d19
...
@@ -178,17 +178,17 @@ static inline struct sixpack *sp_alloc(void)
...
@@ -178,17 +178,17 @@ static inline struct sixpack *sp_alloc(void)
(
sixpack_ctrls
[
i
]
=
(
sixpack_ctrl_t
*
)
kmalloc
(
sizeof
(
sixpack_ctrl_t
),
(
sixpack_ctrls
[
i
]
=
(
sixpack_ctrl_t
*
)
kmalloc
(
sizeof
(
sixpack_ctrl_t
),
GFP_KERNEL
))
!=
NULL
)
{
GFP_KERNEL
))
!=
NULL
)
{
spp
=
sixpack_ctrls
[
i
];
spp
=
sixpack_ctrls
[
i
];
memset
(
spp
,
0
,
sizeof
(
sixpack_ctrl_t
));
/* Initialize channel control data */
set_bit
(
SIXPF_INUSE
,
&
spp
->
ctrl
.
flags
);
spp
->
ctrl
.
tty
=
NULL
;
sprintf
(
spp
->
dev
.
name
,
"sp%d"
,
i
);
spp
->
dev
.
base_addr
=
i
;
spp
->
dev
.
priv
=
(
void
*
)
&
spp
->
ctrl
;
spp
->
dev
.
next
=
NULL
;
spp
->
dev
.
init
=
sixpack_init
;
}
}
memset
(
spp
,
0
,
sizeof
(
sixpack_ctrl_t
));
/* Initialize channel control data */
set_bit
(
SIXPF_INUSE
,
&
spp
->
ctrl
.
flags
);
spp
->
ctrl
.
tty
=
NULL
;
sprintf
(
spp
->
dev
.
name
,
"sp%d"
,
i
);
spp
->
dev
.
base_addr
=
i
;
spp
->
dev
.
priv
=
(
void
*
)
&
spp
->
ctrl
;
spp
->
dev
.
next
=
NULL
;
spp
->
dev
.
init
=
sixpack_init
;
if
(
spp
!=
NULL
)
{
if
(
spp
!=
NULL
)
{
/* register device so that it can be ifconfig'ed */
/* register device so that it can be ifconfig'ed */
...
...
drivers/net/hp100.c
View file @
5b4f4d19
...
@@ -3043,14 +3043,27 @@ static int __init hp100_module_init(void)
...
@@ -3043,14 +3043,27 @@ static int __init hp100_module_init(void)
int
err
;
int
err
;
err
=
hp100_isa_init
();
err
=
hp100_isa_init
();
if
(
err
&&
err
!=
-
ENODEV
)
goto
out
;
#ifdef CONFIG_EISA
#ifdef CONFIG_EISA
err
|=
eisa_driver_register
(
&
hp100_eisa_driver
);
err
=
eisa_driver_register
(
&
hp100_eisa_driver
);
if
(
err
&&
err
!=
-
ENODEV
)
goto
out2
;
#endif
#endif
#ifdef CONFIG_PCI
#ifdef CONFIG_PCI
err
|=
pci_module_init
(
&
hp100_pci_driver
);
err
=
pci_module_init
(
&
hp100_pci_driver
);
if
(
err
&&
err
!=
-
ENODEV
)
goto
out3
;
#endif
#endif
out:
return
err
;
return
err
;
out3:
#ifdef CONFIG_EISA
eisa_driver_unregister
(
&
hp100_eisa_driver
);
out2:
#endif
hp100_isa_cleanup
();
goto
out
;
}
}
...
...
drivers/net/pcnet32.c
View file @
5b4f4d19
...
@@ -720,6 +720,8 @@ pcnet32_probe1(unsigned long ioaddr, unsigned int irq_line, int shared,
...
@@ -720,6 +720,8 @@ pcnet32_probe1(unsigned long ioaddr, unsigned int irq_line, int shared,
lp
->
name
=
chipname
;
lp
->
name
=
chipname
;
lp
->
shared_irq
=
shared
;
lp
->
shared_irq
=
shared
;
lp
->
mii_if
.
full_duplex
=
fdx
;
lp
->
mii_if
.
full_duplex
=
fdx
;
lp
->
mii_if
.
phy_id_mask
=
0x1f
;
lp
->
mii_if
.
reg_num_mask
=
0x1f
;
lp
->
dxsuflo
=
dxsuflo
;
lp
->
dxsuflo
=
dxsuflo
;
lp
->
ltint
=
ltint
;
lp
->
ltint
=
ltint
;
lp
->
mii
=
mii
;
lp
->
mii
=
mii
;
...
@@ -1006,9 +1008,10 @@ pcnet32_init_ring(struct net_device *dev)
...
@@ -1006,9 +1008,10 @@ pcnet32_init_ring(struct net_device *dev)
}
}
if
(
lp
->
rx_dma_addr
[
i
]
==
0
)
if
(
lp
->
rx_dma_addr
[
i
]
==
0
)
lp
->
rx_dma_addr
[
i
]
=
pci_map_single
(
lp
->
pci_dev
,
rx_skbuff
->
tail
,
rx_skbuff
->
len
,
PCI_DMA_FROMDEVICE
);
lp
->
rx_dma_addr
[
i
]
=
pci_map_single
(
lp
->
pci_dev
,
rx_skbuff
->
tail
,
PKT_BUF_SZ
-
2
,
PCI_DMA_FROMDEVICE
);
lp
->
rx_ring
[
i
].
base
=
(
u32
)
le32_to_cpu
(
lp
->
rx_dma_addr
[
i
]);
lp
->
rx_ring
[
i
].
base
=
(
u32
)
le32_to_cpu
(
lp
->
rx_dma_addr
[
i
]);
lp
->
rx_ring
[
i
].
buf_length
=
le16_to_cpu
(
-
PKT_BUF_SZ
);
lp
->
rx_ring
[
i
].
buf_length
=
le16_to_cpu
(
2
-
PKT_BUF_SZ
);
lp
->
rx_ring
[
i
].
status
=
le16_to_cpu
(
0x8000
);
lp
->
rx_ring
[
i
].
status
=
le16_to_cpu
(
0x8000
);
}
}
/* The Tx buffer address is filled in as needed, but we do need to clear
/* The Tx buffer address is filled in as needed, but we do need to clear
...
@@ -1079,7 +1082,7 @@ pcnet32_tx_timeout (struct net_device *dev)
...
@@ -1079,7 +1082,7 @@ pcnet32_tx_timeout (struct net_device *dev)
pcnet32_restart
(
dev
,
0x0042
);
pcnet32_restart
(
dev
,
0x0042
);
dev
->
trans_start
=
jiffies
;
dev
->
trans_start
=
jiffies
;
netif_
start
_queue
(
dev
);
netif_
wake
_queue
(
dev
);
spin_unlock_irqrestore
(
&
lp
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
lp
->
lock
,
flags
);
}
}
...
@@ -1105,9 +1108,10 @@ pcnet32_start_xmit(struct sk_buff *skb, struct net_device *dev)
...
@@ -1105,9 +1108,10 @@ pcnet32_start_xmit(struct sk_buff *skb, struct net_device *dev)
* interrupt when that option is available to us.
* interrupt when that option is available to us.
*/
*/
status
=
0x8300
;
status
=
0x8300
;
entry
=
(
lp
->
cur_tx
-
lp
->
dirty_tx
)
&
TX_RING_MOD_MASK
;
if
((
lp
->
ltint
)
&&
if
((
lp
->
ltint
)
&&
((
lp
->
cur_tx
-
lp
->
dirty_tx
==
TX_RING_SIZE
/
2
)
||
((
entry
==
TX_RING_SIZE
/
2
)
||
(
lp
->
cur_tx
-
lp
->
dirty_tx
>=
TX_RING_SIZE
-
2
)))
(
entry
>=
TX_RING_SIZE
-
2
)))
{
{
/* Enable Successful-TxDone interrupt if we have
/* Enable Successful-TxDone interrupt if we have
* 1/2 of, or nearly all of, our ring buffer Tx'd
* 1/2 of, or nearly all of, our ring buffer Tx'd
...
@@ -1122,7 +1126,7 @@ pcnet32_start_xmit(struct sk_buff *skb, struct net_device *dev)
...
@@ -1122,7 +1126,7 @@ pcnet32_start_xmit(struct sk_buff *skb, struct net_device *dev)
/* Mask to ring buffer boundary. */
/* Mask to ring buffer boundary. */
entry
=
lp
->
cur_tx
&
TX_RING_MOD_MASK
;
entry
=
lp
->
cur_tx
&
TX_RING_MOD_MASK
;
/* Caution: the write order is important here, set the
base addres
s
/* Caution: the write order is important here, set the
statu
s
with the "ownership" bits last. */
with the "ownership" bits last. */
lp
->
tx_ring
[
entry
].
length
=
le16_to_cpu
(
-
skb
->
len
);
lp
->
tx_ring
[
entry
].
length
=
le16_to_cpu
(
-
skb
->
len
);
...
@@ -1144,7 +1148,7 @@ pcnet32_start_xmit(struct sk_buff *skb, struct net_device *dev)
...
@@ -1144,7 +1148,7 @@ pcnet32_start_xmit(struct sk_buff *skb, struct net_device *dev)
dev
->
trans_start
=
jiffies
;
dev
->
trans_start
=
jiffies
;
if
(
lp
->
tx_ring
[(
entry
+
1
)
&
TX_RING_MOD_MASK
].
base
==
0
)
if
(
lp
->
tx_ring
[(
entry
+
1
)
&
TX_RING_MOD_MASK
].
base
==
0
)
netif_
start
_queue
(
dev
);
netif_
wake
_queue
(
dev
);
else
{
else
{
lp
->
tx_full
=
1
;
lp
->
tx_full
=
1
;
netif_stop_queue
(
dev
);
netif_stop_queue
(
dev
);
...
@@ -1191,8 +1195,9 @@ pcnet32_interrupt(int irq, void *dev_id, struct pt_regs * regs)
...
@@ -1191,8 +1195,9 @@ pcnet32_interrupt(int irq, void *dev_id, struct pt_regs * regs)
if
(
csr0
&
0x0200
)
{
/* Tx-done interrupt */
if
(
csr0
&
0x0200
)
{
/* Tx-done interrupt */
unsigned
int
dirty_tx
=
lp
->
dirty_tx
;
unsigned
int
dirty_tx
=
lp
->
dirty_tx
;
int
delta
;
while
(
dirty_tx
<
lp
->
cur_tx
)
{
while
(
dirty_tx
!=
lp
->
cur_tx
)
{
int
entry
=
dirty_tx
&
TX_RING_MOD_MASK
;
int
entry
=
dirty_tx
&
TX_RING_MOD_MASK
;
int
status
=
(
short
)
le16_to_cpu
(
lp
->
tx_ring
[
entry
].
status
);
int
status
=
(
short
)
le16_to_cpu
(
lp
->
tx_ring
[
entry
].
status
);
...
@@ -1246,15 +1251,17 @@ pcnet32_interrupt(int irq, void *dev_id, struct pt_regs * regs)
...
@@ -1246,15 +1251,17 @@ pcnet32_interrupt(int irq, void *dev_id, struct pt_regs * regs)
dirty_tx
++
;
dirty_tx
++
;
}
}
if
(
lp
->
cur_tx
-
dirty_tx
>=
TX_RING_SIZE
)
{
delta
=
(
lp
->
cur_tx
-
dirty_tx
)
&
(
TX_RING_MOD_MASK
+
TX_RING_SIZE
);
if
(
delta
>=
TX_RING_SIZE
)
{
printk
(
KERN_ERR
"%s: out-of-sync dirty pointer, %d vs. %d, full=%d.
\n
"
,
printk
(
KERN_ERR
"%s: out-of-sync dirty pointer, %d vs. %d, full=%d.
\n
"
,
dev
->
name
,
dirty_tx
,
lp
->
cur_tx
,
lp
->
tx_full
);
dev
->
name
,
dirty_tx
,
lp
->
cur_tx
,
lp
->
tx_full
);
dirty_tx
+=
TX_RING_SIZE
;
dirty_tx
+=
TX_RING_SIZE
;
delta
-=
TX_RING_SIZE
;
}
}
if
(
lp
->
tx_full
&&
if
(
lp
->
tx_full
&&
netif_queue_stopped
(
dev
)
&&
netif_queue_stopped
(
dev
)
&&
d
irty_tx
>
lp
->
cur_tx
-
TX_RING_SIZE
+
2
)
{
d
elta
<
TX_RING_SIZE
-
2
)
{
/* The ring is no longer full, clear tbusy. */
/* The ring is no longer full, clear tbusy. */
lp
->
tx_full
=
0
;
lp
->
tx_full
=
0
;
netif_wake_queue
(
dev
);
netif_wake_queue
(
dev
);
...
@@ -1344,13 +1351,14 @@ pcnet32_rx(struct net_device *dev)
...
@@ -1344,13 +1351,14 @@ pcnet32_rx(struct net_device *dev)
if
((
newskb
=
dev_alloc_skb
(
PKT_BUF_SZ
)))
{
if
((
newskb
=
dev_alloc_skb
(
PKT_BUF_SZ
)))
{
skb_reserve
(
newskb
,
2
);
skb_reserve
(
newskb
,
2
);
skb
=
lp
->
rx_skbuff
[
entry
];
skb
=
lp
->
rx_skbuff
[
entry
];
pci_unmap_single
(
lp
->
pci_dev
,
lp
->
rx_dma_addr
[
entry
],
skb
->
len
,
PCI_DMA_FROMDEVICE
);
pci_unmap_single
(
lp
->
pci_dev
,
lp
->
rx_dma_addr
[
entry
],
PKT_BUF_SZ
-
2
,
PCI_DMA_FROMDEVICE
);
skb_put
(
skb
,
pkt_len
);
skb_put
(
skb
,
pkt_len
);
lp
->
rx_skbuff
[
entry
]
=
newskb
;
lp
->
rx_skbuff
[
entry
]
=
newskb
;
newskb
->
dev
=
dev
;
newskb
->
dev
=
dev
;
lp
->
rx_dma_addr
[
entry
]
=
lp
->
rx_dma_addr
[
entry
]
=
pci_map_single
(
lp
->
pci_dev
,
newskb
->
tail
,
pci_map_single
(
lp
->
pci_dev
,
newskb
->
tail
,
newskb
->
len
,
PCI_DMA_FROMDEVICE
);
PKT_BUF_SZ
-
2
,
PCI_DMA_FROMDEVICE
);
lp
->
rx_ring
[
entry
].
base
=
le32_to_cpu
(
lp
->
rx_dma_addr
[
entry
]);
lp
->
rx_ring
[
entry
].
base
=
le32_to_cpu
(
lp
->
rx_dma_addr
[
entry
]);
rx_in_place
=
1
;
rx_in_place
=
1
;
}
else
}
else
...
@@ -1379,7 +1387,7 @@ pcnet32_rx(struct net_device *dev)
...
@@ -1379,7 +1387,7 @@ pcnet32_rx(struct net_device *dev)
skb_put
(
skb
,
pkt_len
);
/* Make room */
skb_put
(
skb
,
pkt_len
);
/* Make room */
pci_dma_sync_single
(
lp
->
pci_dev
,
pci_dma_sync_single
(
lp
->
pci_dev
,
lp
->
rx_dma_addr
[
entry
],
lp
->
rx_dma_addr
[
entry
],
PKT_BUF_SZ
,
PKT_BUF_SZ
-
2
,
PCI_DMA_FROMDEVICE
);
PCI_DMA_FROMDEVICE
);
eth_copy_and_sum
(
skb
,
eth_copy_and_sum
(
skb
,
(
unsigned
char
*
)(
lp
->
rx_skbuff
[
entry
]
->
tail
),
(
unsigned
char
*
)(
lp
->
rx_skbuff
[
entry
]
->
tail
),
...
@@ -1396,7 +1404,7 @@ pcnet32_rx(struct net_device *dev)
...
@@ -1396,7 +1404,7 @@ pcnet32_rx(struct net_device *dev)
* The docs say that the buffer length isn't touched, but Andrew Boyd
* The docs say that the buffer length isn't touched, but Andrew Boyd
* of QNX reports that some revs of the 79C965 clear it.
* of QNX reports that some revs of the 79C965 clear it.
*/
*/
lp
->
rx_ring
[
entry
].
buf_length
=
le16_to_cpu
(
-
PKT_BUF_SZ
);
lp
->
rx_ring
[
entry
].
buf_length
=
le16_to_cpu
(
2
-
PKT_BUF_SZ
);
lp
->
rx_ring
[
entry
].
status
|=
le16_to_cpu
(
0x8000
);
lp
->
rx_ring
[
entry
].
status
|=
le16_to_cpu
(
0x8000
);
entry
=
(
++
lp
->
cur_rx
)
&
RX_RING_MOD_MASK
;
entry
=
(
++
lp
->
cur_rx
)
&
RX_RING_MOD_MASK
;
}
}
...
@@ -1436,7 +1444,8 @@ pcnet32_close(struct net_device *dev)
...
@@ -1436,7 +1444,8 @@ pcnet32_close(struct net_device *dev)
for
(
i
=
0
;
i
<
RX_RING_SIZE
;
i
++
)
{
for
(
i
=
0
;
i
<
RX_RING_SIZE
;
i
++
)
{
lp
->
rx_ring
[
i
].
status
=
0
;
lp
->
rx_ring
[
i
].
status
=
0
;
if
(
lp
->
rx_skbuff
[
i
])
{
if
(
lp
->
rx_skbuff
[
i
])
{
pci_unmap_single
(
lp
->
pci_dev
,
lp
->
rx_dma_addr
[
i
],
lp
->
rx_skbuff
[
i
]
->
len
,
PCI_DMA_FROMDEVICE
);
pci_unmap_single
(
lp
->
pci_dev
,
lp
->
rx_dma_addr
[
i
],
PKT_BUF_SZ
-
2
,
PCI_DMA_FROMDEVICE
);
dev_kfree_skb
(
lp
->
rx_skbuff
[
i
]);
dev_kfree_skb
(
lp
->
rx_skbuff
[
i
]);
}
}
lp
->
rx_skbuff
[
i
]
=
NULL
;
lp
->
rx_skbuff
[
i
]
=
NULL
;
...
@@ -1625,12 +1634,18 @@ static int pcnet32_ethtool_ioctl (struct net_device *dev, void *useraddr)
...
@@ -1625,12 +1634,18 @@ static int pcnet32_ethtool_ioctl (struct net_device *dev, void *useraddr)
}
}
/* restart autonegotiation */
/* restart autonegotiation */
case
ETHTOOL_NWAY_RST
:
{
case
ETHTOOL_NWAY_RST
:
{
return
mii_nway_restart
(
&
lp
->
mii_if
);
int
r
;
spin_lock_irq
(
&
lp
->
lock
);
r
=
mii_nway_restart
(
&
lp
->
mii_if
);
spin_unlock_irq
(
&
lp
->
lock
);
return
r
;
}
}
/* get link status */
/* get link status */
case
ETHTOOL_GLINK
:
{
case
ETHTOOL_GLINK
:
{
struct
ethtool_value
edata
=
{
ETHTOOL_GLINK
};
struct
ethtool_value
edata
=
{
ETHTOOL_GLINK
};
spin_lock_irq
(
&
lp
->
lock
);
edata
.
data
=
mii_link_ok
(
&
lp
->
mii_if
);
edata
.
data
=
mii_link_ok
(
&
lp
->
mii_if
);
spin_unlock_irq
(
&
lp
->
lock
);
if
(
copy_to_user
(
useraddr
,
&
edata
,
sizeof
(
edata
)))
if
(
copy_to_user
(
useraddr
,
&
edata
,
sizeof
(
edata
)))
return
-
EFAULT
;
return
-
EFAULT
;
return
0
;
return
0
;
...
@@ -1661,45 +1676,37 @@ static int pcnet32_ethtool_ioctl (struct net_device *dev, void *useraddr)
...
@@ -1661,45 +1676,37 @@ static int pcnet32_ethtool_ioctl (struct net_device *dev, void *useraddr)
static
int
pcnet32_ioctl
(
struct
net_device
*
dev
,
struct
ifreq
*
rq
,
int
cmd
)
static
int
pcnet32_ioctl
(
struct
net_device
*
dev
,
struct
ifreq
*
rq
,
int
cmd
)
{
{
unsigned
long
ioaddr
=
dev
->
base_addr
;
struct
pcnet32_private
*
lp
=
dev
->
priv
;
struct
pcnet32_private
*
lp
=
dev
->
priv
;
struct
mii_ioctl_data
*
data
=
(
struct
mii_ioctl_data
*
)
&
rq
->
ifr_data
;
struct
mii_ioctl_data
*
data
=
(
struct
mii_ioctl_data
*
)
&
rq
->
ifr_data
;
int
phyaddr
=
lp
->
a
.
read_bcr
(
ioaddr
,
33
);
int
rc
;
unsigned
long
flags
;
if
(
cmd
==
SIOCETHTOOL
)
if
(
cmd
==
SIOCETHTOOL
)
return
pcnet32_ethtool_ioctl
(
dev
,
(
void
*
)
rq
->
ifr_data
);
return
pcnet32_ethtool_ioctl
(
dev
,
(
void
*
)
rq
->
ifr_data
);
/* SIOC[GS]MIIxxx ioctls */
if
(
lp
->
mii
)
{
if
(
lp
->
mii
)
{
switch
(
cmd
)
{
spin_lock_irqsave
(
&
lp
->
lock
,
flags
);
case
SIOCGMIIPHY
:
/* Get address of MII PHY in use. */
rc
=
generic_mii_ioctl
(
&
lp
->
mii_if
,
data
,
cmd
,
NULL
);
data
->
phy_id
=
(
phyaddr
>>
5
)
&
0x1f
;
spin_unlock_irqrestore
(
&
lp
->
lock
,
flags
);
/* Fall Through */
}
else
{
case
SIOCGMIIREG
:
/* Read MII PHY register. */
rc
=
-
EOPNOTSUPP
;
lp
->
a
.
write_bcr
(
ioaddr
,
33
,
((
data
->
phy_id
&
0x1f
)
<<
5
)
|
(
data
->
reg_num
&
0x1f
));
data
->
val_out
=
lp
->
a
.
read_bcr
(
ioaddr
,
34
);
lp
->
a
.
write_bcr
(
ioaddr
,
33
,
phyaddr
);
return
0
;
case
SIOCSMIIREG
:
/* Write MII PHY register. */
if
(
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
lp
->
a
.
write_bcr
(
ioaddr
,
33
,
((
data
->
phy_id
&
0x1f
)
<<
5
)
|
(
data
->
reg_num
&
0x1f
));
lp
->
a
.
write_bcr
(
ioaddr
,
34
,
data
->
val_in
);
lp
->
a
.
write_bcr
(
ioaddr
,
33
,
phyaddr
);
return
0
;
default:
return
-
EOPNOTSUPP
;
}
}
}
return
-
EOPNOTSUPP
;
return
rc
;
}
}
static
void
pcnet32_watchdog
(
struct
net_device
*
dev
)
static
void
pcnet32_watchdog
(
struct
net_device
*
dev
)
{
{
struct
pcnet32_private
*
lp
=
dev
->
priv
;
struct
pcnet32_private
*
lp
=
dev
->
priv
;
unsigned
long
flags
;
/* Print the link status if it has changed */
/* Print the link status if it has changed */
if
(
lp
->
mii
)
if
(
lp
->
mii
)
{
spin_lock_irqsave
(
&
lp
->
lock
,
flags
);
mii_check_media
(
&
lp
->
mii_if
,
1
,
0
);
mii_check_media
(
&
lp
->
mii_if
,
1
,
0
);
spin_unlock_irqrestore
(
&
lp
->
lock
,
flags
);
}
mod_timer
(
&
(
lp
->
watchdog_timer
),
PCNET32_WATCHDOG_TIMEOUT
);
mod_timer
(
&
(
lp
->
watchdog_timer
),
PCNET32_WATCHDOG_TIMEOUT
);
}
}
...
...
drivers/net/sis190.c
View file @
5b4f4d19
...
@@ -954,8 +954,7 @@ static void
...
@@ -954,8 +954,7 @@ static void
SiS190_tx_interrupt
(
struct
net_device
*
dev
,
struct
sis190_private
*
tp
,
SiS190_tx_interrupt
(
struct
net_device
*
dev
,
struct
sis190_private
*
tp
,
void
*
ioaddr
)
void
*
ioaddr
)
{
{
unsigned
long
dirty_tx
,
tx_left
=
0
;
unsigned
long
dirty_tx
,
tx_left
;
int
entry
=
tp
->
cur_tx
%
NUM_TX_DESC
;
assert
(
dev
!=
NULL
);
assert
(
dev
!=
NULL
);
assert
(
tp
!=
NULL
);
assert
(
tp
!=
NULL
);
...
@@ -965,6 +964,8 @@ SiS190_tx_interrupt(struct net_device *dev, struct sis190_private *tp,
...
@@ -965,6 +964,8 @@ SiS190_tx_interrupt(struct net_device *dev, struct sis190_private *tp,
tx_left
=
tp
->
cur_tx
-
dirty_tx
;
tx_left
=
tp
->
cur_tx
-
dirty_tx
;
while
(
tx_left
>
0
)
{
while
(
tx_left
>
0
)
{
int
entry
=
dirty_tx
%
NUM_TX_DESC
;
if
((
le32_to_cpu
(
tp
->
TxDescArray
[
entry
].
status
)
&
OWNbit
)
==
0
)
{
if
((
le32_to_cpu
(
tp
->
TxDescArray
[
entry
].
status
)
&
OWNbit
)
==
0
)
{
struct
sk_buff
*
skb
;
struct
sk_buff
*
skb
;
...
@@ -980,7 +981,6 @@ SiS190_tx_interrupt(struct net_device *dev, struct sis190_private *tp,
...
@@ -980,7 +981,6 @@ SiS190_tx_interrupt(struct net_device *dev, struct sis190_private *tp,
tp
->
stats
.
tx_packets
++
;
tp
->
stats
.
tx_packets
++
;
dirty_tx
++
;
dirty_tx
++
;
tx_left
--
;
tx_left
--
;
entry
++
;
}
}
}
}
...
...
drivers/net/sis900.c
View file @
5b4f4d19
...
@@ -2093,7 +2093,7 @@ static void set_rx_mode(struct net_device *net_dev)
...
@@ -2093,7 +2093,7 @@ static void set_rx_mode(struct net_device *net_dev)
i
++
,
mclist
=
mclist
->
next
)
{
i
++
,
mclist
=
mclist
->
next
)
{
unsigned
int
bit_nr
=
unsigned
int
bit_nr
=
sis900_mcast_bitnr
(
mclist
->
dmi_addr
,
revision
);
sis900_mcast_bitnr
(
mclist
->
dmi_addr
,
revision
);
mc_filter
[
bit_nr
>>
4
]
|=
(
1
<<
bit_nr
);
mc_filter
[
bit_nr
>>
4
]
|=
(
1
<<
(
bit_nr
&
0xf
)
);
}
}
}
}
...
...
drivers/net/sk98lin/h/lm80.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: lm80.h
* Name: lm80.h
* Project: Gigabit Ethernet Adapters, Common Modules
* Project: Gigabit Ethernet Adapters, Common Modules
* Version: $Revision: 1.6 $
* Date: $Date: 2003/05/13 17:26:52 $
* Purpose: Contains all defines for the LM80 Chip
* Purpose: Contains all defines for the LM80 Chip
* (National Semiconductor).
* (National Semiconductor).
*
*
...
...
drivers/net/sk98lin/h/skaddr.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skaddr.h
* Name: skaddr.h
* Project: Gigabit Ethernet Adapters, ADDR-Modul
* Project: Gigabit Ethernet Adapters, ADDR-Modul
* Version: $Revision: 1.29 $
* Date: $Date: 2003/05/13 16:57:24 $
* Purpose: Header file for Address Management (MC, UC, Prom).
* Purpose: Header file for Address Management (MC, UC, Prom).
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skcsum.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skcsum.h
* Name: skcsum.h
* Project: GEnesis - SysKonnect SK-NET Gigabit Ethernet (SK-98xx)
* Project: GEnesis - SysKonnect SK-NET Gigabit Ethernet (SK-98xx)
* Version: $Revision: 1.10 $
* Date: $Date: 2003/08/20 13:59:57 $
* Purpose: Store/verify Internet checksum in send/receive packets.
* Purpose: Store/verify Internet checksum in send/receive packets.
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skdebug.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skdebug.h
* Name: skdebug.h
* Project: Gigabit Ethernet Adapters, Common Modules
* Project: Gigabit Ethernet Adapters, Common Modules
* Version: $Revision: 1.14 $
* Date: $Date: 2003/05/13 17:26:00 $
* Purpose: SK specific DEBUG support
* Purpose: SK specific DEBUG support
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skdrv1st.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skdrv1st.h
* Name: skdrv1st.h
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.4 $
* Date: $Date: 2003/11/12 14:28:14 $
* Purpose: First header file for driver and all other modules
* Purpose: First header file for driver and all other modules
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skdrv2nd.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skdrv2nd.h
* Name: skdrv2nd.h
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.10 $
* Date: $Date: 2003/12/11 16:04:45 $
* Purpose: Second header file for driver and all other modules
* Purpose: Second header file for driver and all other modules
*
*
******************************************************************************/
******************************************************************************/
...
@@ -76,7 +78,13 @@
...
@@ -76,7 +78,13 @@
/* Marvell (0x11ab) */
\
/* Marvell (0x11ab) */
\
} else if (pdev->vendor == 0x11ab) { \
} else if (pdev->vendor == 0x11ab) { \
/* Gigabit Ethernet Adapter (0x4320) */
\
/* Gigabit Ethernet Adapter (0x4320) */
\
if ((pdev->device == 0x4320)) { \
/* Gigabit Ethernet Adapter (0x4360) */
\
/* Gigabit Ethernet Adapter (0x4361) */
\
/* Belkin (0x5005) */
\
if ((pdev->device == 0x4320) || \
(pdev->device == 0x4360) || \
(pdev->device == 0x4361) || \
(pdev->device == 0x5005)) { \
result = SK_TRUE; \
result = SK_TRUE; \
} \
} \
/* CNet (0x1371) */
\
/* CNet (0x1371) */
\
...
...
drivers/net/sk98lin/h/skerror.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skerror.h
* Name: skerror.h
* Project: Gigabit Ethernet Adapters, Common Modules
* Project: Gigabit Ethernet Adapters, Common Modules
* Version: $Revision: 1.7 $
* Date: $Date: 2003/05/13 17:25:13 $
* Purpose: SK specific Error log support
* Purpose: SK specific Error log support
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skgedrv.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgedrv.h
* Name: skgedrv.h
* Project: Gigabit Ethernet Adapters, Common Modules
* Project: Gigabit Ethernet Adapters, Common Modules
* Version: $Revision: 1.10 $
* Date: $Date: 2003/07/04 12:25:01 $
* Purpose: Interface with the driver
* Purpose: Interface with the driver
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skgehw.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgehw.h
* Name: skgehw.h
* Project: Gigabit Ethernet Adapters, Common Modules
* Project: Gigabit Ethernet Adapters, Common Modules
* Version: $Revision: 1.56 $
* Date: $Date: 2003/09/23 09:01:00 $
* Purpose: Defines and Macros for the Gigabit Ethernet Adapter Product Family
* Purpose: Defines and Macros for the Gigabit Ethernet Adapter Product Family
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skgehwt.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skhwt.h
* Name: skhwt.h
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Version: $Revision: 1.7 $
* Date: $Date: 2003/09/16 12:55:08 $
* Purpose: Defines for the hardware timer functions
* Purpose: Defines for the hardware timer functions
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skgei2c.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgei2c.h
* Name: skgei2c.h
* Project: Gigabit Ethernet Adapters, TWSI-Module
* Project: Gigabit Ethernet Adapters, TWSI-Module
* Version: $Revision: 1.25 $
* Date: $Date: 2003/10/20 09:06:05 $
* Purpose: Special defines for TWSI
* Purpose: Special defines for TWSI
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skgeinit.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgeinit.h
* Name: skgeinit.h
* Project: Gigabit Ethernet Adapters, Common Modules
* Project: Gigabit Ethernet Adapters, Common Modules
* Version: $Revision: 1.83 $
* Date: $Date: 2003/09/16 14:07:37 $
* Purpose: Structures and prototypes for the GE Init Module
* Purpose: Structures and prototypes for the GE Init Module
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skgepnm2.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgepnm2.h
* Name: skgepnm2.h
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.36 $
* Date: $Date: 2003/05/23 12:45:13 $
* Purpose: Defines for Private Network Management Interface
* Purpose: Defines for Private Network Management Interface
*
*
****************************************************************************/
****************************************************************************/
...
...
drivers/net/sk98lin/h/skgepnmi.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgepnmi.h
* Name: skgepnmi.h
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.62 $
* Date: $Date: 2003/08/15 12:31:52 $
* Purpose: Defines for Private Network Management Interface
* Purpose: Defines for Private Network Management Interface
*
*
****************************************************************************/
****************************************************************************/
...
...
drivers/net/sk98lin/h/skgesirq.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgesirq.h
* Name: skgesirq.h
* Project: Gigabit Ethernet Adapters, Common Modules
* Project: Gigabit Ethernet Adapters, Common Modules
* Version: $Revision: 1.30 $
* Date: $Date: 2003/07/04 12:34:13 $
* Purpose: SK specific Gigabit Ethernet special IRQ functions
* Purpose: SK specific Gigabit Ethernet special IRQ functions
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/ski2c.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: ski2c.h
* Name: ski2c.h
* Project: Gigabit Ethernet Adapters, TWSI-Module
* Project: Gigabit Ethernet Adapters, TWSI-Module
* Version: $Revision: 1.35 $
* Date: $Date: 2003/10/20 09:06:30 $
* Purpose: Defines to access Voltage and Temperature Sensor
* Purpose: Defines to access Voltage and Temperature Sensor
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skqueue.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skqueue.h
* Name: skqueue.h
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Version: $Revision: 1.16 $
* Date: $Date: 2003/09/16 12:50:32 $
* Purpose: Defines for the Event queue
* Purpose: Defines for the Event queue
*
*
******************************************************************************/
******************************************************************************/
...
@@ -20,6 +22,10 @@
...
@@ -20,6 +22,10 @@
*
*
******************************************************************************/
******************************************************************************/
/*
* SKQUEUE.H contains all defines and types for the event queue
*/
#ifndef _SKQUEUE_H_
#ifndef _SKQUEUE_H_
#define _SKQUEUE_H_
#define _SKQUEUE_H_
...
...
drivers/net/sk98lin/h/skrlmt.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skrlmt.h
* Name: skrlmt.h
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.37 $
* Date: $Date: 2003/04/15 09:43:43 $
* Purpose: Header file for Redundant Link ManagemenT.
* Purpose: Header file for Redundant Link ManagemenT.
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/sktimer.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: sktimer.h
* Name: sktimer.h
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Version: $Revision: 1.11 $
* Date: $Date: 2003/09/16 12:58:18 $
* Purpose: Defines for the timer functions
* Purpose: Defines for the timer functions
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/sktypes.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: sktypes.h
* Name: sktypes.h
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.2 $
* Date: $Date: 2003/10/07 08:16:51 $
* Purpose: Define data types for Linux
* Purpose: Define data types for Linux
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/skversion.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: version.h
* Name: version.h
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.5 $
* Date: $Date: 2003/10/07 08:16:51 $
* Purpose: SK specific Error log support
* Purpose: SK specific Error log support
*
*
******************************************************************************/
******************************************************************************/
...
@@ -23,14 +25,14 @@
...
@@ -23,14 +25,14 @@
#ifdef lint
#ifdef lint
static
const
char
SysKonnectFileId
[]
=
"@(#) (C) SysKonnect GmbH."
;
static
const
char
SysKonnectFileId
[]
=
"@(#) (C) SysKonnect GmbH."
;
static
const
char
SysKonnectBuildNumber
[]
=
static
const
char
SysKonnectBuildNumber
[]
=
"@(#)SK-BUILD: 6.2
2
PL: 01"
;
"@(#)SK-BUILD: 6.2
3
PL: 01"
;
#endif
/* !defined(lint) */
#endif
/* !defined(lint) */
#define BOOT_STRING "sk98lin: Network Device Driver v6.2
2
\n" \
#define BOOT_STRING "sk98lin: Network Device Driver v6.2
3
\n" \
"(C)Copyright 1999-2004 Marvell(R)."
"(C)Copyright 1999-2004 Marvell(R)."
#define VER_STRING "6.2
2
"
#define VER_STRING "6.2
3
"
#define DRIVER_FILE_NAME "sk98lin"
#define DRIVER_FILE_NAME "sk98lin"
#define DRIVER_REL_DATE "
Jan-30
-2004"
#define DRIVER_REL_DATE "
Feb-13
-2004"
drivers/net/sk98lin/h/skvpd.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skvpd.h
* Name: skvpd.h
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.15 $
* Date: $Date: 2003/01/13 10:39:38 $
* Purpose: Defines and Macros for VPD handling
* Purpose: Defines and Macros for VPD handling
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/h/xmac_ii.h
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: xmac_ii.h
* Name: xmac_ii.h
* Project: Gigabit Ethernet Adapters, Common Modules
* Project: Gigabit Ethernet Adapters, Common Modules
* Version: $Revision: 1.52 $
* Date: $Date: 2003/10/02 16:35:50 $
* Purpose: Defines and Macros for Gigabit Ethernet Controller
* Purpose: Defines and Macros for Gigabit Ethernet Controller
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/skaddr.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skaddr.c
* Name: skaddr.c
* Project: Gigabit Ethernet Adapters, ADDR-Module
* Project: Gigabit Ethernet Adapters, ADDR-Module
* Version: $Revision: 1.52 $
* Date: $Date: 2003/06/02 13:46:15 $
* Purpose: Manage Addresses (Multicast and Unicast) and Promiscuous Mode.
* Purpose: Manage Addresses (Multicast and Unicast) and Promiscuous Mode.
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/skcsum.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skcsum.c
* Name: skcsum.c
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.12 $
* Date: $Date: 2003/08/20 13:55:53 $
* Purpose: Store/verify Internet checksum in send/receive packets.
* Purpose: Store/verify Internet checksum in send/receive packets.
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/skdim.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skdim.c
* Name: skdim.c
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.5 $
* Date: $Date: 2003/11/28 12:55:40 $
* Purpose: All functions to maintain interrupt moderation
* Purpose: All functions to maintain interrupt moderation
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/skge.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skge.c
* Name: skge.c
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.45 $
* Date: $Date: 2004/02/12 14:41:02 $
* Purpose: The main driver source module
* Purpose: The main driver source module
*
*
******************************************************************************/
******************************************************************************/
...
@@ -294,7 +296,6 @@ static int __init skge_probe (void)
...
@@ -294,7 +296,6 @@ static int __init skge_probe (void)
SK_BOOL
BootStringCount
=
SK_FALSE
;
SK_BOOL
BootStringCount
=
SK_FALSE
;
int
retval
;
int
retval
;
#ifdef CONFIG_PROC_FS
#ifdef CONFIG_PROC_FS
int
proc_root_initialized
=
0
;
struct
proc_dir_entry
*
pProcFile
;
struct
proc_dir_entry
*
pProcFile
;
#endif
#endif
...
@@ -311,6 +312,12 @@ static int __init skge_probe (void)
...
@@ -311,6 +312,12 @@ static int __init skge_probe (void)
dev
=
NULL
;
dev
=
NULL
;
pNet
=
NULL
;
pNet
=
NULL
;
/* Don't handle Yukon2 cards at the moment */
/* 12-feb-2004 ---- mlindner@syskonnect.de */
if
(
pdev
->
vendor
==
0x11ab
)
{
if
(
(
pdev
->
device
==
0x4360
)
||
(
pdev
->
device
==
0x4361
)
)
continue
;
}
SK_PCI_ISCOMPLIANT
(
vendor_flag
,
pdev
);
SK_PCI_ISCOMPLIANT
(
vendor_flag
,
pdev
);
if
(
!
vendor_flag
)
if
(
!
vendor_flag
)
...
...
drivers/net/sk98lin/skgehwt.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgehwt.c
* Name: skgehwt.c
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Version: $Revision: 1.15 $
* Date: $Date: 2003/09/16 13:41:23 $
* Purpose: Hardware Timer
* Purpose: Hardware Timer
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/skgeinit.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgeinit.c
* Name: skgeinit.c
* Project: Gigabit Ethernet Adapters, Common Modules
* Project: Gigabit Ethernet Adapters, Common Modules
* Version: $Revision: 1.97 $
* Date: $Date: 2003/10/02 16:45:31 $
* Purpose: Contains functions to initialize the adapter
* Purpose: Contains functions to initialize the adapter
*
*
******************************************************************************/
******************************************************************************/
...
@@ -20,7 +22,6 @@
...
@@ -20,7 +22,6 @@
*
*
******************************************************************************/
******************************************************************************/
#include "h/skdrv1st.h"
#include "h/skdrv1st.h"
#include "h/skdrv2nd.h"
#include "h/skdrv2nd.h"
...
...
drivers/net/sk98lin/skgemib.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgemib.c
* Name: skgemib.c
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.11 $
* Date: $Date: 2003/09/15 13:38:12 $
* Purpose: Private Network Management Interface Management Database
* Purpose: Private Network Management Interface Management Database
*
*
****************************************************************************/
****************************************************************************/
...
...
drivers/net/sk98lin/skgepnmi.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgepnmi.c
* Name: skgepnmi.c
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.111 $
* Date: $Date: 2003/09/15 13:35:35 $
* Purpose: Private Network Management Interface
* Purpose: Private Network Management Interface
*
*
****************************************************************************/
****************************************************************************/
...
@@ -20,6 +22,7 @@
...
@@ -20,6 +22,7 @@
*
*
******************************************************************************/
******************************************************************************/
#ifndef _lint
#ifndef _lint
static
const
char
SysKonnectFileId
[]
=
static
const
char
SysKonnectFileId
[]
=
"@(#) $Id: skgepnmi.c,v 1.111 2003/09/15 13:35:35 tschilli Exp $ (C) Marvell."
;
"@(#) $Id: skgepnmi.c,v 1.111 2003/09/15 13:35:35 tschilli Exp $ (C) Marvell."
;
...
...
drivers/net/sk98lin/skgesirq.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skgesirq.c
* Name: skgesirq.c
* Project: Gigabit Ethernet Adapters, Common Modules
* Project: Gigabit Ethernet Adapters, Common Modules
* Version: $Revision: 1.92 $
* Date: $Date: 2003/09/16 14:37:07 $
* Purpose: Special IRQ module
* Purpose: Special IRQ module
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/ski2c.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: ski2c.c
* Name: ski2c.c
* Project: Gigabit Ethernet Adapters, TWSI-Module
* Project: Gigabit Ethernet Adapters, TWSI-Module
* Version: $Revision: 1.59 $
* Date: $Date: 2003/10/20 09:07:25 $
* Purpose: Functions to access Voltage and Temperature Sensor
* Purpose: Functions to access Voltage and Temperature Sensor
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/sklm80.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: sklm80.c
* Name: sklm80.c
* Project: Gigabit Ethernet Adapters, TWSI-Module
* Project: Gigabit Ethernet Adapters, TWSI-Module
* Version: $Revision: 1.22 $
* Date: $Date: 2003/10/20 09:08:21 $
* Purpose: Functions to access Voltage and Temperature Sensor (LM80)
* Purpose: Functions to access Voltage and Temperature Sensor (LM80)
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/skproc.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skproc.c
* Name: skproc.c
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.11 $
* Date: $Date: 2003/12/11 16:03:57 $
* Purpose: Funktions to display statictic data
* Purpose: Funktions to display statictic data
*
*
******************************************************************************/
******************************************************************************/
...
@@ -22,7 +24,6 @@
...
@@ -22,7 +24,6 @@
* The information in this file is provided "AS IS" without warranty.
* The information in this file is provided "AS IS" without warranty.
*
*
******************************************************************************/
******************************************************************************/
#include <linux/proc_fs.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/seq_file.h>
...
...
drivers/net/sk98lin/skqueue.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skqueue.c
* Name: skqueue.c
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Version: $Revision: 1.20 $
* Date: $Date: 2003/09/16 13:44:00 $
* Purpose: Management of an event queue.
* Purpose: Management of an event queue.
*
*
******************************************************************************/
******************************************************************************/
...
@@ -20,6 +22,7 @@
...
@@ -20,6 +22,7 @@
*
*
******************************************************************************/
******************************************************************************/
/*
/*
* Event queue and dispatcher
* Event queue and dispatcher
*/
*/
...
...
drivers/net/sk98lin/skrlmt.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skrlmt.c
* Name: skrlmt.c
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.69 $
* Date: $Date: 2003/04/15 09:39:22 $
* Purpose: Manage links on SK-NET Adapters, esp. redundant ones.
* Purpose: Manage links on SK-NET Adapters, esp. redundant ones.
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/sktimer.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: sktimer.c
* Name: sktimer.c
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Project: Gigabit Ethernet Adapters, Event Scheduler Module
* Version: $Revision: 1.14 $
* Date: $Date: 2003/09/16 13:46:51 $
* Purpose: High level timer functions.
* Purpose: High level timer functions.
*
*
******************************************************************************/
******************************************************************************/
...
@@ -20,6 +22,7 @@
...
@@ -20,6 +22,7 @@
*
*
******************************************************************************/
******************************************************************************/
/*
/*
* Event queue and dispatcher
* Event queue and dispatcher
*/
*/
...
...
drivers/net/sk98lin/skvpd.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skvpd.c
* Name: skvpd.c
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Project: GEnesis, PCI Gigabit Ethernet Adapter
* Version: $Revision: 1.37 $
* Date: $Date: 2003/01/13 10:42:45 $
* Purpose: Shared software to read and write VPD data
* Purpose: Shared software to read and write VPD data
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/sk98lin/skxmac2.c
View file @
5b4f4d19
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
*
*
* Name: skxmac2.c
* Name: skxmac2.c
* Project: Gigabit Ethernet Adapters, Common Modules
* Project: Gigabit Ethernet Adapters, Common Modules
* Version: $Revision: 1.102 $
* Date: $Date: 2003/10/02 16:53:58 $
* Purpose: Contains functions to initialize the MACs and PHYs
* Purpose: Contains functions to initialize the MACs and PHYs
*
*
******************************************************************************/
******************************************************************************/
...
...
drivers/net/tokenring/3c359.c
View file @
5b4f4d19
...
@@ -641,7 +641,20 @@ static int xl_open(struct net_device *dev)
...
@@ -641,7 +641,20 @@ static int xl_open(struct net_device *dev)
*/
*/
/* These MUST be on 8 byte boundaries */
/* These MUST be on 8 byte boundaries */
xl_priv
->
xl_tx_ring
=
kmalloc
((
sizeof
(
struct
xl_tx_desc
)
*
XL_TX_RING_SIZE
)
+
7
,
GFP_DMA
|
GFP_KERNEL
)
;
xl_priv
->
xl_tx_ring
=
kmalloc
((
sizeof
(
struct
xl_tx_desc
)
*
XL_TX_RING_SIZE
)
+
7
,
GFP_DMA
|
GFP_KERNEL
)
;
if
(
xl_priv
->
xl_tx_ring
==
NULL
)
{
printk
(
KERN_WARNING
"%s: Not enough memory to allocate rx buffers.
\n
"
,
dev
->
name
);
free_irq
(
dev
->
irq
,
dev
);
return
-
ENOMEM
;
}
xl_priv
->
xl_rx_ring
=
kmalloc
((
sizeof
(
struct
xl_rx_desc
)
*
XL_RX_RING_SIZE
)
+
7
,
GFP_DMA
|
GFP_KERNEL
)
;
xl_priv
->
xl_rx_ring
=
kmalloc
((
sizeof
(
struct
xl_rx_desc
)
*
XL_RX_RING_SIZE
)
+
7
,
GFP_DMA
|
GFP_KERNEL
)
;
if
(
xl_priv
->
xl_tx_ring
==
NULL
)
{
printk
(
KERN_WARNING
"%s: Not enough memory to allocate rx buffers.
\n
"
,
dev
->
name
);
free_irq
(
dev
->
irq
,
dev
);
kfree
(
xl_priv
->
xl_tx_ring
);
return
-
ENOMEM
;
}
memset
(
xl_priv
->
xl_tx_ring
,
0
,
sizeof
(
struct
xl_tx_desc
)
*
XL_TX_RING_SIZE
)
;
memset
(
xl_priv
->
xl_tx_ring
,
0
,
sizeof
(
struct
xl_tx_desc
)
*
XL_TX_RING_SIZE
)
;
memset
(
xl_priv
->
xl_rx_ring
,
0
,
sizeof
(
struct
xl_rx_desc
)
*
XL_RX_RING_SIZE
)
;
memset
(
xl_priv
->
xl_rx_ring
,
0
,
sizeof
(
struct
xl_rx_desc
)
*
XL_RX_RING_SIZE
)
;
...
...
drivers/net/tulip/interrupt.c
View file @
5b4f4d19
...
@@ -211,10 +211,10 @@ int tulip_poll(struct net_device *dev, int *budget)
...
@@ -211,10 +211,10 @@ int tulip_poll(struct net_device *dev, int *budget)
if
(
tp
->
rx_buffers
[
entry
].
mapping
!=
if
(
tp
->
rx_buffers
[
entry
].
mapping
!=
le32_to_cpu
(
tp
->
rx_ring
[
entry
].
buffer1
))
{
le32_to_cpu
(
tp
->
rx_ring
[
entry
].
buffer1
))
{
printk
(
KERN_ERR
"%s: Internal fault: The skbuff addresses "
printk
(
KERN_ERR
"%s: Internal fault: The skbuff addresses "
"do not match in tulip_rx: %08x vs. %
08
x %p / %p.
\n
"
,
"do not match in tulip_rx: %08x vs. %
ll
x %p / %p.
\n
"
,
dev
->
name
,
dev
->
name
,
le32_to_cpu
(
tp
->
rx_ring
[
entry
].
buffer1
),
le32_to_cpu
(
tp
->
rx_ring
[
entry
].
buffer1
),
tp
->
rx_buffers
[
entry
].
mapping
,
(
unsigned
long
long
)
tp
->
rx_buffers
[
entry
].
mapping
,
skb
->
head
,
temp
);
skb
->
head
,
temp
);
}
}
#endif
#endif
...
...
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