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

Commit e440cf2c authored by parav.pandit@emulex.com's avatar parav.pandit@emulex.com Committed by David S. Miller
Browse files

net: added support for 40GbE link.



1. removed code replication for tov calculation for 1G, 10G and
made is common for speed > 1G (1G, 10G, 40G, 100G).
2. defines values for #4 different 40G Phys (KR4, LF4, SR4, CR4)

Signed-off-by: default avatarParav Pandit <parav.pandit@emulex.com>
Reviewed-by: default avatarBen Hutchings <bhutchings@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 22911fc5
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -1153,6 +1153,10 @@ struct ethtool_ops {
#define SUPPORTED_10000baseR_FEC	(1 << 20)
#define SUPPORTED_10000baseR_FEC	(1 << 20)
#define SUPPORTED_20000baseMLD2_Full	(1 << 21)
#define SUPPORTED_20000baseMLD2_Full	(1 << 21)
#define SUPPORTED_20000baseKR2_Full	(1 << 22)
#define SUPPORTED_20000baseKR2_Full	(1 << 22)
#define SUPPORTED_40000baseKR4_Full	(1 << 23)
#define SUPPORTED_40000baseCR4_Full	(1 << 24)
#define SUPPORTED_40000baseSR4_Full	(1 << 25)
#define SUPPORTED_40000baseLR4_Full	(1 << 26)


/* Indicates what features are advertised by the interface. */
/* Indicates what features are advertised by the interface. */
#define ADVERTISED_10baseT_Half		(1 << 0)
#define ADVERTISED_10baseT_Half		(1 << 0)
@@ -1178,6 +1182,10 @@ struct ethtool_ops {
#define ADVERTISED_10000baseR_FEC	(1 << 20)
#define ADVERTISED_10000baseR_FEC	(1 << 20)
#define ADVERTISED_20000baseMLD2_Full	(1 << 21)
#define ADVERTISED_20000baseMLD2_Full	(1 << 21)
#define ADVERTISED_20000baseKR2_Full	(1 << 22)
#define ADVERTISED_20000baseKR2_Full	(1 << 22)
#define ADVERTISED_40000baseKR4_Full	(1 << 23)
#define ADVERTISED_40000baseCR4_Full	(1 << 24)
#define ADVERTISED_40000baseSR4_Full	(1 << 25)
#define ADVERTISED_40000baseLR4_Full	(1 << 26)


/* The following are all involved in forcing a particular link
/* The following are all involved in forcing a particular link
 * mode for the device for setting things.  When getting the
 * mode for the device for setting things.  When getting the
+6 −12
Original line number Original line Diff line number Diff line
@@ -531,6 +531,7 @@ static int prb_calc_retire_blk_tmo(struct packet_sock *po,
	unsigned int mbits = 0, msec = 0, div = 0, tmo = 0;
	unsigned int mbits = 0, msec = 0, div = 0, tmo = 0;
	struct ethtool_cmd ecmd;
	struct ethtool_cmd ecmd;
	int err;
	int err;
	u32 speed;


	rtnl_lock();
	rtnl_lock();
	dev = __dev_get_by_index(sock_net(&po->sk), po->ifindex);
	dev = __dev_get_by_index(sock_net(&po->sk), po->ifindex);
@@ -539,25 +540,18 @@ static int prb_calc_retire_blk_tmo(struct packet_sock *po,
		return DEFAULT_PRB_RETIRE_TOV;
		return DEFAULT_PRB_RETIRE_TOV;
	}
	}
	err = __ethtool_get_settings(dev, &ecmd);
	err = __ethtool_get_settings(dev, &ecmd);
	speed = ethtool_cmd_speed(&ecmd);
	rtnl_unlock();
	rtnl_unlock();
	if (!err) {
	if (!err) {
		switch (ecmd.speed) {
		case SPEED_10000:
			msec = 1;
			div = 10000/1000;
			break;
		case SPEED_1000:
			msec = 1;
			div = 1000/1000;
			break;
		/*
		/*
		 * If the link speed is so slow you don't really
		 * If the link speed is so slow you don't really
		 * need to worry about perf anyways
		 * need to worry about perf anyways
		 */
		 */
		case SPEED_100:
		if (speed < SPEED_1000 || speed == SPEED_UNKNOWN) {
		case SPEED_10:
		default:
			return DEFAULT_PRB_RETIRE_TOV;
			return DEFAULT_PRB_RETIRE_TOV;
		} else {
			msec = 1;
			div = speed / 1000;
		}
		}
	}
	}