summaryrefslogtreecommitdiff
path: root/include/stdio_dev.h
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2022-09-24 13:58:49 -0400
committerTom Rini <trini@konsulko.com>2022-09-24 13:58:49 -0400
commit81da5042e514bfd27516d3530dde4d62a6708ca4 (patch)
tree75203cc106a2c1c340024fdb562be7c9b6d0e4e2 /include/stdio_dev.h
parent694e9008674c2008b9ccdc25a9bb3ac078e20911 (diff)
parentefc3f9526f9cfcd8614668c03b9c66b209782c41 (diff)
Merge branch '2022-09-24-add-console-flush' into next
To quote the author: On certain places it is required to flush output print buffers to ensure that text strings were sent to console or serial devices. For example when printing message that U-Boot is going to boot kernel or when U-Boot is going to change baudrate of terminal device. Some console devices, like UART, have putc/puts functions which just put characters into HW transmit queue and do not wait until all data are transmitted. Doing some sensitive operations (like changing baudrate or starting kernel which resets UART HW) cause that U-Boot messages are lost. Therefore introduce a new flush() function, implement it for all serial devices via pending(false) callback and use this new flush() function on sensitive places after which output device may go into reset state. This change fixes printing of U-Boot messages: "## Starting application at ..." "## Switch baudrate to ..." In addition, take a patch from Heinrich to rename some EFI test functions in order to not conflict with this series.
Diffstat (limited to 'include/stdio_dev.h')
-rw-r--r--include/stdio_dev.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/include/stdio_dev.h b/include/stdio_dev.h
index 270fa2729fb..3105928970d 100644
--- a/include/stdio_dev.h
+++ b/include/stdio_dev.h
@@ -37,6 +37,13 @@ struct stdio_dev {
void (*putc)(struct stdio_dev *dev, const char c);
/* To put a string (accelerator) */
void (*puts)(struct stdio_dev *dev, const char *s);
+#ifdef CONFIG_CONSOLE_FLUSH_SUPPORT
+ /* To flush output queue */
+ void (*flush)(struct stdio_dev *dev);
+#define STDIO_DEV_ASSIGN_FLUSH(dev, flush_func) ((dev)->flush = (flush_func))
+#else
+#define STDIO_DEV_ASSIGN_FLUSH(dev, flush_func)
+#endif
/* INPUT functions */