diff options
Diffstat (limited to 'drivers/dma/cnxk/cnxk_dmadev.c')
-rw-r--r-- | drivers/dma/cnxk/cnxk_dmadev.c | 53 |
1 files changed, 18 insertions, 35 deletions
diff --git a/drivers/dma/cnxk/cnxk_dmadev.c b/drivers/dma/cnxk/cnxk_dmadev.c index 4ab3cfbdf2..dfd7222713 100644 --- a/drivers/dma/cnxk/cnxk_dmadev.c +++ b/drivers/dma/cnxk/cnxk_dmadev.c @@ -2,6 +2,8 @@ * Copyright (C) 2021 Marvell International Ltd. */ +#include <rte_event_dma_adapter.h> + #include <cnxk_dmadev.h> static int cnxk_stats_reset(struct rte_dma_dev *dev, uint16_t vchan); @@ -30,8 +32,7 @@ cnxk_dmadev_vchan_free(struct cnxk_dpi_vf_s *dpivf, uint16_t vchan) { struct cnxk_dpi_conf *dpi_conf; uint16_t num_vchans; - uint16_t max_desc; - int i, j; + int i; if (vchan == RTE_DMA_ALL_VCHAN) { num_vchans = dpivf->num_vchans; @@ -46,12 +47,6 @@ cnxk_dmadev_vchan_free(struct cnxk_dpi_vf_s *dpivf, uint16_t vchan) for (; i < num_vchans; i++) { dpi_conf = &dpivf->conf[i]; - max_desc = dpi_conf->c_desc.max_cnt + 1; - if (dpi_conf->c_desc.compl_ptr) { - for (j = 0; j < max_desc; j++) - rte_free(dpi_conf->c_desc.compl_ptr[j]); - } - rte_free(dpi_conf->c_desc.compl_ptr); dpi_conf->c_desc.compl_ptr = NULL; } @@ -261,7 +256,7 @@ cnxk_dmadev_vchan_setup(struct rte_dma_dev *dev, uint16_t vchan, if (max_desc > CNXK_DPI_MAX_DESC) max_desc = CNXK_DPI_MAX_DESC; - size = (max_desc * sizeof(struct cnxk_dpi_compl_s *)); + size = (max_desc * sizeof(uint8_t) * CNXK_DPI_COMPL_OFFSET); dpi_conf->c_desc.compl_ptr = rte_zmalloc(NULL, size, 0); if (dpi_conf->c_desc.compl_ptr == NULL) { @@ -269,16 +264,8 @@ cnxk_dmadev_vchan_setup(struct rte_dma_dev *dev, uint16_t vchan, return -ENOMEM; } - for (i = 0; i < max_desc; i++) { - dpi_conf->c_desc.compl_ptr[i] = - rte_zmalloc(NULL, sizeof(struct cnxk_dpi_compl_s), 0); - if (!dpi_conf->c_desc.compl_ptr[i]) { - plt_err("Failed to allocate for descriptor memory"); - return -ENOMEM; - } - - dpi_conf->c_desc.compl_ptr[i]->cdata = CNXK_DPI_REQ_CDATA; - } + for (i = 0; i < max_desc; i++) + dpi_conf->c_desc.compl_ptr[i * CNXK_DPI_COMPL_OFFSET] = CNXK_DPI_REQ_CDATA; dpi_conf->c_desc.max_cnt = (max_desc - 1); @@ -301,10 +288,8 @@ cnxk_dmadev_start(struct rte_dma_dev *dev) dpi_conf->pnum_words = 0; dpi_conf->pending = 0; dpi_conf->desc_idx = 0; - for (j = 0; j < dpi_conf->c_desc.max_cnt + 1; j++) { - if (dpi_conf->c_desc.compl_ptr[j]) - dpi_conf->c_desc.compl_ptr[j]->cdata = CNXK_DPI_REQ_CDATA; - } + for (j = 0; j < dpi_conf->c_desc.max_cnt + 1; j++) + dpi_conf->c_desc.compl_ptr[j * CNXK_DPI_COMPL_OFFSET] = CNXK_DPI_REQ_CDATA; nb_desc += dpi_conf->c_desc.max_cnt + 1; cnxk_stats_reset(dev, i); dpi_conf->completed_offset = 0; @@ -382,22 +367,22 @@ cnxk_dmadev_completed(void *dev_private, uint16_t vchan, const uint16_t nb_cpls, struct cnxk_dpi_vf_s *dpivf = dev_private; struct cnxk_dpi_conf *dpi_conf = &dpivf->conf[vchan]; struct cnxk_dpi_cdesc_data_s *c_desc = &dpi_conf->c_desc; - struct cnxk_dpi_compl_s *comp_ptr; + uint8_t status; int cnt; for (cnt = 0; cnt < nb_cpls; cnt++) { - comp_ptr = c_desc->compl_ptr[c_desc->head]; - - if (comp_ptr->cdata) { - if (comp_ptr->cdata == CNXK_DPI_REQ_CDATA) + status = c_desc->compl_ptr[c_desc->head * CNXK_DPI_COMPL_OFFSET]; + if (status) { + if (status == CNXK_DPI_REQ_CDATA) break; *has_error = 1; dpi_conf->stats.errors++; + c_desc->compl_ptr[c_desc->head * CNXK_DPI_COMPL_OFFSET] = + CNXK_DPI_REQ_CDATA; CNXK_DPI_STRM_INC(*c_desc, head); break; } - - comp_ptr->cdata = CNXK_DPI_REQ_CDATA; + c_desc->compl_ptr[c_desc->head * CNXK_DPI_COMPL_OFFSET] = CNXK_DPI_REQ_CDATA; CNXK_DPI_STRM_INC(*c_desc, head); } @@ -414,19 +399,17 @@ cnxk_dmadev_completed_status(void *dev_private, uint16_t vchan, const uint16_t n struct cnxk_dpi_vf_s *dpivf = dev_private; struct cnxk_dpi_conf *dpi_conf = &dpivf->conf[vchan]; struct cnxk_dpi_cdesc_data_s *c_desc = &dpi_conf->c_desc; - struct cnxk_dpi_compl_s *comp_ptr; int cnt; for (cnt = 0; cnt < nb_cpls; cnt++) { - comp_ptr = c_desc->compl_ptr[c_desc->head]; - status[cnt] = comp_ptr->cdata; + status[cnt] = c_desc->compl_ptr[c_desc->head * CNXK_DPI_COMPL_OFFSET]; if (status[cnt]) { if (status[cnt] == CNXK_DPI_REQ_CDATA) break; dpi_conf->stats.errors++; } - comp_ptr->cdata = CNXK_DPI_REQ_CDATA; + c_desc->compl_ptr[c_desc->head * CNXK_DPI_COMPL_OFFSET] = CNXK_DPI_REQ_CDATA; CNXK_DPI_STRM_INC(*c_desc, head); } @@ -593,7 +576,7 @@ cnxk_dmadev_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_de rdpi = &dpivf->rdpi; rdpi->pci_dev = pci_dev; - rc = roc_dpi_dev_init(rdpi, offsetof(struct cnxk_dpi_compl_s, wqecs)); + rc = roc_dpi_dev_init(rdpi, offsetof(struct rte_event_dma_adapter_op, impl_opaque)); if (rc < 0) goto err_out_free; |