TFTP booting is observed a little bit slow, especially when a USB
keyboard is installed.
The fix is to check whether Ctrl-C key is pressed every
CONFIG_CTRLC_POLL_S second.

Signed-off-by: Jim Lin <ji...@nvidia.com>
---
Changes in V2:
 1. Change configuration name from CONFIG_CTRLC_POLL_MS to CONFIG_CTRLC_POLL_S.
 2. New code will be executed only when CONFIG_CTRLC_POLL_S is defined in
    configuration header file.
 3. Add description in README.console.

 common/console.c   |   16 ++++++++++++++++
 doc/README.console |   10 ++++++++++
 2 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/common/console.c b/common/console.c
index bf73178..b09e129 100644
--- a/common/console.c
+++ b/common/console.c
@@ -521,12 +521,28 @@ int vprintf(const char *fmt, va_list args)
        return i;
 }
 
+#ifdef CONFIG_CTRLC_POLL_S
+/*
+ * Process Ctrl-C every CONFIG_CTRLC_POLL_S second(s) to improve performance
+ * (like TFTP boot) when interlaced with other tasks like USB KB
+ * polling.
+ */
+static unsigned long ctrlc_ts = (CONFIG_CTRLC_POLL_S * CONFIG_SYS_HZ);
+#endif
+
 /* test if ctrl-c was pressed */
 static int ctrlc_disabled = 0; /* see disable_ctrl() */
 static int ctrlc_was_pressed = 0;
 int ctrlc(void)
 {
        if (!ctrlc_disabled && gd->have_console) {
+#ifdef CONFIG_CTRLC_POLL_S
+               if (get_timer(ctrlc_ts) < (CONFIG_CTRLC_POLL_S
+                               * CONFIG_SYS_HZ))
+                       return 0;
+               else
+                       ctrlc_ts = get_timer(0);
+#endif
                if (tstc()) {
                        switch (getc()) {
                        case 0x03:              /* ^C - Control C */
diff --git a/doc/README.console b/doc/README.console
index b353f9f..6b38b8c 100644
--- a/doc/README.console
+++ b/doc/README.console
@@ -116,3 +116,13 @@ CREDITS for other contact informations):
 
 - MPC823FADS with AD7176 on a PAL TV (YCbYCr)  - arse...@tin.it
 - GENIETV    with AD7177 on a PAL TV (YCbYCr)  - arse...@tin.it
+
+Config Switches:
+----------------
+CONFIG_CTRLC_POLL_S    define a value to check whether Ctrl-C is pressed
+                       every defined second(s). This is to improve TFTP
+                       booting if USB KB is installed and polling is used.
+                       For example:
+                       Define the following in configuration header file
+                       #define CONFIG_CTRLC_POLL_S     1
+                       for console to check Ctrl-C every second.
-- 
1.7.7

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to