189214fe9SHaiyue Wang /* SPDX-License-Identifier: BSD-3-Clause 27815caa6SQi Zhang * Copyright(c) 2019-2021 Intel Corporation 389214fe9SHaiyue Wang */ 489214fe9SHaiyue Wang 589214fe9SHaiyue Wang #include <stdio.h> 689214fe9SHaiyue Wang #include <inttypes.h> 789214fe9SHaiyue Wang 889214fe9SHaiyue Wang #include <rte_common.h> 989214fe9SHaiyue Wang #include <rte_malloc.h> 1089214fe9SHaiyue Wang #include <rte_memzone.h> 1189214fe9SHaiyue Wang 1289214fe9SHaiyue Wang #include "iavf_type.h" 1389214fe9SHaiyue Wang #include "iavf_prototype.h" 1489214fe9SHaiyue Wang 1589214fe9SHaiyue Wang enum iavf_status 1689214fe9SHaiyue Wang iavf_allocate_dma_mem_d(__rte_unused struct iavf_hw *hw, 1789214fe9SHaiyue Wang struct iavf_dma_mem *mem, 1889214fe9SHaiyue Wang u64 size, 1989214fe9SHaiyue Wang u32 alignment) 2089214fe9SHaiyue Wang { 21*d07fc02fSDavid Marchand static uint64_t iavf_dma_memzone_id; 2289214fe9SHaiyue Wang const struct rte_memzone *mz = NULL; 2389214fe9SHaiyue Wang char z_name[RTE_MEMZONE_NAMESIZE]; 2489214fe9SHaiyue Wang 2589214fe9SHaiyue Wang if (!mem) 2689214fe9SHaiyue Wang return IAVF_ERR_PARAM; 2789214fe9SHaiyue Wang 28*d07fc02fSDavid Marchand snprintf(z_name, sizeof(z_name), "iavf_dma_%" PRIu64, 29*d07fc02fSDavid Marchand __atomic_fetch_add(&iavf_dma_memzone_id, 1, __ATOMIC_RELAXED)); 3089214fe9SHaiyue Wang mz = rte_memzone_reserve_bounded(z_name, size, SOCKET_ID_ANY, 3189214fe9SHaiyue Wang RTE_MEMZONE_IOVA_CONTIG, alignment, 3289214fe9SHaiyue Wang RTE_PGSIZE_2M); 3389214fe9SHaiyue Wang if (!mz) 3489214fe9SHaiyue Wang return IAVF_ERR_NO_MEMORY; 3589214fe9SHaiyue Wang 3689214fe9SHaiyue Wang mem->size = size; 3789214fe9SHaiyue Wang mem->va = mz->addr; 3889214fe9SHaiyue Wang mem->pa = mz->iova; 3989214fe9SHaiyue Wang mem->zone = (const void *)mz; 4089214fe9SHaiyue Wang 4189214fe9SHaiyue Wang return IAVF_SUCCESS; 4289214fe9SHaiyue Wang } 4389214fe9SHaiyue Wang 4489214fe9SHaiyue Wang enum iavf_status 4589214fe9SHaiyue Wang iavf_free_dma_mem_d(__rte_unused struct iavf_hw *hw, 4689214fe9SHaiyue Wang struct iavf_dma_mem *mem) 4789214fe9SHaiyue Wang { 4889214fe9SHaiyue Wang if (!mem) 4989214fe9SHaiyue Wang return IAVF_ERR_PARAM; 5089214fe9SHaiyue Wang 5189214fe9SHaiyue Wang rte_memzone_free((const struct rte_memzone *)mem->zone); 5289214fe9SHaiyue Wang mem->zone = NULL; 5389214fe9SHaiyue Wang mem->va = NULL; 5489214fe9SHaiyue Wang mem->pa = (u64)0; 5589214fe9SHaiyue Wang 5689214fe9SHaiyue Wang return IAVF_SUCCESS; 5789214fe9SHaiyue Wang } 5889214fe9SHaiyue Wang 5989214fe9SHaiyue Wang enum iavf_status 6089214fe9SHaiyue Wang iavf_allocate_virt_mem_d(__rte_unused struct iavf_hw *hw, 6189214fe9SHaiyue Wang struct iavf_virt_mem *mem, 6289214fe9SHaiyue Wang u32 size) 6389214fe9SHaiyue Wang { 6489214fe9SHaiyue Wang if (!mem) 6589214fe9SHaiyue Wang return IAVF_ERR_PARAM; 6689214fe9SHaiyue Wang 6789214fe9SHaiyue Wang mem->size = size; 6889214fe9SHaiyue Wang mem->va = rte_zmalloc("iavf", size, 0); 6989214fe9SHaiyue Wang 7089214fe9SHaiyue Wang if (mem->va) 7189214fe9SHaiyue Wang return IAVF_SUCCESS; 7289214fe9SHaiyue Wang else 7389214fe9SHaiyue Wang return IAVF_ERR_NO_MEMORY; 7489214fe9SHaiyue Wang } 7589214fe9SHaiyue Wang 7689214fe9SHaiyue Wang enum iavf_status 7789214fe9SHaiyue Wang iavf_free_virt_mem_d(__rte_unused struct iavf_hw *hw, 7889214fe9SHaiyue Wang struct iavf_virt_mem *mem) 7989214fe9SHaiyue Wang { 8089214fe9SHaiyue Wang if (!mem) 8189214fe9SHaiyue Wang return IAVF_ERR_PARAM; 8289214fe9SHaiyue Wang 8389214fe9SHaiyue Wang rte_free(mem->va); 8489214fe9SHaiyue Wang mem->va = NULL; 8589214fe9SHaiyue Wang 8689214fe9SHaiyue Wang return IAVF_SUCCESS; 8789214fe9SHaiyue Wang } 8889214fe9SHaiyue Wang 89eeded204SDavid Marchand RTE_LOG_REGISTER_DEFAULT(iavf_common_logger, NOTICE); 90