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)
 {

Reply via email to