diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2012-02-29 09:26:22 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-03-01 16:41:26 -0500 |
commit | 9c4df53bc3f9c72d7f1f1226927f456d46412381 (patch) | |
tree | 93bc7536bcf1cac679fc150d0cd88b9e21e5ed17 | |
parent | 9c717758c9289331e22c88ef69d8c248def9cd29 (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.c | 3 | ||||
-rw-r--r-- | drivers/net/mii.c | 4 | ||||
-rw-r--r-- | include/linux/ethtool.h | 23 |
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 | ||
36 | static u32 mii_get_an(struct mii_if_info *mii, u16 addr) | 36 | static 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... */ |