root/arch/um/drivers/line.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 */
  19 struct 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 int read_irq;
  27         const char *read_irq_name;
  28         const int write_irq;
  29         const char *write_irq_name;
  30         struct mc_device mc;
  31         struct tty_driver *driver;
  32 };
  33 
  34 struct line {
  35         struct tty_port port;
  36         int valid;
  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 
  59 extern void line_close(struct tty_struct *tty, struct file * filp);
  60 extern int line_open(struct tty_struct *tty, struct file *filp);
  61 extern int line_install(struct tty_driver *driver, struct tty_struct *tty,
  62         struct line *line);
  63 extern void line_cleanup(struct tty_struct *tty);
  64 extern void line_hangup(struct tty_struct *tty);
  65 extern int line_setup(char **conf, unsigned nlines, char **def,
  66                       char *init, char *name);
  67 extern int line_write(struct tty_struct *tty, const unsigned char *buf,
  68                       int len);
  69 extern int line_put_char(struct tty_struct *tty, unsigned char ch);
  70 extern void line_set_termios(struct tty_struct *tty, struct ktermios * old);
  71 extern int line_chars_in_buffer(struct tty_struct *tty);
  72 extern void line_flush_buffer(struct tty_struct *tty);
  73 extern void line_flush_chars(struct tty_struct *tty);
  74 extern int line_write_room(struct tty_struct *tty);
  75 extern void line_throttle(struct tty_struct *tty);
  76 extern void line_unthrottle(struct tty_struct *tty);
  77 
  78 extern char *add_xterm_umid(char *base);
  79 extern int line_setup_irq(int fd, int input, int output, struct line *line,
  80                           void *data);
  81 extern void line_close_chan(struct line *line);
  82 extern int register_lines(struct line_driver *line_driver,
  83                           const struct tty_operations *driver,
  84                           struct line *lines, int nlines);
  85 extern int setup_one_line(struct line *lines, int n, char *init,
  86                           const struct chan_opts *opts, char **error_out);
  87 extern void close_lines(struct line *lines, int nlines);
  88 
  89 extern int line_config(struct line *lines, unsigned int sizeof_lines,
  90                        char *str, const struct chan_opts *opts,
  91                        char **error_out);
  92 extern int line_id(char **str, int *start_out, int *end_out);
  93 extern int line_remove(struct line *lines, unsigned int sizeof_lines, int n,
  94                        char **error_out);
  95 extern int line_get_config(char *dev, struct line *lines,
  96                            unsigned int sizeof_lines, char *str,
  97                            int size, char **error_out);
  98 
  99 #endif

/* [<][>][^][v][top][bottom][index][help] */