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: Parav Pandit <parav.pandit@emulex.com> Reviewed-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
22911fc581
commit
e440cf2ca0
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user