include: sbi_scratch: Add helper macros to access data type
authorAnup Patel <apatel@ventanamicro.com>
Mon, 5 Jun 2023 06:52:37 +0000 (12:22 +0530)
committerAnup Patel <anup@brainfault.org>
Mon, 5 Jun 2023 10:12:50 +0000 (15:42 +0530)
Reading and writing a data type in scratch space is a very common
use-case so let us add related helper macros in sbi_scratch.h.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
include/sbi/sbi_scratch.h

index 2966188d6990087c02f5407d0a89c2a606ea0c09..58f2d06b2d9c5967b3d4ca388ef283abbdd51d45 100644 (file)
@@ -174,6 +174,23 @@ void sbi_scratch_free_offset(unsigned long offset);
 #define sbi_scratch_thishart_offset_ptr(offset)        \
        (void *)((char *)sbi_scratch_thishart_ptr() + (offset))
 
+/** Allocate offset for a data type in sbi_scratch */
+#define sbi_scratch_alloc_type_offset(__type)                          \
+       sbi_scratch_alloc_offset(sizeof(__type))
+
+/** Read a data type from sbi_scratch at given offset */
+#define sbi_scratch_read_type(__scratch, __type, __offset)             \
+({                                                                     \
+       *((__type *)sbi_scratch_offset_ptr((__scratch), (__offset)));   \
+})
+
+/** Write a data type to sbi_scratch at given offset */
+#define sbi_scratch_write_type(__scratch, __type, __offset, __ptr)     \
+do {                                                                   \
+       *((__type *)sbi_scratch_offset_ptr((__scratch), (__offset)))    \
+                                       = (__type)(__ptr);              \
+} while (0)
+
 /** HART id to scratch table */
 extern struct sbi_scratch *hartid_to_scratch_table[];