]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
net: added support for 40GbE link.
authorparav.pandit@emulex.com <parav.pandit@emulex.com>
Wed, 27 Jun 2012 03:56:12 +0000 (03:56 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 27 Jun 2012 22:42:24 +0000 (15:42 -0700)
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>
include/linux/ethtool.h
net/packet/af_packet.c

index 297370a6cb184f9eafbb2ac207552c50ca2feed4..21eff418091bb6d943740990cd24a7cf9d39342e 100644 (file)
@@ -1153,6 +1153,10 @@ struct ethtool_ops {
 #define SUPPORTED_10000baseR_FEC       (1 << 20)
 #define SUPPORTED_20000baseMLD2_Full   (1 << 21)
 #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. */
 #define ADVERTISED_10baseT_Half                (1 << 0)
@@ -1178,6 +1182,10 @@ struct ethtool_ops {
 #define ADVERTISED_10000baseR_FEC      (1 << 20)
 #define ADVERTISED_20000baseMLD2_Full  (1 << 21)
 #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
  * mode for the device for setting things.  When getting the
index 8a10d5b3c8320b4d4f705f4bc4cc7db21d415dbf..ceaca7c134a011b659bc439dff6de58269b532b4 100644 (file)
@@ -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;
        struct ethtool_cmd ecmd;
        int err;
+       u32 speed;
 
        rtnl_lock();
        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;
        }
        err = __ethtool_get_settings(dev, &ecmd);
+       speed = ethtool_cmd_speed(&ecmd);
        rtnl_unlock();
        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
                 * need to worry about perf anyways
                 */
-               case SPEED_100:
-               case SPEED_10:
-               default:
+               if (speed < SPEED_1000 || speed == SPEED_UNKNOWN) {
                        return DEFAULT_PRB_RETIRE_TOV;
+               } else {
+                       msec = 1;
+                       div = speed / 1000;
                }
        }