@ -1,9 +1,10 @@
/ *
* Copyright ( c ) 2017 - 2018 , ARM Limited and Contributors. All rights reserved.
* Copyright ( c ) 2017 - 2019 , ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
* /
# include < asm_macros.S >
# include < console_macros.S >
# define CONSOLE_NUM_BYTES_SHIFT 24
# define CONSOLE_FLUSH_DATA_TO_PORT ( 1 < < 26 )
@ -20,37 +21,43 @@
* finally displays everything on the UART port.
* /
.globl console_core_init
.globl console_core_putc
.globl console_core_getc
.globl console_core_flush
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* int console_core_init ( uintptr_t base_addr ,
* unsigned int uart_clk , unsigned int baud_rate )
* Function to initialize the console without a
* C Runtime to print debug information. This
* function will be accessed by console_init and
* crash reporting.
* In: x0 - console base address
* w1 - Uart clock in Hz
.globl console_spe_core_init
.globl console_spe_core_putc
.globl console_spe_core_getc
.globl console_spe_core_flush
.globl console_spe_putc
.globl console_spe_getc
.globl console_spe_flush
.globl console_spe_register
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* int console_spe_register ( uintptr_t baseaddr ,
* uint32_t clock , uint32_t baud ,
* console_spe_t * console ) ;
* Function to initialize and register a new spe
* console. Storage passed in for the console struct
* * must * be persistent ( i.e. not from the stack ).
* In: x0 - UART register base address
* w1 - UART clock in Hz
* w2 - Baud rate
* Out: return 1 on success else 0 on error
* Clobber list : x1 , x2
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* x3 - pointer to empty console_spe_t struct
* Out: return 1 on success , 0 on error
* Clobber list : x0 , x1 , x2 , x6 , x7 , x14
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func console_core_init
/ * Check the input base address * /
cbz x0 , core_init_fail
mov w0 , # 1
ret
core_init_fail:
func console_spe_register
cbz x3 , register_fail
str x0 , [ x3 , # CONSOLE_T_DRVDATA ]
mov x0 , x3
finish_console_register spe putc = 1 , getc = 1 , flush = 1
register_fail:
mov w0 , wzr
ret
endfunc console_core_init
endfunc console_spe_register
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* int console_core_putc ( int c , uintptr_t base_addr )
* int console_spe_ core_putc ( int c , uintptr_t base_addr )
* Function to output a character over the console. It
* returns the character printed on success or - 1 on error.
* In : w0 - character to be printed
@ -59,7 +66,7 @@ endfunc console_core_init
* Clobber list : x2
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func console_core_putc
func console_spe_ core_putc
/ * Check the input parameter * /
cbz x1 , putc_error
@ -95,32 +102,48 @@ func console_core_putc
putc_error:
mov w0 , # - 1
ret
endfunc console_core_putc
endfunc console_spe_core_putc
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* int console_spe_putc ( int c , console_spe_t * console )
* Function to output a character over the console. It
* returns the character printed on success or - 1 on error.
* In : w0 - character to be printed
* x1 - pointer to console_t structure
* Out : return - 1 on error else return character.
* Clobber list : x2
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func console_spe_putc
ldr x1 , [ x1 , # CONSOLE_T_DRVDATA ]
b console_spe_core_putc
endfunc console_spe_putc
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* int console_core_getc ( uintptr_t base_addr )
* int console_spe_getc ( console_spe_t * console )
* Function to get a character from the console.
* It returns the character grabbed on success
* or - 1 on error.
* In : x0 - console base address
* or - 1 if no character is available.
* In : x0 - pointer to console_t structure
* Out: w0 - character if available , else - 1
* Clobber list : x0 , x1
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func console_core_getc
func console_sp e_getc
mov w0 , # - 1
ret
endfunc console_core_getc
endfunc console_sp e_getc
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* int console_core_flush ( uintptr_t base_addr )
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* int console_spe_ core_flush ( uintptr_t base_addr )
* Function to force a write of all buffered
* data that hasn ' t been output.
* In : x0 - console base address
* Out : return - 1 on error else return 0 .
* Clobber list : x0 , x1
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func console_core_flush
func console_spe_ core_flush
cbz x0 , flush_error
/ * flush console * /
@ -131,4 +154,18 @@ func console_core_flush
flush_error:
mov w0 , # - 1
ret
endfunc console_core_flush
endfunc console_spe_core_flush
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* int console_spe_flush ( console_spe_t * console )
* Function to force a write of all buffered
* data that hasn ' t been output.
* In : x0 - pointer to console_t structure
* Out : return - 1 on error else return 0 .
* Clobber list : x0 , x1
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func console_spe_flush
ldr x0 , [ x0 , # CONSOLE_T_DRVDATA ]
b console_spe_core_flush
endfunc console_spe_flush