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
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