{net,IB}/mlx5: MKey/PSV commands via mlx5 ifc
[linux-2.6-block.git] / drivers / net / ethernet / mellanox / mlx5 / core / en_main.c
index 870bea37c57cb37d8005b63f1b5b877e47280567..98fb0d8ef2d2a02725c223104c03a2e9006aba1a 100644 (file)
@@ -3228,35 +3228,34 @@ static void mlx5e_destroy_q_counter(struct mlx5e_priv *priv)
 static int mlx5e_create_umr_mkey(struct mlx5e_priv *priv)
 {
        struct mlx5_core_dev *mdev = priv->mdev;
-       struct mlx5_create_mkey_mbox_in *in;
-       struct mlx5_mkey_seg *mkc;
-       int inlen = sizeof(*in);
-       u64 npages =
-               priv->profile->max_nch(mdev) * MLX5_CHANNEL_MAX_NUM_MTTS;
+       u64 npages = priv->profile->max_nch(mdev) * MLX5_CHANNEL_MAX_NUM_MTTS;
+       int inlen = MLX5_ST_SZ_BYTES(create_mkey_in);
+       void *mkc;
+       u32 *in;
        int err;
 
        in = mlx5_vzalloc(inlen);
        if (!in)
                return -ENOMEM;
 
-       mkc = &in->seg;
-       mkc->status = MLX5_MKEY_STATUS_FREE;
-       mkc->flags = MLX5_PERM_UMR_EN |
-                    MLX5_PERM_LOCAL_READ |
-                    MLX5_PERM_LOCAL_WRITE |
-                    MLX5_ACCESS_MODE_MTT;
+       mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry);
 
-       mkc->qpn_mkey7_0 = cpu_to_be32(0xffffff << 8);
-       mkc->flags_pd = cpu_to_be32(mdev->mlx5e_res.pdn);
-       mkc->len = cpu_to_be64(npages << PAGE_SHIFT);
-       mkc->xlt_oct_size = cpu_to_be32(mlx5e_get_mtt_octw(npages));
-       mkc->log2_page_size = PAGE_SHIFT;
+       MLX5_SET(mkc, mkc, free, 1);
+       MLX5_SET(mkc, mkc, umr_en, 1);
+       MLX5_SET(mkc, mkc, lw, 1);
+       MLX5_SET(mkc, mkc, lr, 1);
+       MLX5_SET(mkc, mkc, access_mode, MLX5_MKC_ACCESS_MODE_MTT);
 
-       err = mlx5_core_create_mkey(mdev, &priv->umr_mkey, in, inlen, NULL,
-                                   NULL, NULL);
+       MLX5_SET(mkc, mkc, qpn, 0xffffff);
+       MLX5_SET(mkc, mkc, pd, mdev->mlx5e_res.pdn);
+       MLX5_SET64(mkc, mkc, len, npages << PAGE_SHIFT);
+       MLX5_SET(mkc, mkc, translations_octword_size,
+                mlx5e_get_mtt_octw(npages));
+       MLX5_SET(mkc, mkc, log_page_size, PAGE_SHIFT);
 
-       kvfree(in);
+       err = mlx5_core_create_mkey(mdev, &priv->umr_mkey, in, inlen);
 
+       kvfree(in);
        return err;
 }