aboutsummaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorTuomas Taipale <tuomas.taipale@nokia.com>2023-04-27 11:38:17 +0000
committerPetri Savolainen <petri.savolainen@nokia.com>2023-06-09 14:54:44 +0300
commitc23a39c69ae7fd9da05aaedbf556854a9032c42b (patch)
treeb6206456fe02c30465d04bc0d4f3b32ce81b9f3d /platform
parent5fa5ee39ebcb8450cc0f6b8ba2c88a33a6dc2b3c (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.c13
-rw-r--r--platform/linux-generic/odp_pool.c1
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 {