IB/mlx4: Advertise MW support
authorShani Michaeli <shanim@mellanox.com>
Wed, 6 Feb 2013 16:19:16 +0000 (16:19 +0000)
committerRoland Dreier <roland@purestorage.com>
Mon, 25 Feb 2013 18:44:32 +0000 (10:44 -0800)
Indicate memory windows support through device capabilities, kernel
verb entries and the relevant uverbs command mask entries.

Signed-off-by: Haggai Eran <haggaie@mellanox.com>
Signed-off-by: Shani Michaeli <shanim@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/mlx4/main.c

index 3fdd1c1..23d7343 100644 (file)
@@ -137,6 +137,14 @@ static int mlx4_ib_query_device(struct ib_device *ibdev,
                props->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
        if (dev->dev->caps.flags & MLX4_DEV_CAP_FLAG_XRC)
                props->device_cap_flags |= IB_DEVICE_XRC;
+       if (dev->dev->caps.flags & MLX4_DEV_CAP_FLAG_MEM_WINDOW)
+               props->device_cap_flags |= IB_DEVICE_MEM_WINDOW;
+       if (dev->dev->caps.bmme_flags & MLX4_BMME_FLAG_TYPE_2_WIN) {
+               if (dev->dev->caps.bmme_flags & MLX4_BMME_FLAG_WIN_TYPE_2B)
+                       props->device_cap_flags |= IB_DEVICE_MEM_WINDOW_TYPE_2B;
+               else
+                       props->device_cap_flags |= IB_DEVICE_MEM_WINDOW_TYPE_2A;
+       }
 
        props->vendor_id           = be32_to_cpup((__be32 *) (out_mad->data + 36)) &
                0xffffff;
@@ -1434,6 +1442,17 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
                ibdev->ib_dev.dealloc_fmr       = mlx4_ib_fmr_dealloc;
        }
 
+       if (dev->caps.flags & MLX4_DEV_CAP_FLAG_MEM_WINDOW ||
+           dev->caps.bmme_flags & MLX4_BMME_FLAG_TYPE_2_WIN) {
+               ibdev->ib_dev.alloc_mw = mlx4_ib_alloc_mw;
+               ibdev->ib_dev.bind_mw = mlx4_ib_bind_mw;
+               ibdev->ib_dev.dealloc_mw = mlx4_ib_dealloc_mw;
+
+               ibdev->ib_dev.uverbs_cmd_mask |=
+                       (1ull << IB_USER_VERBS_CMD_ALLOC_MW) |
+                       (1ull << IB_USER_VERBS_CMD_DEALLOC_MW);
+       }
+
        if (dev->caps.flags & MLX4_DEV_CAP_FLAG_XRC) {
                ibdev->ib_dev.alloc_xrcd = mlx4_ib_alloc_xrcd;
                ibdev->ib_dev.dealloc_xrcd = mlx4_ib_dealloc_xrcd;