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>
This commit is contained in:
Konstantin Taranov 2024-04-10 01:42:28 -07:00 committed by Leon Romanovsky
parent 1a79c2b9d4
commit 4bda1d5332
3 changed files with 42 additions and 1 deletions

View File

@ -29,12 +29,14 @@ static const struct ib_device_ops mana_ib_dev_ops = {
.destroy_rwq_ind_table = mana_ib_destroy_rwq_ind_table,
.destroy_wq = mana_ib_destroy_wq,
.disassociate_ucontext = mana_ib_disassociate_ucontext,
.get_link_layer = mana_ib_get_link_layer,
.get_port_immutable = mana_ib_get_port_immutable,
.mmap = mana_ib_mmap,
.modify_qp = mana_ib_modify_qp,
.modify_wq = mana_ib_modify_wq,
.query_device = mana_ib_query_device,
.query_gid = mana_ib_query_gid,
.query_pkey = mana_ib_query_pkey,
.query_port = mana_ib_query_port,
.reg_user_mr = mana_ib_reg_user_mr,

View File

@ -555,7 +555,42 @@ int mana_ib_query_device(struct ib_device *ibdev, struct ib_device_attr *props,
int mana_ib_query_port(struct ib_device *ibdev, u32 port,
struct ib_port_attr *props)
{
/* This version doesn't return port properties */
struct net_device *ndev = mana_ib_get_netdev(ibdev, port);
if (!ndev)
return -EINVAL;
memset(props, 0, sizeof(*props));
props->max_mtu = IB_MTU_4096;
props->active_mtu = ib_mtu_int_to_enum(ndev->mtu);
if (netif_carrier_ok(ndev) && netif_running(ndev)) {
props->state = IB_PORT_ACTIVE;
props->phys_state = IB_PORT_PHYS_STATE_LINK_UP;
} else {
props->state = IB_PORT_DOWN;
props->phys_state = IB_PORT_PHYS_STATE_DISABLED;
}
props->active_width = IB_WIDTH_4X;
props->active_speed = IB_SPEED_EDR;
props->pkey_tbl_len = 1;
if (port == 1)
props->gid_tbl_len = 16;
return 0;
}
enum rdma_link_layer mana_ib_get_link_layer(struct ib_device *device, u32 port_num)
{
return IB_LINK_LAYER_ETHERNET;
}
int mana_ib_query_pkey(struct ib_device *ibdev, u32 port, u16 index, u16 *pkey)
{
if (index != 0)
return -EINVAL;
*pkey = IB_DEFAULT_PKEY_FULL;
return 0;
}

View File

@ -266,4 +266,8 @@ void mana_ib_destroy_eqs(struct mana_ib_dev *mdev);
int mana_ib_gd_create_rnic_adapter(struct mana_ib_dev *mdev);
int mana_ib_gd_destroy_rnic_adapter(struct mana_ib_dev *mdev);
int mana_ib_query_pkey(struct ib_device *ibdev, u32 port, u16 index, u16 *pkey);
enum rdma_link_layer mana_ib_get_link_layer(struct ib_device *device, u32 port_num);
#endif