Skip to content

Commit

Permalink
[hci] Continue processing while prompting for shell banner
Browse files Browse the repository at this point in the history
Continue calling step() while displaying the shell banner.  This
potentially allows TCP connections to close gracefully after a failed
boot attempt.

Inspired-by: Guo-Fu Tseng <cooldavid@cooldavid.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Jul 14, 2010
1 parent 24403fb commit 3338a03
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 14 deletions.
2 changes: 1 addition & 1 deletion src/core/getkey.c
Expand Up @@ -38,7 +38,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
* @v timeout Timeout period, in ticks
* @ret character Character read from console
*/
static int getchar_timeout ( unsigned long timeout ) {
int getchar_timeout ( unsigned long timeout ) {
unsigned long expiry = ( currticks() + timeout );

while ( currticks() < expiry ) {
Expand Down
16 changes: 3 additions & 13 deletions src/hci/shell_banner.c
Expand Up @@ -20,9 +20,9 @@ FILE_LICENCE ( GPL2_OR_LATER );

#include <stdio.h>
#include <console.h>
#include <unistd.h>
#include <config/general.h>
#include <ipxe/keys.h>
#include <ipxe/timer.h>
#include <ipxe/shell_banner.h>

/** @file
Expand All @@ -37,8 +37,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
* @ret enter_shell User wants to enter shell
*/
int shell_banner ( void ) {
int enter_shell = 0;
int wait_count;
int key;

/* Skip prompt if timeout is zero */
Expand All @@ -49,18 +47,10 @@ int shell_banner ( void ) {
printf ( "\nPress Ctrl-B for the iPXE command line..." );

/* Wait for key */
for ( wait_count = 0 ; wait_count < BANNER_TIMEOUT ; wait_count++ ) {
if ( iskey() ) {
key = getchar();
if ( key == CTRL_B )
enter_shell = 1;
break;
}
mdelay(100);
}
key = getchar_timeout ( ( BANNER_TIMEOUT * TICKS_PER_SEC ) / 10 );

/* Clear the "Press Ctrl-B" line */
printf ( "\r \r" );

return enter_shell;
return ( key == CTRL_B );
}
1 change: 1 addition & 0 deletions src/include/console.h
Expand Up @@ -102,6 +102,7 @@ struct console_driver {

extern void putchar ( int character );
extern int getchar ( void );
extern int getchar_timeout ( unsigned long timeout );
extern int iskey ( void );
extern int getkey ( void );

Expand Down

0 comments on commit 3338a03

Please sign in to comment.