abuf: Provide a constant buffer
authorSimon Glass <sjg@chromium.org>
Sat, 11 Jan 2025 00:00:03 +0000 (17:00 -0700)
committerTom Rini <trini@konsulko.com>
Wed, 22 Jan 2025 21:58:03 +0000 (15:58 -0600)
Add a new initialiser which can accept a constant pointer.

Signed-off-by: Simon Glass <sjg@chromium.org>
include/abuf.h
lib/abuf.c
test/lib/abuf.c

index de21cef..62ff649 100644 (file)
@@ -157,6 +157,19 @@ void abuf_init_move(struct abuf *abuf, void *data, size_t size);
  */
 void abuf_init_set(struct abuf *abuf, void *data, size_t size);
 
+/**
+ * abuf_init_const() - Set up a new const abuf
+ *
+ * Inits a new abuf and sets up its (unallocated) data. The only current
+ * difference between this and abuf_init_set() is the 'data' parameter is a
+ * const pointer. At some point a flag could be used to indicate const-ness.
+ *
+ * @abuf: abuf to set up
+ * @data: New contents of abuf
+ * @size: New size of abuf
+ */
+void abuf_init_const(struct abuf *abuf, const void *data, size_t size);
+
 /**
  * abuf_uninit() - Free any memory used by an abuf
  *
index 8156177..61adf7f 100644 (file)
@@ -119,6 +119,12 @@ void abuf_init_set(struct abuf *abuf, void *data, size_t size)
        abuf_set(abuf, data, size);
 }
 
+void abuf_init_const(struct abuf *abuf, const void *data, size_t size)
+{
+       /* for now there is no flag indicating that the abuf data is constant */
+       abuf_init_set(abuf, (void *)data, size);
+}
+
 void abuf_init_move(struct abuf *abuf, void *data, size_t size)
 {
        abuf_init_set(abuf, data, size);
index 5d61f92..b38690f 100644 (file)
@@ -46,6 +46,28 @@ static int lib_test_abuf_set(struct unit_test_state *uts)
 }
 LIB_TEST(lib_test_abuf_set, 0);
 
+/* Test abuf_init_const() */
+static int lib_test_abuf_init_const(struct unit_test_state *uts)
+{
+       struct abuf buf;
+       ulong start;
+       void *ptr;
+
+       start = ut_check_free();
+
+       ptr = map_sysmem(0x100, 0);
+
+       abuf_init_const(&buf, ptr, 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, 0);
+
 /* Test abuf_map_sysmem() and abuf_addr() */
 static int lib_test_abuf_map_sysmem(struct unit_test_state *uts)
 {