Skip to content

Commit 4bda1d5

Browse files
Konstantin Taranovrleon
authored andcommitted
RDMA/mana_ib: Implement port parameters
Implement port parameters for RNIC: 1) extend query_port() method 2) implement get_link_layer() 3) implement query_pkey() Only port 1 can store GIDs. Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com> Link: https://lore.kernel.org/r/1712738551-22075-4-git-send-email-kotaranov@linux.microsoft.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
1 parent 1a79c2b commit 4bda1d5

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

drivers/infiniband/hw/mana/device.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@ static const struct ib_device_ops mana_ib_dev_ops = {
2929
.destroy_rwq_ind_table = mana_ib_destroy_rwq_ind_table,
3030
.destroy_wq = mana_ib_destroy_wq,
3131
.disassociate_ucontext = mana_ib_disassociate_ucontext,
32+
.get_link_layer = mana_ib_get_link_layer,
3233
.get_port_immutable = mana_ib_get_port_immutable,
3334
.mmap = mana_ib_mmap,
3435
.modify_qp = mana_ib_modify_qp,
3536
.modify_wq = mana_ib_modify_wq,
3637
.query_device = mana_ib_query_device,
3738
.query_gid = mana_ib_query_gid,
39+
.query_pkey = mana_ib_query_pkey,
3840
.query_port = mana_ib_query_port,
3941
.reg_user_mr = mana_ib_reg_user_mr,
4042

drivers/infiniband/hw/mana/main.c

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,42 @@ int mana_ib_query_device(struct ib_device *ibdev, struct ib_device_attr *props,
555555
int mana_ib_query_port(struct ib_device *ibdev, u32 port,
556556
struct ib_port_attr *props)
557557
{
558-
/* This version doesn't return port properties */
558+
struct net_device *ndev = mana_ib_get_netdev(ibdev, port);
559+
560+
if (!ndev)
561+
return -EINVAL;
562+
563+
memset(props, 0, sizeof(*props));
564+
props->max_mtu = IB_MTU_4096;
565+
props->active_mtu = ib_mtu_int_to_enum(ndev->mtu);
566+
567+
if (netif_carrier_ok(ndev) && netif_running(ndev)) {
568+
props->state = IB_PORT_ACTIVE;
569+
props->phys_state = IB_PORT_PHYS_STATE_LINK_UP;
570+
} else {
571+
props->state = IB_PORT_DOWN;
572+
props->phys_state = IB_PORT_PHYS_STATE_DISABLED;
573+
}
574+
575+
props->active_width = IB_WIDTH_4X;
576+
props->active_speed = IB_SPEED_EDR;
577+
props->pkey_tbl_len = 1;
578+
if (port == 1)
579+
props->gid_tbl_len = 16;
580+
581+
return 0;
582+
}
583+
584+
enum rdma_link_layer mana_ib_get_link_layer(struct ib_device *device, u32 port_num)
585+
{
586+
return IB_LINK_LAYER_ETHERNET;
587+
}
588+
589+
int mana_ib_query_pkey(struct ib_device *ibdev, u32 port, u16 index, u16 *pkey)
590+
{
591+
if (index != 0)
592+
return -EINVAL;
593+
*pkey = IB_DEFAULT_PKEY_FULL;
559594
return 0;
560595
}
561596

drivers/infiniband/hw/mana/mana_ib.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,4 +266,8 @@ void mana_ib_destroy_eqs(struct mana_ib_dev *mdev);
266266
int mana_ib_gd_create_rnic_adapter(struct mana_ib_dev *mdev);
267267

268268
int mana_ib_gd_destroy_rnic_adapter(struct mana_ib_dev *mdev);
269+
270+
int mana_ib_query_pkey(struct ib_device *ibdev, u32 port, u16 index, u16 *pkey);
271+
272+
enum rdma_link_layer mana_ib_get_link_layer(struct ib_device *device, u32 port_num);
269273
#endif

0 commit comments

Comments
 (0)