summaryrefslogtreecommitdiff
path: root/sys/dev/sio/sio.c
diff options
context:
space:
mode:
authorNick Hibma <n_hibma@FreeBSD.org>2002-06-18 21:30:37 +0000
committerNick Hibma <n_hibma@FreeBSD.org>2002-06-18 21:30:37 +0000
commitd8dbc77c56c7f0e8a5b5adcffd074071b02bb205 (patch)
treee59c17b9c6f153be7cb57be48355a858e1eee1e9 /sys/dev/sio/sio.c
parent54f43a77ca857599dc8ebfdf52846a7ac2cc0768 (diff)
Notes
Diffstat (limited to 'sys/dev/sio/sio.c')
-rw-r--r--sys/dev/sio/sio.c70
1 files changed, 49 insertions, 21 deletions
diff --git a/sys/dev/sio/sio.c b/sys/dev/sio/sio.c
index 642053700240..085fdb86a8ef 100644
--- a/sys/dev/sio/sio.c
+++ b/sys/dev/sio/sio.c
@@ -332,14 +332,12 @@ 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__
-static int siocnunit;
-#endif
+static int siocnunit = -1;
static Port_t siogdbiobase;
static int siogdbunit = -1;
static void *sio_slow_ih;
@@ -3126,13 +3124,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
@@ -3151,13 +3153,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);
@@ -3175,18 +3181,22 @@ siocnputc(dev, c)
int s;
struct siocnstate sp;
Port_t iobase;
+ 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();
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);
@@ -3201,12 +3211,20 @@ siogdbgetc()
{
int c;
Port_t iobase;
+ speed_t speed;
int s;
struct siocnstate sp;
- iobase = siogdbiobase;
+ if (minor(dev) == siocnunit) {
+ iobase = siocniobase;
+ speed = comdefaultrate;
+ } else {
+ iobase = siogdbiobase;
+ speed = gdbdefaultrate;
+ }
+
s = spltty();
- siocnopen(&sp, iobase, gdbdefaultrate);
+ siocnopen(&sp, iobase, speed);
while (!(inb(iobase + com_lsr) & LSR_RXRDY))
;
c = inb(iobase + com_data);
@@ -3219,11 +3237,21 @@ void
siogdbputc(c)
int c;
{
+ Port_t iobase;
+ speed_t speed;
int s;
struct siocnstate sp;
+ if (minor(dev) == siocnunit) {
+ iobase = siocniobase;
+ speed = comdefaultrate;
+ } else {
+ iobase = siogdbiobase;
+ speed = gdbdefaultrate;
+ }
+
s = spltty();
- siocnopen(&sp, siogdbiobase, gdbdefaultrate);
+ siocnopen(&sp, iobase, speed);
siocntxwait(siogdbiobase);
outb(siogdbiobase + com_data, c);
siocnclose(&sp, siogdbiobase);