Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8d23dc6 authored by Chris Leech's avatar Chris Leech Committed by Christoph Hellwig
Browse files

fcoe: extend ethtool to FC port speed mapping



add support for 20 Gbit and 40 Gbit links

Signed-off-by: default avatarChris Leech <cleech@redhat.com>
Signed-off-by: default avatarVasu Dev <vasu.dev@intel.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent d247a70a
Loading
Loading
Loading
Loading
+33 −6
Original line number Diff line number Diff line
@@ -96,14 +96,32 @@ int fcoe_link_speed_update(struct fc_lport *lport)
	struct ethtool_cmd ecmd;

	if (!__ethtool_get_settings(netdev, &ecmd)) {
		lport->link_supported_speeds &=
			~(FC_PORTSPEED_1GBIT | FC_PORTSPEED_10GBIT);
		lport->link_supported_speeds &= ~(FC_PORTSPEED_1GBIT  |
		                                  FC_PORTSPEED_10GBIT |
		                                  FC_PORTSPEED_20GBIT |
		                                  FC_PORTSPEED_40GBIT);

		if (ecmd.supported & (SUPPORTED_1000baseT_Half |
				      SUPPORTED_1000baseT_Full))
		                      SUPPORTED_1000baseT_Full |
		                      SUPPORTED_1000baseKX_Full))
			lport->link_supported_speeds |= FC_PORTSPEED_1GBIT;
		if (ecmd.supported & SUPPORTED_10000baseT_Full)
			lport->link_supported_speeds |=
				FC_PORTSPEED_10GBIT;

		if (ecmd.supported & (SUPPORTED_10000baseT_Full   |
		                      SUPPORTED_10000baseKX4_Full |
		                      SUPPORTED_10000baseKR_Full  |
		                      SUPPORTED_10000baseR_FEC))
			lport->link_supported_speeds |= FC_PORTSPEED_10GBIT;

		if (ecmd.supported & (SUPPORTED_20000baseMLD2_Full |
		                      SUPPORTED_20000baseKR2_Full))
			lport->link_supported_speeds |= FC_PORTSPEED_20GBIT;

		if (ecmd.supported & (SUPPORTED_40000baseKR4_Full |
		                      SUPPORTED_40000baseCR4_Full |
		                      SUPPORTED_40000baseSR4_Full |
		                      SUPPORTED_40000baseLR4_Full))
			lport->link_supported_speeds |= FC_PORTSPEED_40GBIT;

		switch (ethtool_cmd_speed(&ecmd)) {
		case SPEED_1000:
			lport->link_speed = FC_PORTSPEED_1GBIT;
@@ -111,6 +129,15 @@ int fcoe_link_speed_update(struct fc_lport *lport)
		case SPEED_10000:
			lport->link_speed = FC_PORTSPEED_10GBIT;
			break;
		case 20000:
			lport->link_speed = FC_PORTSPEED_20GBIT;
			break;
		case 40000:
			lport->link_speed = FC_PORTSPEED_40GBIT;
			break;
		default:
			lport->link_speed = FC_PORTSPEED_UNKNOWN;
			break;
		}
		return 0;
	}