1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2019-2021 Intel Corporation 3 */ 4 5 #include <stdio.h> 6 #include <inttypes.h> 7 8 #include <rte_common.h> 9 #include <rte_malloc.h> 10 #include <rte_memzone.h> 11 12 #include "iavf_type.h" 13 #include "iavf_prototype.h" 14 15 enum iavf_status 16 iavf_allocate_dma_mem_d(__rte_unused struct iavf_hw *hw, 17 struct iavf_dma_mem *mem, 18 u64 size, 19 u32 alignment) 20 { 21 static uint64_t iavf_dma_memzone_id; 22 const struct rte_memzone *mz = NULL; 23 char z_name[RTE_MEMZONE_NAMESIZE]; 24 25 if (!mem) 26 return IAVF_ERR_PARAM; 27 28 snprintf(z_name, sizeof(z_name), "iavf_dma_%" PRIu64, 29 __atomic_fetch_add(&iavf_dma_memzone_id, 1, __ATOMIC_RELAXED)); 30 mz = rte_memzone_reserve_bounded(z_name, size, SOCKET_ID_ANY, 31 RTE_MEMZONE_IOVA_CONTIG, alignment, 32 RTE_PGSIZE_2M); 33 if (!mz) 34 return IAVF_ERR_NO_MEMORY; 35 36 mem->size = size; 37 mem->va = mz->addr; 38 mem->pa = mz->iova; 39 mem->zone = (const void *)mz; 40 41 return IAVF_SUCCESS; 42 } 43 44 enum iavf_status 45 iavf_free_dma_mem_d(__rte_unused struct iavf_hw *hw, 46 struct iavf_dma_mem *mem) 47 { 48 if (!mem) 49 return IAVF_ERR_PARAM; 50 51 rte_memzone_free((const struct rte_memzone *)mem->zone); 52 mem->zone = NULL; 53 mem->va = NULL; 54 mem->pa = (u64)0; 55 56 return IAVF_SUCCESS; 57 } 58 59 enum iavf_status 60 iavf_allocate_virt_mem_d(__rte_unused struct iavf_hw *hw, 61 struct iavf_virt_mem *mem, 62 u32 size) 63 { 64 if (!mem) 65 return IAVF_ERR_PARAM; 66 67 mem->size = size; 68 mem->va = rte_zmalloc("iavf", size, 0); 69 70 if (mem->va) 71 return IAVF_SUCCESS; 72 else 73 return IAVF_ERR_NO_MEMORY; 74 } 75 76 enum iavf_status 77 iavf_free_virt_mem_d(__rte_unused struct iavf_hw *hw, 78 struct iavf_virt_mem *mem) 79 { 80 if (!mem) 81 return IAVF_ERR_PARAM; 82 83 rte_free(mem->va); 84 mem->va = NULL; 85 86 return IAVF_SUCCESS; 87 } 88 89 RTE_LOG_REGISTER_DEFAULT(iavf_common_logger, NOTICE); 90