abuf: Provide a way to get the buffer address
authorSimon Glass <sjg@chromium.org>
Sat, 11 Jan 2025 00:00:01 +0000 (17:00 -0700)
committerTom Rini <trini@konsulko.com>
Wed, 22 Jan 2025 21:58:03 +0000 (15:58 -0600)
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>
include/abuf.h
lib/abuf.c
test/lib/abuf.c

index be98ec7..76e314b 100644 (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
  *
index 937c3df..8156177 100644 (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)
index 7c0481a..5d61f92 100644 (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);