blob: 726b28186fe48611d3d58ec906248beeb93ddfd5 [file] [log] [blame]
Daniel Boulby05e7f562018-09-19 13:58:20 +01001/*
Ambroise Vincent0a0ca8b2019-03-27 15:45:35 +00002 * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
Daniel Boulby05e7f562018-09-19 13:58:20 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +00006#ifndef CONSOLE_MACROS_S
7#define CONSOLE_MACROS_S
Daniel Boulby05e7f562018-09-19 13:58:20 +01008
Antonio Nino Diaze0f90632018-12-14 00:18:21 +00009#include <drivers/console.h>
Daniel Boulby05e7f562018-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 Vincent35e08da2019-05-31 16:21:59 +010018 * REQUIRES console_t pointer in r0 and a valid return address in lr.
Daniel Boulby05e7f562018-09-19 13:58:20 +010019 */
Soby Mathew58873ae2018-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 Boulby05e7f562018-09-19 13:58:20 +010031
Sandrine Bailleuxf57e2032023-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 Mathew58873ae2018-10-10 16:03:09 +010037 .ifne \getc
38 ldr r1, =console_\_driver\()_getc
Sandrine Bailleuxf57e2032023-10-11 08:38:00 +020039 str r1, [r0, #CONSOLE_T_GETC]
Soby Mathew58873ae2018-10-10 16:03:09 +010040 .else
Sandrine Bailleuxf57e2032023-10-11 08:38:00 +020041#if ENABLE_CONSOLE_GETC
Soby Mathew58873ae2018-10-10 16:03:09 +010042 mov r1, #0
Sandrine Bailleuxf57e2032023-10-11 08:38:00 +020043 str r1, [r0, #CONSOLE_T_GETC]
44#endif
Soby Mathew58873ae2018-10-10 16:03:09 +010045 .endif
Soby Mathew58873ae2018-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 Vincent0a0ca8b2019-03-27 15:45:35 +000058
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +000059#endif /* CONSOLE_MACROS_S */