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