termios.c revision 1.1 1 1.1 nonaka /* $NetBSD: termios.c,v 1.1 2009/03/02 09:33:02 nonaka Exp $ */
2 1.1 nonaka /* $OpenBSD: termios.c,v 1.2 2005/05/24 20:38:20 uwe Exp $ */
3 1.1 nonaka
4 1.1 nonaka /*-
5 1.1 nonaka * Copyright (c) 1989, 1993
6 1.1 nonaka * The Regents of the University of California. All rights reserved.
7 1.1 nonaka *
8 1.1 nonaka * Redistribution and use in source and binary forms, with or without
9 1.1 nonaka * modification, are permitted provided that the following conditions
10 1.1 nonaka * are met:
11 1.1 nonaka * 1. Redistributions of source code must retain the above copyright
12 1.1 nonaka * notice, this list of conditions and the following disclaimer.
13 1.1 nonaka * 2. Redistributions in binary form must reproduce the above copyright
14 1.1 nonaka * notice, this list of conditions and the following disclaimer in the
15 1.1 nonaka * documentation and/or other materials provided with the distribution.
16 1.1 nonaka * 3. Neither the name of the University nor the names of its contributors
17 1.1 nonaka * may be used to endorse or promote products derived from this software
18 1.1 nonaka * without specific prior written permission.
19 1.1 nonaka *
20 1.1 nonaka * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 1.1 nonaka * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 1.1 nonaka * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 1.1 nonaka * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 1.1 nonaka * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 1.1 nonaka * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 1.1 nonaka * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 1.1 nonaka * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 1.1 nonaka * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 1.1 nonaka * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 1.1 nonaka * SUCH DAMAGE.
31 1.1 nonaka */
32 1.1 nonaka
33 1.1 nonaka #include "boot.h"
34 1.1 nonaka #include "unixdev.h"
35 1.1 nonaka
36 1.1 nonaka #include "compat_linux.h"
37 1.1 nonaka #include "termios.h"
38 1.1 nonaka
39 1.1 nonaka int
40 1.1 nonaka linux_cfsetspeed(struct linux_termios *t, linux_speed_t speed)
41 1.1 nonaka {
42 1.1 nonaka int mask;
43 1.1 nonaka int i;
44 1.1 nonaka
45 1.1 nonaka mask = LINUX_B9600; /* XXX default value should this be 0? */
46 1.1 nonaka for (i = 0; i < __arraycount(linux_speeds); i++) {
47 1.1 nonaka if (speed == linux_speeds[i]) {
48 1.1 nonaka mask = linux_spmasks[i];
49 1.1 nonaka break;
50 1.1 nonaka }
51 1.1 nonaka }
52 1.1 nonaka if (i == __arraycount(linux_speeds))
53 1.1 nonaka return -1;
54 1.1 nonaka
55 1.1 nonaka t->c_cflag &= ~LINUX_CBAUD;
56 1.1 nonaka t->c_cflag |= mask;
57 1.1 nonaka return 0;
58 1.1 nonaka }
59 1.1 nonaka
60 1.1 nonaka void
61 1.1 nonaka linux_cfmakeraw(struct linux_termios *t)
62 1.1 nonaka {
63 1.1 nonaka
64 1.1 nonaka t->c_iflag &= ~(LINUX_IMAXBEL
65 1.1 nonaka |LINUX_IGNBRK
66 1.1 nonaka |LINUX_BRKINT
67 1.1 nonaka |LINUX_PARMRK
68 1.1 nonaka |LINUX_ISTRIP
69 1.1 nonaka |LINUX_INLCR
70 1.1 nonaka |LINUX_IGNCR
71 1.1 nonaka |LINUX_ICRNL
72 1.1 nonaka |LINUX_IXON);
73 1.1 nonaka t->c_oflag &= ~LINUX_OPOST;
74 1.1 nonaka t->c_lflag &= ~(LINUX_ECHO
75 1.1 nonaka |LINUX_ECHONL
76 1.1 nonaka |LINUX_ICANON
77 1.1 nonaka |LINUX_ISIG
78 1.1 nonaka |LINUX_IEXTEN);
79 1.1 nonaka t->c_cflag &= ~(LINUX_CSIZE|LINUX_PARENB);
80 1.1 nonaka t->c_cflag |= LINUX_CS8;
81 1.1 nonaka }
82 1.1 nonaka
83 1.1 nonaka int
84 1.1 nonaka linux_tcgetattr(int fd, struct linux_termios *t)
85 1.1 nonaka {
86 1.1 nonaka
87 1.1 nonaka return uioctl(fd, LINUX_TCGETS, t);
88 1.1 nonaka }
89 1.1 nonaka
90 1.1 nonaka /* This function differs slightly from tcsetattr() in libc. */
91 1.1 nonaka int
92 1.1 nonaka linux_tcsetattr(int fd, int action, struct linux_termios *t)
93 1.1 nonaka {
94 1.1 nonaka
95 1.1 nonaka switch (action) {
96 1.1 nonaka case LINUX_TCSETS:
97 1.1 nonaka case LINUX_TCSETSW:
98 1.1 nonaka case LINUX_TCSETSF:
99 1.1 nonaka break;
100 1.1 nonaka
101 1.1 nonaka default:
102 1.1 nonaka errno = EINVAL;
103 1.1 nonaka return -1;
104 1.1 nonaka }
105 1.1 nonaka return uioctl(fd, action, t);
106 1.1 nonaka }
107 1.1 nonaka
108 1.1 nonaka void dummycall(void);
109 1.1 nonaka void
110 1.1 nonaka dummycall(void)
111 1.1 nonaka {
112 1.1 nonaka
113 1.1 nonaka (void)linux_termio_to_bsd_termios;
114 1.1 nonaka (void)bsd_termios_to_linux_termio;
115 1.1 nonaka (void)linux_termios_to_bsd_termios;
116 1.1 nonaka (void)bsd_termios_to_linux_termios;
117 1.1 nonaka }
118