diff options
author | n_hibma <n_hibma@FreeBSD.org> | 2002-06-18 21:30:37 +0000 |
---|---|---|
committer | n_hibma <n_hibma@FreeBSD.org> | 2002-06-18 21:30:37 +0000 |
commit | 90312e83bd816303d467436dbe2b0519108834f2 (patch) | |
tree | e59c17b9c6f153be7cb57be48355a858e1eee1e9 /sys/pc98/cbus/sio.c | |
parent | 881107f895a1cc002a567fb92db4d4e972734a43 (diff) | |
download | FreeBSD-src-90312e83bd816303d467436dbe2b0519108834f2.zip FreeBSD-src-90312e83bd816303d467436dbe2b0519108834f2.tar.gz |
Make the speed used by gdb over serial settable in the kernel configuration.
This facilitates the use in circumstances where you are using a serial
console as well. GDB doesn't support anything higher than 9600 baud (19k2
if you are lucky), but the console does.
Diffstat (limited to 'sys/pc98/cbus/sio.c')
-rw-r--r-- | sys/pc98/cbus/sio.c | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/sys/pc98/cbus/sio.c b/sys/pc98/cbus/sio.c index 7ff3816..85b073c 100644 --- a/sys/pc98/cbus/sio.c +++ b/sys/pc98/cbus/sio.c @@ -430,9 +430,9 @@ int comconsole = -1; 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 speed_t gdbdefaultrate = GDBSPEED; +SYSCTL_UINT(_machdep, OID_AUTO, gdbspeed, CTLFLAG_RW, + &gdbdefaultrate, GDBSPEED, ""); static u_int com_events; /* input chars + weighted output completions */ static Port_t siocniobase; #ifndef __alpha__ @@ -4359,13 +4359,17 @@ siocncheckc(dev) Port_t iobase; int s; struct siocnstate sp; + speed_t speed; - if (minor(dev) == siogdbunit) - iobase = siogdbiobase; - else + if (minor(dev) == siocnunit) { iobase = siocniobase; + speed = comdefaultrate; + } else { + iobase = siogdbiobase; + speed = gdbdefaultrate; + } 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 +4388,17 @@ siocngetc(dev) Port_t iobase; int s; struct siocnstate sp; + speed_t speed; - if (minor(dev) == siogdbunit) - iobase = siogdbiobase; - else + if (minor(dev) == siocnunit) { iobase = siocniobase; + speed = comdefaultrate; + } else { + iobase = siogdbiobase; + speed = gdbdefaultrate; + } s = spltty(); - siocnopen(&sp, iobase, comdefaultrate); + siocnopen(&sp, iobase, speed); while (!(inb(iobase + com_lsr) & LSR_RXRDY)) ; c = inb(iobase + com_data); @@ -4409,17 +4417,20 @@ siocnputc(dev, c) struct siocnstate sp; Port_t iobase; - if (minor(dev) == siogdbunit) - iobase = siogdbiobase; - else + if (minor(dev) == siocnunit) { iobase = siocniobase; + speed = comdefaultrate; + } else { + iobase = siogdbiobase; + speed = gdbdefaultrate; + } 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); |