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