diff options
author | Saeed Mahameed <saeedm@mellanox.com> | 2014-10-27 05:37:39 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-10-28 17:18:00 -0400 |
commit | dcf972a334dd76975bf144ca57350c1f3132c947 (patch) | |
tree | 83ccd24288aaee20b640bb5f31c04d661bbbcd58 | |
parent | a53e3e8c1db547981e13d1ebf24a659bd4e87710 (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.c | 15 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_port.h | 9 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_selftest.c | 12 | ||||
-rw-r--r-- | include/uapi/linux/ethtool.h | 14 |
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 | ||
56 | enum { | 56 | enum { |
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. */ |