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/dev/sio/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"
--- 260 unchanged lines hidden (view full) ---
302static void siointr __P((void *arg));
303static int commctl __P((struct com_s *com, int bits, int how));
304static int comparam __P((struct tty *tp, struct termios *t));
305static swihand_t siopoll;
306static int sioprobe __P((device_t dev));
307static void siosettimeout __P((void));
308static int siosetwater __P((struct com_s *com, speed_t speed));
309static void comstart __P((struct tty *tp));
310static void comstop __P((struct tty *tp, int rw));
311static timeout_t comwakeup;
312static void disc_optim __P((struct tty *tp, struct termios *t,
313 struct com_s *com));
314
315
316static char driver_name[] = "sio";
317
318/* table and macro for fast conversion from a unit number to its com struct */
--- 15 unchanged lines hidden (view full) ---
334 sizeof(struct com_s),
335};
336
337static d_open_t sioopen;
338static d_close_t sioclose;
339static d_read_t sioread;
340static d_write_t siowrite;
341static d_ioctl_t sioioctl;
342
343#define CDEV_MAJOR 28
344static struct cdevsw sio_cdevsw = {
345 /* open */ sioopen,
346 /* close */ sioclose,
347 /* read */ sioread,
348 /* write */ siowrite,
349 /* ioctl */ sioioctl,
350 /* stop */ nostop,
351 /* reset */ noreset,
352 /* devtotty */ nodevtotty,
353 /* poll */ ttypoll,
354 /* mmap */ nommap,
355 /* strategy */ nostrategy,
356 /* name */ driver_name,
357 /* parms */ noparms,
358 /* maj */ CDEV_MAJOR,
359 /* dump */ nodump,
360 /* psize */ nopsize,
361 /* flags */ D_TTY,
--- 842 unchanged lines hidden (view full) ---
1204 /*
1205 * The device isn't open, so there are no conflicts.
1206 * Initialize it. Initialization is done twice in many
1207 * cases: to preempt sleeping callin opens if we are
1208 * callout, and to complete a callin open after DCD rises.
1209 */
1210 tp->t_oproc = comstart;
1211 tp->t_param = comparam;
1212 tp->t_stop = comstop;
1213 tp->t_dev = dev;
1214 tp->t_termios = mynor & CALLOUT_MASK
1215 ? com->it_out : com->it_in;
1216 (void)commctl(com, TIOCM_DTR | TIOCM_RTS, DMSET);
1217 com->poll = com->no_irq;
1218 com->poll_output = com->loses_outints;
1219 ++com->wopeners;
1220 error = comparam(tp, &tp->t_termios);
--- 110 unchanged lines hidden (view full) ---
1331 mynor = minor(dev);
1332 if (mynor & CONTROL_MASK)
1333 return (0);
1334 com = com_addr(MINOR_TO_UNIT(mynor));
1335 tp = com->tp;
1336 s = spltty();
1337 (*linesw[tp->t_line].l_close)(tp, flag);
1338 disc_optim(tp, &tp->t_termios, com);
1339 comstop(tp, FREAD | FWRITE);
1340 comhardclose(com);
1341 ttyclose(tp);
1342 siosettimeout();
1343 splx(s);
1344 if (com->gone) {
1345 printf("sio%d: gone\n", com->unit);
1346 s = spltty();
1347 if (com->ibuf != NULL)
--- 1022 unchanged lines hidden (view full) ---
2370 if (com->state >= (CS_BUSY | CS_TTGO))
2371 siointr1(com); /* fake interrupt to start output */
2372 enable_intr();
2373 ttwwakeup(tp);
2374 splx(s);
2375}
2376
2377static void
2378comstop(tp, rw)
2379 struct tty *tp;
2380 int rw;
2381{
2382 struct com_s *com;
2383
2384 com = com_addr(DEV_TO_UNIT(tp->t_dev));
2385 if (com->gone)
2386 return;
--- 23 unchanged lines hidden (view full) ---
2410 FIFO_RCV_RST | com->fifo_image);
2411 com_events -= (com->iptr - com->ibuf);
2412 com->iptr = com->ibuf;
2413 }
2414 enable_intr();
2415 comstart(tp);
2416}
2417
2418static int
2419commctl(com, bits, how)
2420 struct com_s *com;
2421 int bits;
2422 int how;
2423{
2424 int mcr;
2425 int msr;
--- 619 unchanged lines hidden ---
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/dev/sio/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"
--- 260 unchanged lines hidden (view full) ---
302static void siointr __P((void *arg));
303static int commctl __P((struct com_s *com, int bits, int how));
304static int comparam __P((struct tty *tp, struct termios *t));
305static swihand_t siopoll;
306static int sioprobe __P((device_t dev));
307static void siosettimeout __P((void));
308static int siosetwater __P((struct com_s *com, speed_t speed));
309static void comstart __P((struct tty *tp));
310static void comstop __P((struct tty *tp, int rw));
311static timeout_t comwakeup;
312static void disc_optim __P((struct tty *tp, struct termios *t,
313 struct com_s *com));
314
315
316static char driver_name[] = "sio";
317
318/* table and macro for fast conversion from a unit number to its com struct */
--- 15 unchanged lines hidden (view full) ---
334 sizeof(struct com_s),
335};
336
337static d_open_t sioopen;
338static d_close_t sioclose;
339static d_read_t sioread;
340static d_write_t siowrite;
341static d_ioctl_t sioioctl;
342
343#define CDEV_MAJOR 28
344static struct cdevsw sio_cdevsw = {
345 /* open */ sioopen,
346 /* close */ sioclose,
347 /* read */ sioread,
348 /* write */ siowrite,
349 /* ioctl */ sioioctl,
350 /* stop */ nostop,
351 /* reset */ noreset,
352 /* devtotty */ nodevtotty,
353 /* poll */ ttypoll,
354 /* mmap */ nommap,
355 /* strategy */ nostrategy,
356 /* name */ driver_name,
357 /* parms */ noparms,
358 /* maj */ CDEV_MAJOR,
359 /* dump */ nodump,
360 /* psize */ nopsize,
361 /* flags */ D_TTY,
--- 842 unchanged lines hidden (view full) ---
1204 /*
1205 * The device isn't open, so there are no conflicts.
1206 * Initialize it. Initialization is done twice in many
1207 * cases: to preempt sleeping callin opens if we are
1208 * callout, and to complete a callin open after DCD rises.
1209 */
1210 tp->t_oproc = comstart;
1211 tp->t_param = comparam;
1212 tp->t_stop = comstop;
1213 tp->t_dev = dev;
1214 tp->t_termios = mynor & CALLOUT_MASK
1215 ? com->it_out : com->it_in;
1216 (void)commctl(com, TIOCM_DTR | TIOCM_RTS, DMSET);
1217 com->poll = com->no_irq;
1218 com->poll_output = com->loses_outints;
1219 ++com->wopeners;
1220 error = comparam(tp, &tp->t_termios);
--- 110 unchanged lines hidden (view full) ---
1331 mynor = minor(dev);
1332 if (mynor & CONTROL_MASK)
1333 return (0);
1334 com = com_addr(MINOR_TO_UNIT(mynor));
1335 tp = com->tp;
1336 s = spltty();
1337 (*linesw[tp->t_line].l_close)(tp, flag);
1338 disc_optim(tp, &tp->t_termios, com);
1339 comstop(tp, FREAD | FWRITE);
1340 comhardclose(com);
1341 ttyclose(tp);
1342 siosettimeout();
1343 splx(s);
1344 if (com->gone) {
1345 printf("sio%d: gone\n", com->unit);
1346 s = spltty();
1347 if (com->ibuf != NULL)
--- 1022 unchanged lines hidden (view full) ---
2370 if (com->state >= (CS_BUSY | CS_TTGO))
2371 siointr1(com); /* fake interrupt to start output */
2372 enable_intr();
2373 ttwwakeup(tp);
2374 splx(s);
2375}
2376
2377static void
2378comstop(tp, rw)
2379 struct tty *tp;
2380 int rw;
2381{
2382 struct com_s *com;
2383
2384 com = com_addr(DEV_TO_UNIT(tp->t_dev));
2385 if (com->gone)
2386 return;
--- 23 unchanged lines hidden (view full) ---
2410 FIFO_RCV_RST | com->fifo_image);
2411 com_events -= (com->iptr - com->ibuf);
2412 com->iptr = com->ibuf;
2413 }
2414 enable_intr();
2415 comstart(tp);
2416}
2417
2418static int
2419commctl(com, bits, how)
2420 struct com_s *com;
2421 int bits;
2422 int how;
2423{
2424 int mcr;
2425 int msr;
--- 619 unchanged lines hidden ---