line.h 3.1 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8
/* 
 * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
 * Licensed under the GPL
 */

#ifndef __LINE_H__
#define __LINE_H__

9 10 11 12 13 14
#include <linux/list.h>
#include <linux/workqueue.h>
#include <linux/tty.h>
#include <linux/interrupt.h>
#include <linux/spinlock.h>
#include <linux/mutex.h>
L
Linus Torvalds 已提交
15 16 17
#include "chan_user.h"
#include "mconsole_kern.h"

18
/* There's only two modifiable fields in this - .mc.list and .driver */
L
Linus Torvalds 已提交
19
struct line_driver {
20 21 22 23 24 25 26 27 28 29
	const char *name;
	const char *device_name;
	const short major;
	const short minor_start;
	const short type;
	const short subtype;
	const int read_irq;
	const char *read_irq_name;
	const int write_irq;
	const char *write_irq_name;
L
Linus Torvalds 已提交
30
	struct mc_device mc;
31
	struct tty_driver *driver;
L
Linus Torvalds 已提交
32 33 34
};

struct line {
J
Jiri Slaby 已提交
35
	struct tty_port port;
J
Jeff Dike 已提交
36 37
	int valid;

L
Linus Torvalds 已提交
38 39
	char *init_str;
	struct list_head chan_list;
A
Al Viro 已提交
40
	struct chan *chan_in, *chan_out;
J
Jeff Dike 已提交
41

42 43
	/*This lock is actually, mostly, local to*/
	spinlock_t lock;
J
Jeff Dike 已提交
44
	int throttled;
45 46 47 48 49
	/* Yes, this is a real circular buffer.
	 * XXX: And this should become a struct kfifo!
	 *
	 * buffer points to a buffer allocated on demand, of length
	 * LINE_BUFSIZE, head to the start of the ring, tail to the end.*/
L
Linus Torvalds 已提交
50 51 52
	char *buffer;
	char *head;
	char *tail;
53

L
Linus Torvalds 已提交
54
	int sigio;
A
Andrew Morton 已提交
55
	struct delayed_work task;
J
Jeff Dike 已提交
56
	const struct line_driver *driver;
L
Linus Torvalds 已提交
57 58 59
};

extern void line_close(struct tty_struct *tty, struct file * filp);
R
Richard Weinberger 已提交
60 61 62 63 64
extern int line_open(struct tty_struct *tty, struct file *filp);
extern int line_install(struct tty_driver *driver, struct tty_struct *tty,
	struct line *line);
extern void line_cleanup(struct tty_struct *tty);
extern void line_hangup(struct tty_struct *tty);
A
Al Viro 已提交
65 66
extern int line_setup(char **conf, unsigned nlines, char **def,
		      char *init, char *name);
J
Jeff Dike 已提交
67 68
extern int line_write(struct tty_struct *tty, const unsigned char *buf,
		      int len);
69
extern int line_put_char(struct tty_struct *tty, unsigned char ch);
A
Alan Cox 已提交
70
extern void line_set_termios(struct tty_struct *tty, struct ktermios * old);
L
Linus Torvalds 已提交
71
extern int line_chars_in_buffer(struct tty_struct *tty);
72 73
extern void line_flush_buffer(struct tty_struct *tty);
extern void line_flush_chars(struct tty_struct *tty);
L
Linus Torvalds 已提交
74
extern int line_write_room(struct tty_struct *tty);
75 76
extern void line_throttle(struct tty_struct *tty);
extern void line_unthrottle(struct tty_struct *tty);
77

L
Linus Torvalds 已提交
78
extern char *add_xterm_umid(char *base);
79 80
extern int line_setup_irq(int fd, int input, int output, struct line *line,
			  void *data);
L
Linus Torvalds 已提交
81
extern void line_close_chan(struct line *line);
82 83 84
extern int register_lines(struct line_driver *line_driver,
			  const struct tty_operations *driver,
			  struct line *lines, int nlines);
A
Al Viro 已提交
85 86
extern int setup_one_line(struct line *lines, int n, char *init,
			  const struct chan_opts *opts, char **error_out);
L
Linus Torvalds 已提交
87
extern void close_lines(struct line *lines, int nlines);
88

J
Jeff Dike 已提交
89
extern int line_config(struct line *lines, unsigned int sizeof_lines,
90 91
		       char *str, const struct chan_opts *opts,
		       char **error_out);
J
Jeff Dike 已提交
92
extern int line_id(char **str, int *start_out, int *end_out);
93 94
extern int line_remove(struct line *lines, unsigned int sizeof_lines, int n,
		       char **error_out);
J
Jeff Dike 已提交
95 96
extern int line_get_config(char *dev, struct line *lines,
			   unsigned int sizeof_lines, char *str,
L
Linus Torvalds 已提交
97 98 99
			   int size, char **error_out);

#endif