blob: dad3eb80726260aabce14dd0b4df902926b18d0a [file] [log] [blame]
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright 2018-2019 NXP
*
* Brief Memory management utilities.
* Primitive to allocate, free memory.
*/
#ifndef __CAAM_UTILS_MEM_H__
#define __CAAM_UTILS_MEM_H__
#include <caam_common.h>
/*
* Allocate normal memory and initialize it to 0's.
*
* @size size in bytes of the memory to allocate
*/
void *caam_calloc(size_t size);
/*
* Allocate memory aligned with a cache line and initialize it to 0's.
*
* @size size in bytes of the memory to allocate
*/
void *caam_calloc_align(size_t size);
/*
* Free allocated memory
*
* @ptr reference to the object to free
*/
void caam_free(void *ptr);
/*
* Allocate Job descriptor and initialize it to 0's.
*
* @nbentries Number of descriptor entries
*/
uint32_t *caam_calloc_desc(uint8_t nbentries);
/*
* Free descriptor
*
* @ptr Reference to the descriptor to free
*/
void caam_free_desc(uint32_t **ptr);
/*
* Allocate internal driver buffer and initialize it with 0s.
*
* @buf [out] buffer allocated
* @size size in bytes of the memory to allocate
*/
enum caam_status caam_calloc_buf(struct caambuf *buf, size_t size);
/*
* Allocate internal driver buffer aligned with a cache line and initialize
* if with 0's.
*
* @buf [out] buffer allocated
* @size size in bytes of the memory to allocate
*/
enum caam_status caam_calloc_align_buf(struct caambuf *buf, size_t size);
/*
* Allocate internal driver buffer aligned with a cache line.
*
* @buf [out] buffer allocated
* @size size in bytes of the memory to allocate
*/
enum caam_status caam_alloc_align_buf(struct caambuf *buf, size_t size);
/*
* Free internal driver buffer allocated memory
*
* @buf Driver buffer to free
*/
void caam_free_buf(struct caambuf *buf);
/*
* Free data of type struct caamsgtbuf
*
* @data Data object to free
*/
void caam_sgtbuf_free(struct caamsgtbuf *data);
/*
* Allocate data of type struct caamsgtbuf
*
* @data [out] Data object allocated
*/
enum caam_status caam_sgtbuf_alloc(struct caamsgtbuf *data);
/*
* Initialize struct caambuf with buffer reference, eventually
* reallocating the buffer if not matching cache line alignment.
*
* @orig Buffer origin
* @dst [out] CAAM Buffer object with origin or reallocated buffer
* @size Size in bytes of the buffer
*
* Returns:
* 0 if destination is the same as origin
* 1 if reallocation of the buffer
* (-1) if allocation error
*/
int caam_set_or_alloc_align_buf(void *orig, struct caambuf *dst, size_t size);
/*
* Copy source data into the block buffer. Allocate block buffer if
* it's not defined.
*
* @block [in/out] Block buffer information. Return buffer filled.
* @src Source to copy
* @offset Source offset to start
*/
enum caam_status caam_cpy_block_src(struct caamblock *block,
struct caambuf *src, size_t offset);
#endif /* __CAAM_UTILS_MEM_H__ */