at v2.6.14 109 lines 3.1 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 char *init_str; 36 int init_pri; 37 struct list_head chan_list; 38 int valid; 39 int count; 40 /*This lock is actually, mostly, local to*/ 41 spinlock_t lock; 42 43 /* Yes, this is a real circular buffer. 44 * XXX: And this should become a struct kfifo! 45 * 46 * buffer points to a buffer allocated on demand, of length 47 * LINE_BUFSIZE, head to the start of the ring, tail to the end.*/ 48 char *buffer; 49 char *head; 50 char *tail; 51 52 int sigio; 53 struct work_struct task; 54 struct line_driver *driver; 55 int have_irq; 56}; 57 58#define LINE_INIT(str, d) \ 59 { init_str : str, \ 60 init_pri : INIT_STATIC, \ 61 chan_list : { }, \ 62 valid : 1, \ 63 buffer : NULL, \ 64 head : NULL, \ 65 tail : NULL, \ 66 sigio : 0, \ 67 driver : d, \ 68 have_irq : 0 } 69 70struct lines { 71 int num; 72}; 73 74#define LINES_INIT(n) { num : n } 75 76extern void line_close(struct tty_struct *tty, struct file * filp); 77extern int line_open(struct line *lines, struct tty_struct *tty, 78 struct chan_opts *opts); 79extern int line_setup(struct line *lines, unsigned int sizeof_lines, char *init, 80 int all_allowed); 81extern int line_write(struct tty_struct *tty, const unsigned char *buf, int len); 82extern void line_put_char(struct tty_struct *tty, unsigned char ch); 83extern void line_set_termios(struct tty_struct *tty, struct termios * old); 84extern int line_chars_in_buffer(struct tty_struct *tty); 85extern void line_flush_buffer(struct tty_struct *tty); 86extern void line_flush_chars(struct tty_struct *tty); 87extern int line_write_room(struct tty_struct *tty); 88extern int line_ioctl(struct tty_struct *tty, struct file * file, 89 unsigned int cmd, unsigned long arg); 90 91extern char *add_xterm_umid(char *base); 92extern int line_setup_irq(int fd, int input, int output, struct tty_struct *tty); 93extern void line_close_chan(struct line *line); 94extern void line_disable(struct tty_struct *tty, int current_irq); 95extern struct tty_driver * line_register_devfs(struct lines *set, 96 struct line_driver *line_driver, 97 struct tty_operations *driver, 98 struct line *lines, 99 int nlines); 100extern void lines_init(struct line *lines, int nlines); 101extern void close_lines(struct line *lines, int nlines); 102 103extern int line_config(struct line *lines, unsigned int sizeof_lines, char *str); 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, unsigned int sizeof_lines, char *str, 107 int size, char **error_out); 108 109#endif