Release 4.14 arch/um/drivers/tty.c
/*
* Copyright (C) 2001 - 2007 Jeff Dike (jdike@{linux.intel,addtoit}.com)
* Licensed under the GPL
*/
#include <errno.h>
#include <fcntl.h>
#include <termios.h>
#include "chan_user.h"
#include <os.h>
#include <um_malloc.h>
struct tty_chan {
char *dev;
int raw;
struct termios tt;
};
static void *tty_chan_init(char *str, int device, const struct chan_opts *opts)
{
struct tty_chan *data;
if (*str != ':') {
printk(UM_KERN_ERR "tty_init : channel type 'tty' must specify "
"a device\n");
return NULL;
}
str++;
data = uml_kmalloc(sizeof(*data), UM_GFP_KERNEL);
if (data == NULL)
return NULL;
*data = ((struct tty_chan) { .dev = str,
.raw = opts->raw });
return data;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Jeff Dike | 91 | 95.79% | 7 | 87.50% |
Paolo 'Blaisorblade' Giarrusso | 4 | 4.21% | 1 | 12.50% |
Total | 95 | 100.00% | 8 | 100.00% |
static int tty_open(int input, int output, int primary, void *d,
char **dev_out)
{
struct tty_chan *data = d;
int fd, err, mode = 0;
if (input && output)
mode = O_RDWR;
else if (input)
mode = O_RDONLY;
else if (output)
mode = O_WRONLY;
fd = open(data->dev, mode);
if (fd < 0)
return -errno;
if (data->raw) {
CATCH_EINTR(err = tcgetattr(fd, &data->tt));
if (err)
return err;
err = raw(fd);
if (err)
return err;
}
*dev_out = data->dev;
return fd;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Jeff Dike | 143 | 100.00% | 5 | 100.00% |
Total | 143 | 100.00% | 5 | 100.00% |
const struct chan_ops tty_ops = {
.type = "tty",
.init = tty_chan_init,
.open = tty_open,
.close = generic_close,
.read = generic_read,
.write = generic_write,
.console_write = generic_console_write,
.window_size = generic_window_size,
.free = generic_free,
.winch = 0,
};
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Jeff Dike | 323 | 97.88% | 9 | 75.00% |
Paolo 'Blaisorblade' Giarrusso | 5 | 1.52% | 2 | 16.67% |
Al Viro | 2 | 0.61% | 1 | 8.33% |
Total | 330 | 100.00% | 12 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.