aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlx4/main.c
diff options
context:
space:
mode:
authorYevgeny Petrilin <yevgenyp@mellanox.co.il>2011-12-18 23:00:26 -0500
committerDavid S. Miller <davem@davemloft.net>2011-12-19 14:57:06 -0500
commit58a60168d12c4e5be21c29420a3de4a41ef3470f (patch)
tree407a7f5c7ef86a4346577ce1860bf686d40d4b93 /drivers/net/ethernet/mellanox/mlx4/main.c
parent9f6e20cee6253c4ca5faacba8dbd09ebe70132ed (diff)
mlx4: capability for link sensing
For ConnectX3 devices, we allow link sensing only if FW explicitly reported it supports the feature. For older versions (ConnectX1 and 2), if the card supports both link layer types (Ethenet and Infiniband), link sensing is supported. Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/main.c')
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/main.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index b969bfb569e3..8f7314394cc2 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -274,6 +274,10 @@ static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
274 dev->caps.stat_rate_support = dev_cap->stat_rate_support; 274 dev->caps.stat_rate_support = dev_cap->stat_rate_support;
275 dev->caps.max_gso_sz = dev_cap->max_gso_sz; 275 dev->caps.max_gso_sz = dev_cap->max_gso_sz;
276 276
277 /* Sense port always allowed on supported devices for ConnectX1 and 2 */
278 if (dev->pdev->device != 0x1003)
279 dev->caps.flags |= MLX4_DEV_CAP_FLAG_SENSE_SUPPORT;
280
277 dev->caps.log_num_macs = log_num_mac; 281 dev->caps.log_num_macs = log_num_mac;
278 dev->caps.log_num_vlans = MLX4_LOG_NUM_VLANS; 282 dev->caps.log_num_vlans = MLX4_LOG_NUM_VLANS;
279 dev->caps.log_num_prios = use_prio ? 3 : 0; 283 dev->caps.log_num_prios = use_prio ? 3 : 0;
@@ -311,7 +315,8 @@ static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
311 } 315 }
312 dev->caps.possible_type[i] = dev->caps.port_type[i]; 316 dev->caps.possible_type[i] = dev->caps.port_type[i];
313 mlx4_priv(dev)->sense.sense_allowed[i] = 317 mlx4_priv(dev)->sense.sense_allowed[i] =
314 dev->caps.supported_type[i] == MLX4_PORT_TYPE_AUTO; 318 ((dev->caps.supported_type[i] == MLX4_PORT_TYPE_AUTO) &&
319 (dev->caps.flags & MLX4_DEV_CAP_FLAG_SENSE_SUPPORT));
315 320
316 if (dev->caps.log_num_macs > dev_cap->log_max_macs[i]) { 321 if (dev->caps.log_num_macs > dev_cap->log_max_macs[i]) {
317 dev->caps.log_num_macs = dev_cap->log_max_macs[i]; 322 dev->caps.log_num_macs = dev_cap->log_max_macs[i];
@@ -583,7 +588,8 @@ static ssize_t set_port_type(struct device *dev,
583 types[i] = mdev->caps.port_type[i+1]; 588 types[i] = mdev->caps.port_type[i+1];
584 } 589 }
585 590
586 if (!(mdev->caps.flags & MLX4_DEV_CAP_FLAG_DPDP)) { 591 if (!(mdev->caps.flags & MLX4_DEV_CAP_FLAG_DPDP) &&
592 !(mdev->caps.flags & MLX4_DEV_CAP_FLAG_SENSE_SUPPORT)) {
587 for (i = 1; i <= mdev->caps.num_ports; i++) { 593 for (i = 1; i <= mdev->caps.num_ports; i++) {
588 if (mdev->caps.possible_type[i] == MLX4_PORT_TYPE_AUTO) { 594 if (mdev->caps.possible_type[i] == MLX4_PORT_TYPE_AUTO) {
589 mdev->caps.possible_type[i] = mdev->caps.port_type[i]; 595 mdev->caps.possible_type[i] = mdev->caps.port_type[i];