aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2012-02-29 09:26:22 -0500
committerDavid S. Miller <davem@davemloft.net>2012-03-01 16:41:26 -0500
commit9c4df53bc3f9c72d7f1f1226927f456d46412381 (patch)
tree93bc7536bcf1cac679fc150d0cd88b9e21e5ed17
parent9c717758c9289331e22c88ef69d8c248def9cd29 (diff)
ethtool, mdio, mii: Specify MDIO information fields in struct ethtool_cmd
Add comments for ethtool_cmd::phy_address and ethtool_cmd::mdio_support, and definitions of the flags currently used in mdio_support. In the mdio library, assert that its own flags continue to match those in the ethtool interface. In the mii library, use the ethtool flag definition and stop including <linux/mdio.h>. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/mdio.c3
-rw-r--r--drivers/net/mii.c4
-rw-r--r--include/linux/ethtool.h23
3 files changed, 26 insertions, 4 deletions
diff --git a/drivers/net/mdio.c b/drivers/net/mdio.c
index 16fbb11d92ac..8403316eb02b 100644
--- a/drivers/net/mdio.c
+++ b/drivers/net/mdio.c
@@ -190,6 +190,9 @@ void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio,
190 int reg; 190 int reg;
191 u32 speed; 191 u32 speed;
192 192
193 BUILD_BUG_ON(MDIO_SUPPORTS_C22 != ETH_MDIO_SUPPORTS_C22);
194 BUILD_BUG_ON(MDIO_SUPPORTS_C45 != ETH_MDIO_SUPPORTS_C45);
195
193 ecmd->transceiver = XCVR_INTERNAL; 196 ecmd->transceiver = XCVR_INTERNAL;
194 ecmd->phy_address = mdio->prtad; 197 ecmd->phy_address = mdio->prtad;
195 ecmd->mdio_support = 198 ecmd->mdio_support =
diff --git a/drivers/net/mii.c b/drivers/net/mii.c
index c70c2332d15e..4a99c3919037 100644
--- a/drivers/net/mii.c
+++ b/drivers/net/mii.c
@@ -31,7 +31,7 @@
31#include <linux/module.h> 31#include <linux/module.h>
32#include <linux/netdevice.h> 32#include <linux/netdevice.h>
33#include <linux/ethtool.h> 33#include <linux/ethtool.h>
34#include <linux/mdio.h> 34#include <linux/mii.h>
35 35
36static u32 mii_get_an(struct mii_if_info *mii, u16 addr) 36static u32 mii_get_an(struct mii_if_info *mii, u16 addr)
37{ 37{
@@ -74,7 +74,7 @@ int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd)
74 74
75 /* this isn't fully supported at higher layers */ 75 /* this isn't fully supported at higher layers */
76 ecmd->phy_address = mii->phy_id; 76 ecmd->phy_address = mii->phy_id;
77 ecmd->mdio_support = MDIO_SUPPORTS_C22; 77 ecmd->mdio_support = ETH_MDIO_SUPPORTS_C22;
78 78
79 ecmd->advertising = ADVERTISED_TP | ADVERTISED_MII; 79 ecmd->advertising = ADVERTISED_TP | ADVERTISED_MII;
80 80
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index da5b2de99ae4..e1d9e0ede309 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -30,10 +30,15 @@ struct ethtool_cmd {
30 * access it */ 30 * access it */
31 __u8 duplex; /* Duplex, half or full */ 31 __u8 duplex; /* Duplex, half or full */
32 __u8 port; /* Which connector port */ 32 __u8 port; /* Which connector port */
33 __u8 phy_address; 33 __u8 phy_address; /* MDIO PHY address (PRTAD for clause 45).
34 * May be read-only or read-write
35 * depending on the driver.
36 */
34 __u8 transceiver; /* Which transceiver to use */ 37 __u8 transceiver; /* Which transceiver to use */
35 __u8 autoneg; /* Enable or disable autonegotiation */ 38 __u8 autoneg; /* Enable or disable autonegotiation */
36 __u8 mdio_support; 39 __u8 mdio_support; /* MDIO protocols supported. Read-only.
40 * Not set by all drivers.
41 */
37 __u32 maxtxpkt; /* Tx pkts before generating tx int */ 42 __u32 maxtxpkt; /* Tx pkts before generating tx int */
38 __u32 maxrxpkt; /* Rx pkts before generating rx int */ 43 __u32 maxrxpkt; /* Rx pkts before generating rx int */
39 __u16 speed_hi; /* The forced speed (upper 44 __u16 speed_hi; /* The forced speed (upper
@@ -59,6 +64,20 @@ static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
59 return (ep->speed_hi << 16) | ep->speed; 64 return (ep->speed_hi << 16) | ep->speed;
60} 65}
61 66
67/* Device supports clause 22 register access to PHY or peripherals
68 * using the interface defined in <linux/mii.h>. This should not be
69 * set if there are known to be no such peripherals present or if
70 * the driver only emulates clause 22 registers for compatibility.
71 */
72#define ETH_MDIO_SUPPORTS_C22 1
73
74/* Device supports clause 45 register access to PHY or peripherals
75 * using the interface defined in <linux/mii.h> and <linux/mdio.h>.
76 * This should not be set if there are known to be no such peripherals
77 * present.
78 */
79#define ETH_MDIO_SUPPORTS_C45 2
80
62#define ETHTOOL_FWVERS_LEN 32 81#define ETHTOOL_FWVERS_LEN 32
63#define ETHTOOL_BUSINFO_LEN 32 82#define ETHTOOL_BUSINFO_LEN 32
64/* these strings are set to whatever the driver author decides... */ 83/* these strings are set to whatever the driver author decides... */