abuf: Add a way to set up an abuf with a given address
In some cases it is convenient to provide an address when initing an abuf, instead of a pointer. Add a function for this. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -202,6 +202,18 @@ void abuf_init_set(struct abuf *abuf, void *data, size_t size);
|
||||
*/
|
||||
void abuf_init_const(struct abuf *abuf, const void *data, size_t size);
|
||||
|
||||
/**
|
||||
* abuf_init_const_addr() - Set up a new buffer at a given address
|
||||
*
|
||||
* This is similar to abuf_init_const() except that it takes an address instead
|
||||
* of a pointer. Note that the abuf is unallocated.
|
||||
*
|
||||
* @abuf: abuf to set up
|
||||
* @addr: Address to use
|
||||
* @size: Size of buffer
|
||||
*/
|
||||
void abuf_init_const_addr(struct abuf *abuf, ulong addr, size_t size);
|
||||
|
||||
/**
|
||||
* abuf_init_size() - Set up an allocated abuf
|
||||
*
|
||||
|
||||
@@ -183,6 +183,13 @@ void abuf_init_const(struct abuf *abuf, const void *data, size_t size)
|
||||
abuf_init_set(abuf, (void *)data, size);
|
||||
}
|
||||
|
||||
#ifndef USE_HOSTCC
|
||||
void abuf_init_const_addr(struct abuf *abuf, ulong addr, size_t size)
|
||||
{
|
||||
return abuf_init_const(abuf, map_sysmem(addr, size), size);
|
||||
}
|
||||
#endif
|
||||
|
||||
void abuf_init_move(struct abuf *abuf, void *data, size_t size)
|
||||
{
|
||||
abuf_init_set(abuf, data, size);
|
||||
|
||||
@@ -68,6 +68,28 @@ static int lib_test_abuf_init_const(struct unit_test_state *uts)
|
||||
}
|
||||
LIB_TEST(lib_test_abuf_init_const, 0);
|
||||
|
||||
/* Test abuf_init_const_addr() */
|
||||
static int lib_test_abuf_init_const_addr(struct unit_test_state *uts)
|
||||
{
|
||||
struct abuf buf;
|
||||
ulong start;
|
||||
void *ptr;
|
||||
|
||||
start = ut_check_free();
|
||||
|
||||
ptr = map_sysmem(0x100, 0);
|
||||
|
||||
abuf_init_const_addr(&buf, 0x100, 10);
|
||||
ut_asserteq_ptr(ptr, buf.data);
|
||||
ut_asserteq(10, buf.size);
|
||||
|
||||
/* No memory should have been allocated */
|
||||
ut_assertok(ut_check_delta(start));
|
||||
|
||||
return 0;
|
||||
}
|
||||
LIB_TEST(lib_test_abuf_init_const_addr, 0);
|
||||
|
||||
/* Test abuf_map_sysmem() and abuf_addr() */
|
||||
static int lib_test_abuf_map_sysmem(struct unit_test_state *uts)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user