net/mlx4: move RSS related definitions to be global
authorOr Gerlitz <ogerlitz@mellanox.com>
Sat, 26 Nov 2011 19:54:58 +0000 (19:54 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 27 Nov 2011 22:17:03 +0000 (17:17 -0500)
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>
drivers/net/ethernet/mellanox/mlx4/en_resources.c
drivers/net/ethernet/mellanox/mlx4/en_rx.c
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
include/linux/mlx4/qp.h

index 0dfb4ec..bcbc54c 100644 (file)
@@ -44,7 +44,7 @@ void mlx4_en_fill_qp_context(struct mlx4_en_priv *priv, int size, int stride,
        struct mlx4_en_dev *mdev = priv->mdev;
 
        memset(context, 0, sizeof *context);
-       context->flags = cpu_to_be32(7 << 16 | rss << 13);
+       context->flags = cpu_to_be32(7 << 16 | rss << MLX4_RSS_QPC_FLAG_OFFSET);
        context->pd = cpu_to_be32(mdev->priv_pdn);
        context->mtu_msgmax = 0xff;
        if (!is_tx && !rss)
index c2df6c3..d4bad5d 100644 (file)
@@ -837,9 +837,10 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv)
        struct mlx4_en_dev *mdev = priv->mdev;
        struct mlx4_en_rss_map *rss_map = &priv->rss_map;
        struct mlx4_qp_context context;
-       struct mlx4_en_rss_context *rss_context;
+       struct mlx4_rss_context *rss_context;
        void *ptr;
-       u8 rss_mask = 0x3f;
+       u8 rss_mask = (MLX4_RSS_IPV4 | MLX4_RSS_TCP_IPV4 | MLX4_RSS_IPV6 |
+               MLX4_RSS_TCP_IPV6 | MLX4_RSS_UDP_IPV4 | MLX4_RSS_UDP_IPV6);
        int i, qpn;
        int err = 0;
        int good_qps = 0;
@@ -877,13 +878,14 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv)
        mlx4_en_fill_qp_context(priv, 0, 0, 0, 1, priv->base_qpn,
                                priv->rx_ring[0].cqn, &context);
 
-       ptr = ((void *) &context) + 0x3c;
+       ptr = ((void *) &context) + offsetof(struct mlx4_qp_context, pri_path)
+                                       + MLX4_RSS_OFFSET_IN_QPC_PRI_PATH;
        rss_context = ptr;
        rss_context->base_qpn = cpu_to_be32(ilog2(priv->rx_ring_num) << 24 |
                                            (rss_map->base_qpn));
        rss_context->default_qpn = cpu_to_be32(rss_map->base_qpn);
        rss_context->flags = rss_mask;
-       rss_context->hash_fn = 1;
+       rss_context->hash_fn = MLX4_RSS_HASH_TOP;
        for (i = 0; i < 10; i++)
                rss_context->rss_key[i] = rsskey[i];
 
index 207b5ad..ef7dfcf 100644 (file)
@@ -366,16 +366,6 @@ struct mlx4_en_rss_map {
        enum mlx4_qp_state indir_state;
 };
 
-struct mlx4_en_rss_context {
-       __be32 base_qpn;
-       __be32 default_qpn;
-       u16 reserved;
-       u8 hash_fn;
-       u8 flags;
-       __be32 rss_key[10];
-       __be32 base_qpn_udp;
-};
-
 struct mlx4_en_port_state {
        int link_state;
        int link_speed;
index 48cc4cb..6562ff6 100644 (file)
@@ -97,6 +97,33 @@ enum {
        MLX4_QP_BIT_RIC                         = 1 <<  4,
 };
 
+enum {
+       MLX4_RSS_HASH_XOR                       = 0,
+       MLX4_RSS_HASH_TOP                       = 1,
+
+       MLX4_RSS_UDP_IPV6                       = 1 << 0,
+       MLX4_RSS_UDP_IPV4                       = 1 << 1,
+       MLX4_RSS_TCP_IPV6                       = 1 << 2,
+       MLX4_RSS_IPV6                           = 1 << 3,
+       MLX4_RSS_TCP_IPV4                       = 1 << 4,
+       MLX4_RSS_IPV4                           = 1 << 5,
+
+       /* offset of mlx4_rss_context within mlx4_qp_context.pri_path */
+       MLX4_RSS_OFFSET_IN_QPC_PRI_PATH         = 0x24,
+       /* offset of being RSS indirection QP within mlx4_qp_context.flags */
+       MLX4_RSS_QPC_FLAG_OFFSET                = 13,
+};
+
+struct mlx4_rss_context {
+       __be32                  base_qpn;
+       __be32                  default_qpn;
+       u16                     reserved;
+       u8                      hash_fn;
+       u8                      flags;
+       __be32                  rss_key[10];
+       __be32                  base_qpn_udp;
+};
+
 struct mlx4_qp_path {
        u8                      fl;
        u8                      reserved1[2];