mirror of
https://github.com/ipxe/ipxe
synced 2025-12-09 02:40:27 +03:00
[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>
This commit is contained in:
@@ -52,6 +52,64 @@ prefix_virt:
|
|||||||
.dword _prefix
|
.dword _prefix
|
||||||
.size prefix_virt, . - prefix_virt
|
.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
|
* 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
|
.section ".prefix.print_message", "ax", @progbits
|
||||||
.globl print_message
|
.globl print_message
|
||||||
print_message:
|
print_message:
|
||||||
@@ -108,13 +159,10 @@ print_message_alt:
|
|||||||
lbu a0, (t1)
|
lbu a0, (t1)
|
||||||
addi t1, t1, 1
|
addi t1, t1, 1
|
||||||
beqz a0, 2f
|
beqz a0, 2f
|
||||||
li a7, SBI_DBCN
|
print_char_dbcn
|
||||||
li a6, SBI_DBCN_WRITE_BYTE
|
|
||||||
ecall
|
|
||||||
beqz a0, 1b
|
beqz a0, 1b
|
||||||
lbu a0, -1(t1)
|
lbu a0, -1(t1)
|
||||||
li a7, SBI_LEGACY_PUTCHAR
|
print_char_legacy
|
||||||
ecall
|
|
||||||
j 1b
|
j 1b
|
||||||
2:
|
2:
|
||||||
/* Restore registers and return (via alternate link register) */
|
/* Restore registers and return (via alternate link register) */
|
||||||
@@ -202,14 +250,11 @@ print_hex_value_alt:
|
|||||||
1: /* Print each digit in turn */
|
1: /* Print each digit in turn */
|
||||||
srli a0, t1, ( __riscv_xlen - 4 )
|
srli a0, t1, ( __riscv_xlen - 4 )
|
||||||
nibble_to_ascii a0
|
nibble_to_ascii a0
|
||||||
li a7, SBI_DBCN
|
print_char_dbcn
|
||||||
li a6, SBI_DBCN_WRITE_BYTE
|
|
||||||
ecall
|
|
||||||
beqz a0, 2f
|
beqz a0, 2f
|
||||||
srli a0, t1, ( __riscv_xlen - 4 )
|
srli a0, t1, ( __riscv_xlen - 4 )
|
||||||
nibble_to_ascii a0
|
nibble_to_ascii a0
|
||||||
li a7, SBI_LEGACY_PUTCHAR
|
print_char_legacy
|
||||||
ecall
|
|
||||||
2: slli t1, t1, 4
|
2: slli t1, t1, 4
|
||||||
addi t2, t2, -4
|
addi t2, t2, -4
|
||||||
bgtz t2, 1b
|
bgtz t2, 1b
|
||||||
|
|||||||
Reference in New Issue
Block a user