mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-27 18:32:54 +00:00
119 lines
3.4 KiB
C
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
|