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
0c83531d
Commit
0c83531d
authored
Oct 11, 2002
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge luckyluke.devel.redhat.com:/mnt/cvs/BK/linus-2.5
into mandrakesoft.com:/home/jgarzik/repo/net-drivers-2.5
parents
5b3e7241
b24fa762
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
235 additions
and
38 deletions
+235
-38
Documentation/networking/ewrk3.txt
Documentation/networking/ewrk3.txt
+1
-0
drivers/net/3c509.c
drivers/net/3c509.c
+171
-11
drivers/net/ewrk3.c
drivers/net/ewrk3.c
+61
-25
drivers/net/mii.c
drivers/net/mii.c
+1
-1
drivers/net/tokenring/tmspci.c
drivers/net/tokenring/tmspci.c
+1
-1
No files found.
Documentation/networking/ewrk3.txt
View file @
0c83531d
...
...
@@ -24,6 +24,7 @@ sequences). To utilise this ability, you have to do 8 things:
kernel with the ewrk3 configuration turned off and reboot.
5) insmod ewrk3.o
[Alan Cox: Changed this so you can insmod ewrk3.o irq=x io=y]
[Adam Kropelin: Multiple cards now supported by irq=x1,x2 io=y1,y2]
6) run the net startup bits for your new eth?? interface manually
(usually /etc/rc.inet[12] at boot time).
7) enjoy!
...
...
drivers/net/3c509.c
View file @
0c83531d
...
...
@@ -49,11 +49,13 @@
- Power Management support
v1.18c 1Mar2002 David Ruggiero <jdr@farfalle.com>
- Full duplex support
v1.19 16Oct2002 Zwane Mwaikambo <zwane@linuxpower.ca>
- Additional ethtool features
*/
#define DRV_NAME "3c509"
#define DRV_VERSION "1.1
8c
"
#define DRV_RELDATE "1
Mar
2002"
#define DRV_VERSION "1.1
9
"
#define DRV_RELDATE "1
6Oct
2002"
/* A few values that may be tweaked. */
...
...
@@ -140,6 +142,8 @@ enum RxFilter {
#define TX_STATUS 0x0B
#define TX_FREE 0x0C
/* Remaining free bytes in Tx buffer. */
#define WN0_CONF_CTRL 0x04
/* Window 0: Configuration control register */
#define WN0_ADDR_CONF 0x06
/* Window 0: Address configuration register */
#define WN0_IRQ 0x08
/* Window 0: Set IRQ line in bits 12-15. */
#define WN4_MEDIA 0x0A
/* Window 4: Various transcvr/media bits. */
#define MEDIA_TP 0x00C0
/* Enable link beat and jabber for 10baseT. */
...
...
@@ -981,6 +985,119 @@ el3_close(struct net_device *dev)
return
0
;
}
static
int
el3_link_ok
(
struct
net_device
*
dev
)
{
int
ioaddr
=
dev
->
base_addr
;
u16
tmp
;
EL3WINDOW
(
4
);
tmp
=
inw
(
ioaddr
+
WN4_MEDIA
);
EL3WINDOW
(
1
);
return
tmp
&
(
1
<<
11
);
}
static
int
el3_netdev_get_ecmd
(
struct
net_device
*
dev
,
struct
ethtool_cmd
*
ecmd
)
{
u16
tmp
;
int
ioaddr
=
dev
->
base_addr
;
EL3WINDOW
(
0
);
/* obtain current tranceiver via WN4_MEDIA? */
tmp
=
inw
(
ioaddr
+
WN0_ADDR_CONF
);
ecmd
->
transceiver
=
XCVR_INTERNAL
;
switch
(
tmp
>>
14
)
{
case
0
:
ecmd
->
port
=
PORT_TP
;
break
;
case
1
:
ecmd
->
port
=
PORT_AUI
;
ecmd
->
transceiver
=
XCVR_EXTERNAL
;
break
;
case
3
:
ecmd
->
port
=
PORT_BNC
;
default:
break
;
}
ecmd
->
duplex
=
DUPLEX_HALF
;
ecmd
->
supported
=
0
;
tmp
=
inw
(
ioaddr
+
WN0_CONF_CTRL
);
if
(
tmp
&
(
1
<<
13
))
ecmd
->
supported
|=
SUPPORTED_AUI
;
if
(
tmp
&
(
1
<<
12
))
ecmd
->
supported
|=
SUPPORTED_BNC
;
if
(
tmp
&
(
1
<<
9
))
{
ecmd
->
supported
|=
SUPPORTED_TP
|
SUPPORTED_10baseT_Half
|
SUPPORTED_10baseT_Full
;
/* hmm... */
EL3WINDOW
(
4
);
tmp
=
inw
(
ioaddr
+
WN4_NETDIAG
);
if
(
tmp
&
FD_ENABLE
)
ecmd
->
duplex
=
DUPLEX_FULL
;
}
ecmd
->
speed
=
SPEED_10
;
EL3WINDOW
(
1
);
return
0
;
}
static
int
el3_netdev_set_ecmd
(
struct
net_device
*
dev
,
struct
ethtool_cmd
*
ecmd
)
{
u16
tmp
;
int
ioaddr
=
dev
->
base_addr
;
if
(
ecmd
->
speed
!=
SPEED_10
)
return
-
EINVAL
;
if
((
ecmd
->
duplex
!=
DUPLEX_HALF
)
&&
(
ecmd
->
duplex
!=
DUPLEX_FULL
))
return
-
EINVAL
;
if
((
ecmd
->
transceiver
!=
XCVR_INTERNAL
)
&&
(
ecmd
->
transceiver
!=
XCVR_EXTERNAL
))
return
-
EINVAL
;
/* change XCVR type */
EL3WINDOW
(
0
);
tmp
=
inw
(
ioaddr
+
WN0_ADDR_CONF
);
switch
(
ecmd
->
port
)
{
case
PORT_TP
:
tmp
&=
~
(
3
<<
14
);
dev
->
if_port
=
0
;
break
;
case
PORT_AUI
:
tmp
|=
(
1
<<
14
);
dev
->
if_port
=
1
;
break
;
case
PORT_BNC
:
tmp
|=
(
3
<<
14
);
dev
->
if_port
=
3
;
break
;
default:
return
-
EINVAL
;
}
outw
(
tmp
,
ioaddr
+
WN0_ADDR_CONF
);
if
(
dev
->
if_port
==
3
)
{
/* fire up the DC-DC convertor if BNC gets enabled */
tmp
=
inw
(
ioaddr
+
WN0_ADDR_CONF
);
if
(
tmp
&
(
3
<<
14
))
{
outw
(
StartCoax
,
ioaddr
+
EL3_CMD
);
udelay
(
800
);
}
else
return
-
EIO
;
}
EL3WINDOW
(
4
);
tmp
=
inw
(
ioaddr
+
WN4_NETDIAG
);
if
(
ecmd
->
duplex
==
DUPLEX_FULL
)
tmp
|=
FD_ENABLE
;
else
tmp
&=
~
FD_ENABLE
;
outw
(
tmp
,
ioaddr
+
WN4_NETDIAG
);
EL3WINDOW
(
1
);
return
0
;
}
/**
* netdev_ethtool_ioctl: Handle network interface SIOCETHTOOL ioctls
* @dev: network interface on which out-of-band action is to be performed
...
...
@@ -989,9 +1106,11 @@ el3_close(struct net_device *dev)
* Process the various commands of the SIOCETHTOOL interface.
*/
static
int
netdev_ethtool_ioctl
(
struct
net_device
*
dev
,
void
*
useraddr
)
static
int
netdev_ethtool_ioctl
(
struct
net_device
*
dev
,
void
*
useraddr
)
{
u32
ethcmd
;
struct
el3_private
*
lp
=
dev
->
priv
;
/* dev_ioctl() in ../../net/core/dev.c has already checked
capable(CAP_NET_ADMIN), so don't bother with that here. */
...
...
@@ -1010,6 +1129,41 @@ static int netdev_ethtool_ioctl (struct net_device *dev, void *useraddr)
return
0
;
}
/* get settings */
case
ETHTOOL_GSET
:
{
int
ret
;
struct
ethtool_cmd
ecmd
=
{
ETHTOOL_GSET
};
spin_lock_irq
(
&
lp
->
lock
);
ret
=
el3_netdev_get_ecmd
(
dev
,
&
ecmd
);
spin_unlock_irq
(
&
lp
->
lock
);
if
(
copy_to_user
(
useraddr
,
&
ecmd
,
sizeof
(
ecmd
)))
return
-
EFAULT
;
return
ret
;
}
/* set settings */
case
ETHTOOL_SSET
:
{
int
ret
;
struct
ethtool_cmd
ecmd
;
if
(
copy_from_user
(
&
ecmd
,
useraddr
,
sizeof
(
ecmd
)))
return
-
EFAULT
;
spin_lock_irq
(
&
lp
->
lock
);
ret
=
el3_netdev_set_ecmd
(
dev
,
&
ecmd
);
spin_unlock_irq
(
&
lp
->
lock
);
return
ret
;
}
/* get link status */
case
ETHTOOL_GLINK
:
{
struct
ethtool_value
edata
=
{
ETHTOOL_GLINK
};
spin_lock_irq
(
&
lp
->
lock
);
edata
.
data
=
el3_link_ok
(
dev
);
spin_unlock_irq
(
&
lp
->
lock
);
if
(
copy_to_user
(
useraddr
,
&
edata
,
sizeof
(
edata
)))
return
-
EFAULT
;
return
0
;
}
/* get message-level */
case
ETHTOOL_GMSGLVL
:
{
struct
ethtool_value
edata
=
{
ETHTOOL_GMSGLVL
};
...
...
@@ -1043,7 +1197,8 @@ static int netdev_ethtool_ioctl (struct net_device *dev, void *useraddr)
* Process the various out-of-band ioctls passed to this driver.
*/
static
int
netdev_ioctl
(
struct
net_device
*
dev
,
struct
ifreq
*
rq
,
int
cmd
)
static
int
netdev_ioctl
(
struct
net_device
*
dev
,
struct
ifreq
*
rq
,
int
cmd
)
{
int
rc
=
0
;
...
...
@@ -1060,7 +1215,8 @@ static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
return
rc
;
}
static
void
el3_down
(
struct
net_device
*
dev
)
static
void
el3_down
(
struct
net_device
*
dev
)
{
int
ioaddr
=
dev
->
base_addr
;
...
...
@@ -1077,7 +1233,7 @@ static void el3_down(struct net_device *dev)
/* Turn off thinnet power. Green! */
outw
(
StopCoax
,
ioaddr
+
EL3_CMD
);
else
if
(
dev
->
if_port
==
0
)
{
/* Disable link beat and jabber, if_port may change ere next open(). */
/* Disable link beat and jabber, if_port may change
h
ere next open(). */
EL3WINDOW
(
4
);
outw
(
inw
(
ioaddr
+
WN4_MEDIA
)
&
~
MEDIA_TP
,
ioaddr
+
WN4_MEDIA
);
}
...
...
@@ -1087,7 +1243,8 @@ static void el3_down(struct net_device *dev)
update_stats
(
dev
);
}
static
void
el3_up
(
struct
net_device
*
dev
)
static
void
el3_up
(
struct
net_device
*
dev
)
{
int
i
,
sw_info
,
net_diag
;
int
ioaddr
=
dev
->
base_addr
;
...
...
@@ -1176,7 +1333,8 @@ static void el3_up(struct net_device *dev)
/* Power Management support functions */
#ifdef CONFIG_PM
static
int
el3_suspend
(
struct
pm_dev
*
pdev
)
static
int
el3_suspend
(
struct
pm_dev
*
pdev
)
{
unsigned
long
flags
;
struct
net_device
*
dev
;
...
...
@@ -1202,7 +1360,8 @@ static int el3_suspend(struct pm_dev *pdev)
return
0
;
}
static
int
el3_resume
(
struct
pm_dev
*
pdev
)
static
int
el3_resume
(
struct
pm_dev
*
pdev
)
{
unsigned
long
flags
;
struct
net_device
*
dev
;
...
...
@@ -1228,7 +1387,8 @@ static int el3_resume(struct pm_dev *pdev)
return
0
;
}
static
int
el3_pm_callback
(
struct
pm_dev
*
pdev
,
pm_request_t
rqst
,
void
*
data
)
static
int
el3_pm_callback
(
struct
pm_dev
*
pdev
,
pm_request_t
rqst
,
void
*
data
)
{
switch
(
rqst
)
{
case
PM_SUSPEND
:
...
...
drivers/net/ewrk3.c
View file @
0c83531d
...
...
@@ -76,6 +76,7 @@
kernel with the ewrk3 configuration turned off and reboot.
5) insmod ewrk3.o
[Alan Cox: Changed this so you can insmod ewrk3.o irq=x io=y]
[Adam Kropelin: now accepts irq=x1,x2 io=y1,y2 for multiple cards]
6) run the net startup bits for your new eth?? interface manually
(usually /etc/rc.inet[12] at boot time).
7) enjoy!
...
...
@@ -134,6 +135,8 @@
0.43 16-Aug-96 Update alloc_device() to conform to de4x5.c
0.44 08-Nov-01 use library crc32 functions <Matt_Domsch@dell.com>
0.45 19-Jul-02 fix unaligned access on alpha <martin@bruli.net>
0.46 10-Oct-02 cli/sti removal <VDA@port.imtp.ilyichevsk.odessa.ua>
Multiple NIC support when module <akropel1@rochester.rr.com>
=========================================================================
*/
...
...
@@ -167,7 +170,7 @@
#include "ewrk3.h"
static
char
version
[]
__initdata
=
"ewrk3.c:v0.4
3a 2001/02/04
davies@maniac.ultranet.com
\n
"
;
"ewrk3.c:v0.4
6 2002/10/09
davies@maniac.ultranet.com
\n
"
;
#ifdef EWRK3_DEBUG
static
int
ewrk3_debug
=
EWRK3_DEBUG
;
...
...
@@ -196,6 +199,7 @@ static int ewrk3_debug = 1;
#define EWRK3_IOP_INC 0x20
/* I/O address increment */
#define EWRK3_TOTAL_SIZE 0x20
/* required I/O address length */
/* If you change this, remember to also change MODULE_PARM array limits */
#ifndef MAX_NUM_EWRK3S
#define MAX_NUM_EWRK3S 21
#endif
...
...
@@ -1716,6 +1720,11 @@ static int ewrk3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
break
;
case
EWRK3_SET_MCA
:
/* Set a multicast address */
if
(
capable
(
CAP_NET_ADMIN
))
{
if
(
ioc
->
len
>
1024
)
{
status
=
-
EINVAL
;
break
;
}
if
(
copy_from_user
(
tmp
->
addr
,
ioc
->
data
,
ETH_ALEN
*
ioc
->
len
))
{
status
=
-
EFAULT
;
break
;
...
...
@@ -1843,35 +1852,62 @@ static int ewrk3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
}
#ifdef MODULE
static
struct
net_device
thisEthwrk
;
static
int
io
=
0x300
;
/* <--- EDIT THESE LINES FOR YOUR CONFIGURATION */
static
int
irq
=
5
;
/* or use the insmod io= irq= options */
static
struct
net_device
*
ewrk3_devs
[
MAX_NUM_EWRK3S
];
static
int
ndevs
;
static
int
io
[
MAX_NUM_EWRK3S
+
1
]
=
{
0x300
,
0
,
};
/* <--- EDIT THESE LINES FOR YOUR CONFIGURATION */
static
int
irq
[
MAX_NUM_EWRK3S
+
1
]
=
{
5
,
0
,
};
/* or use the insmod io= irq= options */
MODULE_PARM
(
io
,
"i"
);
MODULE_PARM
(
irq
,
"i"
);
MODULE_PARM_DESC
(
io
,
"EtherWORKS 3 I/O base address"
);
MODULE_PARM_DESC
(
irq
,
"EtherWORKS 3 IRQ number"
);
/* '21' below should really be 'MAX_NUM_EWRK3S' */
MODULE_PARM
(
io
,
"0-21i"
);
MODULE_PARM
(
irq
,
"0-21i"
);
MODULE_PARM_DESC
(
io
,
"EtherWORKS 3 I/O base address(es)"
);
MODULE_PARM_DESC
(
irq
,
"EtherWORKS 3 IRQ number(s)"
);
int
init_module
(
void
)
{
thisEthwrk
.
base_addr
=
io
;
thisEthwrk
.
irq
=
irq
;
thisEthwrk
.
init
=
ewrk3_probe
;
if
(
register_netdev
(
&
thisEthwrk
)
!=
0
)
return
-
EIO
;
return
0
;
int
i
=
0
;
while
(
io
[
i
]
&&
irq
[
i
]
)
{
ewrk3_devs
[
ndevs
]
=
kmalloc
(
sizeof
(
struct
net_device
),
GFP_KERNEL
);
if
(
!
ewrk3_devs
[
ndevs
])
goto
error
;
memset
(
ewrk3_devs
[
ndevs
],
0
,
sizeof
(
struct
net_device
));
ewrk3_devs
[
ndevs
]
->
base_addr
=
io
[
i
];
ewrk3_devs
[
ndevs
]
->
irq
=
irq
[
i
];
ewrk3_devs
[
ndevs
]
->
init
=
ewrk3_probe
;
if
(
register_netdev
(
ewrk3_devs
[
ndevs
])
==
0
)
ndevs
++
;
else
kfree
(
ewrk3_devs
[
ndevs
]);
i
++
;
}
return
ndevs
?
0
:
-
EIO
;
error:
cleanup_module
();
return
-
ENOMEM
;
}
void
cleanup_module
(
void
)
{
unregister_netdev
(
&
thisEthwrk
);
if
(
thisEthwrk
.
priv
)
{
kfree
(
thisEthwrk
.
priv
);
thisEthwrk
.
priv
=
NULL
;
int
i
;
for
(
i
=
0
;
i
<
ndevs
;
i
++
)
{
unregister_netdev
(
ewrk3_devs
[
i
]);
if
(
ewrk3_devs
[
i
]
->
priv
)
{
kfree
(
ewrk3_devs
[
i
]
->
priv
);
ewrk3_devs
[
i
]
->
priv
=
NULL
;
}
thisEthwrk
.
irq
=
0
;
ewrk3_devs
[
i
]
->
irq
=
0
;
release_region
(
thisEthwrk
.
base_addr
,
EWRK3_TOTAL_SIZE
);
release_region
(
ewrk3_devs
[
i
]
->
base_addr
,
EWRK3_TOTAL_SIZE
);
kfree
(
ewrk3_devs
[
i
]);
ewrk3_devs
[
i
]
=
NULL
;
}
}
#endif
/* MODULE */
MODULE_LICENSE
(
"GPL"
);
...
...
drivers/net/mii.c
View file @
0c83531d
...
...
@@ -243,7 +243,7 @@ unsigned int mii_check_media (struct mii_if_info *mii,
/* figure out media and duplex from advertise and LPA values */
media
=
mii_nway_result
(
lpa
&
advertise
);
duplex
=
(
media
&
(
ADVERTISE_100FULL
|
ADVERTISE_10FULL
)
)
?
1
:
0
;
duplex
=
(
media
&
ADVERTISE_FULL
)
?
1
:
0
;
if
(
ok_to_print
)
printk
(
KERN_INFO
"%s: link up, %sMbps, %s-duplex, lpa 0x%04X
\n
"
,
...
...
drivers/net/tokenring/tmspci.c
View file @
0c83531d
...
...
@@ -253,7 +253,7 @@ static int __init tms_pci_init (void)
return
0
;
}
static
void
__
dev
exit
tms_pci_rmmod
(
void
)
static
void
__exit
tms_pci_rmmod
(
void
)
{
pci_unregister_driver
(
&
tms_pci_driver
);
}
...
...
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