diff options
author | Antonio Niño Díaz <antonio.ninodiaz@arm.com> | 2018-10-25 11:54:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-25 11:54:22 +0200 |
commit | 583cb003b3fb4958d5626857a16ee2cce6b6815c (patch) | |
tree | 0b93dd0e4e1e5b03a650393c9077d18410c67767 /include/common | |
parent | 2ebacb880b4c35a44aece43d6967c1eb2018cf86 (diff) | |
parent | cc5859ca19ff546c35eb0331000dae090b6eabcf (diff) |
Merge pull request #1640 from soby-mathew/sm/fin_con_reg
Multi-console: Deprecate the `finish_console_register` macro
Diffstat (limited to 'include/common')
-rw-r--r-- | include/common/aarch32/console_macros.S | 41 | ||||
-rw-r--r-- | include/common/aarch64/console_macros.S | 46 |
2 files changed, 86 insertions, 1 deletions
diff --git a/include/common/aarch32/console_macros.S b/include/common/aarch32/console_macros.S index 480e3c29..7c30688f 100644 --- a/include/common/aarch32/console_macros.S +++ b/include/common/aarch32/console_macros.S @@ -17,6 +17,14 @@ * with a tail call that will include return to the caller. * REQUIRES console_t pointer in x0 and a valid return address in x30. */ +/* + * The USE_FINISH_CONSOLE_REG_2 guard is introduced to allow selection between + * the 2 variants of the finish_console_register macro and will be removed + * once the deprecated variant is removed. + */ +#ifndef USE_FINISH_CONSOLE_REG_2 +#if !ERROR_DEPRECATED + /* This version of the macro is deprecated. Use the new version */ .macro finish_console_register _driver /* * Add these weak definitions so we will automatically write a 0 if the @@ -39,5 +47,38 @@ str r1, [r0, #CONSOLE_T_FLAGS] b console_register .endm +#endif /* ERROR_DEPRECATED */ +#else /* USE_FINISH_CONSOLE_REG_2 */ + /* The new version of the macro not using weak references */ + .macro finish_console_register _driver, putc=0, getc=0, flush=0 + /* + * If any of the callback is not specified or set as 0, then the + * corresponding callback entry in console_t is set to 0. + */ + .ifne \putc + ldr r1, =console_\_driver\()_putc + .else + mov r1, #0 + .endif + str r1, [r0, #CONSOLE_T_PUTC] + + .ifne \getc + ldr r1, =console_\_driver\()_getc + .else + mov r1, #0 + .endif + str r1, [r0, #CONSOLE_T_GETC] + .ifne \flush + ldr r1, =console_\_driver\()_flush + .else + mov r1, #0 + .endif + str r1, [r0, #CONSOLE_T_FLUSH] + + mov r1, #(CONSOLE_FLAG_BOOT | CONSOLE_FLAG_CRASH) + str r1, [r0, #CONSOLE_T_FLAGS] + b console_register + .endm +#endif /* USE_FINISH_CONSOLE_REG_2 */ #endif /* __CONSOLE_MACROS_S__ */ diff --git a/include/common/aarch64/console_macros.S b/include/common/aarch64/console_macros.S index 0ebea2c1..b285ecce 100644 --- a/include/common/aarch64/console_macros.S +++ b/include/common/aarch64/console_macros.S @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -17,6 +17,14 @@ * with a tail call that will include return to the caller. * REQUIRES console_t pointer in x0 and a valid return address in x30. */ +/* + * The USE_FINISH_CONSOLE_REG_2 guard is introduced to allow selection between + * the 2 variants of the finish_console_register macro and will be removed + * once the deprecated variant is removed. + */ +#ifndef USE_FINISH_CONSOLE_REG_2 +#if !ERROR_DEPRECATED + /* This version of the macro is deprecated. Use the new version */ .macro finish_console_register _driver /* * Add these weak definitions so we will automatically write a 0 if the @@ -39,5 +47,41 @@ str x1, [x0, #CONSOLE_T_FLAGS] b console_register .endm +#endif /* ERROR_DEPRECATED */ +#else /* USE_FINISH_CONSOLE_REG_2 */ + /* The new version of the macro not using weak references */ + .macro finish_console_register _driver, putc=0, getc=0, flush=0 + /* + * If any of the callback is not specified or set as 0, then the + * corresponding callback entry in console_t is set to 0. + */ + .ifne \putc + adrp x1, console_\_driver\()_putc + add x1, x1, :lo12:console_\_driver\()_putc + str x1, [x0, #CONSOLE_T_PUTC] + .else + str xzr, [x0, #CONSOLE_T_PUTC] + .endif + + .ifne \getc + adrp x1, console_\_driver\()_getc + add x1, x1, :lo12:console_\_driver\()_getc + str x1, [x0, #CONSOLE_T_GETC] + .else + str xzr, [x0, #CONSOLE_T_GETC] + .endif + .ifne \flush + adrp x1, console_\_driver\()_flush + add x1, x1, :lo12:console_\_driver\()_flush + str x1, [x0, #CONSOLE_T_FLUSH] + .else + str xzr, [x0, #CONSOLE_T_FLUSH] + .endif + + mov x1, #(CONSOLE_FLAG_BOOT | CONSOLE_FLAG_CRASH) + str x1, [x0, #CONSOLE_T_FLAGS] + b console_register + .endm +#endif /* USE_FINISH_CONSOLE_REG_2 */ #endif /* __CONSOLE_MACROS_S__ */ |