Module Name: src Committed By: phx Date: Sun Mar 13 01:56:22 UTC 2011
Modified Files: src/sys/arch/sandpoint/stand/altboot: brdsetup.c globals.h main.c Log Message: Enter interactive mode, when a key is pressed within two seconds. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/sandpoint/stand/altboot/brdsetup.c \ src/sys/arch/sandpoint/stand/altboot/globals.h \ src/sys/arch/sandpoint/stand/altboot/main.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sandpoint/stand/altboot/brdsetup.c diff -u src/sys/arch/sandpoint/stand/altboot/brdsetup.c:1.10 src/sys/arch/sandpoint/stand/altboot/brdsetup.c:1.11 --- src/sys/arch/sandpoint/stand/altboot/brdsetup.c:1.10 Sat Mar 12 16:41:23 2011 +++ src/sys/arch/sandpoint/stand/altboot/brdsetup.c Sun Mar 13 01:56:21 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: brdsetup.c,v 1.10 2011/03/12 16:41:23 phx Exp $ */ +/* $NetBSD: brdsetup.c,v 1.11 2011/03/13 01:56:21 phx Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -141,6 +141,7 @@ unsigned uart1base; /* console */ unsigned uart2base; /* optional satellite processor */ +#define RBR 0 #define THR 0 #define DLB 0 #define DMB 1 @@ -156,6 +157,7 @@ #define MCR_DTR 0x01 #define LSR 5 #define LSR_THRE 0x20 +#define LSR_DRDY 0x01 #define DCR 0x11 #define UART_READ(base, r) *(volatile char *)(base + (r)) #define UART_WRITE(base, r, v) *(volatile char *)(base + (r)) = (v) @@ -663,7 +665,7 @@ { send_sat("C"); - /*NOTRECHED*/ + /*NOTREACHED*/ } void @@ -878,6 +880,23 @@ UART_WRITE(uart1base, THR, c); } +int +getchar(void) +{ + unsigned lsr; + + do { + lsr = UART_READ(uart1base, LSR); + } while ((lsr & LSR_DRDY) == 0); + return UART_READ(uart1base, RBR); +} + +int +tstchar(void) +{ + return (UART_READ(uart1base, LSR) & LSR_DRDY) != 0; +} + unsigned mpc107memsize() { Index: src/sys/arch/sandpoint/stand/altboot/globals.h diff -u src/sys/arch/sandpoint/stand/altboot/globals.h:1.10 src/sys/arch/sandpoint/stand/altboot/globals.h:1.11 --- src/sys/arch/sandpoint/stand/altboot/globals.h:1.10 Sat Mar 12 16:41:23 2011 +++ src/sys/arch/sandpoint/stand/altboot/globals.h Sun Mar 13 01:56:21 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: globals.h,v 1.10 2011/03/12 16:41:23 phx Exp $ */ +/* $NetBSD: globals.h,v 1.11 2011/03/13 01:56:21 phx Exp $ */ #ifdef DEBUG #define DPRINTF(x) printf x @@ -42,6 +42,7 @@ /* board specific support code */ struct brdprop *brd_lookup(int); +int tstchar(void); unsigned mpc107memsize(void); void read_mac_from_flash(uint8_t *); Index: src/sys/arch/sandpoint/stand/altboot/main.c diff -u src/sys/arch/sandpoint/stand/altboot/main.c:1.10 src/sys/arch/sandpoint/stand/altboot/main.c:1.11 --- src/sys/arch/sandpoint/stand/altboot/main.c:1.10 Sat Mar 12 16:41:23 2011 +++ src/sys/arch/sandpoint/stand/altboot/main.c Sun Mar 13 01:56:21 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.10 2011/03/12 16:41:23 phx Exp $ */ +/* $NetBSD: main.c,v 1.11 2011/03/13 01:56:21 phx Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -100,6 +100,7 @@ uint32_t busclock, cpuclock; static int check_bootname(char *); +static int input_cmdline(char **, int); static int parse_cmdline(char **, int, char *, char *); static int is_space(char); @@ -185,6 +186,21 @@ bootargs_end); } + /* wait 2s for user to enter interactive mode */ + for (n = 200; n >= 0; n--) { + if (n % 100 == 0) + printf("Hit any key to enter interactive mode: %d\r", + n / 100); + if (tstchar()) { + (void)getchar(); + argv = new_argv; + argc = input_cmdline(argv, MAX_ARGS); + break; + } + delay(10000); + } + putchar('\n'); + howto = RB_AUTOBOOT; /* default is autoboot = 0 */ /* get boot options and determine bootname */ @@ -537,6 +553,18 @@ return 0; } +static int input_cmdline(char **argv, int maxargc) +{ + char *cmdline; + + printf("\nbootargs> "); + cmdline = alloc(256); + gets(cmdline); + + return parse_cmdline(argv, maxargc, cmdline, + cmdline + strlen(cmdline)); +} + static int parse_cmdline(char **argv, int maxargc, char *p, char *end) {