diff options
author | bde <bde@FreeBSD.org> | 1998-08-19 04:17:38 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 1998-08-19 04:17:38 +0000 |
commit | 1524621152bec6b2bc6b9a22a125584602153728 (patch) | |
tree | b50c09b51fa2efd7bf04d14b1c1b0ff5912932c2 /sys/dev/cy | |
parent | 6cec3f7e9b5fc94f75e1473af6e3e5de8b294708 (diff) | |
download | FreeBSD-src-1524621152bec6b2bc6b9a22a125584602153728.zip FreeBSD-src-1524621152bec6b2bc6b9a22a125584602153728.tar.gz |
Enabled dynamically sized tty input buffers (with enough buffering
for 1 second's worth of input) and larger tty output buffers. The
interrupt-level buffers are still too small for speeds above 115200
bps (only a little too small for 230400 bps if RTS flow control is
enabled).
Don't call ttsetwater() explicitly in open(). It is now called for
the TTYDISC l_open() and should be static.
Don't attempt to register the cdevsw more than once.
Diffstat (limited to 'sys/dev/cy')
-rw-r--r-- | sys/dev/cy/cy.c | 19 | ||||
-rw-r--r-- | sys/dev/cy/cy_isa.c | 19 |
2 files changed, 20 insertions, 18 deletions
diff --git a/sys/dev/cy/cy.c b/sys/dev/cy/cy.c index 0575119..545a372 100644 --- a/sys/dev/cy/cy.c +++ b/sys/dev/cy/cy.c @@ -27,7 +27,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: cy.c,v 1.67 1998/08/13 13:54:10 bde Exp $ + * $Id: cy.c,v 1.68 1998/08/13 19:03:22 bde Exp $ */ #include "opt_compat.h" @@ -153,7 +153,6 @@ #define CD1400_xIVR_CHAN 0x1F #define LOTS_OF_EVENTS 64 /* helps separate urgent events from input */ -#define RB_I_HIGH_WATER (TTYHOG - 2 * RS_IBUFSIZE) #define RS_IBUFSIZE 256 #define CALLOUT_MASK 0x80 @@ -390,7 +389,7 @@ static struct cdevsw sio_cdevsw = { static int comconsole = -1; static speed_t comdefaultrate = TTYDEF_SPEED; static u_int com_events; /* input chars + weighted output completions */ -static bool_t siopoll_registered; +static bool_t sio_registered; static int sio_timeout; static int sio_timeouts_until_log; static struct callout_handle sio_timeout_handle @@ -604,8 +603,6 @@ cyattach_common(cy_iobase, cy_align) com_addr(unit) = com; splx(s); - dev = makedev(CDEV_MAJOR, 0); - cdevsw_add(&dev, &sio_cdevsw, NULL); #ifdef DEVFS com->devfs_token_ttyd = devfs_add_devswf(&sio_cdevsw, unit, DV_CHR, @@ -634,9 +631,11 @@ cyattach_common(cy_iobase, cy_align) #endif } } - if (!siopoll_registered) { + if (!sio_registered) { + dev = makedev(CDEV_MAJOR, 0); + cdevsw_add(&dev, &sio_cdevsw, NULL); register_swi(SWI_TTY, siopoll); - siopoll_registered = TRUE; + sio_registered = TRUE; } /* ensure an edge for the next interrupt */ @@ -721,6 +720,9 @@ open_top: tp->t_dev = dev; tp->t_termios = mynor & CALLOUT_MASK ? com->it_out : com->it_in; + tp->t_ififosize = 2 * RS_IBUFSIZE; + tp->t_ispeedwat = (speed_t)-1; + tp->t_ospeedwat = (speed_t)-1; #if 0 (void)commctl(com, TIOCM_DTR | TIOCM_RTS, DMSET); com->poll = com->no_irq; @@ -759,7 +761,6 @@ open_top: /* * XXX we should goto open_top if comparam() slept. */ - ttsetwater(tp); #if 0 if (com->hasfifo) { /* @@ -1675,7 +1676,7 @@ repeat: * call overhead). */ if (tp->t_state & TS_CAN_BYPASS_L_RINT) { - if (tp->t_rawq.c_cc + incc >= RB_I_HIGH_WATER + if (tp->t_rawq.c_cc + incc > tp->t_ihiwat && (com->state & CS_RTS_IFLOW || tp->t_iflag & IXOFF) && !(tp->t_state & TS_TBLOCK)) diff --git a/sys/dev/cy/cy_isa.c b/sys/dev/cy/cy_isa.c index 0575119..545a372 100644 --- a/sys/dev/cy/cy_isa.c +++ b/sys/dev/cy/cy_isa.c @@ -27,7 +27,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: cy.c,v 1.67 1998/08/13 13:54:10 bde Exp $ + * $Id: cy.c,v 1.68 1998/08/13 19:03:22 bde Exp $ */ #include "opt_compat.h" @@ -153,7 +153,6 @@ #define CD1400_xIVR_CHAN 0x1F #define LOTS_OF_EVENTS 64 /* helps separate urgent events from input */ -#define RB_I_HIGH_WATER (TTYHOG - 2 * RS_IBUFSIZE) #define RS_IBUFSIZE 256 #define CALLOUT_MASK 0x80 @@ -390,7 +389,7 @@ static struct cdevsw sio_cdevsw = { static int comconsole = -1; static speed_t comdefaultrate = TTYDEF_SPEED; static u_int com_events; /* input chars + weighted output completions */ -static bool_t siopoll_registered; +static bool_t sio_registered; static int sio_timeout; static int sio_timeouts_until_log; static struct callout_handle sio_timeout_handle @@ -604,8 +603,6 @@ cyattach_common(cy_iobase, cy_align) com_addr(unit) = com; splx(s); - dev = makedev(CDEV_MAJOR, 0); - cdevsw_add(&dev, &sio_cdevsw, NULL); #ifdef DEVFS com->devfs_token_ttyd = devfs_add_devswf(&sio_cdevsw, unit, DV_CHR, @@ -634,9 +631,11 @@ cyattach_common(cy_iobase, cy_align) #endif } } - if (!siopoll_registered) { + if (!sio_registered) { + dev = makedev(CDEV_MAJOR, 0); + cdevsw_add(&dev, &sio_cdevsw, NULL); register_swi(SWI_TTY, siopoll); - siopoll_registered = TRUE; + sio_registered = TRUE; } /* ensure an edge for the next interrupt */ @@ -721,6 +720,9 @@ open_top: tp->t_dev = dev; tp->t_termios = mynor & CALLOUT_MASK ? com->it_out : com->it_in; + tp->t_ififosize = 2 * RS_IBUFSIZE; + tp->t_ispeedwat = (speed_t)-1; + tp->t_ospeedwat = (speed_t)-1; #if 0 (void)commctl(com, TIOCM_DTR | TIOCM_RTS, DMSET); com->poll = com->no_irq; @@ -759,7 +761,6 @@ open_top: /* * XXX we should goto open_top if comparam() slept. */ - ttsetwater(tp); #if 0 if (com->hasfifo) { /* @@ -1675,7 +1676,7 @@ repeat: * call overhead). */ if (tp->t_state & TS_CAN_BYPASS_L_RINT) { - if (tp->t_rawq.c_cc + incc >= RB_I_HIGH_WATER + if (tp->t_rawq.c_cc + incc > tp->t_ihiwat && (com->state & CS_RTS_IFLOW || tp->t_iflag & IXOFF) && !(tp->t_state & TS_TBLOCK)) |