From: Michael Brown Date: Mon, 26 May 2025 22:33:35 +0000 (+0100) Subject: [riscv] Create macros for writing characters to the debug console X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2e8d45aeef813e7b25b4ac949d1407bc7ecd2ea8;p=thirdparty%2Fipxe.git [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 --- 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 @@ -52,6 +52,64 @@ prefix_virt: .dword _prefix .size prefix_virt, . - 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