summaryrefslogtreecommitdiff
path: root/sys/dev/sio/sio.c
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2000-09-08 00:35:46 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2000-09-08 00:35:46 +0000
commit60ee19d50032007267de8ed111000511cdbb1ed8 (patch)
treee5d7b56b84bd098079bced8401c08c5368cf547b /sys/dev/sio/sio.c
parent52a3bfa2e7b420e325ad810ec77328959d1ad17b (diff)
Notes
Diffstat (limited to 'sys/dev/sio/sio.c')
-rw-r--r--sys/dev/sio/sio.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/sys/dev/sio/sio.c b/sys/dev/sio/sio.c
index a6f05e762ce8..83a58e73149e 100644
--- a/sys/dev/sio/sio.c
+++ b/sys/dev/sio/sio.c
@@ -303,7 +303,7 @@ static swihand_t siopoll;
static int sioprobe __P((device_t dev, int xrid));
static int sio_isa_probe __P((device_t dev));
static void siosettimeout __P((void));
-static int siosetwater __P((struct com_s *com, speed_t speed));
+static int siosetwater __P((struct com_s *com, speed_t speed, int locked));
static void comstart __P((struct tty *tp));
static void comstop __P((struct tty *tp, int rw));
static timeout_t comwakeup;
@@ -1181,7 +1181,7 @@ sioattach(dev, xrid)
com->it_in.c_ispeed = com->it_in.c_ospeed = comdefaultrate;
} else
com->it_in.c_ispeed = com->it_in.c_ospeed = TTYDEF_SPEED;
- if (siosetwater(com, com->it_in.c_ispeed) != 0) {
+ if (siosetwater(com, com->it_in.c_ispeed, 0) != 0) {
/*
* Leave i/o resources allocated if this is a `cn'-level
* console, so that other devices can't snarf them.
@@ -2417,7 +2417,7 @@ comparam(tp, t)
disable_intr();
COM_LOCK();
- (void) siosetwater(com, t->c_ispeed);
+ (void) siosetwater(com, t->c_ispeed, 1);
if (divisor != 0) {
sio_setreg(com, com_cfcr, cfcr | CFCR_DLAB);
@@ -2516,9 +2516,10 @@ comparam(tp, t)
}
static int
-siosetwater(com, speed)
+siosetwater(com, speed, locked)
struct com_s *com;
speed_t speed;
+ int locked;
{
int cp4ticks;
u_char *ibuf;
@@ -2562,7 +2563,8 @@ siosetwater(com, speed)
*/
intrsave = save_intr();
disable_intr();
- COM_LOCK();
+ if (!locked)
+ COM_LOCK();
if (com->iptr != com->ibuf)
sioinput(com);
@@ -2581,7 +2583,8 @@ siosetwater(com, speed)
com->ibufend = ibuf + ibufsize;
com->ierroff = ibufsize;
com->ihighwater = ibuf + 3 * ibufsize / 4;
- COM_UNLOCK();
+ if (!locked)
+ COM_UNLOCK();
restore_intr(intrsave);
return (0);
}