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