diff mbox

[1/1] ixgbe: add the external ixgbe fiber transceiver status

Message ID 1486609408-6770-1-git-send-email-yanjun.zhu@oracle.com
State Rejected, archived
Delegated to: David Miller
Headers show

Commit Message

Zhu Yanjun Feb. 9, 2017, 3:03 a.m. UTC
When the ixgbe fiber transceiver is external, it is necessary to get
the present/absent status of this external ixgbe fiber transceiver.

The steps to get the present/absent status:
The enp1s0f0 is an external ixgbe fiber NIC.

ethtool enp1s0f0

...
        Port: FIBRE
        PHYAD: 0
        Transceiver: external(present) <---The transceiver is present.
        Auto-negotiation: on
        Supports Wake-on: d
...

Or
...
        Port: FIBRE
        PHYAD: 0
        Transceiver: external(absent) <---The transceiver is absent
        Auto-negotiation: on
        Supports Wake-on: d
...

Signed-off-by: Zhu Yanjun <yanjun.zhu@oracle.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 15 +++++++++++++++
 include/uapi/linux/ethtool.h                     |  4 ++++
 2 files changed, 19 insertions(+)

Comments

Sergei Shtylyov Feb. 9, 2017, 10:49 a.m. UTC | #1
Hello!

On 2/9/2017 6:03 AM, Zhu Yanjun wrote:

> When the ixgbe fiber transceiver is external, it is necessary to get
> the present/absent status of this external ixgbe fiber transceiver.
>
> The steps to get the present/absent status:
> The enp1s0f0 is an external ixgbe fiber NIC.
>
> ethtool enp1s0f0
>
> ...
>         Port: FIBRE
>         PHYAD: 0
>         Transceiver: external(present) <---The transceiver is present.
>         Auto-negotiation: on
>         Supports Wake-on: d
> ...
>
> Or
> ...
>         Port: FIBRE
>         PHYAD: 0
>         Transceiver: external(absent) <---The transceiver is absent
>         Auto-negotiation: on
>         Supports Wake-on: d
> ...
>
> Signed-off-by: Zhu Yanjun <yanjun.zhu@oracle.com>
> ---
>  drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 15 +++++++++++++++
>  include/uapi/linux/ethtool.h                     |  4 ++++
>  2 files changed, 19 insertions(+)
>
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
> index fd192bf..b3f86f4 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
> @@ -313,6 +313,21 @@ static int ixgbe_get_settings(struct net_device *netdev,
>  		break;
>  	}
>
> +	/* When the tranceiver is external, the following is meaningful.
> +	 * ecmd->reserved[0] has 3 values:
> +	 * 0x0: tranceiver absent
> +	 * 0x4: tranceiver present
> +	 * others: not support
> +	 */
> +	if (ecmd->port == PORT_FIBRE) {
> +		u32 status = IXGBE_READ_REG(hw, IXGBE_ESDP) & IXGBE_ESDP_SDP2;
> +
> +		if (status == 0x4)
> +			ecmd->transceiver = XCVR_EXTERNAL_PRESENT;
> +		if (status == 0x0)

    *else* *if*. Although *switch* would match better instead...

> +			ecmd->transceiver = XCVR_EXTERNAL_ABSENT;
> +	}
> +
>  	/* Indicate pause support */
>  	ecmd->supported |= SUPPORTED_Pause;
>
[...]

MBR, Sergei
Tantilov, Emil S Feb. 9, 2017, 7:08 p.m. UTC | #2
>-----Original Message-----
>From: netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org] On
>Behalf Of Zhu Yanjun
>Sent: Wednesday, February 08, 2017 7:03 PM
>To: Kirsher, Jeffrey T <jeffrey.t.kirsher@intel.com>; broonie@kernel.org;
>davem@davemloft.net; intel-wired-lan@lists.osuosl.org;
>netdev@vger.kernel.org
>Subject: [PATCH 1/1] ixgbe: add the external ixgbe fiber transceiver status
>
>When the ixgbe fiber transceiver is external, it is necessary to get
>the present/absent status of this external ixgbe fiber transceiver.

The transceiver field was deprecated in the old ethtool API and is being
removed in the new. This patch will not apply at all once those changes are made:

http://patchwork.ozlabs.org/patch/725081/

Thanks,
Emil
Zhu Yanjun Feb. 10, 2017, 2:43 a.m. UTC | #3
On 2017/2/10 3:08, Tantilov, Emil S wrote:
>> -----Original Message-----
>> From: netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org] On
>> Behalf Of Zhu Yanjun
>> Sent: Wednesday, February 08, 2017 7:03 PM
>> To: Kirsher, Jeffrey T <jeffrey.t.kirsher@intel.com>; broonie@kernel.org;
>> davem@davemloft.net; intel-wired-lan@lists.osuosl.org;
>> netdev@vger.kernel.org
>> Subject: [PATCH 1/1] ixgbe: add the external ixgbe fiber transceiver status
>>
>> When the ixgbe fiber transceiver is external, it is necessary to get
>> the present/absent status of this external ixgbe fiber transceiver.
> The transceiver field was deprecated in the old ethtool API and is being
> removed in the new. This patch will not apply at all once those changes are made:
>
> http://patchwork.ozlabs.org/patch/725081/
Thanks for your kind reply. I will change this patch based on the above 
changes.

Zhu Yanjun
>
> Thanks,
> Emil
>   
>
>
diff mbox

Patch

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
index fd192bf..b3f86f4 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
@@ -313,6 +313,21 @@  static int ixgbe_get_settings(struct net_device *netdev,
 		break;
 	}
 
+	/* When the tranceiver is external, the following is meaningful.
+	 * ecmd->reserved[0] has 3 values:
+	 * 0x0: tranceiver absent
+	 * 0x4: tranceiver present
+	 * others: not support
+	 */
+	if (ecmd->port == PORT_FIBRE) {
+		u32 status = IXGBE_READ_REG(hw, IXGBE_ESDP) & IXGBE_ESDP_SDP2;
+
+		if (status == 0x4)
+			ecmd->transceiver = XCVR_EXTERNAL_PRESENT;
+		if (status == 0x0)
+			ecmd->transceiver = XCVR_EXTERNAL_ABSENT;
+	}
+
 	/* Indicate pause support */
 	ecmd->supported |= SUPPORTED_Pause;
 
diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
index 3dc91a4..8e8225a 100644
--- a/include/uapi/linux/ethtool.h
+++ b/include/uapi/linux/ethtool.h
@@ -1541,6 +1541,10 @@  static inline int ethtool_validate_duplex(__u8 duplex)
 #define XCVR_DUMMY2		0x03
 #define XCVR_DUMMY3		0x04
 
+/* The fiber transceiver status */
+#define XCVR_EXTERNAL_ABSENT	0x05
+#define XCVR_EXTERNAL_PRESENT	0x06
+
 /* Enable or disable autonegotiation. */
 #define AUTONEG_DISABLE		0x00
 #define AUTONEG_ENABLE		0x01