xref: /dpdk/drivers/common/iavf/iavf_impl.c (revision e12a0166c80f65e35408f4715b2f3a60763c3741)
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
iavf_allocate_dma_mem_d(__rte_unused struct iavf_hw * hw,struct iavf_dma_mem * mem,u64 size,u32 alignment)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*e12a0166STyler Retzlaff 	static RTE_ATOMIC(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 
28d07fc02fSDavid Marchand 	snprintf(z_name, sizeof(z_name), "iavf_dma_%" PRIu64,
29*e12a0166STyler Retzlaff 		rte_atomic_fetch_add_explicit(&iavf_dma_memzone_id, 1, rte_memory_order_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
iavf_free_dma_mem_d(__rte_unused struct iavf_hw * hw,struct iavf_dma_mem * mem)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
iavf_allocate_virt_mem_d(__rte_unused struct iavf_hw * hw,struct iavf_virt_mem * mem,u32 size)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
iavf_free_virt_mem_d(__rte_unused struct iavf_hw * hw,struct iavf_virt_mem * mem)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