static int efa_everbs_cmd_get_ex_query_dev()

in efawin/efa_win_cmd.c [194:238]


static int efa_everbs_cmd_get_ex_query_dev(struct efa_context* ctx,
    struct ibv_device_attr* attr)
{
    char* fw_ver;
    struct efa_dev* edev = to_efa_dev(ctx->ibvctx.context.device);
    attr->max_ah = edev->dev_attr.MaxAh;
    ZeroMemory(attr, sizeof(struct ibv_device_attr));

    // We query device attributes once in efa_device_open,
    // and cache them in the efa_device struct.
    // This function merely reads the cached values.

    fw_ver = (char*)&edev->dev_attr.FirmwareVersion;
    snprintf(attr->fw_ver, sizeof(edev->dev_attr.FirmwareVersion), "%u.%u.%u.%u",
        fw_ver[0], fw_ver[1], fw_ver[2], fw_ver[3]);
    fw_ver[sizeof(edev->dev_attr.FirmwareVersion)] = '\0';
    attr->hw_ver = edev->dev_attr.DeviceVersion;
    attr->vendor_part_id = 0xefa0;
    attr->vendor_id = 0x1d0f;

    attr->max_mr_size = edev->dev_attr.MaxMrPages * PAGE_SIZE;
    attr->page_size_cap = edev->dev_attr.PageSizeCap;
    attr->max_qp = edev->dev_attr.MaxQp;
    attr->max_cq = edev->dev_attr.MaxCq;
    attr->max_pd = edev->dev_attr.MaxPd;
    attr->max_mr = edev->dev_attr.MaxMr;
    attr->max_ah = edev->dev_attr.MaxAh;
    attr->max_cqe = edev->dev_attr.MaxCqDepth;
    attr->max_qp_wr = min(edev->dev_attr.MaxSqDepth,
        edev->dev_attr.MaxRqDepth);
    attr->max_sge = min(edev->dev_attr.MaxSqSge,
        edev->dev_attr.MaxRqSge);
    attr->page_size_cap = edev->dev_attr.PageSizeCap;
    ctx->inline_buf_size = edev->dev_attr.InlineBufSize;
    ctx->device_caps = edev->dev_attr.SupportedFeatures;
    ctx->max_llq_size = edev->dev_attr.MaxLlqSize;
    ctx->sub_cqs_per_cq = edev->dev_attr.NumSubCqs;
    ctx->max_mr_size = edev->dev_attr.MaxMr;
    ctx->max_rq_sge = edev->dev_attr.MaxRqSge;
    ctx->max_sq_sge = edev->dev_attr.MaxSqSge;
    ctx->max_rq_wr = edev->dev_attr.MaxRqDepth;
    ctx->max_sq_wr = edev->dev_attr.MaxSqDepth;
    ctx->max_tx_batch = 1;  // max_tx_batch retrieval is not supported on current Windows Driver.
    return 0;
}