linux/arch/um/include/shared/line.h
<<
>>
Prefs
   1/* 
   2 * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
   3 * Licensed under the GPL
   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 one modifiable field in this - .mc.list */
  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 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};
  32
  33struct line {
  34        struct tty_struct *tty;
  35        spinlock_t count_lock;
  36        int valid;
  37
  38        char *init_str;
  39        int init_pri;
  40        struct list_head chan_list;
  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        int have_irq;
  58};
  59
  60#define LINE_INIT(str, d) \
  61        { .count_lock = __SPIN_LOCK_UNLOCKED((str).count_lock), \
  62          .init_str =   str,    \
  63          .init_pri =   INIT_STATIC, \
  64          .valid =      1, \
  65          .lock =       __SPIN_LOCK_UNLOCKED((str).lock), \
  66          .driver =     d }
  67
  68extern void line_close(struct tty_struct *tty, struct file * filp);
  69extern int line_open(struct line *lines, struct tty_struct *tty);
  70extern int line_setup(struct line *lines, unsigned int sizeof_lines,
  71                      char *init, char **error_out);
  72extern int line_write(struct tty_struct *tty, const unsigned char *buf,
  73                      int len);
  74extern int line_put_char(struct tty_struct *tty, unsigned char ch);
  75extern void line_set_termios(struct tty_struct *tty, struct ktermios * old);
  76extern int line_chars_in_buffer(struct tty_struct *tty);
  77extern void line_flush_buffer(struct tty_struct *tty);
  78extern void line_flush_chars(struct tty_struct *tty);
  79extern int line_write_room(struct tty_struct *tty);
  80extern int line_ioctl(struct tty_struct *tty, struct file * file,
  81                      unsigned int cmd, unsigned long arg);
  82extern void line_throttle(struct tty_struct *tty);
  83extern void line_unthrottle(struct tty_struct *tty);
  84
  85extern char *add_xterm_umid(char *base);
  86extern int line_setup_irq(int fd, int input, int output, struct line *line,
  87                          void *data);
  88extern void line_close_chan(struct line *line);
  89extern struct tty_driver *register_lines(struct line_driver *line_driver,
  90                                         const struct tty_operations *driver,
  91                                         struct line *lines, int nlines);
  92extern void lines_init(struct line *lines, int nlines, struct chan_opts *opts);
  93extern void close_lines(struct line *lines, int nlines);
  94
  95extern int line_config(struct line *lines, unsigned int sizeof_lines,
  96                       char *str, const struct chan_opts *opts,
  97                       char **error_out);
  98extern int line_id(char **str, int *start_out, int *end_out);
  99extern int line_remove(struct line *lines, unsigned int sizeof_lines, int n,
 100                       char **error_out);
 101extern int line_get_config(char *dev, struct line *lines,
 102                           unsigned int sizeof_lines, char *str,
 103                           int size, char **error_out);
 104
 105#endif
 106