abuf: Provide a way to get the buffer address

In many cases it is useful to get the address of a buffer, e.g. when
booting from it. Add a function to handle this.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2025-01-10 17:00:01 -07:00 committed by Tom Rini
parent 864106f3c4
commit c487381d50
3 changed files with 17 additions and 1 deletions

View File

@ -42,6 +42,14 @@ static inline size_t abuf_size(const struct abuf *abuf)
return abuf->size;
}
/**
* abuf_addr() - Get the address of a buffer's data
*
* @abuf: Buffer to check
* Return: address of buffer
*/
ulong abuf_addr(const struct abuf *abuf);
/**
* abuf_set() - set the (unallocated) data in a buffer
*

View File

@ -26,6 +26,12 @@ void abuf_map_sysmem(struct abuf *abuf, ulong addr, size_t size)
{
abuf_set(abuf, map_sysmem(addr, size), size);
}
ulong abuf_addr(const struct abuf *abuf)
{
return map_to_sysmem(abuf->data);
}
#else
/* copied from lib/string.c for convenience */
static char *memdup(const void *src, size_t len)

View File

@ -46,7 +46,7 @@ static int lib_test_abuf_set(struct unit_test_state *uts)
}
LIB_TEST(lib_test_abuf_set, 0);
/* Test abuf_map_sysmem() */
/* Test abuf_map_sysmem() and abuf_addr() */
static int lib_test_abuf_map_sysmem(struct unit_test_state *uts)
{
struct abuf buf;
@ -60,6 +60,8 @@ static int lib_test_abuf_map_sysmem(struct unit_test_state *uts)
ut_asserteq(TEST_DATA_LEN, buf.size);
ut_asserteq(false, buf.alloced);
ut_asserteq(addr, abuf_addr(&buf));
return 0;
}
LIB_TEST(lib_test_abuf_map_sysmem, 0);