home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / tty_ldisc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  5.2 KB  |  146 lines

  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.  * void    (*write_wakeup)(struct tty_struct *);
  85.  *
  86.  *     This function is called by the low-level tty driver to signal
  87.  *     that line discpline should try to send more characters to the
  88.  *     low-level driver for transmission.  If the line discpline does
  89.  *     not have any more data to send, it can just return.
  90.  *
  91.  * int (*hangup)(struct tty_struct *)
  92.  *
  93.  *    Called on a hangup. Tells the discipline that it should
  94.  *    cease I/O to the tty driver. Can sleep. The driver should
  95.  *    seek to perform this action quickly but should wait until
  96.  *    any pending driver I/O is completed.
  97.  */
  98.  
  99. #include <linux/fs.h>
  100. #include <linux/wait.h>
  101.  
  102. struct tty_ldisc {
  103.     int    magic;
  104.     char    *name;
  105.     int    num;
  106.     int    flags;
  107.     
  108.     /*
  109.      * The following routines are called from above.
  110.      */
  111.     int    (*open)(struct tty_struct *);
  112.     void    (*close)(struct tty_struct *);
  113.     void    (*flush_buffer)(struct tty_struct *tty);
  114.     ssize_t    (*chars_in_buffer)(struct tty_struct *tty);
  115.     ssize_t    (*read)(struct tty_struct * tty, struct file * file,
  116.             unsigned char __user * buf, size_t nr);
  117.     ssize_t    (*write)(struct tty_struct * tty, struct file * file,
  118.              const unsigned char * buf, size_t nr);    
  119.     int    (*ioctl)(struct tty_struct * tty, struct file * file,
  120.              unsigned int cmd, unsigned long arg);
  121.     void    (*set_termios)(struct tty_struct *tty, struct termios * old);
  122.     unsigned int (*poll)(struct tty_struct *, struct file *,
  123.                  struct poll_table_struct *);
  124.     int    (*hangup)(struct tty_struct *tty);
  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.     void    (*write_wakeup)(struct tty_struct *);
  132.  
  133.     struct  module *owner;
  134.     
  135.     int refcount;
  136. };
  137.  
  138. #define TTY_LDISC_MAGIC    0x5403
  139.  
  140. #define LDISC_FLAG_DEFINED    0x00000001
  141.  
  142. #define MODULE_ALIAS_LDISC(ldisc) \
  143.     MODULE_ALIAS("tty-ldisc-" __stringify(ldisc))
  144.  
  145. #endif /* _LINUX_TTY_LDISC_H */
  146.