int dpaa2_create_dpbp_device( int dpbp_id) { struct dpaa2_dpbp_dev *dpbp_node; int ret; if (!dpbp_dev_list) { dpbp_dev_list = malloc(sizeof(struct dpbp_device_list)); if (!dpbp_dev_list) { PMD_INIT_LOG(ERR, "Memory alloc failed in DPBP list\n"); return -1; } /* Initialize the DPBP List */ TAILQ_INIT(dpbp_dev_list); } /* Allocate DPAA2 dpbp handle */ dpbp_node = (struct dpaa2_dpbp_dev *) malloc(sizeof(struct dpaa2_dpbp_dev)); if (!dpbp_node) { PMD_INIT_LOG(ERR, "Memory allocation failed for DPBP Device"); return -1; } /* Open the dpbp object */ dpbp_node->dpbp.regs = rte_mcp_ptr_list[MC_PORTAL_INDEX]; ret = dpbp_open(&dpbp_node->dpbp, CMD_PRI_LOW, dpbp_id, &dpbp_node->token); if (ret) { PMD_INIT_LOG(ERR, "Resource alloc failure with err code: %d", ret); free(dpbp_node); return -1; } /* Clean the device first */ ret = dpbp_reset(&dpbp_node->dpbp, CMD_PRI_LOW, dpbp_node->token); if (ret) { PMD_INIT_LOG(ERR, "Failure cleaning dpbp device with" " error code %d\n", ret); dpbp_close(&dpbp_node->dpbp, CMD_PRI_LOW, dpbp_node->token); free(dpbp_node); return -1; } dpbp_node->dpbp_id = dpbp_id; rte_atomic16_init(&dpbp_node->in_use); TAILQ_INSERT_HEAD(dpbp_dev_list, dpbp_node, next); PMD_INIT_LOG(DEBUG, "Buffer pool resource initialized %d", dpbp_id); return 0; }
int qat_crypto_sym_qp_setup(struct rte_cryptodev *dev, uint16_t queue_pair_id, const struct rte_cryptodev_qp_conf *qp_conf, int socket_id) { struct qat_qp *qp; int ret; PMD_INIT_FUNC_TRACE(); /* If qp is already in use free ring memory and qp metadata. */ if (dev->data->queue_pairs[queue_pair_id] != NULL) { ret = qat_crypto_sym_qp_release(dev, queue_pair_id); if (ret < 0) return ret; } if ((qp_conf->nb_descriptors > ADF_MAX_SYM_DESC) || (qp_conf->nb_descriptors < ADF_MIN_SYM_DESC)) { PMD_DRV_LOG(ERR, "Can't create qp for %u descriptors", qp_conf->nb_descriptors); return -EINVAL; } if (dev->pci_dev->mem_resource[0].addr == NULL) { PMD_DRV_LOG(ERR, "Could not find VF config space " "(UIO driver attached?)."); return -EINVAL; } if (queue_pair_id >= (ADF_NUM_SYM_QPS_PER_BUNDLE * ADF_NUM_BUNDLES_PER_DEV)) { PMD_DRV_LOG(ERR, "qp_id %u invalid for this device", queue_pair_id); return -EINVAL; } /* Allocate the queue pair data structure. */ qp = rte_zmalloc("qat PMD qp metadata", sizeof(*qp), RTE_CACHE_LINE_SIZE); if (qp == NULL) { PMD_DRV_LOG(ERR, "Failed to alloc mem for qp struct"); return -ENOMEM; } qp->mmap_bar_addr = dev->pci_dev->mem_resource[0].addr; rte_atomic16_init(&qp->inflights16); if (qat_tx_queue_create(dev, &(qp->tx_q), queue_pair_id, qp_conf->nb_descriptors, socket_id) != 0) { PMD_INIT_LOG(ERR, "Tx queue create failed " "queue_pair_id=%u", queue_pair_id); goto create_err; } if (qat_rx_queue_create(dev, &(qp->rx_q), queue_pair_id, qp_conf->nb_descriptors, socket_id) != 0) { PMD_DRV_LOG(ERR, "Rx queue create failed " "queue_pair_id=%hu", queue_pair_id); qat_queue_delete(&(qp->tx_q)); goto create_err; } adf_configure_queues(qp); adf_queue_arb_enable(&qp->tx_q, qp->mmap_bar_addr); dev->data->queue_pairs[queue_pair_id] = qp; return 0; create_err: rte_free(qp); return -EFAULT; }