tty_ldisc.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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