diff options
author | Tuomas Taipale <tuomas.taipale@nokia.com> | 2023-04-27 11:38:17 +0000 |
---|---|---|
committer | Petri Savolainen <petri.savolainen@nokia.com> | 2023-06-09 14:54:44 +0300 |
commit | c23a39c69ae7fd9da05aaedbf556854a9032c42b (patch) | |
tree | b6206456fe02c30465d04bc0d4f3b32ce81b9f3d /platform | |
parent | 5fa5ee39ebcb8450cc0f6b8ba2c88a33a6dc2b3c (diff) |
linux-gen: dma: implement completion event user area
Utilize the new user area parameter when creating completion event
pools. Additionally, print the user area size in `odp_pool_info()`.
Signed-off-by: Tuomas Taipale <tuomas.taipale@nokia.com>
Reviewed-by: Matias Elo <matias.elo@nokia.com>
Diffstat (limited to 'platform')
-rw-r--r-- | platform/linux-generic/odp_dma.c | 13 | ||||
-rw-r--r-- | platform/linux-generic/odp_pool.c | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/platform/linux-generic/odp_dma.c b/platform/linux-generic/odp_dma.c index feb91b5a4..fa45b3b02 100644 --- a/platform/linux-generic/odp_dma.c +++ b/platform/linux-generic/odp_dma.c @@ -101,6 +101,7 @@ int odp_dma_capability(odp_dma_capability_t *capa) capa->pool.max_pools = _odp_dma_glb->pool_capa.buf.max_pools; capa->pool.max_num = _odp_dma_glb->pool_capa.buf.max_num; + capa->pool.max_uarea_size = _odp_dma_glb->pool_capa.buf.max_uarea_size; capa->pool.min_cache_size = _odp_dma_glb->pool_capa.buf.min_cache_size; capa->pool.max_cache_size = _odp_dma_glb->pool_capa.buf.max_cache_size; @@ -735,6 +736,7 @@ odp_pool_t odp_dma_pool_create(const char *name, const odp_dma_pool_param_t *dma odp_pool_t pool; odp_pool_param_t pool_param; uint32_t num = dma_pool_param->num; + uint32_t uarea_size = dma_pool_param->uarea_size; uint32_t cache_size = dma_pool_param->cache_size; if (num > _odp_dma_glb->pool_capa.buf.max_num) { @@ -742,6 +744,11 @@ odp_pool_t odp_dma_pool_create(const char *name, const odp_dma_pool_param_t *dma return ODP_POOL_INVALID; } + if (uarea_size > _odp_dma_glb->pool_capa.buf.max_uarea_size) { + _ODP_ERR("Bad uarea size: %u\n", uarea_size); + return ODP_POOL_INVALID; + } + if (cache_size < _odp_dma_glb->pool_capa.buf.min_cache_size || cache_size > _odp_dma_glb->pool_capa.buf.max_cache_size) { _ODP_ERR("Bad cache size: %u\n", cache_size); @@ -751,6 +758,7 @@ odp_pool_t odp_dma_pool_create(const char *name, const odp_dma_pool_param_t *dma odp_pool_param_init(&pool_param); pool_param.type = ODP_POOL_BUFFER; pool_param.buf.num = num; + pool_param.buf.uarea_size = uarea_size; pool_param.buf.cache_size = cache_size; pool_param.buf.size = sizeof(odp_dma_result_t); @@ -835,6 +843,11 @@ uint64_t odp_dma_compl_to_u64(odp_dma_compl_t dma_compl) return (uint64_t)(uintptr_t)dma_compl; } +void *odp_dma_compl_user_area(odp_dma_compl_t dma_compl) +{ + return odp_buffer_user_area((odp_buffer_t)(uintptr_t)dma_compl); +} + void odp_dma_print(odp_dma_t dma) { dma_session_t *session = dma_session_from_handle(dma); diff --git a/platform/linux-generic/odp_pool.c b/platform/linux-generic/odp_pool.c index d960c7353..672b92c02 100644 --- a/platform/linux-generic/odp_pool.c +++ b/platform/linux-generic/odp_pool.c @@ -1230,6 +1230,7 @@ int odp_pool_info(odp_pool_t pool_hdl, odp_pool_info_t *info) } else if (pool->type_2 == ODP_POOL_DMA_COMPL) { info->dma_pool_param.num = pool->params.buf.num; + info->dma_pool_param.uarea_size = pool->params.buf.uarea_size; info->dma_pool_param.cache_size = pool->params.buf.cache_size; } else { |