summaryrefslogtreecommitdiffstats
path: root/sys/pc98/cbus/sio.c
diff options
context:
space:
mode:
authorn_hibma <n_hibma@FreeBSD.org>2002-06-18 21:30:37 +0000
committern_hibma <n_hibma@FreeBSD.org>2002-06-18 21:30:37 +0000
commit90312e83bd816303d467436dbe2b0519108834f2 (patch)
treee59c17b9c6f153be7cb57be48355a858e1eee1e9 /sys/pc98/cbus/sio.c
parent881107f895a1cc002a567fb92db4d4e972734a43 (diff)
downloadFreeBSD-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.c41
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);
OpenPOWER on IntegriCloud