aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOr Gerlitz <ogerlitz@mellanox.com>2011-11-26 14:54:58 -0500
committerDavid S. Miller <davem@davemloft.net>2011-11-27 17:17:03 -0500
commit876f6e67d1c617c098c67934a8d00b065bb9688b (patch)
tree1d66f498806971c4369f6d152046bcb163ee528f
parentfd4f862717ece652a76b4bb6c6d2c9656dbf0f7e (diff)
net/mlx4: move RSS related definitions to be global
Towards adding RSS support for IB drivers/application who use the mlx4 HW, make the RSS related definitions global and change the mlx4_en driver to use them. Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Shlomo Pongratz <shlomop@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_resources.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_rx.c10
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mlx4_en.h10
-rw-r--r--include/linux/mlx4/qp.h27
4 files changed, 34 insertions, 15 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_resources.c b/drivers/net/ethernet/mellanox/mlx4/en_resources.c
index 0dfb4ec8a9dd..bcbc54c16947 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_resources.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_resources.c
@@ -44,7 +44,7 @@ void mlx4_en_fill_qp_context(struct mlx4_en_priv *priv, int size, int stride,
44 struct mlx4_en_dev *mdev = priv->mdev; 44 struct mlx4_en_dev *mdev = priv->mdev;
45 45
46 memset(context, 0, sizeof *context); 46 memset(context, 0, sizeof *context);
47 context->flags = cpu_to_be32(7 << 16 | rss << 13); 47 context->flags = cpu_to_be32(7 << 16 | rss << MLX4_RSS_QPC_FLAG_OFFSET);
48 context->pd = cpu_to_be32(mdev->priv_pdn); 48 context->pd = cpu_to_be32(mdev->priv_pdn);
49 context->mtu_msgmax = 0xff; 49 context->mtu_msgmax = 0xff;
50 if (!is_tx && !rss) 50 if (!is_tx && !rss)
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
index c2df6c358603..d4bad5d57fb7 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
@@ -837,9 +837,10 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv)
837 struct mlx4_en_dev *mdev = priv->mdev; 837 struct mlx4_en_dev *mdev = priv->mdev;
838 struct mlx4_en_rss_map *rss_map = &priv->rss_map; 838 struct mlx4_en_rss_map *rss_map = &priv->rss_map;
839 struct mlx4_qp_context context; 839 struct mlx4_qp_context context;
840 struct mlx4_en_rss_context *rss_context; 840 struct mlx4_rss_context *rss_context;
841 void *ptr; 841 void *ptr;
842 u8 rss_mask = 0x3f; 842 u8 rss_mask = (MLX4_RSS_IPV4 | MLX4_RSS_TCP_IPV4 | MLX4_RSS_IPV6 |
843 MLX4_RSS_TCP_IPV6 | MLX4_RSS_UDP_IPV4 | MLX4_RSS_UDP_IPV6);
843 int i, qpn; 844 int i, qpn;
844 int err = 0; 845 int err = 0;
845 int good_qps = 0; 846 int good_qps = 0;
@@ -877,13 +878,14 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv)
877 mlx4_en_fill_qp_context(priv, 0, 0, 0, 1, priv->base_qpn, 878 mlx4_en_fill_qp_context(priv, 0, 0, 0, 1, priv->base_qpn,
878 priv->rx_ring[0].cqn, &context); 879 priv->rx_ring[0].cqn, &context);
879 880
880 ptr = ((void *) &context) + 0x3c; 881 ptr = ((void *) &context) + offsetof(struct mlx4_qp_context, pri_path)
882 + MLX4_RSS_OFFSET_IN_QPC_PRI_PATH;
881 rss_context = ptr; 883 rss_context = ptr;
882 rss_context->base_qpn = cpu_to_be32(ilog2(priv->rx_ring_num) << 24 | 884 rss_context->base_qpn = cpu_to_be32(ilog2(priv->rx_ring_num) << 24 |
883 (rss_map->base_qpn)); 885 (rss_map->base_qpn));
884 rss_context->default_qpn = cpu_to_be32(rss_map->base_qpn); 886 rss_context->default_qpn = cpu_to_be32(rss_map->base_qpn);
885 rss_context->flags = rss_mask; 887 rss_context->flags = rss_mask;
886 rss_context->hash_fn = 1; 888 rss_context->hash_fn = MLX4_RSS_HASH_TOP;
887 for (i = 0; i < 10; i++) 889 for (i = 0; i < 10; i++)
888 rss_context->rss_key[i] = rsskey[i]; 890 rss_context->rss_key[i] = rsskey[i];
889 891
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
index 207b5add3ca8..ef7dfcff588d 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
@@ -366,16 +366,6 @@ struct mlx4_en_rss_map {
366 enum mlx4_qp_state indir_state; 366 enum mlx4_qp_state indir_state;
367}; 367};
368 368
369struct mlx4_en_rss_context {
370 __be32 base_qpn;
371 __be32 default_qpn;
372 u16 reserved;
373 u8 hash_fn;
374 u8 flags;
375 __be32 rss_key[10];
376 __be32 base_qpn_udp;
377};
378
379struct mlx4_en_port_state { 369struct mlx4_en_port_state {
380 int link_state; 370 int link_state;
381 int link_speed; 371 int link_speed;
diff --git a/include/linux/mlx4/qp.h b/include/linux/mlx4/qp.h
index 48cc4cb97858..6562ff6aa9d6 100644
--- a/include/linux/mlx4/qp.h
+++ b/include/linux/mlx4/qp.h
@@ -97,6 +97,33 @@ enum {
97 MLX4_QP_BIT_RIC = 1 << 4, 97 MLX4_QP_BIT_RIC = 1 << 4,
98}; 98};
99 99
100enum {
101 MLX4_RSS_HASH_XOR = 0,
102 MLX4_RSS_HASH_TOP = 1,
103
104 MLX4_RSS_UDP_IPV6 = 1 << 0,
105 MLX4_RSS_UDP_IPV4 = 1 << 1,
106 MLX4_RSS_TCP_IPV6 = 1 << 2,
107 MLX4_RSS_IPV6 = 1 << 3,
108 MLX4_RSS_TCP_IPV4 = 1 << 4,
109 MLX4_RSS_IPV4 = 1 << 5,
110
111 /* offset of mlx4_rss_context within mlx4_qp_context.pri_path */
112 MLX4_RSS_OFFSET_IN_QPC_PRI_PATH = 0x24,
113 /* offset of being RSS indirection QP within mlx4_qp_context.flags */
114 MLX4_RSS_QPC_FLAG_OFFSET = 13,
115};
116
117struct mlx4_rss_context {
118 __be32 base_qpn;
119 __be32 default_qpn;
120 u16 reserved;
121 u8 hash_fn;
122 u8 flags;
123 __be32 rss_key[10];
124 __be32 base_qpn_udp;
125};
126
100struct mlx4_qp_path { 127struct mlx4_qp_path {
101 u8 fl; 128 u8 fl;
102 u8 reserved1[2]; 129 u8 reserved1[2];