xref: /optee_os/core/drivers/crypto/ele/include/memutils.h (revision 89aaf545c66d18461586b92ed88a35bfebacb8fe)
1*89aaf545SSahil Malhotra /* SPDX-License-Identifier: BSD-2-Clause */
2*89aaf545SSahil Malhotra /*
3*89aaf545SSahil Malhotra  * Copyright 2025 NXP
4*89aaf545SSahil Malhotra  *
5*89aaf545SSahil Malhotra  * Memory management utilities.
6*89aaf545SSahil Malhotra  * Primitive to allocate, free memory.
7*89aaf545SSahil Malhotra  */
8*89aaf545SSahil Malhotra 
9*89aaf545SSahil Malhotra #ifndef __MEMUTILS_H__
10*89aaf545SSahil Malhotra #define __MEMUTILS_H__
11*89aaf545SSahil Malhotra 
12*89aaf545SSahil Malhotra #include <kernel/cache_helpers.h>
13*89aaf545SSahil Malhotra #include <stddef.h>
14*89aaf545SSahil Malhotra #include <tee_api_types.h>
15*89aaf545SSahil Malhotra #include <tee/cache.h>
16*89aaf545SSahil Malhotra 
17*89aaf545SSahil Malhotra /*
18*89aaf545SSahil Malhotra  * struct imx_ele_buf - Definition of a IMX ELE buffer type
19*89aaf545SSahil Malhotra  * @data: Data buffer
20*89aaf545SSahil Malhotra  * @size: Number of bytes in the data buffer
21*89aaf545SSahil Malhotra  * @paddr: Physical address of the buffer
22*89aaf545SSahil Malhotra  * @paddr_msb: MSB of the physical address
23*89aaf545SSahil Malhotra  * @paddr_lsb: LSB of the physical address
24*89aaf545SSahil Malhotra  */
25*89aaf545SSahil Malhotra struct imx_ele_buf {
26*89aaf545SSahil Malhotra 	uint8_t *data;
27*89aaf545SSahil Malhotra 	size_t size;
28*89aaf545SSahil Malhotra 	paddr_t paddr;
29*89aaf545SSahil Malhotra 	uint32_t paddr_msb;
30*89aaf545SSahil Malhotra 	uint32_t paddr_lsb;
31*89aaf545SSahil Malhotra };
32*89aaf545SSahil Malhotra 
33*89aaf545SSahil Malhotra /*
34*89aaf545SSahil Malhotra  * Allocate cache aligned buffer, initialize it with 0's, copy data from
35*89aaf545SSahil Malhotra  * @buf to newly allocated buffer and cache flush the buffer.
36*89aaf545SSahil Malhotra  *
37*89aaf545SSahil Malhotra  * @ele_buf: Buffer allocated
38*89aaf545SSahil Malhotra  * @buf: If valid, will copy contents from this buffer to newly allocated
39*89aaf545SSahil Malhotra  *        buffer. Otherwise it is ignored.
40*89aaf545SSahil Malhotra  * @size: Size in bytes of the memory to allocate.
41*89aaf545SSahil Malhotra  */
42*89aaf545SSahil Malhotra TEE_Result imx_ele_buf_alloc(struct imx_ele_buf *ele_buf, const uint8_t *buf,
43*89aaf545SSahil Malhotra 			     size_t size);
44*89aaf545SSahil Malhotra 
45*89aaf545SSahil Malhotra /*
46*89aaf545SSahil Malhotra  * Free buffer allocated memory
47*89aaf545SSahil Malhotra  *
48*89aaf545SSahil Malhotra  * @ele_buf:  Buffer to free
49*89aaf545SSahil Malhotra  */
50*89aaf545SSahil Malhotra void imx_ele_buf_free(struct imx_ele_buf *ele_buf);
51*89aaf545SSahil Malhotra 
52*89aaf545SSahil Malhotra /*
53*89aaf545SSahil Malhotra  * Copy data from ele_buf to data
54*89aaf545SSahil Malhotra  *
55*89aaf545SSahil Malhotra  * @ele_buf: Buffer from data to be copied
56*89aaf545SSahil Malhotra  * @buf: Buffer to which data to be copied
57*89aaf545SSahil Malhotra  * @size: Size of buf
58*89aaf545SSahil Malhotra  */
59*89aaf545SSahil Malhotra TEE_Result imx_ele_buf_copy(struct imx_ele_buf *ele_buf, uint8_t *buf,
60*89aaf545SSahil Malhotra 			    size_t size);
61*89aaf545SSahil Malhotra 
62*89aaf545SSahil Malhotra #endif /* __MEMUTILS_H__ */
63