diff options
author | Or Gerlitz <ogerlitz@mellanox.com> | 2011-11-26 14:54:58 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-27 17:17:03 -0500 |
commit | 876f6e67d1c617c098c67934a8d00b065bb9688b (patch) | |
tree | 1d66f498806971c4369f6d152046bcb163ee528f | |
parent | fd4f862717ece652a76b4bb6c6d2c9656dbf0f7e (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.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_rx.c | 10 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 10 | ||||
-rw-r--r-- | include/linux/mlx4/qp.h | 27 |
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 | ||
369 | struct 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 | |||
379 | struct mlx4_en_port_state { | 369 | struct 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 | ||
100 | enum { | ||
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 | |||
117 | struct 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 | |||
100 | struct mlx4_qp_path { | 127 | struct mlx4_qp_path { |
101 | u8 fl; | 128 | u8 fl; |
102 | u8 reserved1[2]; | 129 | u8 reserved1[2]; |