1 /* 2 * SPDX-License-Identifier: BSD-3-Clause 3 * SPDX-FileCopyrightText: Copyright TF-RMM Contributors. 4 */ 5 6 #ifndef MEMORY_ALLOC_H 7 #define MEMORY_ALLOC_H 8 9 #include <stddef.h> 10 11 struct _memory_header; 12 typedef struct memory_header_s memory_header_t; 13 14 /* 15 * Number of pages per REC to be allocated. MbedTLS needs 8K of heap 16 * for attestation usecases. 17 */ 18 #define REC_HEAP_PAGES 2 19 20 struct buffer_alloc_ctx { 21 unsigned char *buf; 22 size_t len; 23 memory_header_t *first; 24 memory_header_t *first_free; 25 int verify; 26 }; 27 28 struct memory_header_s { 29 size_t magic1; 30 size_t size; 31 size_t alloc; 32 memory_header_t *prev; 33 memory_header_t *next; 34 memory_header_t *prev_free; 35 memory_header_t *next_free; 36 size_t magic2; 37 }; 38 39 40 /* 41 * Function to assign a heap context to the current CPU for 42 * use by the MbedCrypto. In case the heap needs to be isolated 43 * to the CPU executing a realm , this function must to be 44 * called before entering a Realm. This will ensure that any 45 * crypto operations triggered via RSI will used the assigned 46 * heap. 47 * Arguments: 48 * ctx - Pointer to a valid context for the memory allocator. 49 * Returns: 50 * 0 on success or a POSIX error code or error. 51 */ 52 int buffer_alloc_ctx_assign(struct buffer_alloc_ctx *ctx); 53 54 /* 55 * Function to unasign a heap context from the current CPU. 56 * In case the heap was isolated to the CPU executing a realm, 57 * this function must to be called after exiting a Realm. 58 */ 59 void buffer_alloc_ctx_unassign(void); 60 61 #endif /* MEMORY_ALLOC_H */ 62