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
-- 
[EMAIL PROTECTED]                  http://www.van-laarhoven.org/
[EMAIL PROTECTED]                        http://www.etla.net/~n_hibma/

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

Reply via email to