tty: Introduce a tty_port common structure
Every tty driver has its own concept of a port structure and because they all differ we cannot extract commonality. Begin fixing this by creating a structure drivers can elect to use so that over time we can push fields into this and create commonality and then introduce common methods. Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
此提交包含在:
@@ -2088,6 +2088,40 @@ ssize_t redirected_tty_write(struct file *file, const char __user *buf,
|
||||
return tty_write(file, buf, count, ppos);
|
||||
}
|
||||
|
||||
void tty_port_init(struct tty_port *port)
|
||||
{
|
||||
memset(port, 0, sizeof(*port));
|
||||
init_waitqueue_head(&port->open_wait);
|
||||
init_waitqueue_head(&port->close_wait);
|
||||
mutex_init(&port->mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(tty_port_init);
|
||||
|
||||
int tty_port_alloc_xmit_buf(struct tty_port *port)
|
||||
{
|
||||
/* We may sleep in get_zeroed_page() */
|
||||
mutex_lock(&port->mutex);
|
||||
if (port->xmit_buf == NULL)
|
||||
port->xmit_buf = (unsigned char *)get_zeroed_page(GFP_KERNEL);
|
||||
mutex_unlock(&port->mutex);
|
||||
if (port->xmit_buf == NULL)
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(tty_port_alloc_xmit_buf);
|
||||
|
||||
void tty_port_free_xmit_buf(struct tty_port *port)
|
||||
{
|
||||
mutex_lock(&port->mutex);
|
||||
if (port->xmit_buf != NULL) {
|
||||
free_page((unsigned long)port->xmit_buf);
|
||||
port->xmit_buf = NULL;
|
||||
}
|
||||
mutex_unlock(&port->mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(tty_port_free_xmit_buf);
|
||||
|
||||
|
||||
static char ptychar[] = "pqrstuvwxyzabcde";
|
||||
|
||||
/**
|
||||
|
新增問題並參考
封鎖使用者