X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fionic%2Fionic_lif.c;h=431eda777b78b83cb42e15fad8ff1abb22d9a75e;hb=7fe741821337f3cbeecac768b8ef3a16bf21c938;hp=87579a09e5851c8b462f319ff857e31e26ffa1e5;hpb=be39f75cd47f590e801912c085f895d6f8143ec1;p=dpdk.git diff --git a/drivers/net/ionic/ionic_lif.c b/drivers/net/ionic/ionic_lif.c index 87579a09e5..431eda777b 100644 --- a/drivers/net/ionic/ionic_lif.c +++ b/drivers/net/ionic/ionic_lif.c @@ -588,6 +588,7 @@ static int ionic_qcq_alloc(struct ionic_lif *lif, uint8_t type, size_t struct_size, + uint32_t socket_id, uint32_t index, const char *type_name, uint16_t flags, @@ -603,7 +604,6 @@ ionic_qcq_alloc(struct ionic_lif *lif, rte_iova_t q_base_pa = 0; rte_iova_t cq_base_pa = 0; rte_iova_t sg_base_pa = 0; - uint32_t socket_id = rte_socket_id(); int err; *qcq = NULL; @@ -612,18 +612,18 @@ ionic_qcq_alloc(struct ionic_lif *lif, cq_size = num_descs * cq_desc_size; sg_size = num_descs * sg_desc_size; - total_size = RTE_ALIGN(q_size, PAGE_SIZE) + - RTE_ALIGN(cq_size, PAGE_SIZE); + total_size = RTE_ALIGN(q_size, rte_mem_page_size()) + + RTE_ALIGN(cq_size, rte_mem_page_size()); /* * Note: aligning q_size/cq_size is not enough due to cq_base address * aligning as q_base could be not aligned to the page. - * Adding PAGE_SIZE. + * Adding rte_mem_page_size(). */ - total_size += PAGE_SIZE; + total_size += rte_mem_page_size(); if (flags & IONIC_QCQ_F_SG) { - total_size += RTE_ALIGN(sg_size, PAGE_SIZE); - total_size += PAGE_SIZE; + total_size += RTE_ALIGN(sg_size, rte_mem_page_size()); + total_size += rte_mem_page_size(); } new = rte_zmalloc("ionic", struct_size, 0); @@ -636,7 +636,7 @@ ionic_qcq_alloc(struct ionic_lif *lif, new->q.info = rte_calloc_socket("ionic", num_descs, sizeof(void *), - PAGE_SIZE, socket_id); + rte_mem_page_size(), socket_id); if (!new->q.info) { IONIC_PRINT(ERR, "Cannot allocate queue info"); err = -ENOMEM; @@ -673,13 +673,16 @@ ionic_qcq_alloc(struct ionic_lif *lif, q_base = new->base; q_base_pa = new->base_pa; - cq_base = (void *)RTE_ALIGN((uintptr_t)q_base + q_size, PAGE_SIZE); - cq_base_pa = RTE_ALIGN(q_base_pa + q_size, PAGE_SIZE); + cq_base = (void *)RTE_ALIGN((uintptr_t)q_base + q_size, + rte_mem_page_size()); + cq_base_pa = RTE_ALIGN(q_base_pa + q_size, + rte_mem_page_size()); if (flags & IONIC_QCQ_F_SG) { sg_base = (void *)RTE_ALIGN((uintptr_t)cq_base + cq_size, - PAGE_SIZE); - sg_base_pa = RTE_ALIGN(cq_base_pa + cq_size, PAGE_SIZE); + rte_mem_page_size()); + sg_base_pa = RTE_ALIGN(cq_base_pa + cq_size, + rte_mem_page_size()); ionic_q_sg_map(&new->q, sg_base, sg_base_pa); } @@ -721,7 +724,7 @@ ionic_qcq_free(struct ionic_qcq *qcq) } int -ionic_rx_qcq_alloc(struct ionic_lif *lif, uint32_t index, +ionic_rx_qcq_alloc(struct ionic_lif *lif, uint32_t socket_id, uint32_t index, uint16_t nrxq_descs, struct ionic_rx_qcq **rxq_out) { struct ionic_rx_qcq *rxq; @@ -732,6 +735,7 @@ ionic_rx_qcq_alloc(struct ionic_lif *lif, uint32_t index, err = ionic_qcq_alloc(lif, IONIC_QTYPE_RXQ, sizeof(struct ionic_rx_qcq), + socket_id, index, "rx", flags, @@ -752,17 +756,21 @@ ionic_rx_qcq_alloc(struct ionic_lif *lif, uint32_t index, } int -ionic_tx_qcq_alloc(struct ionic_lif *lif, uint32_t index, +ionic_tx_qcq_alloc(struct ionic_lif *lif, uint32_t socket_id, uint32_t index, uint16_t ntxq_descs, struct ionic_tx_qcq **txq_out) { struct ionic_tx_qcq *txq; - uint16_t flags; + uint16_t flags, num_segs_fw; int err; flags = IONIC_QCQ_F_SG; + + num_segs_fw = IONIC_TX_MAX_SG_ELEMS_V1 + 1; + err = ionic_qcq_alloc(lif, IONIC_QTYPE_TXQ, sizeof(struct ionic_tx_qcq), + socket_id, index, "tx", flags, @@ -775,6 +783,7 @@ ionic_tx_qcq_alloc(struct ionic_lif *lif, uint32_t index, return err; txq->flags = flags; + txq->num_segs_fw = num_segs_fw; lif->txqcqs[index] = txq; *txq_out = txq; @@ -791,6 +800,7 @@ ionic_admin_qcq_alloc(struct ionic_lif *lif) err = ionic_qcq_alloc(lif, IONIC_QTYPE_ADMINQ, sizeof(struct ionic_admin_qcq), + rte_socket_id(), 0, "admin", flags, @@ -816,6 +826,7 @@ ionic_notify_qcq_alloc(struct ionic_lif *lif) err = ionic_qcq_alloc(lif, IONIC_QTYPE_NOTIFYQ, sizeof(struct ionic_notify_qcq), + rte_socket_id(), 0, "notify", flags, @@ -994,7 +1005,7 @@ ionic_lif_alloc(struct ionic_lif *lif) IONIC_PRINT(DEBUG, "Allocating Lif Info"); - lif->info_sz = RTE_ALIGN(sizeof(*lif->info), PAGE_SIZE); + lif->info_sz = RTE_ALIGN(sizeof(*lif->info), rte_mem_page_size()); lif->info_z = rte_eth_dma_zone_reserve(lif->eth_dev, "lif_info", 0 /* queue_idx*/, @@ -1597,17 +1608,18 @@ int ionic_lif_init(struct ionic_lif *lif) { struct ionic_dev *idev = &lif->adapter->idev; - struct ionic_q_init_comp comp; + struct ionic_lif_init_comp comp; int err; memset(&lif->stats_base, 0, sizeof(lif->stats_base)); ionic_dev_cmd_lif_init(idev, lif->info_pa); err = ionic_dev_cmd_wait_check(idev, IONIC_DEVCMD_TIMEOUT); - ionic_dev_cmd_comp(idev, &comp); if (err) return err; + ionic_dev_cmd_comp(idev, &comp); + lif->hw_index = rte_cpu_to_le_16(comp.hw_index); err = ionic_lif_adminq_init(lif);