Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/stand/kboot/libkboot/termios.c
34859 views
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
67
68