]> git.sur5r.net Git - u-boot/blobdiff - common/console.c
dm: x86: queensbay: Add an interrupt driver
[u-boot] / common / console.c
index ace206ca4ff5dd87651c32da857fae762916f41c..bc37b6d962b0aa9eb2032a63b5d5c2044c329cb7 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #include <common.h>
+#include <console.h>
 #include <debug_uart.h>
 #include <stdarg.h>
 #include <iomux.h>
@@ -377,6 +378,15 @@ int getc(void)
        if (!gd->have_console)
                return 0;
 
+#ifdef CONFIG_CONSOLE_RECORD
+       if (gd->console_in.start) {
+               int ch;
+
+               ch = membuff_getbyte(&gd->console_in);
+               if (ch != -1)
+                       return 1;
+       }
+#endif
        if (gd->flags & GD_FLG_DEVINIT) {
                /* Get from the standard input */
                return fgetc(stdin);
@@ -395,7 +405,12 @@ int tstc(void)
 
        if (!gd->have_console)
                return 0;
-
+#ifdef CONFIG_CONSOLE_RECORD
+       if (gd->console_in.start) {
+               if (membuff_peekbyte(&gd->console_in) != -1)
+                       return 1;
+       }
+#endif
        if (gd->flags & GD_FLG_DEVINIT) {
                /* Test the standard input */
                return ftstc(stdin);
@@ -469,6 +484,10 @@ void putc(const char c)
                return;
        }
 #endif
+#ifdef CONFIG_CONSOLE_RECORD
+       if (gd && (gd->flags & GD_FLG_RECORD) && gd->console_out.start)
+               membuff_putbyte(&gd->console_out, c);
+#endif
 #ifdef CONFIG_SILENT_CONSOLE
        if (gd->flags & GD_FLG_SILENT)
                return;
@@ -512,6 +531,10 @@ void puts(const char *s)
                return;
        }
 #endif
+#ifdef CONFIG_CONSOLE_RECORD
+       if (gd && (gd->flags & GD_FLG_RECORD) && gd->console_out.start)
+               membuff_put(&gd->console_out, s, strlen(s));
+#endif
 #ifdef CONFIG_SILENT_CONSOLE
        if (gd->flags & GD_FLG_SILENT)
                return;
@@ -535,44 +558,31 @@ void puts(const char *s)
        }
 }
 
-int printf(const char *fmt, ...)
+#ifdef CONFIG_CONSOLE_RECORD
+int console_record_init(void)
 {
-       va_list args;
-       uint i;
-       char printbuffer[CONFIG_SYS_PBSIZE];
+       int ret;
 
-       va_start(args, fmt);
+       ret = membuff_new(&gd->console_out, CONFIG_CONSOLE_RECORD_OUT_SIZE);
+       if (ret)
+               return ret;
+       ret = membuff_new(&gd->console_in, CONFIG_CONSOLE_RECORD_IN_SIZE);
 
-       /* For this to work, printbuffer must be larger than
-        * anything we ever want to print.
-        */
-       i = vscnprintf(printbuffer, sizeof(printbuffer), fmt, args);
-       va_end(args);
-
-       /* Print the string */
-       puts(printbuffer);
-       return i;
+       return ret;
 }
 
-int vprintf(const char *fmt, va_list args)
+void console_record_reset(void)
 {
-       uint i;
-       char printbuffer[CONFIG_SYS_PBSIZE];
-
-#if defined(CONFIG_PRE_CONSOLE_BUFFER) && !defined(CONFIG_SANDBOX)
-       if (!gd->have_console)
-               return 0;
-#endif
-
-       /* For this to work, printbuffer must be larger than
-        * anything we ever want to print.
-        */
-       i = vscnprintf(printbuffer, sizeof(printbuffer), fmt, args);
+       membuff_purge(&gd->console_out);
+       membuff_purge(&gd->console_in);
+}
 
-       /* Print the string */
-       puts(printbuffer);
-       return i;
+void console_record_reset_enable(void)
+{
+       console_record_reset();
+       gd->flags |= GD_FLG_RECORD;
 }
+#endif
 
 /* test if ctrl-c was pressed */
 static int ctrlc_disabled = 0; /* see disable_ctrl() */