diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 2001-03-15 17:52:21 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 2001-03-15 17:52:21 +0000 |
commit | 4391c970ad9c9be165eeeaffd800233e9ecaed35 (patch) | |
tree | aa9c5f244f5b3fd9e6ea4eb71d9d104765897f32 /sys/arch | |
parent | 2801c508532c77a03e474ee2f6e3e4d2f93a49a3 (diff) |
support puc devices with higher speeds (not tested yet)
Diffstat (limited to 'sys/arch')
-rw-r--r-- | sys/arch/i386/isa/pccom.c | 24 | ||||
-rw-r--r-- | sys/arch/i386/isa/pccomvar.h | 4 |
2 files changed, 15 insertions, 13 deletions
diff --git a/sys/arch/i386/isa/pccom.c b/sys/arch/i386/isa/pccom.c index 8472de06ab0..f7e45527924 100644 --- a/sys/arch/i386/isa/pccom.c +++ b/sys/arch/i386/isa/pccom.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pccom.c,v 1.36 2001/01/24 09:38:01 hugh Exp $ */ +/* $OpenBSD: pccom.c,v 1.37 2001/03/15 17:52:20 deraadt Exp $ */ /* $NetBSD: com.c,v 1.82.4.1 1996/06/02 09:08:00 mrg Exp $ */ /* @@ -204,7 +204,8 @@ void com_kgdb_putc __P((void *, int)); #endif int -comspeed(speed) +comspeed(freq, speed) + long freq; long speed; { #define divrnd(n, q) (((n)*2/(q)+1)/2) /* divide and round off */ @@ -215,10 +216,10 @@ comspeed(speed) return 0; if (speed < 0) return -1; - x = divrnd((COM_FREQ / 16), speed); + x = divrnd((freq / 16), speed); if (x <= 0) return -1; - err = divrnd((COM_FREQ / 16) * 1000, speed * x) - 1000; + err = divrnd((freq / 16) * 1000, speed * x) - 1000; if (err < 0) err = -err; if (err > COM_TOLERANCE) @@ -239,11 +240,11 @@ comprobe1(iot, ioh) bus_space_write_1(iot, ioh, com_lcr, 0); bus_space_write_1(iot, ioh, com_iir, 0); for (i = 0; i < 32; i++) { - k = bus_space_read_1(iot, ioh, com_iir); - if (k & 0x38) { - bus_space_read_1(iot, ioh, com_data); /* cleanup */ - } else - break; + k = bus_space_read_1(iot, ioh, com_iir); + if (k & 0x38) { + bus_space_read_1(iot, ioh, com_data); /* cleanup */ + } else + break; } if (i >= 32) return 0; @@ -470,6 +471,7 @@ comattach(parent, self, aux) sc->sc_iot = iot; sc->sc_ioh = ioh; sc->sc_iobase = iobase; + sc->sc_frequency = COM_FREQ; timeout_set(&sc->sc_dtr_tmo, com_raisedtr, sc); timeout_set(&sc->sc_diag_tmo, comdiag, sc); @@ -1297,7 +1299,7 @@ comparam(tp, t) struct com_softc *sc = pccom_cd.cd_devs[DEVUNIT(tp->t_dev)]; bus_space_tag_t iot = sc->sc_iot; bus_space_handle_t ioh = sc->sc_ioh; - int ospeed = comspeed(t->c_ospeed); + int ospeed = comspeed(sc->sc_frequency, t->c_ospeed); u_int8_t lcr; tcflag_t oldcflag; int s; @@ -1976,7 +1978,7 @@ cominit(iot, ioh, rate) u_int8_t stat; bus_space_write_1(iot, ioh, com_lcr, LCR_DLAB); - rate = comspeed(rate); /* XXX not comdefaultrate? */ + rate = comspeed(COM_FREQ, rate); /* XXX not comdefaultrate? */ bus_space_write_1(iot, ioh, com_dlbl, rate); bus_space_write_1(iot, ioh, com_dlbh, rate >> 8); bus_space_write_1(iot, ioh, com_lcr, LCR_8BITS); diff --git a/sys/arch/i386/isa/pccomvar.h b/sys/arch/i386/isa/pccomvar.h index 7f040715b04..58c8a226fb4 100644 --- a/sys/arch/i386/isa/pccomvar.h +++ b/sys/arch/i386/isa/pccomvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pccomvar.h,v 1.11 2001/01/24 09:38:02 hugh Exp $ */ +/* $OpenBSD: pccomvar.h,v 1.12 2001/03/15 17:52:20 deraadt Exp $ */ /* $NetBSD: comvar.h,v 1.5 1996/05/05 19:50:47 christos Exp $ */ /* @@ -121,7 +121,7 @@ int com_activate __P((struct device *, enum devact)); int comprobeHAYESP __P((bus_space_handle_t hayespioh, struct com_softc *sc)); #endif void comdiag __P((void *)); -int comspeed __P((long)); +int comspeed __P((long, long)); int comparam __P((struct tty *, struct termios *)); void comstart __P((struct tty *)); void comsoft __P((void)); |