Add console_flush() to console API
This function ensures that console output is flushed, for example before shutting down or use by another component In line with other console APIs, console_flush() wraps console_core_flush(). Also implement console_core_flush() for PL011. Change-Id: I3db365065e4de04a454a5c2ce21be335a23a01e4 Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
This commit is contained in:
parent
e422f991df
commit
73e052846a
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
@ -40,6 +40,7 @@
|
||||||
.globl console_core_init
|
.globl console_core_init
|
||||||
.globl console_core_putc
|
.globl console_core_putc
|
||||||
.globl console_core_getc
|
.globl console_core_getc
|
||||||
|
.globl console_core_flush
|
||||||
|
|
||||||
|
|
||||||
/* -----------------------------------------------
|
/* -----------------------------------------------
|
||||||
|
@ -158,3 +159,29 @@ getc_error:
|
||||||
mov r0, #-1
|
mov r0, #-1
|
||||||
bx lr
|
bx lr
|
||||||
endfunc console_core_getc
|
endfunc console_core_getc
|
||||||
|
|
||||||
|
/* ---------------------------------------------
|
||||||
|
* int console_core_flush(uintptr_t base_addr)
|
||||||
|
* Function to force a write of all buffered
|
||||||
|
* data that hasn't been output.
|
||||||
|
* In : r0 - console base address
|
||||||
|
* Out : return -1 on error else return 0.
|
||||||
|
* Clobber list : r0, r1
|
||||||
|
* ---------------------------------------------
|
||||||
|
*/
|
||||||
|
func console_core_flush
|
||||||
|
cmp r0, #0
|
||||||
|
beq flush_error
|
||||||
|
|
||||||
|
1:
|
||||||
|
/* Loop while the transmit FIFO is busy */
|
||||||
|
ldr r1, [r0, #UARTFR]
|
||||||
|
tst r1, #PL011_UARTFR_BUSY
|
||||||
|
bne 1b
|
||||||
|
|
||||||
|
mov r0, #0
|
||||||
|
bx lr
|
||||||
|
flush_error:
|
||||||
|
mov r0, #-1
|
||||||
|
bx lr
|
||||||
|
endfunc console_core_flush
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
@ -41,6 +41,7 @@
|
||||||
.globl console_core_init
|
.globl console_core_init
|
||||||
.globl console_core_putc
|
.globl console_core_putc
|
||||||
.globl console_core_getc
|
.globl console_core_getc
|
||||||
|
.globl console_core_flush
|
||||||
|
|
||||||
|
|
||||||
/* -----------------------------------------------
|
/* -----------------------------------------------
|
||||||
|
@ -151,3 +152,27 @@ getc_error:
|
||||||
mov w0, #-1
|
mov w0, #-1
|
||||||
ret
|
ret
|
||||||
endfunc console_core_getc
|
endfunc console_core_getc
|
||||||
|
|
||||||
|
/* ---------------------------------------------
|
||||||
|
* int console_core_flush(uintptr_t base_addr)
|
||||||
|
* Function to force a write of all buffered
|
||||||
|
* data that hasn't been output.
|
||||||
|
* In : x0 - console base address
|
||||||
|
* Out : return -1 on error else return 0.
|
||||||
|
* Clobber list : x0, x1
|
||||||
|
* ---------------------------------------------
|
||||||
|
*/
|
||||||
|
func console_core_flush
|
||||||
|
cbz x0, flush_error
|
||||||
|
|
||||||
|
1:
|
||||||
|
/* Loop until the transmit FIFO is empty */
|
||||||
|
ldr w1, [x0, #UARTFR]
|
||||||
|
tbnz w1, #PL011_UARTFR_BUSY_BIT, 1b
|
||||||
|
|
||||||
|
mov w0, #0
|
||||||
|
ret
|
||||||
|
flush_error:
|
||||||
|
mov w0, #-1
|
||||||
|
ret
|
||||||
|
endfunc console_core_flush
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
@ -33,6 +33,7 @@
|
||||||
.globl console_uninit
|
.globl console_uninit
|
||||||
.globl console_putc
|
.globl console_putc
|
||||||
.globl console_getc
|
.globl console_getc
|
||||||
|
.globl console_flush
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The console base is in the data section and not in .bss
|
* The console base is in the data section and not in .bss
|
||||||
|
@ -112,3 +113,18 @@ func console_getc
|
||||||
ldr r0, [r1]
|
ldr r0, [r1]
|
||||||
b console_core_getc
|
b console_core_getc
|
||||||
endfunc console_getc
|
endfunc console_getc
|
||||||
|
|
||||||
|
/* ---------------------------------------------
|
||||||
|
* int console_flush(void)
|
||||||
|
* Function to force a write of all buffered
|
||||||
|
* data that hasn't been output. It returns 0
|
||||||
|
* upon successful completion, otherwise it
|
||||||
|
* returns -1.
|
||||||
|
* Clobber list : r0, r1
|
||||||
|
* ---------------------------------------------
|
||||||
|
*/
|
||||||
|
func console_flush
|
||||||
|
ldr r1, =console_base
|
||||||
|
ldr r0, [r1]
|
||||||
|
b console_core_flush
|
||||||
|
endfunc console_flush
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
@ -38,6 +38,7 @@
|
||||||
.globl console_core_init
|
.globl console_core_init
|
||||||
.globl console_core_putc
|
.globl console_core_putc
|
||||||
.globl console_core_getc
|
.globl console_core_getc
|
||||||
|
.globl console_core_flush
|
||||||
|
|
||||||
/* -----------------------------------------------
|
/* -----------------------------------------------
|
||||||
* int console_core_init(uintptr_t base_addr,
|
* int console_core_init(uintptr_t base_addr,
|
||||||
|
@ -109,3 +110,23 @@ getc_error:
|
||||||
mov r0, #-1
|
mov r0, #-1
|
||||||
bx lr
|
bx lr
|
||||||
endfunc console_core_getc
|
endfunc console_core_getc
|
||||||
|
|
||||||
|
/* ---------------------------------------------
|
||||||
|
* int console_core_flush(uintptr_t base_addr)
|
||||||
|
* Function to force a write of all buffered
|
||||||
|
* data that hasn't been output.
|
||||||
|
* In : r0 - console base address
|
||||||
|
* Out : return -1 on error else return 0.
|
||||||
|
* Clobber list : r0, r1
|
||||||
|
* ---------------------------------------------
|
||||||
|
*/
|
||||||
|
func console_core_flush
|
||||||
|
cmp r0, #0
|
||||||
|
beq flush_error
|
||||||
|
/* Insert implementation here */
|
||||||
|
mov r0, #0
|
||||||
|
bx lr
|
||||||
|
flush_error:
|
||||||
|
mov r0, #-1
|
||||||
|
bx lr
|
||||||
|
endfunc console_core_flush
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
@ -33,6 +33,7 @@
|
||||||
.globl console_uninit
|
.globl console_uninit
|
||||||
.globl console_putc
|
.globl console_putc
|
||||||
.globl console_getc
|
.globl console_getc
|
||||||
|
.globl console_flush
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The console base is in the data section and not in .bss
|
* The console base is in the data section and not in .bss
|
||||||
|
@ -111,3 +112,18 @@ func console_getc
|
||||||
ldr x0, [x1, :lo12:console_base]
|
ldr x0, [x1, :lo12:console_base]
|
||||||
b console_core_getc
|
b console_core_getc
|
||||||
endfunc console_getc
|
endfunc console_getc
|
||||||
|
|
||||||
|
/* ---------------------------------------------
|
||||||
|
* int console_flush(void)
|
||||||
|
* Function to force a write of all buffered
|
||||||
|
* data that hasn't been output. It returns 0
|
||||||
|
* upon successful completion, otherwise it
|
||||||
|
* returns -1.
|
||||||
|
* Clobber list : x0, x1
|
||||||
|
* ---------------------------------------------
|
||||||
|
*/
|
||||||
|
func console_flush
|
||||||
|
adrp x1, console_base
|
||||||
|
ldr x0, [x1, :lo12:console_base]
|
||||||
|
b console_core_flush
|
||||||
|
endfunc console_flush
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
@ -38,6 +38,7 @@
|
||||||
.globl console_core_init
|
.globl console_core_init
|
||||||
.globl console_core_putc
|
.globl console_core_putc
|
||||||
.globl console_core_getc
|
.globl console_core_getc
|
||||||
|
.globl console_core_flush
|
||||||
|
|
||||||
/* -----------------------------------------------
|
/* -----------------------------------------------
|
||||||
* int console_core_init(uintptr_t base_addr,
|
* int console_core_init(uintptr_t base_addr,
|
||||||
|
@ -104,3 +105,22 @@ getc_error:
|
||||||
mov w0, #-1
|
mov w0, #-1
|
||||||
ret
|
ret
|
||||||
endfunc console_core_getc
|
endfunc console_core_getc
|
||||||
|
|
||||||
|
/* ---------------------------------------------
|
||||||
|
* int console_core_flush(uintptr_t base_addr)
|
||||||
|
* Function to force a write of all buffered
|
||||||
|
* data that hasn't been output.
|
||||||
|
* In : x0 - console base address
|
||||||
|
* Out : return -1 on error else return 0.
|
||||||
|
* Clobber list : x0, x1
|
||||||
|
* ---------------------------------------------
|
||||||
|
*/
|
||||||
|
func console_core_flush
|
||||||
|
cbz x0, flush_error
|
||||||
|
/* Insert implementation here */
|
||||||
|
mov w0, #0
|
||||||
|
ret
|
||||||
|
flush_error:
|
||||||
|
mov w0, #-1
|
||||||
|
ret
|
||||||
|
endfunc console_core_flush
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
@ -38,6 +38,7 @@ int console_init(uintptr_t base_addr,
|
||||||
void console_uninit(void);
|
void console_uninit(void);
|
||||||
int console_putc(int c);
|
int console_putc(int c);
|
||||||
int console_getc(void);
|
int console_getc(void);
|
||||||
|
int console_flush(void);
|
||||||
|
|
||||||
#endif /* __CONSOLE_H__ */
|
#endif /* __CONSOLE_H__ */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue