Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
linux_grx
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Intel
linux_grx
Commits
9806925d
Commit
9806925d
authored
7 years ago
by
John Crispin
Committed by
Kenneth Johansson
6 years ago
Browse files
Options
Downloads
Patches
Plain Diff
net: phy: add phy_ethtool_ioctl()
Signed-off-by:
John Crispin
<
john@phrozen.org
>
parent
26ab4923
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
drivers/net/phy/phy.c
+44
-0
44 additions, 0 deletions
drivers/net/phy/phy.c
include/linux/phy.h
+1
-0
1 addition, 0 deletions
include/linux/phy.h
with
45 additions
and
0 deletions
drivers/net/phy/phy.c
+
44
−
0
View file @
9806925d
...
@@ -472,6 +472,50 @@ int phy_ethtool_ksettings_get(struct phy_device *phydev,
...
@@ -472,6 +472,50 @@ int phy_ethtool_ksettings_get(struct phy_device *phydev,
}
}
EXPORT_SYMBOL
(
phy_ethtool_ksettings_get
);
EXPORT_SYMBOL
(
phy_ethtool_ksettings_get
);
int
phy_ethtool_ioctl
(
struct
phy_device
*
phydev
,
void
*
useraddr
)
{
u32
cmd
;
int
tmp
;
struct
ethtool_cmd
ecmd
=
{
ETHTOOL_GSET
};
struct
ethtool_value
edata
=
{
ETHTOOL_GLINK
};
if
(
get_user
(
cmd
,
(
u32
*
)
useraddr
))
return
-
EFAULT
;
switch
(
cmd
)
{
case
ETHTOOL_GSET
:
phy_ethtool_gset
(
phydev
,
&
ecmd
);
if
(
copy_to_user
(
useraddr
,
&
ecmd
,
sizeof
(
ecmd
)))
return
-
EFAULT
;
return
0
;
case
ETHTOOL_SSET
:
if
(
copy_from_user
(
&
ecmd
,
useraddr
,
sizeof
(
ecmd
)))
return
-
EFAULT
;
return
phy_ethtool_sset
(
phydev
,
&
ecmd
);
case
ETHTOOL_NWAY_RST
:
/* if autoneg is off, it's an error */
tmp
=
phy_read
(
phydev
,
MII_BMCR
);
if
(
tmp
&
BMCR_ANENABLE
)
{
tmp
|=
(
BMCR_ANRESTART
);
phy_write
(
phydev
,
MII_BMCR
,
tmp
);
return
0
;
}
return
-
EINVAL
;
case
ETHTOOL_GLINK
:
edata
.
data
=
(
phy_read
(
phydev
,
MII_BMSR
)
&
BMSR_LSTATUS
)
?
1
:
0
;
if
(
copy_to_user
(
useraddr
,
&
edata
,
sizeof
(
edata
)))
return
-
EFAULT
;
return
0
;
}
return
-
EOPNOTSUPP
;
}
EXPORT_SYMBOL
(
phy_ethtool_ioctl
);
/**
/**
* phy_mii_ioctl - generic PHY MII ioctl interface
* phy_mii_ioctl - generic PHY MII ioctl interface
* @phydev: the phy_device struct
* @phydev: the phy_device struct
...
...
This diff is collapsed.
Click to expand it.
include/linux/phy.h
+
1
−
0
View file @
9806925d
...
@@ -827,6 +827,7 @@ int phy_ethtool_ksettings_get(struct phy_device *phydev,
...
@@ -827,6 +827,7 @@ int phy_ethtool_ksettings_get(struct phy_device *phydev,
struct
ethtool_link_ksettings
*
cmd
);
struct
ethtool_link_ksettings
*
cmd
);
int
phy_ethtool_ksettings_set
(
struct
phy_device
*
phydev
,
int
phy_ethtool_ksettings_set
(
struct
phy_device
*
phydev
,
const
struct
ethtool_link_ksettings
*
cmd
);
const
struct
ethtool_link_ksettings
*
cmd
);
int
phy_ethtool_ioctl
(
struct
phy_device
*
phydev
,
void
*
useraddr
);
int
phy_mii_ioctl
(
struct
phy_device
*
phydev
,
struct
ifreq
*
ifr
,
int
cmd
);
int
phy_mii_ioctl
(
struct
phy_device
*
phydev
,
struct
ifreq
*
ifr
,
int
cmd
);
int
phy_start_interrupts
(
struct
phy_device
*
phydev
);
int
phy_start_interrupts
(
struct
phy_device
*
phydev
);
void
phy_print_status
(
struct
phy_device
*
phydev
);
void
phy_print_status
(
struct
phy_device
*
phydev
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment