diff options
| author | Michael Brown | 2025-05-27 00:33:35 +0200 |
|---|---|---|
| committer | Michael Brown | 2025-05-27 00:36:02 +0200 |
| commit | 2e8d45aeef813e7b25b4ac949d1407bc7ecd2ea8 (patch) | |
| tree | c4d083d09ce793c0703216597f289b310f0e8c94 /src | |
| parent | [riscv] Ignore riscv,isa property in favour of direct CSR testing (diff) | |
| download | ipxe-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.S | 79 |
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 |
