PERFORCE change 227162 for review

Robert Watson rwatson at FreeBSD.org
Wed Mar 27 20:30:35 UTC 2013


http://p4web.freebsd.org/@@227162?ac=10

Change 227162 by rwatson at rwatson_zenith_cl_cam_ac_uk on 2013/03/27 20:29:53

	Make the top-end of the BERI-specific code in boot2 look more like
	the top-end of i386-specific code, so that we get more compatible
	semantics for serial input.  This appears to work and I can now
	list (and possibly load) kernels driven by keyboard input in
	simulation.  Next stop, hardware.

Affected files ...

.. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/altera_jtag_uart.c#3 edit
.. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/boot2.c#6 edit
.. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/cons.h#3 edit

Differences ...

==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/altera_jtag_uart.c#3 (text+ko) ====

@@ -164,23 +164,21 @@
 {
 	register_t stoptime;
 
-	stoptime = cp0_count_get() + seconds * 100000000;
-	while (cp0_count_get() < stoptime) {
+	stoptime = cp0_count_get() + seconds * 100000000;	/* 100 MHz. */
+	do {
 		if (uart_readable())
 			return (1);
-	}
+	} while (cp0_count_get() < stoptime);
 	return (0);
 }
 
 int
-getc(int seconds)
+getc(void)
 {
 
-	if (keyhit(seconds)) {
-		buffer_valid = 0;
-		return (buffer_data);
-	}
-	return (0);
+	while (!(uart_readable()));
+	buffer_valid = 0;
+	return (buffer_data);
 }
 
 void

==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/boot2.c#6 (text+ko) ====

@@ -62,7 +62,7 @@
 #define IO_KEYBOARD	1
 #define IO_SERIAL	2
 
-#define SECOND		18	/* Circa that many ticks in a second. */
+#define SECOND		1	/* Circa that many ticks in a second. */
 
 #define RBX_ASKNAME	0x0	/* -a */
 #define RBX_SINGLE	0x1	/* -s */
@@ -170,15 +170,8 @@
 static int dskread(void *, unsigned, unsigned);
 static void printf(const char *,...);
 static void putchar(int);
-#if 0
-static int drvread(void *, unsigned, unsigned);
-static int keyhit(unsigned);
-#endif
 static int xputc(int);
 static int xgetc(int);
-#if 0
-static inline int getc(int);
-#endif
 
 #if 0
 void memcpy(void *, const void *, int);
@@ -631,51 +624,7 @@
     xputc(c);
 }
 
-#if 0
 static int
-drvread(void *buf, unsigned lba, unsigned nblk)
-{
-    static unsigned c = 0x2d5c7c2f;
-
-    if (!OPT_CHECK(RBX_QUIET))
-	printf("%c\b", c = c << 8 | c >> 24);
-    v86.ctl = V86_ADDR | V86_CALLF | V86_FLAGS;
-    v86.addr = XREADORG;		/* call to xread in boot1 */
-    v86.es = VTOPSEG(buf);
-    v86.eax = lba;
-    v86.ebx = VTOPOFF(buf);
-    v86.ecx = lba >> 16;
-    v86.edx = nblk << 8 | dsk.drive;
-    v86int();
-    v86.ctl = V86_FLAGS;
-    if (V86_CY(v86.efl)) {
-	printf("error %u lba %u\n", v86.eax >> 8 & 0xff, lba);
-	return -1;
-    }
-    return 0;
-}
-
-static int
-keyhit(unsigned ticks)
-{
-    uint32_t t0, t1;
-
-    if (OPT_CHECK(RBX_NOINTR))
-	return 0;
-    t0 = 0;
-    for (;;) {
-	if (xgetc(1))
-	    return 1;
-	t1 = *(uint32_t *)PTOV(0x46c);
-	if (!t0)
-	    t0 = t1;
-	if ((uint32_t)(t1 - t0) >= ticks)
-	    return 0;
-    }
-}
-#endif
-
-static int
 xputc(int c)
 {
     if (ioctrl & IO_KEYBOARD)
@@ -693,8 +642,8 @@
     if (OPT_CHECK(RBX_NOINTR))
 	return 0;
     for (;;) {
-	if (ioctrl & IO_KEYBOARD && getc(1))
-	    return fn ? 1 : getc(0);
+	if (ioctrl & IO_KEYBOARD && keyhit(0))
+	    return fn ? 1 : getc();
 #if 0
 	if (ioctrl & IO_SERIAL && sio_ischar())
 	    return fn ? 1 : sio_getc();

==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/cons.h#3 (text+ko) ====

@@ -31,7 +31,7 @@
 #ifndef _CONS_H_
 #define	_CONS_H_
 
-int	getc(int);
+int	getc(void);
 int	keyhit(int);
 void	putc(int);
 


More information about the p4-projects mailing list