xref: /dpdk/drivers/common/iavf/iavf_impl.c (revision bbbe38a6d59ccdda25917712701e629d0b10af6f)
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_random.h>
10 #include <rte_malloc.h>
11 #include <rte_memzone.h>
12 
13 #include "iavf_type.h"
14 #include "iavf_prototype.h"
15 
16 enum iavf_status
17 iavf_allocate_dma_mem_d(__rte_unused struct iavf_hw *hw,
18 			struct iavf_dma_mem *mem,
19 			u64 size,
20 			u32 alignment)
21 {
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, rte_rand());
29 	mz = rte_memzone_reserve_bounded(z_name, size, SOCKET_ID_ANY,
30 					 RTE_MEMZONE_IOVA_CONTIG, alignment,
31 					 RTE_PGSIZE_2M);
32 	if (!mz)
33 		return IAVF_ERR_NO_MEMORY;
34 
35 	mem->size = size;
36 	mem->va = mz->addr;
37 	mem->pa = mz->iova;
38 	mem->zone = (const void *)mz;
39 
40 	return IAVF_SUCCESS;
41 }
42 
43 enum iavf_status
44 iavf_free_dma_mem_d(__rte_unused struct iavf_hw *hw,
45 		    struct iavf_dma_mem *mem)
46 {
47 	if (!mem)
48 		return IAVF_ERR_PARAM;
49 
50 	rte_memzone_free((const struct rte_memzone *)mem->zone);
51 	mem->zone = NULL;
52 	mem->va = NULL;
53 	mem->pa = (u64)0;
54 
55 	return IAVF_SUCCESS;
56 }
57 
58 enum iavf_status
59 iavf_allocate_virt_mem_d(__rte_unused struct iavf_hw *hw,
60 			 struct iavf_virt_mem *mem,
61 			 u32 size)
62 {
63 	if (!mem)
64 		return IAVF_ERR_PARAM;
65 
66 	mem->size = size;
67 	mem->va = rte_zmalloc("iavf", size, 0);
68 
69 	if (mem->va)
70 		return IAVF_SUCCESS;
71 	else
72 		return IAVF_ERR_NO_MEMORY;
73 }
74 
75 enum iavf_status
76 iavf_free_virt_mem_d(__rte_unused struct iavf_hw *hw,
77 		     struct iavf_virt_mem *mem)
78 {
79 	if (!mem)
80 		return IAVF_ERR_PARAM;
81 
82 	rte_free(mem->va);
83 	mem->va = NULL;
84 
85 	return IAVF_SUCCESS;
86 }
87 
88 RTE_LOG_REGISTER_DEFAULT(iavf_common_logger, NOTICE);
89