mirror of
https://github.com/CTCaer/switch-l4t-atf.git
synced 2025-03-04 08:27:13 +00:00
console: add a flag to prepend '\r' in the multi-console framework
Currently, console drivers prepend '\r' to '\n' by themselves. This is common enough to be supported in the framework. Add a new flag, CONSOLE_FLAG_TRANSLATE_CRLF. A driver can set this flag to ask the framework to transform LF into CRLF instead of doing it by itself. Change-Id: I4f5c5887591bc0a8749a105abe62b6562eaf503b Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
This commit is contained in:
parent
d1b6013d84
commit
f51df47572
@ -70,6 +70,20 @@ void console_set_scope(console_t *console, unsigned int scope)
|
||||
console->flags = (console->flags & ~CONSOLE_FLAG_SCOPE_MASK) | scope;
|
||||
}
|
||||
|
||||
static int do_putc(int c, console_t *console)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if ((c == '\n') &&
|
||||
((console->flags & CONSOLE_FLAG_TRANSLATE_CRLF) != 0)) {
|
||||
ret = console->putc('\r', console);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return console->putc(c, console);
|
||||
}
|
||||
|
||||
int console_putc(int c)
|
||||
{
|
||||
int err = ERROR_NO_VALID_CONSOLE;
|
||||
@ -77,7 +91,7 @@ int console_putc(int c)
|
||||
|
||||
for (console = console_list; console != NULL; console = console->next)
|
||||
if ((console->flags & console_state) && console->putc) {
|
||||
int ret = console->putc(c, console);
|
||||
int ret = do_putc(c, console);
|
||||
if ((err == ERROR_NO_VALID_CONSOLE) || (ret < err))
|
||||
err = ret;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -21,7 +21,8 @@
|
||||
#define CONSOLE_FLAG_CRASH (U(1) << 2)
|
||||
/* Bits 3 to 7 reserved for additional scopes in future expansion. */
|
||||
#define CONSOLE_FLAG_SCOPE_MASK ((U(1) << 8) - 1)
|
||||
/* Bits 8 to 31 reserved for non-scope use in future expansion. */
|
||||
/* Bits 8 to 31 for non-scope use. */
|
||||
#define CONSOLE_FLAG_TRANSLATE_CRLF (U(1) << 8)
|
||||
|
||||
/* Returned by getc callbacks when receive FIFO is empty. */
|
||||
#define ERROR_NO_PENDING_CHAR (-1)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -125,9 +125,18 @@ putc_loop:
|
||||
b.eq putc_continue
|
||||
ldr x2, [x15, #CONSOLE_T_PUTC]
|
||||
cbz x2, putc_continue
|
||||
cmp w14, #'\n'
|
||||
b.ne putc
|
||||
tst w1, #CONSOLE_FLAG_TRANSLATE_CRLF
|
||||
b.eq putc
|
||||
mov x1, x15
|
||||
mov w0, #'\r'
|
||||
blr x2
|
||||
ldr x2, [x15, #CONSOLE_T_PUTC]
|
||||
putc:
|
||||
mov x1, x15
|
||||
mov w0, w14
|
||||
blr x2
|
||||
putc_continue:
|
||||
ldr x15, [x15] /* X15 = next struct */
|
||||
b putc_loop
|
||||
|
Loading…
x
Reference in New Issue
Block a user