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