diff --git a/payloads/libpayload/include/stdlib.h b/payloads/libpayload/include/stdlib.h index e129cd10d4..cb9addfbde 100644 --- a/payloads/libpayload/include/stdlib.h +++ b/payloads/libpayload/include/stdlib.h @@ -137,6 +137,7 @@ void print_malloc_map(void); void init_dma_memory(void *start, u32 size); int dma_initialized(void); int dma_coherent(const void *ptr); +void dma_allocator_range(void **start_out, size_t *size_out); static inline void *xmalloc_work(size_t size, const char *file, const char *func, int line) diff --git a/payloads/libpayload/libc/malloc.c b/payloads/libpayload/libc/malloc.c index 1fc2ef1013..f8a9ddf912 100644 --- a/payloads/libpayload/libc/malloc.c +++ b/payloads/libpayload/libc/malloc.c @@ -123,6 +123,18 @@ int dma_coherent(const void *ptr) return !dma_initialized() || (dma->start <= ptr && dma->end > ptr); } +/* Get the range of memory that can be allocated by the dma allocator. */ +void dma_allocator_range(void **start_out, size_t *size_out) +{ + if (dma_initialized()) { + *start_out = dma->start; + *size_out = dma->end - dma->start; + } else { + *start_out = NULL; + *size_out = 0; + } +} + /* Find free block of size >= len */ static hdrtype_t volatile *find_free_block(int len, struct memory_type *type) {