diff mbox

ethtool: Support passing the PHY info through get_drvinfo

Message ID 20091117161748.11411.74316.stgit@localhost.localdomain
State Changes Requested, archived
Delegated to: David Miller
Headers show

Commit Message

Kirsher, Jeffrey T Nov. 17, 2009, 4:17 p.m. UTC
From: PJ Waskiewicz <peter.p.waskiewicz.jr@intel.com>

This allows drivers to provide a PHY type to dump_drvinfo when
ethtool -i ethX is executed.

Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 ethtool-copy.h |   25 ++++++++++++++++++++++++-
 ethtool.c      |   30 ++++++++++++++++++++++++++++--
 2 files changed, 52 insertions(+), 3 deletions(-)


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/ethtool-copy.h b/ethtool-copy.h
index 3ca4e2c..db29c5a 100644
--- a/ethtool-copy.h
+++ b/ethtool-copy.h
@@ -53,7 +53,8 @@  struct ethtool_drvinfo {
 	char	bus_info[ETHTOOL_BUSINFO_LEN];	/* Bus info for this IF. */
 				/* For PCI devices, use pci_name(pci_dev). */
 	char	reserved1[32];
-	char	reserved2[12];
+	char	reserved2[11];
+	__u8	phy_type;	/* PHY type present on the NIC */
 	__u32	n_priv_flags;	/* number of flags valid in ETHTOOL_GPFLAGS */
 	__u32	n_stats;	/* number of u64's from ETHTOOL_GSTATS */
 	__u32	testinfo_len;
@@ -285,6 +286,28 @@  enum ethtool_flags {
 	ETH_FLAG_LRO		= (1 << 15),	/* LRO is enabled */
 };
 
+/*
+ * PHY types supported
+ *
+ * 0   - No PHY specified
+ * 1   - SFP/SFP+ Fiber (SR and LR)
+ * 2   - XFP Fiber (SR and LR)
+ * 3   - SFP+ Direct Attach (TwinAX)
+ * 4   - BASE-T (RJ-45)
+ * MAX - PHY not present
+ */
+enum ethtool_phy_type {
+	ETH_PHY_UNSPECIFIED = 0,
+	ETH_PHY_SFP_FIBER,
+	ETH_PHY_XFP_FIBER,
+	ETH_PHY_DA_TWINAX,
+	ETH_PHY_BASE_T,
+
+	/* This must be the last entry */
+	ETH_PHY_NOT_PRESENT,
+};
+#define ETH_MAX_PHY_STR_LEN 32
+
 struct ethtool_rxnfc {
 	__u32		cmd;
 	__u32		flow_type;
diff --git a/ethtool.c b/ethtool.c
index 0110682..8baa429 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -969,15 +969,41 @@  static int dump_ecmd(struct ethtool_cmd *ep)
 
 static int dump_drvinfo(struct ethtool_drvinfo *info)
 {
+	char phy_type[ETH_MAX_PHY_STR_LEN];
+
+	switch (info->phy_type) {
+	case ETH_PHY_NOT_PRESENT:
+		sprintf(phy_type, "PHY not present");
+		break;
+	case ETH_PHY_SFP_FIBER:
+		sprintf(phy_type, "SFP/SFP+ Fiber (SR/LR)");
+		break;
+	case ETH_PHY_XFP_FIBER:
+		sprintf(phy_type, "XFP Fiber (SR/LR)");
+		break;
+	case ETH_PHY_DA_TWINAX:
+		sprintf(phy_type, "SFP+ DA TwinAX");
+		break;
+	case ETH_PHY_BASE_T:
+		sprintf(phy_type, "BASE-T Copper");
+		break;
+	case ETH_PHY_UNSPECIFIED:
+	default:
+		sprintf(phy_type, "PHY unspecified");
+		break;
+	};
+
 	fprintf(stdout,
 		"driver: %s\n"
 		"version: %s\n"
 		"firmware-version: %s\n"
-		"bus-info: %s\n",
+		"bus-info: %s\n"
+		"phy-type: %s\n",
 		info->driver,
 		info->version,
 		info->fw_version,
-		info->bus_info);
+		info->bus_info,
+		phy_type);
 
 	return 0;
 }