int ibv_cmd_modify_qp()

in efawin/ibv_win_cmd.c [327:365]


int ibv_cmd_modify_qp(struct ibv_qp* qp, struct ibv_qp_attr* attr,
    int attr_mask,
    struct ibv_modify_qp* cmd, size_t cmd_size)
{
    int err = 0;
    EFA_MODIFY_QP_PARAMS params = { 0 };
    EFA_QP_INFO result = { 0 };
    struct ibv_qp* ibv_qp = NULL;
    struct efa_dev* edev = to_efa_dev(qp->context->device);

    params.QpHandle = qp->handle;
    if (attr_mask & IBV_QP_STATE) {
        params.ModifyMask |= EFA_MODIFY_QP_STATE_MASK;
        params.QpState = attr->qp_state;
    }
    if (attr_mask & IBV_QP_CUR_STATE) {
        params.ModifyMask |= EFA_MODIFY_QP_CUR_STATE_MASK;
        params.QpCurState = attr->cur_qp_state;
    }
    if (attr_mask & IBV_QP_QKEY) {
        params.ModifyMask |= EFA_MODIFY_QP_QKEY_MASK;
        params.QKey = attr->qkey;
    }
    if (attr_mask & IBV_QP_SQ_PSN) {
        params.ModifyMask |= EFA_MODIFY_QP_SQ_PSN_MASK;
        params.SqPsn = attr->sq_psn;
    }
    if (attr_mask & IBV_QP_EN_SQD_ASYNC_NOTIFY) {
        params.ModifyMask |= EFA_MODIFY_QP_SQ_DRAINED_ASYNC_NOTIFY_MASK;
        params.SqDrainedAsyncNotify = attr->en_sqd_async_notify;
    }
    if (attr_mask & IBV_QP_RNR_RETRY) {
        params.ModifyMask |= EFA_MODIFY_QP_RNR_RETRY_MASK;
        params.RnrRetry = attr->rnr_retry;
    }

    err = efa_win_modify_qp(&edev->device, &params);
    return err;
}