summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Brown2025-05-27 00:33:35 +0200
committerMichael Brown2025-05-27 00:36:02 +0200
commit2e8d45aeef813e7b25b4ac949d1407bc7ecd2ea8 (patch)
treec4d083d09ce793c0703216597f289b310f0e8c94 /src
parent[riscv] Ignore riscv,isa property in favour of direct CSR testing (diff)
downloadipxe-2e8d45aeef813e7b25b4ac949d1407bc7ecd2ea8.tar.gz
ipxe-2e8d45aeef813e7b25b4ac949d1407bc7ecd2ea8.tar.xz
ipxe-2e8d45aeef813e7b25b4ac949d1407bc7ecd2ea8.zip
[riscv] Create macros for writing characters to the debug console
Abstract out the SBI debug console calls into macros that can be shared between print_message and print_hex_value. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src')
-rw-r--r--src/arch/riscv/prefix/libprefix.S79
1 files changed, 62 insertions, 17 deletions
diff --git a/src/arch/riscv/prefix/libprefix.S b/src/arch/riscv/prefix/libprefix.S
index 3cba123ac..d3278f07d 100644
--- a/src/arch/riscv/prefix/libprefix.S
+++ b/src/arch/riscv/prefix/libprefix.S
@@ -54,6 +54,64 @@ prefix_virt:
/*****************************************************************************
*
+ * Print character via debug console extension
+ *
+ *****************************************************************************
+ *
+ * Print a single character via the SBI DBCN extension.
+ *
+ * Parameters:
+ *
+ * a0 - Character to print
+ *
+ * Returns:
+ *
+ * a0 - Zero if character printed successfully
+ * a1 - Overwritten
+ * a6 - Overwritten
+ * a7 - Overwritten
+ *
+ */
+
+/* SBI debug console extension */
+#define SBI_DBCN ( ( 'D' << 24 ) | ( 'B' << 16 ) | ( 'C' << 8 ) | 'N' )
+#define SBI_DBCN_WRITE_BYTE 0x02
+
+ .macro print_char_dbcn
+ li a7, SBI_DBCN
+ li a6, SBI_DBCN_WRITE_BYTE
+ ecall
+ .endm
+
+/*****************************************************************************
+ *
+ * Print character via legacy extension
+ *
+ *****************************************************************************
+ *
+ * Print a single character via the SBI putchar legacy extension.
+ *
+ * Parameters:
+ *
+ * a0 - Character to print
+ *
+ * Returns:
+ *
+ * a0 - Overwritten
+ * a7 - Overwritten
+ *
+ */
+
+/* SBI legacy console putchar */
+#define SBI_LEGACY_PUTCHAR 0x01
+
+ .macro print_char_legacy
+ li a7, SBI_LEGACY_PUTCHAR
+ ecall
+ .endm
+
+/*****************************************************************************
+ *
* Print message to debug console
*
*****************************************************************************
@@ -76,13 +134,6 @@ prefix_virt:
*
*/
-/* SBI debug console extension */
-#define SBI_DBCN ( ( 'D' << 24 ) | ( 'B' << 16 ) | ( 'C' << 8 ) | 'N' )
-#define SBI_DBCN_WRITE_BYTE 0x02
-
-/* SBI legacy console putchar */
-#define SBI_LEGACY_PUTCHAR 0x01
-
.section ".prefix.print_message", "ax", @progbits
.globl print_message
print_message:
@@ -108,13 +159,10 @@ print_message_alt:
lbu a0, (t1)
addi t1, t1, 1
beqz a0, 2f
- li a7, SBI_DBCN
- li a6, SBI_DBCN_WRITE_BYTE
- ecall
+ print_char_dbcn
beqz a0, 1b
lbu a0, -1(t1)
- li a7, SBI_LEGACY_PUTCHAR
- ecall
+ print_char_legacy
j 1b
2:
/* Restore registers and return (via alternate link register) */
@@ -202,14 +250,11 @@ print_hex_value_alt:
1: /* Print each digit in turn */
srli a0, t1, ( __riscv_xlen - 4 )
nibble_to_ascii a0
- li a7, SBI_DBCN
- li a6, SBI_DBCN_WRITE_BYTE
- ecall
+ print_char_dbcn
beqz a0, 2f
srli a0, t1, ( __riscv_xlen - 4 )
nibble_to_ascii a0
- li a7, SBI_LEGACY_PUTCHAR
- ecall
+ print_char_legacy
2: slli t1, t1, 4
addi t2, t2, -4
bgtz t2, 1b