[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v1 05/14] xen/riscv: add early_printk_hnum() function



Add ability to print hex number.
It might be useful to print register value as debug information
in BUG(), WARN(), etc...

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
---
 xen/arch/riscv/early_printk.c             | 39 +++++++++++++++++++++++
 xen/arch/riscv/include/asm/early_printk.h |  2 ++
 2 files changed, 41 insertions(+)

diff --git a/xen/arch/riscv/early_printk.c b/xen/arch/riscv/early_printk.c
index 6f590e712b..876d022dd6 100644
--- a/xen/arch/riscv/early_printk.c
+++ b/xen/arch/riscv/early_printk.c
@@ -43,3 +43,42 @@ void early_printk(const char *str)
         str++;
     }
 }
+
+static void reverse(char *s, int length)
+{
+    int c;
+    char *begin, *end, temp;
+
+    begin  = s;
+    end    = s + length - 1;
+
+    for ( c = 0; c < length/2; c++ )
+    {
+        temp   = *end;
+        *end   = *begin;
+        *begin = temp;
+
+        begin++;
+        end--;
+    }
+}
+
+void early_printk_hnum(const register_t reg_val)
+{
+    char hex[] = "0123456789ABCDEF";
+    char buf[17] = {0};
+
+    register_t num = reg_val;
+    unsigned int count = 0;
+
+    for ( count = 0; num != 0; count++, num >>= 4 )
+        buf[count] = hex[num & 0x0000000f];
+
+    buf[count] = '\0';
+
+    reverse(buf, count);
+
+    early_printk("0x");
+    early_printk(buf);
+    early_printk("\n");
+}
diff --git a/xen/arch/riscv/include/asm/early_printk.h 
b/xen/arch/riscv/include/asm/early_printk.h
index 05106e160d..f6d7580eb0 100644
--- a/xen/arch/riscv/include/asm/early_printk.h
+++ b/xen/arch/riscv/include/asm/early_printk.h
@@ -5,8 +5,10 @@
 
 #ifdef CONFIG_EARLY_PRINTK
 void early_printk(const char *str);
+void early_printk_hnum(const register_t reg_val);
 #else
 static inline void early_printk(const char *s) {};
+static inline void early_printk_hnum(const register_t reg_val) {};
 #endif
 
 #endif /* __EARLY_PRINTK_H__ */
-- 
2.39.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.