/*
 * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <arch.h>
#include <asm_macros.S>
#define USE_FINISH_CONSOLE_REG_2
#include <console_macros.S>
#include <assert_macros.S>
#include "imx_uart.h"

	.globl	console_imx_uart_register
	.globl	console_imx_uart_putc
	.globl	console_imx_uart_getc
	.globl	console_imx_uart_flush

func console_imx_uart_register
	push	{r4, lr}
	mov	r4, r3
	cmp	r4, #0
	beq	register_fail
	str	r0, [r4, #CONSOLE_T_DRVDATA]

	bl	console_imx_uart_core_init
	cmp	r0, #0
	bne	register_fail

	mov	r0, r4
	pop	{r4, lr}
	finish_console_register imx_uart putc=1, getc=1, flush=1

register_fail:
	pop	{r4, pc}
endfunc console_imx_uart_register

func console_imx_uart_putc
	ldr	r1, [r1, #CONSOLE_T_DRVDATA]
	b console_imx_uart_core_putc
endfunc console_imx_uart_putc

func console_imx_uart_getc
	ldr	r0, [r0, #CONSOLE_T_DRVDATA]
	b console_imx_uart_core_getc
endfunc console_imx_uart_getc

func console_imx_uart_flush
	ldr	r0, [r0, #CONSOLE_T_DRVDATA]
	b console_imx_uart_core_flush
endfunc console_imx_uart_flush
