line.h (3083B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com) 4 */ 5 6#ifndef __LINE_H__ 7#define __LINE_H__ 8 9#include <linux/list.h> 10#include <linux/workqueue.h> 11#include <linux/tty.h> 12#include <linux/interrupt.h> 13#include <linux/spinlock.h> 14#include <linux/mutex.h> 15#include "chan_user.h" 16#include "mconsole_kern.h" 17 18/* There's only two modifiable fields in this - .mc.list and .driver */ 19struct line_driver { 20 const char *name; 21 const char *device_name; 22 const short major; 23 const short minor_start; 24 const short type; 25 const short subtype; 26 const char *read_irq_name; 27 const char *write_irq_name; 28 struct mc_device mc; 29 struct tty_driver *driver; 30}; 31 32struct line { 33 struct tty_port port; 34 int valid; 35 36 int read_irq, write_irq; 37 38 char *init_str; 39 struct list_head chan_list; 40 struct chan *chan_in, *chan_out; 41 42 /*This lock is actually, mostly, local to*/ 43 spinlock_t lock; 44 int throttled; 45 /* Yes, this is a real circular buffer. 46 * XXX: And this should become a struct kfifo! 47 * 48 * buffer points to a buffer allocated on demand, of length 49 * LINE_BUFSIZE, head to the start of the ring, tail to the end.*/ 50 char *buffer; 51 char *head; 52 char *tail; 53 54 int sigio; 55 struct delayed_work task; 56 const struct line_driver *driver; 57}; 58 59extern void line_close(struct tty_struct *tty, struct file * filp); 60extern int line_open(struct tty_struct *tty, struct file *filp); 61extern int line_install(struct tty_driver *driver, struct tty_struct *tty, 62 struct line *line); 63extern void line_cleanup(struct tty_struct *tty); 64extern void line_hangup(struct tty_struct *tty); 65extern int line_setup(char **conf, unsigned nlines, char **def, 66 char *init, char *name); 67extern int line_write(struct tty_struct *tty, const unsigned char *buf, 68 int len); 69extern unsigned int line_chars_in_buffer(struct tty_struct *tty); 70extern void line_flush_buffer(struct tty_struct *tty); 71extern void line_flush_chars(struct tty_struct *tty); 72extern unsigned int line_write_room(struct tty_struct *tty); 73extern void line_throttle(struct tty_struct *tty); 74extern void line_unthrottle(struct tty_struct *tty); 75 76extern char *add_xterm_umid(char *base); 77extern int line_setup_irq(int fd, int input, int output, struct line *line, 78 void *data); 79extern void line_close_chan(struct line *line); 80extern int register_lines(struct line_driver *line_driver, 81 const struct tty_operations *driver, 82 struct line *lines, int nlines); 83extern int setup_one_line(struct line *lines, int n, char *init, 84 const struct chan_opts *opts, char **error_out); 85extern void close_lines(struct line *lines, int nlines); 86 87extern int line_config(struct line *lines, unsigned int sizeof_lines, 88 char *str, const struct chan_opts *opts, 89 char **error_out); 90extern int line_id(char **str, int *start_out, int *end_out); 91extern int line_remove(struct line *lines, unsigned int sizeof_lines, int n, 92 char **error_out); 93extern int line_get_config(char *dev, struct line *lines, 94 unsigned int sizeof_lines, char *str, 95 int size, char **error_out); 96 97#endif