]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - stand/kboot/termios.c
kboot: copy EFI's bootinfo.c and adjust
[FreeBSD/FreeBSD.git] / stand / kboot / termios.c
1 /*
2  * Copyright (c) 2005-2020 Rich Felker, et al.
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  * Note: From the musl project, stripped down and repackaged with HOST_/host_ prepended
7  */
8
9 #include <sys/types.h>
10 #include "termios.h"
11 #include "host_syscall.h"
12
13 int
14 host_tcgetattr(int fd, struct host_termios *tio)
15 {
16         if (host_ioctl(fd, HOST_TCGETS, (uintptr_t)tio))
17                 return -1;
18         return 0;
19 }
20
21 int
22 host_tcsetattr(int fd, int act, const struct host_termios *tio)
23 {
24         if (act < 0 || act > 2) {
25 //              errno = EINVAL; /* XXX ?? */
26                 return -1;
27         }
28         return host_ioctl(fd, HOST_TCSETS+act, (uintptr_t)tio);
29 }
30
31 void
32 host_cfmakeraw(struct host_termios *t)
33 {
34         t->c_iflag &= ~(HOST_IGNBRK | HOST_BRKINT | HOST_PARMRK | HOST_ISTRIP |
35             HOST_INLCR | HOST_IGNCR | HOST_ICRNL | HOST_IXON);
36         t->c_oflag &= ~HOST_OPOST;
37         t->c_lflag &= ~(HOST_ECHO | HOST_ECHONL | HOST_ICANON | HOST_ISIG |
38             HOST_IEXTEN);
39         t->c_cflag &= ~(HOST_CSIZE | HOST_PARENB);
40         t->c_cflag |= HOST_CS8;
41         t->c_cc[HOST_VMIN] = 1;
42         t->c_cc[HOST_VTIME] = 0;
43 }
44
45 int host_cfsetospeed(struct host_termios *tio, host_speed_t speed)
46 {
47         if (speed & ~HOST_CBAUD) {
48 //              errno = EINVAL; /* XXX ? */
49                 return -1;
50         }
51         tio->c_cflag &= ~HOST_CBAUD;
52         tio->c_cflag |= speed;
53         return 0;
54 }
55
56 int host_cfsetispeed(struct host_termios *tio, host_speed_t speed)
57 {
58         return speed ? host_cfsetospeed(tio, speed) : 0;
59 }
60
61 int
62 host_cfsetspeed(struct host_termios *tio, host_speed_t speed)
63 {
64         return host_cfsetospeed(tio, speed);    /* weak alias in musl */
65 }
66