/* * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include "lpuart.h" .globl console_lpuart_register .globl console_lpuart_init .globl console_lpuart_putc .globl console_lpuart_getc func console_lpuart_register mov x7, x30 mov x6, x3 cbz x6, register_fail str x0, [x6, #CONSOLE_T_DRVDATA] bl console_lpuart_init cbz x0, register_fail mov x0, x6 mov x30, x7 finish_console_register lpuart register_fail: ret x7 endfunc console_lpuart_register func console_lpuart_init mov w0, #1 ret endfunc console_lpuart_init func console_lpuart_putc ldr x1, [x1, #CONSOLE_T_DRVDATA] cbz x1, putc_error /* Prepare '\r' to '\n' */ cmp w0, #0xA b.ne 2f 1: /* Check if the transmit FIFO is full */ ldr w2, [x1, #STAT] tbz w2, #23, 1b mov w2, #0xD str w2, [x1, #DATA] 2: /* Check if the transmit FIFO is full */ ldr w2, [x1, #STAT] tbz w2, #23, 2b str w0, [x1, #DATA] ret putc_error: mov w0, #-1 ret endfunc console_lpuart_putc func console_lpuart_getc ldr x0, [x0, #CONSOLE_T_DRVDATA] cbz x0, getc_error /* Check if the receive FIFO state */ ret getc_error: mov w0, #-1 ret endfunc console_lpuart_getc