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
fb3e5c1b
Commit
fb3e5c1b
authored
Oct 30, 2004
by
Russell King
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ARM] etherh: add ethtool support.
parent
702e4ff4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
81 additions
and
15 deletions
+81
-15
drivers/net/arm/etherh.c
drivers/net/arm/etherh.c
+81
-15
No files found.
drivers/net/arm/etherh.c
View file @
fb3e5c1b
...
...
@@ -40,6 +40,7 @@
#include <linux/errno.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/ethtool.h>
#include <linux/skbuff.h>
#include <linux/delay.h>
#include <linux/device.h>
...
...
@@ -56,6 +57,9 @@
#define NET_DEBUG 0
#define DEBUG_INIT 2
#define DRV_NAME "etherh"
#define DRV_VERSION "1.10"
static
unsigned
int
net_debug
=
NET_DEBUG
;
struct
etherh_priv
{
...
...
@@ -64,6 +68,7 @@ struct etherh_priv {
unsigned
int
id
;
void
*
ctrl_port
;
unsigned
char
ctrl
;
u32
supported
;
};
struct
etherh_data
{
...
...
@@ -72,11 +77,7 @@ struct etherh_data {
unsigned
long
ctrlport_offset
;
int
ctrl_ioc
;
const
char
name
[
16
];
/*
* netdev flags and port
*/
unsigned
short
flags
;
unsigned
char
if_port
;
u32
supported
;
unsigned
char
tx_start_page
;
unsigned
char
stop_page
;
};
...
...
@@ -86,7 +87,7 @@ MODULE_DESCRIPTION("EtherH/EtherM driver");
MODULE_LICENSE
(
"GPL"
);
static
char
version
[]
__initdata
=
"EtherH/EtherM Driver (c) 2002
Russell King v1.09
\n
"
;
"EtherH/EtherM Driver (c) 2002
-2004 Russell King "
DRV_VERSION
"
\n
"
;
#define ETHERH500_DATAPORT 0x800
/* MEMC */
#define ETHERH500_NS8390 0x000
/* MEMC */
...
...
@@ -556,6 +557,62 @@ static int __init etherm_addr(char *addr)
return
0
;
}
static
void
etherh_get_drvinfo
(
struct
net_device
*
dev
,
struct
ethtool_drvinfo
*
info
)
{
strlcpy
(
info
->
driver
,
DRV_NAME
,
sizeof
(
info
->
driver
));
strlcpy
(
info
->
version
,
DRV_VERSION
,
sizeof
(
info
->
version
));
strlcpy
(
info
->
bus_info
,
dev
->
class_dev
.
dev
->
bus_id
,
sizeof
(
info
->
bus_info
));
}
static
int
etherh_get_settings
(
struct
net_device
*
dev
,
struct
ethtool_cmd
*
cmd
)
{
cmd
->
supported
=
etherh_priv
(
dev
)
->
supported
;
cmd
->
speed
=
SPEED_10
;
cmd
->
duplex
=
DUPLEX_HALF
;
cmd
->
port
=
dev
->
if_port
==
IF_PORT_10BASET
?
PORT_TP
:
PORT_BNC
;
cmd
->
autoneg
=
dev
->
flags
&
IFF_AUTOMEDIA
?
AUTONEG_ENABLE
:
AUTONEG_DISABLE
;
return
0
;
}
static
int
etherh_set_settings
(
struct
net_device
*
dev
,
struct
ethtool_cmd
*
cmd
)
{
switch
(
cmd
->
autoneg
)
{
case
AUTONEG_ENABLE
:
dev
->
flags
|=
IFF_AUTOMEDIA
;
break
;
case
AUTONEG_DISABLE
:
switch
(
cmd
->
port
)
{
case
PORT_TP
:
dev
->
if_port
=
IF_PORT_10BASET
;
break
;
case
PORT_BNC
:
dev
->
if_port
=
IF_PORT_10BASE2
;
break
;
default:
return
-
EINVAL
;
}
dev
->
flags
&=
~
IFF_AUTOMEDIA
;
break
;
default:
return
-
EINVAL
;
}
etherh_setif
(
dev
);
return
0
;
}
static
struct
ethtool_ops
etherh_ethtool_ops
=
{
.
get_settings
=
etherh_get_settings
,
.
set_settings
=
etherh_set_settings
,
.
get_drvinfo
=
etherh_get_drvinfo
,
};
static
u32
etherh_regoffsets
[
16
];
static
u32
etherm_regoffsets
[
16
];
...
...
@@ -587,10 +644,21 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
dev
->
stop
=
etherh_close
;
dev
->
set_config
=
etherh_set_config
;
dev
->
irq
=
ec
->
irq
;
dev
->
if_port
=
data
->
if_port
;
dev
->
flags
|=
data
->
flags
;
dev
->
ethtool_ops
=
&
etherh_ethtool_ops
;
if
(
data
->
supported
&
SUPPORTED_Autoneg
)
dev
->
flags
|=
IFF_AUTOMEDIA
;
if
(
data
->
supported
&
SUPPORTED_TP
)
{
dev
->
flags
|=
IFF_PORTSEL
;
dev
->
if_port
=
IF_PORT_10BASET
;
}
else
if
(
data
->
supported
&
SUPPORTED_BNC
)
{
dev
->
flags
|=
IFF_PORTSEL
;
dev
->
if_port
=
IF_PORT_10BASE2
;
}
else
dev
->
if_port
=
IF_PORT_UNKNOWN
;
eh
=
etherh_priv
(
dev
);
eh
->
supported
=
data
->
supported
;
eh
->
ctrl
=
0
;
eh
->
id
=
ec
->
cid
.
product
;
eh
->
memc
=
ioremap
(
ecard_resource_start
(
ec
,
ECARD_RES_MEMC
),
PAGE_SIZE
);
...
...
@@ -701,7 +769,7 @@ static struct etherh_data etherm_data = {
.
dataport_offset
=
ETHERM_NS8390
+
ETHERM_DATAPORT
,
.
ctrlport_offset
=
ETHERM_NS8390
+
ETHERM_CTRLPORT
,
.
name
=
"ANT EtherM"
,
.
if_port
=
IF_PORT_UNKNOWN
,
.
supported
=
SUPPORTED_10baseT_Half
,
.
tx_start_page
=
ETHERM_TX_START_PAGE
,
.
stop_page
=
ETHERM_STOP_PAGE
,
};
...
...
@@ -712,7 +780,7 @@ static struct etherh_data etherlan500_data = {
.
ctrlport_offset
=
ETHERH500_CTRLPORT
,
.
ctrl_ioc
=
1
,
.
name
=
"i3 EtherH 500"
,
.
if_port
=
IF_PORT_UNKNOWN
,
.
supported
=
SUPPORTED_10baseT_Half
,
.
tx_start_page
=
ETHERH_TX_START_PAGE
,
.
stop_page
=
ETHERH_STOP_PAGE
,
};
...
...
@@ -722,8 +790,7 @@ static struct etherh_data etherlan600_data = {
.
dataport_offset
=
ETHERH600_NS8390
+
ETHERH600_DATAPORT
,
.
ctrlport_offset
=
ETHERH600_NS8390
+
ETHERH600_CTRLPORT
,
.
name
=
"i3 EtherH 600"
,
.
flags
=
IFF_PORTSEL
|
IFF_AUTOMEDIA
,
.
if_port
=
IF_PORT_10BASET
,
.
supported
=
SUPPORTED_10baseT_Half
|
SUPPORTED_TP
|
SUPPORTED_BNC
|
SUPPORTED_Autoneg
,
.
tx_start_page
=
ETHERH_TX_START_PAGE
,
.
stop_page
=
ETHERH_STOP_PAGE
,
};
...
...
@@ -733,8 +800,7 @@ static struct etherh_data etherlan600a_data = {
.
dataport_offset
=
ETHERH600_NS8390
+
ETHERH600_DATAPORT
,
.
ctrlport_offset
=
ETHERH600_NS8390
+
ETHERH600_CTRLPORT
,
.
name
=
"i3 EtherH 600A"
,
.
flags
=
IFF_PORTSEL
|
IFF_AUTOMEDIA
,
.
if_port
=
IF_PORT_10BASET
,
.
supported
=
SUPPORTED_10baseT_Half
|
SUPPORTED_TP
|
SUPPORTED_BNC
|
SUPPORTED_Autoneg
,
.
tx_start_page
=
ETHERH_TX_START_PAGE
,
.
stop_page
=
ETHERH_STOP_PAGE
,
};
...
...
@@ -752,7 +818,7 @@ static struct ecard_driver etherh_driver = {
.
remove
=
__devexit_p
(
etherh_remove
),
.
id_table
=
etherh_ids
,
.
drv
=
{
.
name
=
"etherh"
,
.
name
=
DRV_NAME
,
},
};
...
...
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