X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=common%2Fconsole.c;h=867c12c10231cdfc74a35e69e4718d6b4485ff50;hb=d371708a1beda0f529756e614af785b30461379e;hp=89aeab69e520b70475166453ff4bcbaa7b8af774;hpb=16a28ef219c27423a1ef502f19070c4d375079b8;p=u-boot diff --git a/common/console.c b/common/console.c index 89aeab69e5..867c12c102 100644 --- a/common/console.c +++ b/common/console.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include DECLARE_GLOBAL_DATA_PTR; @@ -40,15 +40,15 @@ int console_changed = 0; * environment are used */ #ifdef CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE -extern int overwrite_console (void); -#define OVERWRITE_CONSOLE overwrite_console () +extern int overwrite_console(void); +#define OVERWRITE_CONSOLE overwrite_console() #else #define OVERWRITE_CONSOLE 0 #endif /* CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE */ #endif /* CONFIG_SYS_CONSOLE_IS_IN_ENV */ -static int console_setfile (int file, device_t * dev) +static int console_setfile(int file, struct stdio_dev * dev) { int error = 0; @@ -61,7 +61,7 @@ static int console_setfile (int file, device_t * dev) case stderr: /* Start new device */ if (dev->start) { - error = dev->start (); + error = dev->start(); /* If it's not started dont use it */ if (error < 0) break; @@ -96,8 +96,8 @@ static int console_setfile (int file, device_t * dev) #if defined(CONFIG_CONSOLE_MUX) /** Console I/O multiplexing *******************************************/ -static device_t *tstcdev; -device_t **console_devices[MAX_FILES]; +static struct stdio_dev *tstcdev; +struct stdio_dev **console_devices[MAX_FILES]; int cd_count[MAX_FILES]; /* @@ -106,7 +106,7 @@ int cd_count[MAX_FILES]; * only from fgetc() which assures it. * No attempt is made to demultiplex multiple input sources. */ -static int iomux_getc(void) +static int console_getc(int file) { unsigned char ret; @@ -116,10 +116,10 @@ static int iomux_getc(void) return ret; } -static int iomux_tstc(int file) +static int console_tstc(int file) { int i, ret; - device_t *dev; + struct stdio_dev *dev; disable_ctrlc(1); for (i = 0; i < cd_count[file]; i++) { @@ -138,10 +138,10 @@ static int iomux_tstc(int file) return 0; } -static void iomux_putc(int file, const char c) +static void console_putc(int file, const char c) { int i; - device_t *dev; + struct stdio_dev *dev; for (i = 0; i < cd_count[file]; i++) { dev = console_devices[file][i]; @@ -150,10 +150,10 @@ static void iomux_putc(int file, const char c) } } -static void iomux_puts(int file, const char *s) +static void console_puts(int file, const char *s) { int i; - device_t *dev; + struct stdio_dev *dev; for (i = 0; i < cd_count[file]; i++) { dev = console_devices[file][i]; @@ -161,28 +161,68 @@ static void iomux_puts(int file, const char *s) dev->puts(s); } } + +static inline void console_printdevs(int file) +{ + iomux_printdevs(file); +} + +static inline void console_doenv(int file, struct stdio_dev *dev) +{ + iomux_doenv(file, dev->name); +} +#else +static inline int console_getc(int file) +{ + return stdio_devices[file]->getc(); +} + +static inline int console_tstc(int file) +{ + return stdio_devices[file]->tstc(); +} + +static inline void console_putc(int file, const char c) +{ + stdio_devices[file]->putc(c); +} + +static inline void console_puts(int file, const char *s) +{ + stdio_devices[file]->puts(s); +} + +static inline void console_printdevs(int file) +{ + printf("%s\n", stdio_devices[file]->name); +} + +static inline void console_doenv(int file, struct stdio_dev *dev) +{ + console_setfile(file, dev); +} #endif /* defined(CONFIG_CONSOLE_MUX) */ /** U-Boot INITIAL CONSOLE-NOT COMPATIBLE FUNCTIONS *************************/ -void serial_printf (const char *fmt, ...) +void serial_printf(const char *fmt, ...) { va_list args; uint i; char printbuffer[CONFIG_SYS_PBSIZE]; - va_start (args, fmt); + va_start(args, fmt); /* For this to work, printbuffer must be larger than * anything we ever want to print. */ - i = vsprintf (printbuffer, fmt, args); - va_end (args); + i = vsprintf(printbuffer, fmt, args); + va_end(args); - serial_puts (printbuffer); + serial_puts(printbuffer); } -int fgetc (int file) +int fgetc(int file) { if (file < MAX_FILES) { #if defined(CONFIG_CONSOLE_MUX) @@ -195,8 +235,8 @@ int fgetc (int file) * check for that first. */ if (tstcdev != NULL) - return iomux_getc(); - iomux_tstc(file); + return console_getc(file); + console_tstc(file); #ifdef CONFIG_WATCHDOG /* * If the watchdog must be rate-limited then it should @@ -206,66 +246,54 @@ int fgetc (int file) #endif } #else - return stdio_devices[file]->getc (); + return console_getc(file); #endif } return -1; } -int ftstc (int file) +int ftstc(int file) { if (file < MAX_FILES) -#if defined(CONFIG_CONSOLE_MUX) - return iomux_tstc(file); -#else - return stdio_devices[file]->tstc (); -#endif + return console_tstc(file); return -1; } -void fputc (int file, const char c) +void fputc(int file, const char c) { if (file < MAX_FILES) -#if defined(CONFIG_CONSOLE_MUX) - iomux_putc(file, c); -#else - stdio_devices[file]->putc (c); -#endif + console_putc(file, c); } -void fputs (int file, const char *s) +void fputs(int file, const char *s) { if (file < MAX_FILES) -#if defined(CONFIG_CONSOLE_MUX) - iomux_puts(file, s); -#else - stdio_devices[file]->puts (s); -#endif + console_puts(file, s); } -void fprintf (int file, const char *fmt, ...) +void fprintf(int file, const char *fmt, ...) { va_list args; uint i; char printbuffer[CONFIG_SYS_PBSIZE]; - va_start (args, fmt); + va_start(args, fmt); /* For this to work, printbuffer must be larger than * anything we ever want to print. */ - i = vsprintf (printbuffer, fmt, args); - va_end (args); + i = vsprintf(printbuffer, fmt, args); + va_end(args); /* Send to desired file */ - fputs (file, printbuffer); + fputs(file, printbuffer); } /** U-Boot INITIAL CONSOLE-COMPATIBLE FUNCTION *****************************/ -int getc (void) +int getc(void) { #ifdef CONFIG_DISABLE_CONSOLE if (gd->flags & GD_FLG_DISABLE_CONSOLE) @@ -274,14 +302,14 @@ int getc (void) if (gd->flags & GD_FLG_DEVINIT) { /* Get from the standard input */ - return fgetc (stdin); + return fgetc(stdin); } /* Send directly to the handler */ - return serial_getc (); + return serial_getc(); } -int tstc (void) +int tstc(void) { #ifdef CONFIG_DISABLE_CONSOLE if (gd->flags & GD_FLG_DISABLE_CONSOLE) @@ -290,14 +318,14 @@ int tstc (void) if (gd->flags & GD_FLG_DEVINIT) { /* Test the standard input */ - return ftstc (stdin); + return ftstc(stdin); } /* Send directly to the handler */ - return serial_tstc (); + return serial_tstc(); } -void putc (const char c) +void putc(const char c) { #ifdef CONFIG_SILENT_CONSOLE if (gd->flags & GD_FLG_SILENT) @@ -311,14 +339,14 @@ void putc (const char c) if (gd->flags & GD_FLG_DEVINIT) { /* Send to the standard output */ - fputc (stdout, c); + fputc(stdout, c); } else { /* Send directly to the handler */ - serial_putc (c); + serial_putc(c); } } -void puts (const char *s) +void puts(const char *s) { #ifdef CONFIG_SILENT_CONSOLE if (gd->flags & GD_FLG_SILENT) @@ -332,32 +360,32 @@ void puts (const char *s) if (gd->flags & GD_FLG_DEVINIT) { /* Send to the standard output */ - fputs (stdout, s); + fputs(stdout, s); } else { /* Send directly to the handler */ - serial_puts (s); + serial_puts(s); } } -void printf (const char *fmt, ...) +void printf(const char *fmt, ...) { va_list args; uint i; char printbuffer[CONFIG_SYS_PBSIZE]; - va_start (args, fmt); + va_start(args, fmt); /* For this to work, printbuffer must be larger than * anything we ever want to print. */ - i = vsprintf (printbuffer, fmt, args); - va_end (args); + i = vsprintf(printbuffer, fmt, args); + va_end(args); /* Print the string */ - puts (printbuffer); + puts(printbuffer); } -void vprintf (const char *fmt, va_list args) +void vprintf(const char *fmt, va_list args) { uint i; char printbuffer[CONFIG_SYS_PBSIZE]; @@ -365,20 +393,20 @@ void vprintf (const char *fmt, va_list args) /* For this to work, printbuffer must be larger than * anything we ever want to print. */ - i = vsprintf (printbuffer, fmt, args); + i = vsprintf(printbuffer, fmt, args); /* Print the string */ - puts (printbuffer); + puts(printbuffer); } /* test if ctrl-c was pressed */ static int ctrlc_disabled = 0; /* see disable_ctrl() */ static int ctrlc_was_pressed = 0; -int ctrlc (void) +int ctrlc(void) { if (!ctrlc_disabled && gd->have_console) { - if (tstc ()) { - switch (getc ()) { + if (tstc()) { + switch (getc()) { case 0x03: /* ^C - Control C */ ctrlc_was_pressed = 1; return 1; @@ -393,7 +421,7 @@ int ctrlc (void) /* pass 1 to disable ctrlc() checking, 0 to enable. * returns previous state */ -int disable_ctrlc (int disable) +int disable_ctrlc(int disable) { int prev = ctrlc_disabled; /* save previous state */ @@ -406,7 +434,7 @@ int had_ctrlc (void) return ctrlc_was_pressed; } -void clear_ctrlc (void) +void clear_ctrlc(void) { ctrlc_was_pressed = 0; } @@ -434,7 +462,8 @@ inline void dbg(const char *fmt, ...) i = vsprintf(printbuffer, fmt, args); va_end(args); - if ((screen + sizeof(screen) - 1 - cursor) < strlen(printbuffer)+1) { + if ((screen + sizeof(screen) - 1 - cursor) + < strlen(printbuffer) + 1) { memset(screen, 0, sizeof(screen)); cursor = screen; } @@ -450,22 +479,22 @@ inline void dbg(const char *fmt, ...) /** U-Boot INIT FUNCTIONS *************************************************/ -device_t *search_device (int flags, char *name) +struct stdio_dev *search_device(int flags, char *name) { - device_t *dev; + struct stdio_dev *dev; - dev = device_get_by_name(name); + dev = stdio_get_by_name(name); - if(dev && (dev->flags & flags)) + if (dev && (dev->flags & flags)) return dev; return NULL; } -int console_assign (int file, char *devname) +int console_assign(int file, char *devname) { int flag; - device_t *dev; + struct stdio_dev *dev; /* Check for valid file */ switch (file) { @@ -484,14 +513,14 @@ int console_assign (int file, char *devname) dev = search_device(flag, devname); - if(dev) - return console_setfile (file, dev); + if (dev) + return console_setfile(file, dev); return -1; } /* Called before relocation - use serial functions */ -int console_init_f (void) +int console_init_f(void) { gd->have_console = 1; @@ -500,15 +529,42 @@ int console_init_f (void) gd->flags |= GD_FLG_SILENT; #endif - return (0); + return 0; +} + +void stdio_print_current_devices(void) +{ +#ifdef CONFIG_SYS_CONSOLE_INFO_QUIET + /* Print information */ + puts("In: "); + if (stdio_devices[stdin] == NULL) { + puts("No input devices available!\n"); + } else { + printf ("%s\n", stdio_devices[stdin]->name); + } + + puts("Out: "); + if (stdio_devices[stdout] == NULL) { + puts("No output devices available!\n"); + } else { + printf ("%s\n", stdio_devices[stdout]->name); + } + + puts("Err: "); + if (stdio_devices[stderr] == NULL) { + puts("No error devices available!\n"); + } else { + printf ("%s\n", stdio_devices[stderr]->name); + } +#endif /* CONFIG_SYS_CONSOLE_INFO_QUIET */ } #ifdef CONFIG_SYS_CONSOLE_IS_IN_ENV /* Called after the relocation - use desired console functions */ -int console_init_r (void) +int console_init_r(void) { char *stdinname, *stdoutname, *stderrname; - device_t *inputdev = NULL, *outputdev = NULL, *errdev = NULL; + struct stdio_dev *inputdev = NULL, *outputdev = NULL, *errdev = NULL; #ifdef CONFIG_SYS_CONSOLE_ENV_OVERWRITE int i; #endif /* CONFIG_SYS_CONSOLE_ENV_OVERWRITE */ @@ -525,14 +581,14 @@ int console_init_r (void) /* stdin stdout and stderr are in environment */ /* scan for it */ - stdinname = getenv ("stdin"); - stdoutname = getenv ("stdout"); - stderrname = getenv ("stderr"); + stdinname = getenv("stdin"); + stdoutname = getenv("stdout"); + stderrname = getenv("stderr"); if (OVERWRITE_CONSOLE == 0) { /* if not overwritten by config switch */ - inputdev = search_device (DEV_FLAGS_INPUT, stdinname); - outputdev = search_device (DEV_FLAGS_OUTPUT, stdoutname); - errdev = search_device (DEV_FLAGS_OUTPUT, stderrname); + inputdev = search_device(DEV_FLAGS_INPUT, stdinname); + outputdev = search_device(DEV_FLAGS_OUTPUT, stdoutname); + errdev = search_device(DEV_FLAGS_OUTPUT, stderrname); #ifdef CONFIG_CONSOLE_MUX iomux_err = iomux_doenv(stdin, stdinname); iomux_err += iomux_doenv(stdout, stdoutname); @@ -544,38 +600,26 @@ int console_init_r (void) } /* if the devices are overwritten or not found, use default device */ if (inputdev == NULL) { - inputdev = search_device (DEV_FLAGS_INPUT, "serial"); + inputdev = search_device(DEV_FLAGS_INPUT, "serial"); } if (outputdev == NULL) { - outputdev = search_device (DEV_FLAGS_OUTPUT, "serial"); + outputdev = search_device(DEV_FLAGS_OUTPUT, "serial"); } if (errdev == NULL) { - errdev = search_device (DEV_FLAGS_OUTPUT, "serial"); + errdev = search_device(DEV_FLAGS_OUTPUT, "serial"); } /* Initializes output console first */ if (outputdev != NULL) { -#ifdef CONFIG_CONSOLE_MUX /* need to set a console if not done above. */ - iomux_doenv(stdout, outputdev->name); -#else - console_setfile (stdout, outputdev); -#endif + console_doenv(stdout, outputdev); } if (errdev != NULL) { -#ifdef CONFIG_CONSOLE_MUX /* need to set a console if not done above. */ - iomux_doenv(stderr, errdev->name); -#else - console_setfile (stderr, errdev); -#endif + console_doenv(stderr, errdev); } if (inputdev != NULL) { -#ifdef CONFIG_CONSOLE_MUX /* need to set a console if not done above. */ - iomux_doenv(stdin, inputdev->name); -#else - console_setfile (stdin, inputdev); -#endif + console_doenv(stdin, inputdev); } #ifdef CONFIG_CONSOLE_MUX @@ -584,78 +628,46 @@ done: gd->flags |= GD_FLG_DEVINIT; /* device initialization completed */ -#ifndef CONFIG_SYS_CONSOLE_INFO_QUIET - /* Print information */ - puts ("In: "); - if (stdio_devices[stdin] == NULL) { - puts ("No input devices available!\n"); - } else { -#ifdef CONFIG_CONSOLE_MUX - iomux_printdevs(stdin); -#else - printf ("%s\n", stdio_devices[stdin]->name); -#endif - } - - puts ("Out: "); - if (stdio_devices[stdout] == NULL) { - puts ("No output devices available!\n"); - } else { -#ifdef CONFIG_CONSOLE_MUX - iomux_printdevs(stdout); -#else - printf ("%s\n", stdio_devices[stdout]->name); -#endif - } - - puts ("Err: "); - if (stdio_devices[stderr] == NULL) { - puts ("No error devices available!\n"); - } else { -#ifdef CONFIG_CONSOLE_MUX - iomux_printdevs(stderr); -#else - printf ("%s\n", stdio_devices[stderr]->name); -#endif - } -#endif /* CONFIG_SYS_CONSOLE_INFO_QUIET */ + stdio_print_current_devices(); #ifdef CONFIG_SYS_CONSOLE_ENV_OVERWRITE /* set the environment variables (will overwrite previous env settings) */ for (i = 0; i < 3; i++) { - setenv (stdio_names[i], stdio_devices[i]->name); + setenv(stdio_names[i], stdio_devices[i]->name); } #endif /* CONFIG_SYS_CONSOLE_ENV_OVERWRITE */ #if 0 /* If nothing usable installed, use only the initial console */ if ((stdio_devices[stdin] == NULL) && (stdio_devices[stdout] == NULL)) - return (0); + return 0; #endif - return (0); + return 0; } #else /* CONFIG_SYS_CONSOLE_IS_IN_ENV */ /* Called after the relocation - use desired console functions */ -int console_init_r (void) +int console_init_r(void) { - device_t *inputdev = NULL, *outputdev = NULL; + struct stdio_dev *inputdev = NULL, *outputdev = NULL; int i; - struct list_head *list = device_get_list(); + struct list_head *list = stdio_get_list(); struct list_head *pos; - device_t *dev; + struct stdio_dev *dev; #ifdef CONFIG_SPLASH_SCREEN - /* suppress all output if splash screen is enabled and we have - a bmp to display */ + /* + * suppress all output if splash screen is enabled and we have + * a bmp to display + */ if (getenv("splashimage") != NULL) gd->flags |= GD_FLG_SILENT; #endif /* Scan devices looking for input and output devices */ list_for_each(pos, list) { - dev = list_entry(pos, device_t, list); + dev = list_entry(pos, struct stdio_dev, list); if ((dev->flags & DEV_FLAGS_INPUT) && (inputdev == NULL)) { inputdev = dev; @@ -669,8 +681,8 @@ int console_init_r (void) /* Initializes output console first */ if (outputdev != NULL) { - console_setfile (stdout, outputdev); - console_setfile (stderr, outputdev); + console_setfile(stdout, outputdev); + console_setfile(stderr, outputdev); #ifdef CONFIG_CONSOLE_MUX console_devices[stdout][0] = outputdev; console_devices[stderr][0] = outputdev; @@ -679,7 +691,7 @@ int console_init_r (void) /* Initializes input console */ if (inputdev != NULL) { - console_setfile (stdin, inputdev); + console_setfile(stdin, inputdev); #ifdef CONFIG_CONSOLE_MUX console_devices[stdin][0] = inputdev; #endif @@ -687,42 +699,20 @@ int console_init_r (void) gd->flags |= GD_FLG_DEVINIT; /* device initialization completed */ -#ifndef CONFIG_SYS_CONSOLE_INFO_QUIET - /* Print information */ - puts ("In: "); - if (stdio_devices[stdin] == NULL) { - puts ("No input devices available!\n"); - } else { - printf ("%s\n", stdio_devices[stdin]->name); - } - - puts ("Out: "); - if (stdio_devices[stdout] == NULL) { - puts ("No output devices available!\n"); - } else { - printf ("%s\n", stdio_devices[stdout]->name); - } - - puts ("Err: "); - if (stdio_devices[stderr] == NULL) { - puts ("No error devices available!\n"); - } else { - printf ("%s\n", stdio_devices[stderr]->name); - } -#endif /* CONFIG_SYS_CONSOLE_INFO_QUIET */ + stdio_print_current_devices(); /* Setting environment variables */ for (i = 0; i < 3; i++) { - setenv (stdio_names[i], stdio_devices[i]->name); + setenv(stdio_names[i], stdio_devices[i]->name); } #if 0 /* If nothing usable installed, use only the initial console */ if ((stdio_devices[stdin] == NULL) && (stdio_devices[stdout] == NULL)) - return (0); + return 0; #endif - return (0); + return 0; } #endif /* CONFIG_SYS_CONSOLE_IS_IN_ENV */