home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / tty_ldisc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  5.5 KB  |  158 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.  * long    (*compat_ioctl)(struct tty_struct * tty, struct file * file,
  63.  *                 unsigned int cmd, unsigned long arg);
  64.  *
  65.  *      Process ioctl calls from 32-bit process on 64-bit system
  66.  *
  67.  * void    (*set_termios)(struct tty_struct *tty, struct ktermios * old);
  68.  *
  69.  *     This function notifies the line discpline that a change has
  70.  *     been made to the termios structure.
  71.  * 
  72.  * int    (*poll)(struct tty_struct * tty, struct file * file,
  73.  *           poll_table *wait);
  74.  *
  75.  *     This function is called when a user attempts to select/poll on a
  76.  *     tty device.  It is solely the responsibility of the line
  77.  *     discipline to handle poll requests.
  78.  *
  79.  * void    (*receive_buf)(struct tty_struct *, const unsigned char *cp,
  80.  *                char *fp, int count);
  81.  *
  82.  *     This function is called by the low-level tty driver to send
  83.  *     characters received by the hardware to the line discpline for
  84.  *     processing.  <cp> is a pointer to the buffer of input
  85.  *     character received by the device.  <fp> is a pointer to a
  86.  *     pointer of flag bytes which indicate whether a character was
  87.  *     received with a parity error, etc.
  88.  * 
  89.  * void    (*write_wakeup)(struct tty_struct *);
  90.  *
  91.  *     This function is called by the low-level tty driver to signal
  92.  *     that line discpline should try to send more characters to the
  93.  *     low-level driver for transmission.  If the line discpline does
  94.  *     not have any more data to send, it can just return.
  95.  *
  96.  * int (*hangup)(struct tty_struct *)
  97.  *
  98.  *    Called on a hangup. Tells the discipline that it should
  99.  *    cease I/O to the tty driver. Can sleep. The driver should
  100.  *    seek to perform this action quickly but should wait until
  101.  *    any pending driver I/O is completed.
  102.  */
  103.  
  104. #include <linux/fs.h>
  105. #include <linux/wait.h>
  106.  
  107. struct tty_ldisc_ops {
  108.     int    magic;
  109.     char    *name;
  110.     int    num;
  111.     int    flags;
  112.     
  113.     /*
  114.      * The following routines are called from above.
  115.      */
  116.     int    (*open)(struct tty_struct *);
  117.     void    (*close)(struct tty_struct *);
  118.     void    (*flush_buffer)(struct tty_struct *tty);
  119.     ssize_t    (*chars_in_buffer)(struct tty_struct *tty);
  120.     ssize_t    (*read)(struct tty_struct * tty, struct file * file,
  121.             unsigned char __user * buf, size_t nr);
  122.     ssize_t    (*write)(struct tty_struct * tty, struct file * file,
  123.              const unsigned char * buf, size_t nr);    
  124.     int    (*ioctl)(struct tty_struct * tty, struct file * file,
  125.              unsigned int cmd, unsigned long arg);
  126.     long    (*compat_ioctl)(struct tty_struct * tty, struct file * file,
  127.                 unsigned int cmd, unsigned long arg);
  128.     void    (*set_termios)(struct tty_struct *tty, struct ktermios * old);
  129.     unsigned int (*poll)(struct tty_struct *, struct file *,
  130.                  struct poll_table_struct *);
  131.     int    (*hangup)(struct tty_struct *tty);
  132.     
  133.     /*
  134.      * The following routines are called from below.
  135.      */
  136.     void    (*receive_buf)(struct tty_struct *, const unsigned char *cp,
  137.                    char *fp, int count);
  138.     void    (*write_wakeup)(struct tty_struct *);
  139.  
  140.     struct  module *owner;
  141.     
  142.     int refcount;
  143. };
  144.  
  145. struct tty_ldisc {
  146.     struct tty_ldisc_ops *ops;
  147.     int refcount;
  148. };
  149.  
  150. #define TTY_LDISC_MAGIC    0x5403
  151.  
  152. #define LDISC_FLAG_DEFINED    0x00000001
  153.  
  154. #define MODULE_ALIAS_LDISC(ldisc) \
  155.     MODULE_ALIAS("tty-ldisc-" __stringify(ldisc))
  156.  
  157. #endif /* _LINUX_TTY_LDISC_H */
  158.