xref: /freebsd/sys/dev/qat/qat_api/common/utils/lac_mem.c (revision 71625ec9ad2a9bc8c09784fbd23b759830e0ee5f)
1*78ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
2*78ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
3*78ee8d1cSJulian Grajkowski /**
4*78ee8d1cSJulian Grajkowski  *****************************************************************************
5*78ee8d1cSJulian Grajkowski  * @file lac_mem.c  Implementation of Memory Functions
6*78ee8d1cSJulian Grajkowski  *
7*78ee8d1cSJulian Grajkowski  * @ingroup LacMem
8*78ee8d1cSJulian Grajkowski  *
9*78ee8d1cSJulian Grajkowski  *****************************************************************************/
10*78ee8d1cSJulian Grajkowski 
11*78ee8d1cSJulian Grajkowski /*
12*78ee8d1cSJulian Grajkowski *******************************************************************************
13*78ee8d1cSJulian Grajkowski * Include header files
14*78ee8d1cSJulian Grajkowski *******************************************************************************
15*78ee8d1cSJulian Grajkowski */
16*78ee8d1cSJulian Grajkowski #include "qat_utils.h"
17*78ee8d1cSJulian Grajkowski #include "cpa.h"
18*78ee8d1cSJulian Grajkowski 
19*78ee8d1cSJulian Grajkowski #include "icp_accel_devices.h"
20*78ee8d1cSJulian Grajkowski #include "icp_adf_init.h"
21*78ee8d1cSJulian Grajkowski #include "icp_adf_transport.h"
22*78ee8d1cSJulian Grajkowski #include "icp_adf_debug.h"
23*78ee8d1cSJulian Grajkowski #include "icp_sal_iommu.h"
24*78ee8d1cSJulian Grajkowski 
25*78ee8d1cSJulian Grajkowski #include "lac_mem.h"
26*78ee8d1cSJulian Grajkowski #include "lac_mem_pools.h"
27*78ee8d1cSJulian Grajkowski #include "lac_common.h"
28*78ee8d1cSJulian Grajkowski #include "lac_list.h"
29*78ee8d1cSJulian Grajkowski #include "icp_qat_fw_la.h"
30*78ee8d1cSJulian Grajkowski #include "lac_sal_types.h"
31*78ee8d1cSJulian Grajkowski 
32*78ee8d1cSJulian Grajkowski /*
33*78ee8d1cSJulian Grajkowski ********************************************************************************
34*78ee8d1cSJulian Grajkowski * Static Variables
35*78ee8d1cSJulian Grajkowski ********************************************************************************
36*78ee8d1cSJulian Grajkowski */
37*78ee8d1cSJulian Grajkowski 
38*78ee8d1cSJulian Grajkowski #define MAX_BUFFER_SIZE (LAC_BITS_TO_BYTES(4096))
39*78ee8d1cSJulian Grajkowski /**< @ingroup LacMem
40*78ee8d1cSJulian Grajkowski  * Maximum size of the buffers used in the resize function */
41*78ee8d1cSJulian Grajkowski 
42*78ee8d1cSJulian Grajkowski /*
43*78ee8d1cSJulian Grajkowski *******************************************************************************
44*78ee8d1cSJulian Grajkowski * Define public/global function definitions
45*78ee8d1cSJulian Grajkowski *******************************************************************************
46*78ee8d1cSJulian Grajkowski */
47*78ee8d1cSJulian Grajkowski /**
48*78ee8d1cSJulian Grajkowski  * @ingroup LacMem
49*78ee8d1cSJulian Grajkowski  */
50*78ee8d1cSJulian Grajkowski CpaStatus
icp_LacBufferRestore(Cpa8U * pUserBuffer,Cpa32U userLen,Cpa8U * pWorkingBuffer,Cpa32U workingLen,CpaBoolean copyBuf)51*78ee8d1cSJulian Grajkowski icp_LacBufferRestore(Cpa8U *pUserBuffer,
52*78ee8d1cSJulian Grajkowski 		     Cpa32U userLen,
53*78ee8d1cSJulian Grajkowski 		     Cpa8U *pWorkingBuffer,
54*78ee8d1cSJulian Grajkowski 		     Cpa32U workingLen,
55*78ee8d1cSJulian Grajkowski 		     CpaBoolean copyBuf)
56*78ee8d1cSJulian Grajkowski {
57*78ee8d1cSJulian Grajkowski 	Cpa32U padSize = 0;
58*78ee8d1cSJulian Grajkowski 
59*78ee8d1cSJulian Grajkowski 	/* NULL is a valid value for working buffer as this function may be
60*78ee8d1cSJulian Grajkowski 	 * called to clean up in an error case where all the resize operations
61*78ee8d1cSJulian Grajkowski 	 * were not completed */
62*78ee8d1cSJulian Grajkowski 	if (NULL == pWorkingBuffer) {
63*78ee8d1cSJulian Grajkowski 		return CPA_STATUS_SUCCESS;
64*78ee8d1cSJulian Grajkowski 	}
65*78ee8d1cSJulian Grajkowski 
66*78ee8d1cSJulian Grajkowski 	if (workingLen < userLen) {
67*78ee8d1cSJulian Grajkowski 		QAT_UTILS_LOG("Invalid buffer sizes\n");
68*78ee8d1cSJulian Grajkowski 		return CPA_STATUS_INVALID_PARAM;
69*78ee8d1cSJulian Grajkowski 	}
70*78ee8d1cSJulian Grajkowski 
71*78ee8d1cSJulian Grajkowski 	if (pUserBuffer != pWorkingBuffer) {
72*78ee8d1cSJulian Grajkowski 
73*78ee8d1cSJulian Grajkowski 		if (CPA_TRUE == copyBuf) {
74*78ee8d1cSJulian Grajkowski 			/* Copy from internal buffer to user buffer */
75*78ee8d1cSJulian Grajkowski 			padSize = workingLen - userLen;
76*78ee8d1cSJulian Grajkowski 			memcpy(pUserBuffer, pWorkingBuffer + padSize, userLen);
77*78ee8d1cSJulian Grajkowski 		}
78*78ee8d1cSJulian Grajkowski 
79*78ee8d1cSJulian Grajkowski 		Lac_MemPoolEntryFree(pWorkingBuffer);
80*78ee8d1cSJulian Grajkowski 	}
81*78ee8d1cSJulian Grajkowski 	return CPA_STATUS_SUCCESS;
82*78ee8d1cSJulian Grajkowski }
83*78ee8d1cSJulian Grajkowski 
84*78ee8d1cSJulian Grajkowski /**
85*78ee8d1cSJulian Grajkowski  * @ingroup LacMem
86*78ee8d1cSJulian Grajkowski  */
87*78ee8d1cSJulian Grajkowski CpaPhysicalAddr
SalMem_virt2PhysExternal(void * pVirtAddr,void * pServiceGen)88*78ee8d1cSJulian Grajkowski SalMem_virt2PhysExternal(void *pVirtAddr, void *pServiceGen)
89*78ee8d1cSJulian Grajkowski {
90*78ee8d1cSJulian Grajkowski 	sal_service_t *pService = (sal_service_t *)pServiceGen;
91*78ee8d1cSJulian Grajkowski 
92*78ee8d1cSJulian Grajkowski 	if (NULL != pService->virt2PhysClient) {
93*78ee8d1cSJulian Grajkowski 		return pService->virt2PhysClient(pVirtAddr);
94*78ee8d1cSJulian Grajkowski 	} else {
95*78ee8d1cSJulian Grajkowski 		/* Use internal QAT Utils virt to phys */
96*78ee8d1cSJulian Grajkowski 		/* Ok for kernel space probably should not use for user */
97*78ee8d1cSJulian Grajkowski 		return LAC_OS_VIRT_TO_PHYS_INTERNAL(pVirtAddr);
98*78ee8d1cSJulian Grajkowski 	}
99*78ee8d1cSJulian Grajkowski }
100*78ee8d1cSJulian Grajkowski 
101*78ee8d1cSJulian Grajkowski size_t
icp_sal_iommu_get_remap_size(size_t size)102*78ee8d1cSJulian Grajkowski icp_sal_iommu_get_remap_size(size_t size)
103*78ee8d1cSJulian Grajkowski {
104*78ee8d1cSJulian Grajkowski 	return size;
105*78ee8d1cSJulian Grajkowski }
106*78ee8d1cSJulian Grajkowski 
107*78ee8d1cSJulian Grajkowski CpaStatus
icp_sal_iommu_map(Cpa64U phaddr,Cpa64U iova,size_t size)108*78ee8d1cSJulian Grajkowski icp_sal_iommu_map(Cpa64U phaddr, Cpa64U iova, size_t size)
109*78ee8d1cSJulian Grajkowski {
110*78ee8d1cSJulian Grajkowski 	return CPA_STATUS_SUCCESS;
111*78ee8d1cSJulian Grajkowski }
112*78ee8d1cSJulian Grajkowski 
113*78ee8d1cSJulian Grajkowski CpaStatus
icp_sal_iommu_unmap(Cpa64U iova,size_t size)114*78ee8d1cSJulian Grajkowski icp_sal_iommu_unmap(Cpa64U iova, size_t size)
115*78ee8d1cSJulian Grajkowski {
116*78ee8d1cSJulian Grajkowski 	return CPA_STATUS_SUCCESS;
117*78ee8d1cSJulian Grajkowski }
118