diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2004-08-19 21:47:55 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2004-08-19 21:47:55 +0000 |
commit | 886f803f73588808ba17c2efe53671933018ac59 (patch) | |
tree | 0a19fba41e820921ad19c50a344a249796b10a3b /sys | |
parent | 34875d66709ee13e962a16d1f6f16a1792733045 (diff) |
Do as much in com_puc_attach2() as done in com_attach_subr(), until they
really get cleaned up and factorized; fixes puc operation on amd64 and sparc64.
tested pval@ millert@ naddy@; ok deraadt@ millert@
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/puc/com_puc.c | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/sys/dev/puc/com_puc.c b/sys/dev/puc/com_puc.c index e2ea9209e60..acea3c35fbb 100644 --- a/sys/dev/puc/com_puc.c +++ b/sys/dev/puc/com_puc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: com_puc.c,v 1.6 2003/07/15 05:01:47 jason Exp $ */ +/* $OpenBSD: com_puc.c,v 1.7 2004/08/19 21:47:54 miod Exp $ */ /* * Copyright (c) 1997 - 1999, Jason Downs. All rights reserved. @@ -147,9 +147,6 @@ com_puc_attach2(sc) sc->sc_hwflags = 0; sc->sc_swflags = 0; - timeout_set(&sc->sc_dtr_tmo, com_raisedtr, sc); - timeout_set(&sc->sc_diag_tmo, comdiag, sc); - /* * Probe for all known forms of UART. */ @@ -260,6 +257,11 @@ com_puc_attach2(sc) SET(sc->sc_hwflags, COM_HW_FIFO); sc->sc_fifolen = 32; break; + case COM_UART_TI16750: + printf(": ti16750, 64 byte fifo\n"); + SET(sc->sc_hwflags, COM_HW_FIFO); + sc->sc_fifolen = 64; + break; #if NPCCOM > 0 #ifdef i386 case COM_UART_XR16850: @@ -270,11 +272,34 @@ com_puc_attach2(sc) #endif #endif default: - panic("comattach: bad fifo type"); + panic("com_puc_attach2: bad fifo type"); } /* clear and disable fifo */ bus_space_write_1(iot, ioh, com_fifo, FIFO_RCV_RST | FIFO_XMT_RST); (void)bus_space_read_1(iot, ioh, com_data); bus_space_write_1(iot, ioh, com_fifo, 0); + + sc->sc_mcr = 0; + bus_space_write_1(iot, ioh, com_mcr, sc->sc_mcr); + + timeout_set(&sc->sc_diag_tmo, comdiag, sc); + timeout_set(&sc->sc_dtr_tmo, com_raisedtr, sc); +#if NCOM > 0 +#ifdef __HAVE_GENERIC_SOFT_INTERRUPTS + sc->sc_si = softintr_establish(IPL_TTY, comsoft, sc); + if (sc->sc_si == NULL) + panic("%s: can't establish soft interrupt.", + sc->sc_dev.dv_xname); +#else + timeout_set(&sc->sc_comsoft_tmo, comsoft, sc); +#endif +#endif + + /* + * If there are no enable/disable functions, assume the device + * is always enabled. + */ + if (!sc->enable) + sc->enabled = 1; } |