static int setup_sge_queues_uld(struct adapter *adap, unsigned int uld_type, bool lro) { struct sge_uld_rxq_info *rxq_info = adap->sge.uld_rxq_info[uld_type]; int i, ret = 0; if (adap->flags & CXGB4_USING_MSIX) { rxq_info->msix_tbl = kcalloc((rxq_info->nrxq + rxq_info->nciq), sizeof(unsigned short), GFP_KERNEL); if (!rxq_info->msix_tbl) return -ENOMEM; } ret = !(!alloc_uld_rxqs(adap, rxq_info, lro)); /* Tell uP to route control queue completions to rdma rspq */ if (adap->flags & CXGB4_FULL_INIT_DONE && !ret && uld_type == CXGB4_ULD_RDMA) { struct sge *s = &adap->sge; unsigned int cmplqid; u32 param, cmdop; cmdop = FW_PARAMS_PARAM_DMAQ_EQ_CMPLIQID_CTRL; for_each_port(adap, i) { cmplqid = rxq_info->uldrxq[i].rspq.cntxt_id; param = (FW_PARAMS_MNEM_V(FW_PARAMS_MNEM_DMAQ) | FW_PARAMS_PARAM_X_V(cmdop) | FW_PARAMS_PARAM_YZ_V(s->ctrlq[i].q.cntxt_id)); ret = t4_set_params(adap, adap->mbox, adap->pf, 0, 1, ¶m, &cmplqid); } }
/** * t4vf_get_dev_params - retrieve device paremeters * @adapter: the adapter * * Retrives various device parameters. The parameters are stored in * @adapter->params.dev. */ int t4vf_get_dev_params(struct adapter *adapter) { struct dev_params *dev_params = &adapter->params.dev; u32 params[7], vals[7]; int v; params[0] = (FW_PARAMS_MNEM_V(FW_PARAMS_MNEM_DEV) | FW_PARAMS_PARAM_X_V(FW_PARAMS_PARAM_DEV_FWREV)); params[1] = (FW_PARAMS_MNEM_V(FW_PARAMS_MNEM_DEV) | FW_PARAMS_PARAM_X_V(FW_PARAMS_PARAM_DEV_TPREV)); v = t4vf_query_params(adapter, 2, params, vals); if (v) return v; dev_params->fwrev = vals[0]; dev_params->tprev = vals[1]; return 0; }
/** * t4vf_get_vpd_params - retrieve device VPD paremeters * @adapter: the adapter * * Retrives various device Vital Product Data parameters. The parameters * are stored in @adapter->params.vpd. */ int t4vf_get_vpd_params(struct adapter *adapter) { struct vpd_params *vpd_params = &adapter->params.vpd; u32 params[7], vals[7]; int v; params[0] = (FW_PARAMS_MNEM_V(FW_PARAMS_MNEM_DEV) | FW_PARAMS_PARAM_X_V(FW_PARAMS_PARAM_DEV_CCLK)); v = t4vf_query_params(adapter, 1, params, vals); if (v) return v; vpd_params->cclk = vals[0]; return 0; }