blob: 726b28186fe48611d3d58ec906248beeb93ddfd5 [file] [log] [blame]
Daniel Boulby7e2bbef2018-09-19 13:58:20 +01001/*
Ambroise Vincentbe3991c2019-03-27 15:45:35 +00002 * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
Daniel Boulby7e2bbef2018-09-19 13:58:20 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
Antonio Nino Diazc3cf06f2018-11-08 10:20:19 +00006#ifndef CONSOLE_MACROS_S
7#define CONSOLE_MACROS_S
Daniel Boulby7e2bbef2018-09-19 13:58:20 +01008
Antonio Nino Diaz09d40e02018-12-14 00:18:21 +00009#include <drivers/console.h>
Daniel Boulby7e2bbef2018-09-19 13:58:20 +010010
11/*
12 * This macro encapsulates the common setup that has to be done at the end of
13 * a console driver's register function. It will register all of the driver's
14 * callbacks in the console_t structure and initialize the flags field (by
15 * default consoles are enabled for the "boot" and "crash" states, this can be
16 * changed after registration with the console_set_scope() function). It ends
17 * with a tail call that will include return to the caller.
Ambroise Vincent52e91082019-05-31 16:21:59 +010018 * REQUIRES console_t pointer in r0 and a valid return address in lr.
Daniel Boulby7e2bbef2018-09-19 13:58:20 +010019 */
Soby Mathewcc5859c2018-10-10 16:03:09 +010020 .macro finish_console_register _driver, putc=0, getc=0, flush=0
21 /*
22 * If any of the callback is not specified or set as 0, then the
23 * corresponding callback entry in console_t is set to 0.
24 */
25 .ifne \putc
26 ldr r1, =console_\_driver\()_putc
27 .else
28 mov r1, #0
29 .endif
30 str r1, [r0, #CONSOLE_T_PUTC]
Daniel Boulby7e2bbef2018-09-19 13:58:20 +010031
Sandrine Bailleux85bebe12023-10-11 08:38:00 +020032 /*
33 * If ENABLE_CONSOLE_GETC support is disabled, but a getc callback is
34 * specified nonetheless, the assembler will abort on encountering the
35 * CONSOLE_T_GETC macro, which is undefined.
36 */
Soby Mathewcc5859c2018-10-10 16:03:09 +010037 .ifne \getc
38 ldr r1, =console_\_driver\()_getc
Sandrine Bailleux85bebe12023-10-11 08:38:00 +020039 str r1, [r0, #CONSOLE_T_GETC]
Soby Mathewcc5859c2018-10-10 16:03:09 +010040 .else
Sandrine Bailleux85bebe12023-10-11 08:38:00 +020041#if ENABLE_CONSOLE_GETC
Soby Mathewcc5859c2018-10-10 16:03:09 +010042 mov r1, #0
Sandrine Bailleux85bebe12023-10-11 08:38:00 +020043 str r1, [r0, #CONSOLE_T_GETC]
44#endif
Soby Mathewcc5859c2018-10-10 16:03:09 +010045 .endif
Soby Mathewcc5859c2018-10-10 16:03:09 +010046
47 .ifne \flush
48 ldr r1, =console_\_driver\()_flush
49 .else
50 mov r1, #0
51 .endif
52 str r1, [r0, #CONSOLE_T_FLUSH]
53
54 mov r1, #(CONSOLE_FLAG_BOOT | CONSOLE_FLAG_CRASH)
55 str r1, [r0, #CONSOLE_T_FLAGS]
56 b console_register
57 .endm
Ambroise Vincentbe3991c2019-03-27 15:45:35 +000058
Antonio Nino Diazc3cf06f2018-11-08 10:20:19 +000059#endif /* CONSOLE_MACROS_S */