console: Introduce console_start() and console_stop()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 21 Dec 2020 12:30:00 +0000 (14:30 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 15 Jan 2021 19:36:12 +0000 (14:36 -0500)
In the future we would like to stop unused consoles and
also add a reference counting to avoid imbalanced calls
to ->start() and ->stop() in some cases.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
common/console.c
include/console.h

index e82b5d2..5b113da 100644 (file)
@@ -172,13 +172,9 @@ static int console_setfile(int file, struct stdio_dev * dev)
        case stdin:
        case stdout:
        case stderr:
-               /* Start new device */
-               if (dev->start) {
-                       error = dev->start(dev);
-                       /* If it's not started dont use it */
-                       if (error < 0)
-                               break;
-               }
+               error = console_start(file, dev);
+               if (error)
+                       break;
 
                /* Assign the new device (leaving the existing one started) */
                stdio_devices[file] = dev;
@@ -389,6 +385,26 @@ static inline void console_doenv(int file, struct stdio_dev *dev)
 #endif
 #endif /* CONIFIG_IS_ENABLED(CONSOLE_MUX) */
 
+int console_start(int file, struct stdio_dev *sdev)
+{
+       int error;
+
+       /* Start new device */
+       if (sdev->start) {
+               error = sdev->start(sdev);
+               /* If it's not started don't use it */
+               if (error < 0)
+                       return error;
+       }
+       return 0;
+}
+
+void console_stop(int file, struct stdio_dev *sdev)
+{
+       if (sdev->stop)
+               sdev->stop(sdev);
+}
+
 /** U-Boot INITIAL CONSOLE-NOT COMPATIBLE FUNCTIONS *************************/
 
 int serial_printf(const char *fmt, ...)
index 432f892..58a4ec3 100644 (file)
@@ -8,6 +8,7 @@
 #define __CONSOLE_H
 
 #include <stdbool.h>
+#include <stdio_dev.h>
 #include <linux/errno.h>
 
 extern char console_buffer[];
@@ -15,6 +16,8 @@ extern char console_buffer[];
 /* common/console.c */
 int console_init_f(void);      /* Before relocation; uses the serial  stuff */
 int console_init_r(void);      /* After  relocation; uses the console stuff */
+int console_start(int file, struct stdio_dev *sdev);   /* Start a console device */
+void console_stop(int file, struct stdio_dev *sdev);   /* Stop a console device */
 int console_assign(int file, const char *devname);     /* Assign the console */
 int ctrlc(void);
 int had_ctrlc(void);   /* have we had a Control-C since last clear? */