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

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
...@@ -1153,6 +1153,10 @@ struct ethtool_ops { ...@@ -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 { ...@@ -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
......
...@@ -531,6 +531,7 @@ static int prb_calc_retire_blk_tmo(struct packet_sock *po, ...@@ -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, ...@@ -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;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment