in efawin/verbs.c [137:170]
int efadv_query_device(struct ibv_context *ibvctx,
struct efadv_device_attr *attr,
uint32_t inlen)
{
struct efa_context *ctx = to_efa_context(ibvctx);
uint64_t comp_mask_out = 0;
if (!is_efa_dev(ibvctx->device))
return EOPNOTSUPP;
if (!vext_field_avail(struct efadv_device_attr, inline_buf_size, inlen))
return EINVAL;
memset(attr, 0, inlen);
attr->max_sq_wr = ctx->max_sq_wr;
attr->max_rq_wr = ctx->max_rq_wr;
attr->max_sq_sge = ctx->max_sq_sge;
attr->max_rq_sge = ctx->max_rq_sge;
attr->inline_buf_size = ctx->inline_buf_size;
if (vext_field_avail(struct efadv_device_attr, max_rdma_size, inlen)) {
attr->max_rdma_size = ctx->max_rdma_size;
if (EFA_DEV_CAP(ctx, RDMA_READ))
attr->device_caps |= EFADV_DEVICE_ATTR_CAPS_RDMA_READ;
if (EFA_DEV_CAP(ctx, RNR_RETRY))
attr->device_caps |= EFADV_DEVICE_ATTR_CAPS_RNR_RETRY;
}
attr->comp_mask = comp_mask_out;
return 0;
}