}
 }
 
-static int cread_line(const char *const prompt, char *buf, unsigned int *len)
+static int cread_line(const char *const prompt, char *buf, unsigned int *len,
+               int timeout)
 {
        unsigned long num = 0;
        unsigned long eol_num = 0;
        int esc_len = 0;
        char esc_save[8];
        int init_len = strlen(buf);
+       int first = 1;
 
        if (init_len)
                cread_add_str(buf, init_len, 1, &num, &eol_num, buf, *len);
                        WATCHDOG_RESET();
                }
 #endif
+               if (first && timeout) {
+                       uint64_t etime = endtick(timeout);
+
+                       while (!tstc()) {       /* while no incoming data */
+                               if (get_ticks() >= etime)
+                                       return -2;      /* timed out */
+                               WATCHDOG_RESET();
+                       }
+                       first = 0;
+               }
 
                ichar = getcmd_getch();
 
         */
        console_buffer[0] = '\0';
 
-       return readline_into_buffer(prompt, console_buffer);
+       return readline_into_buffer(prompt, console_buffer, 0);
 }
 
 
-int readline_into_buffer (const char *const prompt, char * buffer)
+int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
 {
        char *p = buffer;
 #ifdef CONFIG_CMDLINE_EDITING
                if (prompt)
                        puts (prompt);
 
-               rc = cread_line(prompt, p, &len);
+               rc = cread_line(prompt, p, &len, timeout);
                return rc < 0 ? rc : len;
 
        } else {
 
 
                menu_display(m);
 
-               readret = readline_into_buffer("Enter choice: ", cbuf);
+               readret = readline_into_buffer("Enter choice: ", cbuf,
+                               m->timeout);
 
                if (readret >= 0) {
                        choice_item = menu_item_by_key(m, cbuf);
 
 int run_command2(const char *cmd, int flag);
 #endif
 int    readline        (const char *const prompt);
-int    readline_into_buffer    (const char *const prompt, char * buffer);
+int    readline_into_buffer(const char *const prompt, char *buffer,
+                       int timeout);
 int    parse_line (char *, char *[]);
 void   init_cmd_timeout(void);
 void   reset_cmd_timeout(void);