Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 May 2002 20:15:21 +0200 (CEST)
From:      Nick Hibma <n_hibma@van-laarhoven.org>
To:        FreeBSD CURRENT Mailing List <current@FreeBSD.ORG>
Subject:   New kernel option GDBSPEED (as in CONSPEED)?
Message-ID:  <20020527122123.L225-200000@heather.van-laarhoven.org>

index | next in thread | raw e-mail

[-- Attachment #1 --]

CONSPEED is used for both console and gdb. This is a bit awkward because
it means that I have to run my kernel console on 9600 baud on my
diskless box. The attached patch fixes this by introducing another
variable GDBSPEED.

The patch makes the default for GDBSPEED 9600, so anyone who uses a
higher speed would need to set the variable to something sensible
afterwards. Would that require an entry in UPDATING?

Is there any documentation that needs to be updated because of this
change (I couldn't find anything that mentioned CONSPEED wrt gdb in
either src/ or doc/)


Any objections?

Nick
-- 
n_hibma@van-laarhoven.org                  http://www.van-laarhoven.org/
n_hibma@FreeBSD.org                        http://www.etla.net/~n_hibma/


[-- Attachment #2 --]
Index: sys/conf/options.i386
===================================================================
RCS file: /home/ncvs/src/sys/conf/options.i386,v
retrieving revision 1.170
diff -u -r1.170 options.i386
--- sys/conf/options.i386	16 May 2002 21:23:40 -0000	1.170
+++ sys/conf/options.i386	23 May 2002 19:38:42 -0000
@@ -15,6 +15,7 @@
 AUTO_EOI_1		opt_auto_eoi.h
 AUTO_EOI_2		opt_auto_eoi.h
 CONSPEED		opt_comconsole.h
+GDBSPEED		opt_comconsole.h
 I586_PMC_GUPROF		opt_i586_guprof.h
 WLCACHE			opt_wavelan.h
 WLDEBUG			opt_wavelan.h
Index: sys/conf/options.pc98
===================================================================
RCS file: /home/ncvs/src/sys/conf/options.pc98,v
retrieving revision 1.145
diff -u -r1.145 options.pc98
--- sys/conf/options.pc98	19 May 2002 13:18:10 -0000	1.145
+++ sys/conf/options.pc98	23 May 2002 19:38:58 -0000
@@ -15,6 +15,7 @@
 AUTO_EOI_1		opt_auto_eoi.h
 AUTO_EOI_2		opt_auto_eoi.h
 CONSPEED		opt_comconsole.h
+GDBSPEED		opt_comconsole.h
 I586_PMC_GUPROF		opt_i586_guprof.h
 WLCACHE			opt_wavelan.h
 WLDEBUG			opt_wavelan.h
Index: sys/dev/sio/sio.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/sio/sio.c,v
retrieving revision 1.374
diff -u -r1.374 sio.c
--- sys/dev/sio/sio.c	26 Apr 2002 20:24:10 -0000	1.374
+++ sys/dev/sio/sio.c	26 May 2002 10:25:02 -0000
@@ -332,9 +332,7 @@
 static	volatile speed_t	comdefaultrate = CONSPEED;
 static	u_long			comdefaultrclk = DEFAULT_RCLK;
 SYSCTL_ULONG(_machdep, OID_AUTO, conrclk, CTLFLAG_RW, &comdefaultrclk, 0, "");
-#ifdef __alpha__
-static	volatile speed_t	gdbdefaultrate = CONSPEED;
-#endif
+static	volatile speed_t	gdbdefaultrate = GDBSPEED;
 static	u_int	com_events;	/* input chars + weighted output completions */
 static	Port_t	siocniobase;
 #ifndef __alpha__
@@ -418,6 +416,32 @@
 	    0, 0, sysctl_machdep_comdefaultrate, "I", "");
 /* TUNABLE_INT("machdep.conspeed", &comdefaultrate); */
 
+#ifndef __alpha__
+/*
+ * Handle sysctl read/write requests for serial gdb speed
+ */
+
+static int
+sysctl_machdep_gdbdefaultrate(SYSCTL_HANDLER_ARGS)
+{
+	int error;
+	speed_t newspeed;
+
+	newspeed = gdbdefaultrate;
+
+	error = sysctl_handle_opaque(oidp, &newspeed, sizeof newspeed, req);
+	if (error || !req->newptr)
+		return (error);
+
+	gdbdefaultrate = newspeed;
+
+	return 0;
+}
+
+SYSCTL_PROC(_machdep, OID_AUTO, gdbspeed, CTLTYPE_INT | CTLFLAG_RW,
+	    0, 0, sysctl_machdep_gdbdefaultrate, "I", "");
+#endif
+
 #define SET_FLAG(dev, bit) device_set_flags(dev, device_get_flags(dev) | (bit))
 #define CLR_FLAG(dev, bit) device_set_flags(dev, device_get_flags(dev) & ~(bit))
 
@@ -3126,13 +3150,17 @@
 	Port_t	iobase;
 	int	s;
 	struct siocnstate	sp;
+	speed_t	speed;
 
-	if (minor(dev) == siogdbunit)
+	if (minor(dev) == siogdbunit) {
 		iobase = siogdbiobase;
-	else
+		speed = gdbdefaultrate;
+	} else {
 		iobase = siocniobase;
+		speed = comdefaultrate;
+	}
 	s = spltty();
-	siocnopen(&sp, iobase, comdefaultrate);
+	siocnopen(&sp, iobase, speed);
 	if (inb(iobase + com_lsr) & LSR_RXRDY)
 		c = inb(iobase + com_data);
 	else
@@ -3151,13 +3179,17 @@
 	Port_t	iobase;
 	int	s;
 	struct siocnstate	sp;
+	speed_t	speed;
 
-	if (minor(dev) == siogdbunit)
+	if (minor(dev) == siogdbunit) {
 		iobase = siogdbiobase;
-	else
+		speed = gdbdefaultrate;
+	} else {
 		iobase = siocniobase;
+		speed = comdefaultrate;
+	}
 	s = spltty();
-	siocnopen(&sp, iobase, comdefaultrate);
+	siocnopen(&sp, iobase, speed);
 	while (!(inb(iobase + com_lsr) & LSR_RXRDY))
 		;
 	c = inb(iobase + com_data);
@@ -3175,18 +3207,22 @@
 	int	s;
 	struct siocnstate	sp;
 	Port_t	iobase;
+	speed_t	speed;
 
-	if (minor(dev) == siogdbunit)
+	if (minor(dev) == siogdbunit) {
 		iobase = siogdbiobase;
-	else
+		speed = gdbdefaultrate;
+	} else {
 		iobase = siocniobase;
+		speed = comdefaultrate;
+	}
 	s = spltty();
 	need_unlock = 0;
 	if (sio_inited == 2 && !mtx_owned(&sio_lock)) {
 		mtx_lock_spin(&sio_lock);
 		need_unlock = 1;
 	}
-	siocnopen(&sp, iobase, comdefaultrate);
+	siocnopen(&sp, iobase, speed);
 	siocntxwait(iobase);
 	outb(iobase + com_data, c);
 	siocnclose(&sp, iobase);
Index: sys/dev/sio/sioreg.h
===================================================================
RCS file: /home/ncvs/src/sys/dev/sio/sioreg.h,v
retrieving revision 1.19
diff -u -r1.19 sioreg.h
--- sys/dev/sio/sioreg.h	31 Jan 2002 08:23:30 -0000	1.19
+++ sys/dev/sio/sioreg.h	23 May 2002 19:39:54 -0000
@@ -123,4 +123,9 @@
 #define CONSPEED 9600
 #endif
 
+/* default serial gdb speed if not set with sysctl or probed from boot */
+#ifndef GDBSPEED
+#define GDBSPEED 9600
+#endif
+
 #define	IO_COMSIZE	8		/* 8250, 16x50 com controllers */
Index: sys/pc98/pc98/sio.c
===================================================================
RCS file: /home/ncvs/src/sys/pc98/pc98/sio.c,v
retrieving revision 1.172
diff -u -r1.172 sio.c
--- sys/pc98/pc98/sio.c	26 Apr 2002 20:24:26 -0000	1.172
+++ sys/pc98/pc98/sio.c	23 May 2002 19:44:26 -0000
@@ -430,9 +430,7 @@
 static	volatile speed_t	comdefaultrate = CONSPEED;
 static	u_long			comdefaultrclk = DEFAULT_RCLK;
 SYSCTL_ULONG(_machdep, OID_AUTO, conrclk, CTLFLAG_RW, &comdefaultrclk, 0, "");
-#ifdef __alpha__
-static	volatile speed_t	gdbdefaultrate = CONSPEED;
-#endif
+static	volatile speed_t	gdbdefaultrate = GDBSPEED;
 static	u_int	com_events;	/* input chars + weighted output completions */
 static	Port_t	siocniobase;
 #ifndef __alpha__
@@ -761,6 +759,36 @@
 SYSCTL_PROC(_machdep, OID_AUTO, conspeed, CTLTYPE_INT | CTLFLAG_RW,
 	    0, 0, sysctl_machdep_comdefaultrate, "I", "");
 
+#ifdef __alpha__
+/*
+ * Handle sysctl read/write requests for serial gdb speed
+ */
+
+static int
+sysctl_machdep_gdbdefaultrate(SYSCTL_HANDLER_ARGS)
+{
+	int error;
+	speed_t newspeed;
+
+	newspeed = gdbdefaultrate;
+
+	error = sysctl_handle_opaque(oidp, &newspeed, sizeof newspeed, req);
+	if (error || !req->newptr)
+		return (error);
+
+	gdbdefaultrate = newspeed;
+
+	return 0;
+}
+
+SYSCTL_PROC(_machdep, OID_AUTO, gdbspeed, CTLTYPE_INT | CTLFLAG_RW,
+	    0, 0, sysctl_machdep_gdbdefaultrate, "I", "");
+#endif
+
+#define SET_FLAG(dev, bit) device_set_flags(dev, device_get_flags(dev) | (bit))
+#define CLR_FLAG(dev, bit) device_set_flags(dev, device_get_flags(dev) & ~(bit))
+
+
 /*
  *	Unload the driver and clear the table.
  *	XXX this is mostly wrong.
@@ -4359,13 +4387,17 @@
 	Port_t	iobase;
 	int	s;
 	struct siocnstate	sp;
+	speed_t	speed;
 
-	if (minor(dev) == siogdbunit)
+	if (minor(dev) == siogdbunit) {
 		iobase = siogdbiobase;
-	else
+		speed = gdbdefaultrate;
+	} else {
 		iobase = siocniobase;
+		speed = comdefaultrate;
+	}
 	s = spltty();
-	siocnopen(&sp, iobase, comdefaultrate);
+	siocnopen(&sp, iobase, speed);
 	if (inb(iobase + com_lsr) & LSR_RXRDY)
 		c = inb(iobase + com_data);
 	else
@@ -4384,13 +4416,17 @@
 	Port_t	iobase;
 	int	s;
 	struct siocnstate	sp;
+	speed_t	speed;
 
-	if (minor(dev) == siogdbunit)
+	if (minor(dev) == siogdbunit) {
 		iobase = siogdbiobase;
-	else
+		speed = gdbdefaultrate;
+	} else {
 		iobase = siocniobase;
+		speed = comdefaultrate;
+	}
 	s = spltty();
-	siocnopen(&sp, iobase, comdefaultrate);
+	siocnopen(&sp, iobase, speed);
 	while (!(inb(iobase + com_lsr) & LSR_RXRDY))
 		;
 	c = inb(iobase + com_data);
@@ -4409,17 +4445,20 @@
 	struct siocnstate	sp;
 	Port_t	iobase;
 
-	if (minor(dev) == siogdbunit)
+	if (minor(dev) == siogdbunit) {
 		iobase = siogdbiobase;
-	else
+		speed = gdbdefaultrate;
+	} else {
 		iobase = siocniobase;
+		speed = comdefaultrate;
+	}
 	s = spltty();
 	need_unlock = 0;
 	if (sio_inited == 2 && !mtx_owned(&sio_lock)) {
 		mtx_lock_spin(&sio_lock);
 		need_unlock = 1;
 	}
-	siocnopen(&sp, iobase, comdefaultrate);
+	siocnopen(&sp, iobase, speed);
 	siocntxwait(iobase);
 	outb(iobase + com_data, c);
 	siocnclose(&sp, iobase);
help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020527122123.L225-200000>