1/*- 2 * Copyright (c) 1991 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 16 unchanged lines hidden (view full) --- 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * |
33 * $FreeBSD: head/sys/pc98/cbus/sio.c 51654 1999-09-25 16:21:39Z phk $ |
34 * from: @(#)com.c 7.5 (Berkeley) 5/16/91 35 * from: i386/isa sio.c,v 1.234 36 */ 37 38#include "opt_comconsole.h" 39#include "opt_compat.h" 40#include "opt_ddb.h" 41#include "opt_sio.h" --- 206 unchanged lines hidden (view full) --- 248/* 249 * com state bits. 250 * (CS_BUSY | CS_TTGO) and (CS_BUSY | CS_TTGO | CS_ODEVREADY) must be higher 251 * than the other bits so that they can be tested as a group without masking 252 * off the low bits. 253 * 254 * The following com and tty flags correspond closely: 255 * CS_BUSY = TS_BUSY (maintained by comstart(), siopoll() and |
256 * comstop()) |
257 * CS_TTGO = ~TS_TTSTOP (maintained by comparam() and comstart()) 258 * CS_CTS_OFLOW = CCTS_OFLOW (maintained by comparam()) 259 * CS_RTS_IFLOW = CRTS_IFLOW (maintained by comparam()) 260 * TS_FLUSH is not used. 261 * XXX I think TIOCSETA doesn't clear TS_TTSTOP when it clears IXON. 262 * XXX CS_*FLOW should be CF_*FLOW in com->flags (control flags not state). 263 */ 264#define CS_BUSY 0x80 /* output in progress */ --- 157 unchanged lines hidden (view full) --- 422static void siointr __P((void *arg)); 423static int commctl __P((struct com_s *com, int bits, int how)); 424static int comparam __P((struct tty *tp, struct termios *t)); 425static swihand_t siopoll; 426static int sioprobe __P((device_t dev)); 427static void siosettimeout __P((void)); 428static int siosetwater __P((struct com_s *com, speed_t speed)); 429static void comstart __P((struct tty *tp)); |
430static void comstop __P((struct tty *tp, int rw)); |
431static timeout_t comwakeup; 432static void disc_optim __P((struct tty *tp, struct termios *t, 433 struct com_s *com)); 434 435 436static char driver_name[] = "sio"; 437 438/* table and macro for fast conversion from a unit number to its com struct */ --- 15 unchanged lines hidden (view full) --- 454 sizeof(struct com_s), 455}; 456 457static d_open_t sioopen; 458static d_close_t sioclose; 459static d_read_t sioread; 460static d_write_t siowrite; 461static d_ioctl_t sioioctl; |
462 463#define CDEV_MAJOR 28 464static struct cdevsw sio_cdevsw = { 465 /* open */ sioopen, 466 /* close */ sioclose, 467 /* read */ sioread, 468 /* write */ siowrite, 469 /* ioctl */ sioioctl, |
470 /* stop */ nostop, |
471 /* reset */ noreset, |
472 /* devtotty */ nodevtotty, 473 /* poll */ ttypoll, |
474 /* mmap */ nommap, 475 /* strategy */ nostrategy, 476 /* name */ driver_name, 477 /* parms */ noparms, 478 /* maj */ CDEV_MAJOR, 479 /* dump */ nodump, 480 /* psize */ nopsize, 481 /* flags */ D_TTY, --- 1458 unchanged lines hidden (view full) --- 1940 } else { 1941 /* 1942 * The device isn't open, so there are no conflicts. 1943 * Initialize it. Initialization is done twice in many 1944 * cases: to preempt sleeping callin opens if we are 1945 * callout, and to complete a callin open after DCD rises. 1946 */ 1947 tp->t_oproc = comstart; |
1948 tp->t_stop = comstop; |
1949 tp->t_param = comparam; 1950 tp->t_dev = dev; 1951 tp->t_termios = mynor & CALLOUT_MASK 1952 ? com->it_out : com->it_in; 1953#ifdef PC98 1954 if (!IS_8251(com->pc98_if_type)) 1955#endif 1956 (void)commctl(com, TIOCM_DTR | TIOCM_RTS, DMSET); --- 165 unchanged lines hidden (view full) --- 2122 com = com_addr(MINOR_TO_UNIT(mynor)); 2123 tp = com->tp; 2124 s = spltty(); 2125 (*linesw[tp->t_line].l_close)(tp, flag); 2126#ifdef PC98 2127 com->modem_checking = 0; 2128#endif 2129 disc_optim(tp, &tp->t_termios, com); |
2130 comstop(tp, FREAD | FWRITE); |
2131 comhardclose(com); 2132 ttyclose(tp); 2133 siosettimeout(); 2134 splx(s); 2135 if (com->gone) { 2136 printf("sio%d: gone\n", com->unit); 2137 s = spltty(); 2138 if (com->ibuf != NULL) --- 1468 unchanged lines hidden (view full) --- 3607/* if(IS_8251(com->pc98_if_type)) 3608 com_int_Tx_enable(com); */ 3609#endif 3610 ttwwakeup(tp); 3611 splx(s); 3612} 3613 3614static void |
3615comstop(tp, rw) |
3616 struct tty *tp; 3617 int rw; 3618{ 3619 struct com_s *com; 3620#ifdef PC98 3621 int port_shift = 0; 3622 int rsa98_tmp = 0; 3623#endif --- 49 unchanged lines hidden (view full) --- 3673#endif 3674 com_events -= (com->iptr - com->ibuf); 3675 com->iptr = com->ibuf; 3676 } 3677 enable_intr(); 3678 comstart(tp); 3679} 3680 |
3681static int 3682commctl(com, bits, how) 3683 struct com_s *com; 3684 int bits; 3685 int how; 3686{ 3687 int mcr; 3688 int msr; --- 1209 unchanged lines hidden --- |