xref: /dpdk/drivers/common/mlx5/mlx5_malloc.h (revision d38e3d52665778e2b0b048d2ae4a743bfa2e72c5)
1*d38e3d52SSuanming Mou /* SPDX-License-Identifier: BSD-3-Clause
2*d38e3d52SSuanming Mou  * Copyright 2020 Mellanox Technologies, Ltd
3*d38e3d52SSuanming Mou  */
4*d38e3d52SSuanming Mou 
5*d38e3d52SSuanming Mou #ifndef MLX5_MALLOC_H_
6*d38e3d52SSuanming Mou #define MLX5_MALLOC_H_
7*d38e3d52SSuanming Mou 
8*d38e3d52SSuanming Mou #ifdef __cplusplus
9*d38e3d52SSuanming Mou extern "C" {
10*d38e3d52SSuanming Mou #endif
11*d38e3d52SSuanming Mou 
12*d38e3d52SSuanming Mou enum mlx5_mem_flags {
13*d38e3d52SSuanming Mou 	MLX5_MEM_ANY = 0,
14*d38e3d52SSuanming Mou 	/* Memory will be allocated dpends on sys_mem_en. */
15*d38e3d52SSuanming Mou 	MLX5_MEM_SYS = 1 << 0,
16*d38e3d52SSuanming Mou 	/* Memory should be allocated from system. */
17*d38e3d52SSuanming Mou 	MLX5_MEM_RTE = 1 << 1,
18*d38e3d52SSuanming Mou 	/* Memory should be allocated from rte hugepage. */
19*d38e3d52SSuanming Mou 	MLX5_MEM_ZERO = 1 << 2,
20*d38e3d52SSuanming Mou 	/* Memory should be cleared to zero. */
21*d38e3d52SSuanming Mou };
22*d38e3d52SSuanming Mou 
23*d38e3d52SSuanming Mou /**
24*d38e3d52SSuanming Mou  * Select the PMD memory allocate preference.
25*d38e3d52SSuanming Mou  *
26*d38e3d52SSuanming Mou  * Once sys_mem_en is set, the default memory allocate will from
27*d38e3d52SSuanming Mou  * system only if an explicitly flag is set to order the memory
28*d38e3d52SSuanming Mou  * from rte hugepage memory.
29*d38e3d52SSuanming Mou  *
30*d38e3d52SSuanming Mou  * @param sys_mem_en
31*d38e3d52SSuanming Mou  *   Use system memory or not.
32*d38e3d52SSuanming Mou  */
33*d38e3d52SSuanming Mou __rte_internal
34*d38e3d52SSuanming Mou void mlx5_malloc_mem_select(uint32_t sys_mem_en);
35*d38e3d52SSuanming Mou 
36*d38e3d52SSuanming Mou /**
37*d38e3d52SSuanming Mou  * Dump the PMD memory usage statistic.
38*d38e3d52SSuanming Mou  */
39*d38e3d52SSuanming Mou __rte_internal
40*d38e3d52SSuanming Mou void mlx5_memory_stat_dump(void);
41*d38e3d52SSuanming Mou 
42*d38e3d52SSuanming Mou /**
43*d38e3d52SSuanming Mou  * Memory allocate function.
44*d38e3d52SSuanming Mou  *
45*d38e3d52SSuanming Mou  * @param flags
46*d38e3d52SSuanming Mou  *   The bits as enum mlx5_mem_flags defined.
47*d38e3d52SSuanming Mou  * @param size
48*d38e3d52SSuanming Mou  *   Memory size to be allocated.
49*d38e3d52SSuanming Mou  * @param align
50*d38e3d52SSuanming Mou  *   Memory alignment.
51*d38e3d52SSuanming Mou  * @param socket
52*d38e3d52SSuanming Mou  *   The socket memory should allocated.
53*d38e3d52SSuanming Mou  *   Valid only when allocate the memory from rte hugepage.
54*d38e3d52SSuanming Mou  *
55*d38e3d52SSuanming Mou  * @return
56*d38e3d52SSuanming Mou  *   Pointer of the allocated memory, NULL otherwise.
57*d38e3d52SSuanming Mou  */
58*d38e3d52SSuanming Mou __rte_internal
59*d38e3d52SSuanming Mou void *mlx5_malloc(uint32_t flags, size_t size, unsigned int align, int socket);
60*d38e3d52SSuanming Mou 
61*d38e3d52SSuanming Mou /**
62*d38e3d52SSuanming Mou  * Memory reallocate function.
63*d38e3d52SSuanming Mou  *
64*d38e3d52SSuanming Mou  *
65*d38e3d52SSuanming Mou  *
66*d38e3d52SSuanming Mou  * @param addr
67*d38e3d52SSuanming Mou  *   The memory to be reallocated.
68*d38e3d52SSuanming Mou  * @param flags
69*d38e3d52SSuanming Mou  *   The bits as enum mlx5_mem_flags defined.
70*d38e3d52SSuanming Mou  * @param size
71*d38e3d52SSuanming Mou  *   Memory size to be allocated.
72*d38e3d52SSuanming Mou  * @param align
73*d38e3d52SSuanming Mou  *   Memory alignment.
74*d38e3d52SSuanming Mou  * @param socket
75*d38e3d52SSuanming Mou  *   The socket memory should allocated.
76*d38e3d52SSuanming Mou  *   Valid only when allocate the memory from rte hugepage.
77*d38e3d52SSuanming Mou  *
78*d38e3d52SSuanming Mou  * @return
79*d38e3d52SSuanming Mou  *   Pointer of the allocated memory, NULL otherwise.
80*d38e3d52SSuanming Mou  */
81*d38e3d52SSuanming Mou 
82*d38e3d52SSuanming Mou __rte_internal
83*d38e3d52SSuanming Mou void *mlx5_realloc(void *addr, uint32_t flags, size_t size, unsigned int align,
84*d38e3d52SSuanming Mou 		   int socket);
85*d38e3d52SSuanming Mou 
86*d38e3d52SSuanming Mou /**
87*d38e3d52SSuanming Mou  * Memory free function.
88*d38e3d52SSuanming Mou  *
89*d38e3d52SSuanming Mou  * @param addr
90*d38e3d52SSuanming Mou  *   The memory address to be freed..
91*d38e3d52SSuanming Mou  */
92*d38e3d52SSuanming Mou __rte_internal
93*d38e3d52SSuanming Mou void mlx5_free(void *addr);
94*d38e3d52SSuanming Mou 
95*d38e3d52SSuanming Mou #ifdef __cplusplus
96*d38e3d52SSuanming Mou }
97*d38e3d52SSuanming Mou #endif
98*d38e3d52SSuanming Mou 
99*d38e3d52SSuanming Mou #endif
100