mempool/cnxk: add cn10k mempool operations
[dpdk.git] / drivers / mempool / cnxk / cn10k_mempool_ops.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #include <rte_mempool.h>
6
7 #include "roc_api.h"
8 #include "cnxk_mempool.h"
9
10 static int
11 cn10k_mempool_alloc(struct rte_mempool *mp)
12 {
13         uint32_t block_size;
14         size_t padding;
15
16         block_size = mp->elt_size + mp->header_size + mp->trailer_size;
17         /* Align header size to ROC_ALIGN */
18         if (mp->header_size % ROC_ALIGN != 0) {
19                 padding = RTE_ALIGN_CEIL(mp->header_size, ROC_ALIGN) -
20                           mp->header_size;
21                 mp->header_size += padding;
22                 block_size += padding;
23         }
24
25         /* Align block size to ROC_ALIGN */
26         if (block_size % ROC_ALIGN != 0) {
27                 padding = RTE_ALIGN_CEIL(block_size, ROC_ALIGN) - block_size;
28                 mp->trailer_size += padding;
29                 block_size += padding;
30         }
31
32         return cnxk_mempool_alloc(mp);
33 }
34
35 static void
36 cn10k_mempool_free(struct rte_mempool *mp)
37 {
38         cnxk_mempool_free(mp);
39 }
40
41 static struct rte_mempool_ops cn10k_mempool_ops = {
42         .name = "cn10k_mempool_ops",
43         .alloc = cn10k_mempool_alloc,
44         .free = cn10k_mempool_free,
45         .enqueue = cnxk_mempool_enq,
46         .dequeue = cnxk_mempool_deq,
47         .get_count = cnxk_mempool_get_count,
48         .calc_mem_size = cnxk_mempool_calc_mem_size,
49         .populate = cnxk_mempool_populate,
50 };
51
52 MEMPOOL_REGISTER_OPS(cn10k_mempool_ops);