console: Introduce console_start() and console_stop()

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>
This commit is contained in:
Andy Shevchenko 2020-12-21 14:30:00 +02:00 committed by Tom Rini
parent a17b38ce39
commit 41f668b97c
2 changed files with 26 additions and 7 deletions

View 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)
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, ...)

View 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? */