Commit adca1244 authored by Dmitry Safonov's avatar Dmitry Safonov Committed by Pavel Emelyanov

tty: add serial driver & popular serial majors

Fixes restoring on AMBA serial line. That is /dev/ttyAMA0,
which is the default serial port to use on qemu-system-aarch64.
(at least in those articles, which I meet it's in boot cmdline)
Also should add support for C/R /dev/ttyUSB*

One may check major numbers on
https://www.kernel.org/doc/Documentation/devices.txt
Also by grepping on kernel repository.

Cc: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarDmitry Safonov <dsafonov@virtuozzo.com>
Acked-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent 9191ce42
......@@ -9,6 +9,10 @@
/* Kernel's limit */
#define TERMIOS_NCC 19
/* Popular serial console's majors, which not defined in <linux/major.h> */
#define USB_SERIAL_MAJOR 188
#define LOW_DENSE_SERIAL_MAJOR 204
extern const struct fdtype_ops tty_dump_ops;
struct tty_driver;
......
......@@ -210,6 +210,12 @@ static struct tty_driver ext_driver = {
.open = open_ext_tty,
};
static struct tty_driver serial_driver = {
.type = TTY_TYPE__SERIAL,
.name = "serial",
.open = open_simple_tty,
};
static int pts_fd_get_index(int fd, const struct fd_parms *p)
{
int index;
......@@ -268,6 +274,10 @@ struct tty_driver *get_tty_driver(dev_t rdev, dev_t dev)
* of kernel).
*/
return &vt_driver;
/* Other minors points to UART serial ports */
case USB_SERIAL_MAJOR:
case LOW_DENSE_SERIAL_MAJOR:
return &serial_driver;
case UNIX98_PTY_MASTER_MAJOR ... (UNIX98_PTY_MASTER_MAJOR + UNIX98_PTY_MAJOR_COUNT - 1):
return &ptm_driver;
case UNIX98_PTY_SLAVE_MAJOR:
......@@ -668,6 +678,7 @@ static bool tty_is_master(struct tty_info *info)
case TTY_TYPE__CONSOLE:
case TTY_TYPE__CTTY:
return true;
case TTY_TYPE__SERIAL:
case TTY_TYPE__VT:
if (!opts.shell_job)
return true;
......@@ -1368,6 +1379,7 @@ static int collect_one_tty_info_entry(void *obj, ProtobufCMessage *msg, struct c
break;
case TTY_TYPE__CTTY:
case TTY_TYPE__CONSOLE:
case TTY_TYPE__SERIAL:
case TTY_TYPE__VT:
case TTY_TYPE__EXT_TTY:
if (info->tie->pty) {
......
......@@ -31,6 +31,7 @@ enum TtyType {
VT = 3;
CTTY = 4;
EXT_TTY = 5;
SERIAL = 6;
}
message tty_info_entry {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment