aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlx4/fw.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/fw.c')
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/fw.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/fw.c b/drivers/net/ethernet/mellanox/mlx4/fw.c
index 24429a99190d..68f5cd6cb3c7 100644
--- a/drivers/net/ethernet/mellanox/mlx4/fw.c
+++ b/drivers/net/ethernet/mellanox/mlx4/fw.c
@@ -118,6 +118,20 @@ static void dump_dev_cap_flags(struct mlx4_dev *dev, u64 flags)
118 mlx4_dbg(dev, " %s\n", fname[i]); 118 mlx4_dbg(dev, " %s\n", fname[i]);
119} 119}
120 120
121static void dump_dev_cap_flags2(struct mlx4_dev *dev, u64 flags)
122{
123 static const char * const fname[] = {
124 [0] = "RSS support",
125 [1] = "RSS Toeplitz Hash Function support",
126 [2] = "RSS XOR Hash Function support"
127 };
128 int i;
129
130 for (i = 0; i < ARRAY_SIZE(fname); ++i)
131 if (fname[i] && (flags & (1LL << i)))
132 mlx4_dbg(dev, " %s\n", fname[i]);
133}
134
121int mlx4_MOD_STAT_CFG(struct mlx4_dev *dev, struct mlx4_mod_stat_cfg *cfg) 135int mlx4_MOD_STAT_CFG(struct mlx4_dev *dev, struct mlx4_mod_stat_cfg *cfg)
122{ 136{
123 struct mlx4_cmd_mailbox *mailbox; 137 struct mlx4_cmd_mailbox *mailbox;
@@ -346,6 +360,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
346#define QUERY_DEV_CAP_MAX_REQ_QP_OFFSET 0x29 360#define QUERY_DEV_CAP_MAX_REQ_QP_OFFSET 0x29
347#define QUERY_DEV_CAP_MAX_RES_QP_OFFSET 0x2b 361#define QUERY_DEV_CAP_MAX_RES_QP_OFFSET 0x2b
348#define QUERY_DEV_CAP_MAX_GSO_OFFSET 0x2d 362#define QUERY_DEV_CAP_MAX_GSO_OFFSET 0x2d
363#define QUERY_DEV_CAP_RSS_OFFSET 0x2e
349#define QUERY_DEV_CAP_MAX_RDMA_OFFSET 0x2f 364#define QUERY_DEV_CAP_MAX_RDMA_OFFSET 0x2f
350#define QUERY_DEV_CAP_RSZ_SRQ_OFFSET 0x33 365#define QUERY_DEV_CAP_RSZ_SRQ_OFFSET 0x33
351#define QUERY_DEV_CAP_ACK_DELAY_OFFSET 0x35 366#define QUERY_DEV_CAP_ACK_DELAY_OFFSET 0x35
@@ -390,6 +405,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
390#define QUERY_DEV_CAP_RSVD_LKEY_OFFSET 0x98 405#define QUERY_DEV_CAP_RSVD_LKEY_OFFSET 0x98
391#define QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET 0xa0 406#define QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET 0xa0
392 407
408 dev_cap->flags2 = 0;
393 mailbox = mlx4_alloc_cmd_mailbox(dev); 409 mailbox = mlx4_alloc_cmd_mailbox(dev);
394 if (IS_ERR(mailbox)) 410 if (IS_ERR(mailbox))
395 return PTR_ERR(mailbox); 411 return PTR_ERR(mailbox);
@@ -439,6 +455,17 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
439 else 455 else
440 dev_cap->max_gso_sz = 1 << field; 456 dev_cap->max_gso_sz = 1 << field;
441 457
458 MLX4_GET(field, outbox, QUERY_DEV_CAP_RSS_OFFSET);
459 if (field & 0x20)
460 dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_RSS_XOR;
461 if (field & 0x10)
462 dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_RSS_TOP;
463 field &= 0xf;
464 if (field) {
465 dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_RSS;
466 dev_cap->max_rss_tbl_sz = 1 << field;
467 } else
468 dev_cap->max_rss_tbl_sz = 0;
442 MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_RDMA_OFFSET); 469 MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_RDMA_OFFSET);
443 dev_cap->max_rdma_global = 1 << (field & 0x3f); 470 dev_cap->max_rdma_global = 1 << (field & 0x3f);
444 MLX4_GET(field, outbox, QUERY_DEV_CAP_ACK_DELAY_OFFSET); 471 MLX4_GET(field, outbox, QUERY_DEV_CAP_ACK_DELAY_OFFSET);
@@ -632,8 +659,10 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
632 dev_cap->max_rq_desc_sz, dev_cap->max_rq_sg); 659 dev_cap->max_rq_desc_sz, dev_cap->max_rq_sg);
633 mlx4_dbg(dev, "Max GSO size: %d\n", dev_cap->max_gso_sz); 660 mlx4_dbg(dev, "Max GSO size: %d\n", dev_cap->max_gso_sz);
634 mlx4_dbg(dev, "Max counters: %d\n", dev_cap->max_counters); 661 mlx4_dbg(dev, "Max counters: %d\n", dev_cap->max_counters);
662 mlx4_dbg(dev, "Max RSS Table size: %d\n", dev_cap->max_rss_tbl_sz);
635 663
636 dump_dev_cap_flags(dev, dev_cap->flags); 664 dump_dev_cap_flags(dev, dev_cap->flags);
665 dump_dev_cap_flags2(dev, dev_cap->flags2);
637 666
638out: 667out:
639 mlx4_free_cmd_mailbox(dev, mailbox); 668 mlx4_free_cmd_mailbox(dev, mailbox);