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