aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaeed Mahameed <saeedm@mellanox.com>2014-10-27 05:37:39 -0400
committerDavid S. Miller <davem@davemloft.net>2014-10-28 17:18:00 -0400
commitdcf972a334dd76975bf144ca57350c1f3132c947 (patch)
tree83ccd24288aaee20b640bb5f31c04d661bbbcd58
parenta53e3e8c1db547981e13d1ebf24a659bd4e87710 (diff)
ethtool, net/mlx4_en: Add 100M, 20G, 56G speeds ethtool reporting support
Added 100M, 20G and 56G ethtool speed reporting support. Update mlx4_en_test_speed self test with the new speeds. Defined new link speeds in include/uapi/linux/ethtool.h: +#define SPEED_20000 20000 +#define SPEED_40000 40000 +#define SPEED_56000 56000 Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: Amir Vadai <amirv@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_port.c15
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_port.h9
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_selftest.c12
-rw-r--r--include/uapi/linux/ethtool.h14
4 files changed, 39 insertions, 11 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_port.c b/drivers/net/ethernet/mellanox/mlx4/en_port.c
index 0a0261d128b9..afd303662d17 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_port.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_port.c
@@ -91,15 +91,24 @@ int mlx4_en_QUERY_PORT(struct mlx4_en_dev *mdev, u8 port)
91 * already synchronized, no need in locking */ 91 * already synchronized, no need in locking */
92 state->link_state = !!(qport_context->link_up & MLX4_EN_LINK_UP_MASK); 92 state->link_state = !!(qport_context->link_up & MLX4_EN_LINK_UP_MASK);
93 switch (qport_context->link_speed & MLX4_EN_SPEED_MASK) { 93 switch (qport_context->link_speed & MLX4_EN_SPEED_MASK) {
94 case MLX4_EN_100M_SPEED:
95 state->link_speed = SPEED_100;
96 break;
94 case MLX4_EN_1G_SPEED: 97 case MLX4_EN_1G_SPEED:
95 state->link_speed = 1000; 98 state->link_speed = SPEED_1000;
96 break; 99 break;
97 case MLX4_EN_10G_SPEED_XAUI: 100 case MLX4_EN_10G_SPEED_XAUI:
98 case MLX4_EN_10G_SPEED_XFI: 101 case MLX4_EN_10G_SPEED_XFI:
99 state->link_speed = 10000; 102 state->link_speed = SPEED_10000;
103 break;
104 case MLX4_EN_20G_SPEED:
105 state->link_speed = SPEED_20000;
100 break; 106 break;
101 case MLX4_EN_40G_SPEED: 107 case MLX4_EN_40G_SPEED:
102 state->link_speed = 40000; 108 state->link_speed = SPEED_40000;
109 break;
110 case MLX4_EN_56G_SPEED:
111 state->link_speed = SPEED_56000;
103 break; 112 break;
104 default: 113 default:
105 state->link_speed = -1; 114 state->link_speed = -1;
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_port.h b/drivers/net/ethernet/mellanox/mlx4/en_port.h
index 745090b49d9e..a5fc93bfe5da 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_port.h
+++ b/drivers/net/ethernet/mellanox/mlx4/en_port.h
@@ -54,10 +54,13 @@ enum {
54}; 54};
55 55
56enum { 56enum {
57 MLX4_EN_1G_SPEED = 0x02, 57 MLX4_EN_100M_SPEED = 0x04,
58 MLX4_EN_10G_SPEED_XFI = 0x01,
59 MLX4_EN_10G_SPEED_XAUI = 0x00, 58 MLX4_EN_10G_SPEED_XAUI = 0x00,
59 MLX4_EN_10G_SPEED_XFI = 0x01,
60 MLX4_EN_1G_SPEED = 0x02,
61 MLX4_EN_20G_SPEED = 0x08,
60 MLX4_EN_40G_SPEED = 0x40, 62 MLX4_EN_40G_SPEED = 0x40,
63 MLX4_EN_56G_SPEED = 0x20,
61 MLX4_EN_OTHER_SPEED = 0x0f, 64 MLX4_EN_OTHER_SPEED = 0x0f,
62}; 65};
63 66
@@ -68,7 +71,7 @@ struct mlx4_en_query_port_context {
68 __be16 mtu; 71 __be16 mtu;
69 u8 reserved2; 72 u8 reserved2;
70 u8 link_speed; 73 u8 link_speed;
71#define MLX4_EN_SPEED_MASK 0x43 74#define MLX4_EN_SPEED_MASK 0x6f
72 u16 reserved3[5]; 75 u16 reserved3[5];
73 __be64 mac; 76 __be64 mac;
74 u8 transceiver; 77 u8 transceiver;
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_selftest.c b/drivers/net/ethernet/mellanox/mlx4/en_selftest.c
index 49d5afc7cfb8..2d8ee66138e8 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_selftest.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_selftest.c
@@ -129,11 +129,15 @@ static int mlx4_en_test_speed(struct mlx4_en_priv *priv)
129 if (mlx4_en_QUERY_PORT(priv->mdev, priv->port)) 129 if (mlx4_en_QUERY_PORT(priv->mdev, priv->port))
130 return -ENOMEM; 130 return -ENOMEM;
131 131
132 /* The device supports 1G, 10G and 40G speeds */ 132 /* The device supports 100M, 1G, 10G, 20G, 40G and 56G speed */
133 if (priv->port_state.link_speed != 1000 && 133 if (priv->port_state.link_speed != SPEED_100 &&
134 priv->port_state.link_speed != 10000 && 134 priv->port_state.link_speed != SPEED_1000 &&
135 priv->port_state.link_speed != 40000) 135 priv->port_state.link_speed != SPEED_10000 &&
136 priv->port_state.link_speed != SPEED_20000 &&
137 priv->port_state.link_speed != SPEED_40000 &&
138 priv->port_state.link_speed != SPEED_56000)
136 return priv->port_state.link_speed; 139 return priv->port_state.link_speed;
140
137 return 0; 141 return 0;
138} 142}
139 143
diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
index b6acd78b821c..eb2095b42fbb 100644
--- a/include/uapi/linux/ethtool.h
+++ b/include/uapi/linux/ethtool.h
@@ -1213,6 +1213,10 @@ enum ethtool_sfeatures_retval_bits {
1213#define SUPPORTED_40000baseCR4_Full (1 << 24) 1213#define SUPPORTED_40000baseCR4_Full (1 << 24)
1214#define SUPPORTED_40000baseSR4_Full (1 << 25) 1214#define SUPPORTED_40000baseSR4_Full (1 << 25)
1215#define SUPPORTED_40000baseLR4_Full (1 << 26) 1215#define SUPPORTED_40000baseLR4_Full (1 << 26)
1216#define SUPPORTED_56000baseKR4_Full (1 << 27)
1217#define SUPPORTED_56000baseCR4_Full (1 << 28)
1218#define SUPPORTED_56000baseSR4_Full (1 << 29)
1219#define SUPPORTED_56000baseLR4_Full (1 << 30)
1216 1220
1217#define ADVERTISED_10baseT_Half (1 << 0) 1221#define ADVERTISED_10baseT_Half (1 << 0)
1218#define ADVERTISED_10baseT_Full (1 << 1) 1222#define ADVERTISED_10baseT_Full (1 << 1)
@@ -1241,6 +1245,10 @@ enum ethtool_sfeatures_retval_bits {
1241#define ADVERTISED_40000baseCR4_Full (1 << 24) 1245#define ADVERTISED_40000baseCR4_Full (1 << 24)
1242#define ADVERTISED_40000baseSR4_Full (1 << 25) 1246#define ADVERTISED_40000baseSR4_Full (1 << 25)
1243#define ADVERTISED_40000baseLR4_Full (1 << 26) 1247#define ADVERTISED_40000baseLR4_Full (1 << 26)
1248#define ADVERTISED_56000baseKR4_Full (1 << 27)
1249#define ADVERTISED_56000baseCR4_Full (1 << 28)
1250#define ADVERTISED_56000baseSR4_Full (1 << 29)
1251#define ADVERTISED_56000baseLR4_Full (1 << 30)
1244 1252
1245/* The following are all involved in forcing a particular link 1253/* The following are all involved in forcing a particular link
1246 * mode for the device for setting things. When getting the 1254 * mode for the device for setting things. When getting the
@@ -1248,12 +1256,16 @@ enum ethtool_sfeatures_retval_bits {
1248 * it was forced up into this mode or autonegotiated. 1256 * it was forced up into this mode or autonegotiated.
1249 */ 1257 */
1250 1258
1251/* The forced speed, 10Mb, 100Mb, gigabit, 2.5Gb, 10GbE. */ 1259/* The forced speed, 10Mb, 100Mb, gigabit, [2.5|10|20|40|56]GbE. */
1252#define SPEED_10 10 1260#define SPEED_10 10
1253#define SPEED_100 100 1261#define SPEED_100 100
1254#define SPEED_1000 1000 1262#define SPEED_1000 1000
1255#define SPEED_2500 2500 1263#define SPEED_2500 2500
1256#define SPEED_10000 10000 1264#define SPEED_10000 10000
1265#define SPEED_20000 20000
1266#define SPEED_40000 40000
1267#define SPEED_56000 56000
1268
1257#define SPEED_UNKNOWN -1 1269#define SPEED_UNKNOWN -1
1258 1270
1259/* Duplex, half or full. */ 1271/* Duplex, half or full. */