at v2.6.17 110 lines 3.2 kB view raw
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 "chan_user.h" 15#include "mconsole_kern.h" 16 17struct line_driver { 18 char *name; 19 char *device_name; 20 char *devfs_name; 21 short major; 22 short minor_start; 23 short type; 24 short subtype; 25 int read_irq; 26 char *read_irq_name; 27 int write_irq; 28 char *write_irq_name; 29 char *symlink_from; 30 char *symlink_to; 31 struct mc_device mc; 32}; 33 34struct line { 35 struct tty_struct *tty; 36 char *init_str; 37 int init_pri; 38 struct list_head chan_list; 39 int valid; 40 int count; 41 int throttled; 42 /*This lock is actually, mostly, local to*/ 43 spinlock_t lock; 44 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 work_struct task; 56 struct line_driver *driver; 57 int have_irq; 58}; 59 60#define LINE_INIT(str, d) \ 61 { .init_str = str, \ 62 .init_pri = INIT_STATIC, \ 63 .valid = 1, \ 64 .lock = SPIN_LOCK_UNLOCKED, \ 65 .driver = d } 66 67struct lines { 68 int num; 69}; 70 71#define LINES_INIT(n) { .num = n } 72 73extern void line_close(struct tty_struct *tty, struct file * filp); 74extern int line_open(struct line *lines, struct tty_struct *tty); 75extern int line_setup(struct line *lines, unsigned int sizeof_lines, 76 char *init); 77extern int line_write(struct tty_struct *tty, const unsigned char *buf, 78 int len); 79extern void line_put_char(struct tty_struct *tty, unsigned char ch); 80extern void line_set_termios(struct tty_struct *tty, struct termios * old); 81extern int line_chars_in_buffer(struct tty_struct *tty); 82extern void line_flush_buffer(struct tty_struct *tty); 83extern void line_flush_chars(struct tty_struct *tty); 84extern int line_write_room(struct tty_struct *tty); 85extern int line_ioctl(struct tty_struct *tty, struct file * file, 86 unsigned int cmd, unsigned long arg); 87extern void line_throttle(struct tty_struct *tty); 88extern void line_unthrottle(struct tty_struct *tty); 89 90extern char *add_xterm_umid(char *base); 91extern int line_setup_irq(int fd, int input, int output, struct line *line, 92 void *data); 93extern void line_close_chan(struct line *line); 94extern struct tty_driver * line_register_devfs(struct lines *set, 95 struct line_driver *line_driver, 96 struct tty_operations *driver, 97 struct line *lines, 98 int nlines); 99extern void lines_init(struct line *lines, int nlines, struct chan_opts *opts); 100extern void close_lines(struct line *lines, int nlines); 101 102extern int line_config(struct line *lines, unsigned int sizeof_lines, 103 char *str, struct chan_opts *opts); 104extern int line_id(char **str, int *start_out, int *end_out); 105extern int line_remove(struct line *lines, unsigned int sizeof_lines, int n); 106extern int line_get_config(char *dev, struct line *lines, 107 unsigned int sizeof_lines, char *str, 108 int size, char **error_out); 109 110#endif