summaryrefslogtreecommitdiff
path: root/payloads/libpayload
diff options
context:
space:
mode:
Diffstat (limited to 'payloads/libpayload')
-rw-r--r--payloads/libpayload/include/stdlib.h1
-rw-r--r--payloads/libpayload/libc/malloc.c12
2 files changed, 13 insertions, 0 deletions
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)
{