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