Files
esp-idf/components/esp_tee/subproject/main/include/multi_heap.h
2025-04-08 19:50:26 +05:30

119 lines
3.4 KiB
C

/*
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include <string.h>
#include "esp_err.h"
/* multi_heap is a heap implementation for handling multiple
heterogeneous heaps in a single program.
Any contiguous block of memory can be registered as a heap.
*/
#ifdef __cplusplus
extern "C" {
#endif
struct multi_heap_info {
void *lock;
size_t free_bytes;
size_t minimum_free_bytes;
size_t pool_size;
void *heap_data;
};
typedef struct multi_heap_info heap_t;
/** @brief Opaque handle to a registered heap */
typedef struct multi_heap_info *multi_heap_handle_t;
/** @brief Initialize the TEE heap
*
* This function initialises the TEE heap at the specified address, and
* sets up a handle for future heap operations.
*
* @param start Start address of the memory to use for the TEE heap.
* @param size Size (in bytes) of the TEE heap.
*
* @return ESP_OK on success, or an `esp_err_t` error code on failure.
*/
esp_err_t esp_tee_heap_init(void *start, size_t size);
/**
* @brief Allocate a buffer (malloc) in the TEE heap
*
* This function allocates a buffer of the specified size in the TEE heap.
* The semantics are the same as the standard malloc().
*
* @param size The size of the desired buffer in bytes.
*
* @return A pointer to the newly allocated memory, or NULL if the allocation fails.
*/
void *esp_tee_heap_malloc(size_t size);
/**
* @brief Allocate and zero-initialize (calloc) a buffer in the TEE heap
*
* This function allocates a buffer for an array of 'n' elements, each of 'size' bytes,
* and initializes all bytes in the allocated storage to zero. The semantics are the same
* as the standard calloc().
*
* @param n The number of elements to allocate.
* @param size The size of each element in bytes.
*
* @return A pointer to the newly allocated and zero-initialized memory, or NULL if the allocation fails.
*/
void *esp_tee_heap_calloc(size_t n, size_t size);
/**
* @brief Allocate a memory chunk with specific alignment in the TEE heap
*
* This function allocates a chunk of memory of the specified size with the specified alignment
* in the TEE heap.
*
* @param size The size in bytes of the memory chunk.
* @param alignment The alignment requirement for the memory chunk.
*
* @return A pointer to the allocated memory, or NULL if the allocation fails.
*/
void *esp_tee_heap_aligned_alloc(size_t size, size_t alignment);
/**
* @brief Free a buffer in the TEE heap
*
* This function frees a buffer that was previously allocated in the TEE heap.
* The semantics are the same as the standard free().
*
* @param p A pointer to the memory to be freed, or NULL. The pointer must have been
* returned from esp_tee_heap_malloc(), esp_tee_heap_calloc(), or esp_tee_heap_aligned_alloc().
*/
void esp_tee_heap_free(void *p);
/**
* @brief Get the size of available TEE heap
*
* @return Available TEE heap size, in bytes
*/
size_t esp_tee_heap_get_free_size(void);
/**
* @brief Get the minimum TEE heap that has ever been available
*
* @return Minimum free TEE heap ever available, in bytes
*/
size_t esp_tee_heap_get_min_free_size(void);
/**
* @brief Dump info about the entire structure of the TEE heap
*
* This function outputs detailed information about every block in the TEE heap to stdout.
* (Intended for debugging purposes)
*/
void esp_tee_heap_dump_info(void);
#ifdef __cplusplus
}
#endif