Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 1
#ifndef _LINUX_TTY_LDISC_H
2
#define _LINUX_TTY_LDISC_H
3
 
4
/*
5
 * This structure defines the interface between the tty line discipline
6
 * implementation and the tty routines.  The following routines can be
7
 * defined; unless noted otherwise, they are optional, and can be
8
 * filled in with a null pointer.
9
 *
10
 * int  (*open)(struct tty_struct *);
11
 *
12
 *      This function is called when the line discipline is associated
13
 *      with the tty.  The line discipline can use this as an
14
 *      opportunity to initialize any state needed by the ldisc routines.
15
 *
16
 * void (*close)(struct tty_struct *);
17
 *
18
 *      This function is called when the line discipline is being
19
 *      shutdown, either because the tty is being closed or because
20
 *      the tty is being changed to use a new line discipline
21
 *
22
 * void (*flush_buffer)(struct tty_struct *tty);
23
 *
24
 *      This function instructs the line discipline to clear its
25
 *      buffers of any input characters it may have queued to be
26
 *      delivered to the user mode process.
27
 *
28
 * ssize_t (*chars_in_buffer)(struct tty_struct *tty);
29
 *
30
 *      This function returns the number of input characters the line
31
 *      discipline may have queued up to be delivered to the user mode
32
 *      process.
33
 *
34
 * ssize_t (*read)(struct tty_struct * tty, struct file * file,
35
 *                 unsigned char * buf, size_t nr);
36
 *
37
 *      This function is called when the user requests to read from
38
 *      the tty.  The line discipline will return whatever characters
39
 *      it has buffered up for the user.  If this function is not
40
 *      defined, the user will receive an EIO error.
41
 *
42
 * ssize_t (*write)(struct tty_struct * tty, struct file * file,
43
 *                  const unsigned char * buf, size_t nr);
44
 *
45
 *      This function is called when the user requests to write to the
46
 *      tty.  The line discipline will deliver the characters to the
47
 *      low-level tty device for transmission, optionally performing
48
 *      some processing on the characters first.  If this function is
49
 *      not defined, the user will receive an EIO error.
50
 *
51
 * int  (*ioctl)(struct tty_struct * tty, struct file * file,
52
 *               unsigned int cmd, unsigned long arg);
53
 *
54
 *      This function is called when the user requests an ioctl which
55
 *      is not handled by the tty layer or the low-level tty driver.
56
 *      It is intended for ioctls which affect line discpline
57
 *      operation.  Note that the search order for ioctls is (1) tty
58
 *      layer, (2) tty low-level driver, (3) line discpline.  So a
59
 *      low-level driver can "grab" an ioctl request before the line
60
 *      discpline has a chance to see it.
61
 *
62
 * void (*set_termios)(struct tty_struct *tty, struct termios * old);
63
 *
64
 *      This function notifies the line discpline that a change has
65
 *      been made to the termios structure.
66
 *
67
 * int  (*poll)(struct tty_struct * tty, struct file * file,
68
 *                poll_table *wait);
69
 *
70
 *      This function is called when a user attempts to select/poll on a
71
 *      tty device.  It is solely the responsibility of the line
72
 *      discipline to handle poll requests.
73
 *
74
 * void (*receive_buf)(struct tty_struct *, const unsigned char *cp,
75
 *                     char *fp, int count);
76
 *
77
 *      This function is called by the low-level tty driver to send
78
 *      characters received by the hardware to the line discpline for
79
 *      processing.  <cp> is a pointer to the buffer of input
80
 *      character received by the device.  <fp> is a pointer to a
81
 *      pointer of flag bytes which indicate whether a character was
82
 *      received with a parity error, etc.
83
 *
84
 * int  (*receive_room)(struct tty_struct *);
85
 *
86
 *      This function is called by the low-level tty driver to
87
 *      determine how many characters the line discpline can accept.
88
 *      The low-level driver must not send more characters than was
89
 *      indicated by receive_room, or the line discpline may drop
90
 *      those characters.
91
 *
92
 * void (*write_wakeup)(struct tty_struct *);
93
 *
94
 *      This function is called by the low-level tty driver to signal
95
 *      that line discpline should try to send more characters to the
96
 *      low-level driver for transmission.  If the line discpline does
97
 *      not have any more data to send, it can just return.
98
 */
99
 
100
#include <linux/fs.h>
101
#include <linux/wait.h>
102
 
103
struct tty_ldisc {
104
        int     magic;
105
        char    *name;
106
        int     num;
107
        int     flags;
108
 
109
        /*
110
         * The following routines are called from above.
111
         */
112
        int     (*open)(struct tty_struct *);
113
        void    (*close)(struct tty_struct *);
114
        void    (*flush_buffer)(struct tty_struct *tty);
115
        ssize_t (*chars_in_buffer)(struct tty_struct *tty);
116
        ssize_t (*read)(struct tty_struct * tty, struct file * file,
117
                        unsigned char * buf, size_t nr);
118
        ssize_t (*write)(struct tty_struct * tty, struct file * file,
119
                         const unsigned char * buf, size_t nr);
120
        int     (*ioctl)(struct tty_struct * tty, struct file * file,
121
                         unsigned int cmd, unsigned long arg);
122
        void    (*set_termios)(struct tty_struct *tty, struct termios * old);
123
        unsigned int (*poll)(struct tty_struct *, struct file *,
124
                             struct poll_table_struct *);
125
 
126
        /*
127
         * The following routines are called from below.
128
         */
129
        void    (*receive_buf)(struct tty_struct *, const unsigned char *cp,
130
                               char *fp, int count);
131
        int     (*receive_room)(struct tty_struct *);
132
        void    (*write_wakeup)(struct tty_struct *);
133
 
134
        struct  module *owner;
135
};
136
 
137
#define TTY_LDISC_MAGIC 0x5403
138
 
139
#define LDISC_FLAG_DEFINED      0x00000001
140
 
141
#define MODULE_ALIAS_LDISC(ldisc) \
142
        MODULE_ALIAS("tty-ldisc-" __stringify(ldisc))
143
 
144
#endif /* _LINUX_TTY_LDISC_H */