tty: add kernel-doc for tty_ldisc_ops
tty_ldisc_ops structure was already partially documented in a standalone comment in the header beginning. Move it right before the structure and reformat it so it complies to kernel-doc. That way, we can include it in Documentation/ later in this series. And add the documentation for the members where missing too. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Link: https://lore.kernel.org/r/20211126081611.11001-7-jslaby@suse.cz Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
630bf86d15
Коммит
0c6119f9f7
|
@ -4,126 +4,6 @@
|
||||||
|
|
||||||
struct tty_struct;
|
struct tty_struct;
|
||||||
|
|
||||||
/*
|
|
||||||
* This structure defines the interface between the tty line discipline
|
|
||||||
* implementation and the tty routines. The following routines can be
|
|
||||||
* defined; unless noted otherwise, they are optional, and can be
|
|
||||||
* filled in with a null pointer.
|
|
||||||
*
|
|
||||||
* int (*open)(struct tty_struct *);
|
|
||||||
*
|
|
||||||
* This function is called when the line discipline is associated
|
|
||||||
* with the tty. The line discipline can use this as an
|
|
||||||
* opportunity to initialize any state needed by the ldisc routines.
|
|
||||||
*
|
|
||||||
* void (*close)(struct tty_struct *);
|
|
||||||
*
|
|
||||||
* This function is called when the line discipline is being
|
|
||||||
* shutdown, either because the tty is being closed or because
|
|
||||||
* the tty is being changed to use a new line discipline
|
|
||||||
*
|
|
||||||
* void (*flush_buffer)(struct tty_struct *tty);
|
|
||||||
*
|
|
||||||
* This function instructs the line discipline to clear its
|
|
||||||
* buffers of any input characters it may have queued to be
|
|
||||||
* delivered to the user mode process.
|
|
||||||
*
|
|
||||||
* ssize_t (*read)(struct tty_struct * tty, struct file * file,
|
|
||||||
* unsigned char * buf, size_t nr);
|
|
||||||
*
|
|
||||||
* This function is called when the user requests to read from
|
|
||||||
* the tty. The line discipline will return whatever characters
|
|
||||||
* it has buffered up for the user. If this function is not
|
|
||||||
* defined, the user will receive an EIO error.
|
|
||||||
*
|
|
||||||
* ssize_t (*write)(struct tty_struct * tty, struct file * file,
|
|
||||||
* const unsigned char * buf, size_t nr);
|
|
||||||
*
|
|
||||||
* This function is called when the user requests to write to the
|
|
||||||
* tty. The line discipline will deliver the characters to the
|
|
||||||
* low-level tty device for transmission, optionally performing
|
|
||||||
* some processing on the characters first. If this function is
|
|
||||||
* not defined, the user will receive an EIO error.
|
|
||||||
*
|
|
||||||
* int (*ioctl)(struct tty_struct *tty, unsigned int cmd, unsigned long arg);
|
|
||||||
*
|
|
||||||
* This function is called when the user requests an ioctl which
|
|
||||||
* is not handled by the tty layer or the low-level tty driver.
|
|
||||||
* It is intended for ioctls which affect line discpline
|
|
||||||
* operation. Note that the search order for ioctls is (1) tty
|
|
||||||
* layer, (2) tty low-level driver, (3) line discpline. So a
|
|
||||||
* low-level driver can "grab" an ioctl request before the line
|
|
||||||
* discpline has a chance to see it.
|
|
||||||
*
|
|
||||||
* int (*compat_ioctl)(struct tty_struct *tty, unsigned int cmd,
|
|
||||||
* unsigned long arg);
|
|
||||||
*
|
|
||||||
* Process ioctl calls from 32-bit process on 64-bit system
|
|
||||||
*
|
|
||||||
* NOTE: only ioctls that are neither "pointer to compatible
|
|
||||||
* structure" nor tty-generic. Something private that takes
|
|
||||||
* an integer or a pointer to wordsize-sensitive structure
|
|
||||||
* belongs here, but most of ldiscs will happily leave
|
|
||||||
* it NULL.
|
|
||||||
*
|
|
||||||
* void (*set_termios)(struct tty_struct *tty, struct ktermios * old);
|
|
||||||
*
|
|
||||||
* This function notifies the line discpline that a change has
|
|
||||||
* been made to the termios structure.
|
|
||||||
*
|
|
||||||
* int (*poll)(struct tty_struct * tty, struct file * file,
|
|
||||||
* poll_table *wait);
|
|
||||||
*
|
|
||||||
* This function is called when a user attempts to select/poll on a
|
|
||||||
* tty device. It is solely the responsibility of the line
|
|
||||||
* discipline to handle poll requests.
|
|
||||||
*
|
|
||||||
* void (*receive_buf)(struct tty_struct *, const unsigned char *cp,
|
|
||||||
* char *fp, int count);
|
|
||||||
*
|
|
||||||
* This function is called by the low-level tty driver to send
|
|
||||||
* characters received by the hardware to the line discpline for
|
|
||||||
* processing. <cp> is a pointer to the buffer of input
|
|
||||||
* character received by the device. <fp> is a pointer to a
|
|
||||||
* pointer of flag bytes which indicate whether a character was
|
|
||||||
* received with a parity error, etc. <fp> may be NULL to indicate
|
|
||||||
* all data received is TTY_NORMAL.
|
|
||||||
*
|
|
||||||
* void (*write_wakeup)(struct tty_struct *);
|
|
||||||
*
|
|
||||||
* This function is called by the low-level tty driver to signal
|
|
||||||
* that line discpline should try to send more characters to the
|
|
||||||
* low-level driver for transmission. If the line discpline does
|
|
||||||
* not have any more data to send, it can just return. If the line
|
|
||||||
* discipline does have some data to send, please arise a tasklet
|
|
||||||
* or workqueue to do the real data transfer. Do not send data in
|
|
||||||
* this hook, it may leads to a deadlock.
|
|
||||||
*
|
|
||||||
* int (*hangup)(struct tty_struct *)
|
|
||||||
*
|
|
||||||
* Called on a hangup. Tells the discipline that it should
|
|
||||||
* cease I/O to the tty driver. Can sleep. The driver should
|
|
||||||
* seek to perform this action quickly but should wait until
|
|
||||||
* any pending driver I/O is completed.
|
|
||||||
*
|
|
||||||
* void (*dcd_change)(struct tty_struct *tty, unsigned int status)
|
|
||||||
*
|
|
||||||
* Tells the discipline that the DCD pin has changed its status.
|
|
||||||
* Used exclusively by the N_PPS (Pulse-Per-Second) line discipline.
|
|
||||||
*
|
|
||||||
* int (*receive_buf2)(struct tty_struct *, const unsigned char *cp,
|
|
||||||
* char *fp, int count);
|
|
||||||
*
|
|
||||||
* This function is called by the low-level tty driver to send
|
|
||||||
* characters received by the hardware to the line discpline for
|
|
||||||
* processing. <cp> is a pointer to the buffer of input
|
|
||||||
* character received by the device. <fp> is a pointer to a
|
|
||||||
* pointer of flag bytes which indicate whether a character was
|
|
||||||
* received with a parity error, etc. <fp> may be NULL to indicate
|
|
||||||
* all data received is TTY_NORMAL.
|
|
||||||
* If assigned, prefer this function for automatic flow control.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/wait.h>
|
#include <linux/wait.h>
|
||||||
#include <linux/atomic.h>
|
#include <linux/atomic.h>
|
||||||
|
@ -175,7 +55,128 @@ int ldsem_down_write_nested(struct ld_semaphore *sem, int subclass,
|
||||||
ldsem_down_write(sem, timeout)
|
ldsem_down_write(sem, timeout)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct tty_ldisc_ops - ldisc operations
|
||||||
|
*
|
||||||
|
* @name: name of this ldisc rendered in /proc/tty/ldiscs
|
||||||
|
* @num: ``N_*`` number (%N_TTY, %N_HDLC, ...) reserved to this ldisc
|
||||||
|
*
|
||||||
|
* @open: ``int ()(struct tty_struct *tty)``
|
||||||
|
*
|
||||||
|
* This function is called when the line discipline is associated with the
|
||||||
|
* @tty. The line discipline can use this as an opportunity to initialize
|
||||||
|
* any state needed by the ldisc routines.
|
||||||
|
*
|
||||||
|
* @close: ``void ()(struct tty_struct *tty)``
|
||||||
|
*
|
||||||
|
* This function is called when the line discipline is being shutdown,
|
||||||
|
* either because the @tty is being closed or because the @tty is being
|
||||||
|
* changed to use a new line discipline
|
||||||
|
*
|
||||||
|
* @flush_buffer: ``void ()(struct tty_struct *tty)``
|
||||||
|
*
|
||||||
|
* This function instructs the line discipline to clear its buffers of any
|
||||||
|
* input characters it may have queued to be delivered to the user mode
|
||||||
|
* process.
|
||||||
|
*
|
||||||
|
* @read: ``ssize_t ()(struct tty_struct *tty, struct file *file,
|
||||||
|
* unsigned char *buf, size_t nr)``
|
||||||
|
*
|
||||||
|
* This function is called when the user requests to read from the @tty.
|
||||||
|
* The line discipline will return whatever characters it has buffered up
|
||||||
|
* for the user. If this function is not defined, the user will receive
|
||||||
|
* an %EIO error.
|
||||||
|
*
|
||||||
|
* @write: ``ssize_t ()(struct tty_struct *tty, struct file *file,
|
||||||
|
* const unsigned char *buf, size_t nr)``
|
||||||
|
*
|
||||||
|
* This function is called when the user requests to write to the @tty.
|
||||||
|
* The line discipline will deliver the characters to the low-level tty
|
||||||
|
* device for transmission, optionally performing some processing on the
|
||||||
|
* characters first. If this function is not defined, the user will
|
||||||
|
* receive an %EIO error.
|
||||||
|
*
|
||||||
|
* @ioctl: ``int ()(struct tty_struct *tty, unsigned int cmd,
|
||||||
|
* unsigned long arg)``
|
||||||
|
*
|
||||||
|
* This function is called when the user requests an ioctl which is not
|
||||||
|
* handled by the tty layer or the low-level tty driver. It is intended
|
||||||
|
* for ioctls which affect line discpline operation. Note that the search
|
||||||
|
* order for ioctls is (1) tty layer, (2) tty low-level driver, (3) line
|
||||||
|
* discpline. So a low-level driver can "grab" an ioctl request before
|
||||||
|
* the line discpline has a chance to see it.
|
||||||
|
*
|
||||||
|
* @compat_ioctl: ``int ()(struct tty_struct *tty, unsigned int cmd,
|
||||||
|
* unsigned long arg)``
|
||||||
|
*
|
||||||
|
* Process ioctl calls from 32-bit process on 64-bit system.
|
||||||
|
*
|
||||||
|
* Note that only ioctls that are neither "pointer to compatible
|
||||||
|
* structure" nor tty-generic. Something private that takes an integer or
|
||||||
|
* a pointer to wordsize-sensitive structure belongs here, but most of
|
||||||
|
* ldiscs will happily leave it %NULL.
|
||||||
|
*
|
||||||
|
* @set_termios: ``void ()(struct tty_struct *tty, struct ktermios *old)``
|
||||||
|
*
|
||||||
|
* This function notifies the line discpline that a change has been made
|
||||||
|
* to the termios structure.
|
||||||
|
*
|
||||||
|
* @poll: ``int ()(struct tty_struct *tty, struct file *file,
|
||||||
|
* struct poll_table_struct *wait)``
|
||||||
|
*
|
||||||
|
* This function is called when a user attempts to select/poll on a @tty
|
||||||
|
* device. It is solely the responsibility of the line discipline to
|
||||||
|
* handle poll requests.
|
||||||
|
*
|
||||||
|
* @hangup: ``void ()(struct tty_struct *tty)``
|
||||||
|
*
|
||||||
|
* Called on a hangup. Tells the discipline that it should cease I/O to
|
||||||
|
* the tty driver. Can sleep. The driver should seek to perform this
|
||||||
|
* action quickly but should wait until any pending driver I/O is
|
||||||
|
* completed.
|
||||||
|
*
|
||||||
|
* @receive_buf: ``void ()(struct tty_struct *tty, const unsigned char *cp,
|
||||||
|
* const char *fp, int count)``
|
||||||
|
*
|
||||||
|
* This function is called by the low-level tty driver to send characters
|
||||||
|
* received by the hardware to the line discpline for processing. @cp is
|
||||||
|
* a pointer to the buffer of input character received by the device. @fp
|
||||||
|
* is a pointer to an array of flag bytes which indicate whether a
|
||||||
|
* character was received with a parity error, etc. @fp may be %NULL to
|
||||||
|
* indicate all data received is %TTY_NORMAL.
|
||||||
|
*
|
||||||
|
* @write_wakeup: ``void ()(struct tty_struct *tty)``
|
||||||
|
*
|
||||||
|
* This function is called by the low-level tty driver to signal that line
|
||||||
|
* discpline should try to send more characters to the low-level driver
|
||||||
|
* for transmission. If the line discpline does not have any more data to
|
||||||
|
* send, it can just return. If the line discipline does have some data to
|
||||||
|
* send, please arise a tasklet or workqueue to do the real data transfer.
|
||||||
|
* Do not send data in this hook, it may lead to a deadlock.
|
||||||
|
*
|
||||||
|
* @dcd_change: ``void ()(struct tty_struct *tty, unsigned int status)``
|
||||||
|
*
|
||||||
|
* Tells the discipline that the DCD pin has changed its status. Used
|
||||||
|
* exclusively by the %N_PPS (Pulse-Per-Second) line discipline.
|
||||||
|
*
|
||||||
|
* @receive_buf2: ``int ()(struct tty_struct *tty, const unsigned char *cp,
|
||||||
|
* const char *fp, int count)``
|
||||||
|
*
|
||||||
|
* This function is called by the low-level tty driver to send characters
|
||||||
|
* received by the hardware to the line discpline for processing. @cp is a
|
||||||
|
* pointer to the buffer of input character received by the device. @fp
|
||||||
|
* is a pointer to an array of flag bytes which indicate whether a
|
||||||
|
* character was received with a parity error, etc. @fp may be %NULL to
|
||||||
|
* indicate all data received is %TTY_NORMAL. If assigned, prefer this
|
||||||
|
* function for automatic flow control.
|
||||||
|
*
|
||||||
|
* @owner: module containting this ldisc (for reference counting)
|
||||||
|
*
|
||||||
|
* This structure defines the interface between the tty line discipline
|
||||||
|
* implementation and the tty routines. The above routines can be defined.
|
||||||
|
* Unless noted otherwise, they are optional, and can be filled in with a %NULL
|
||||||
|
* pointer.
|
||||||
|
*/
|
||||||
struct tty_ldisc_ops {
|
struct tty_ldisc_ops {
|
||||||
char *name;
|
char *name;
|
||||||
int num;
|
int num;
|
||||||
|
@ -183,8 +184,8 @@ struct tty_ldisc_ops {
|
||||||
/*
|
/*
|
||||||
* The following routines are called from above.
|
* The following routines are called from above.
|
||||||
*/
|
*/
|
||||||
int (*open)(struct tty_struct *);
|
int (*open)(struct tty_struct *tty);
|
||||||
void (*close)(struct tty_struct *);
|
void (*close)(struct tty_struct *tty);
|
||||||
void (*flush_buffer)(struct tty_struct *tty);
|
void (*flush_buffer)(struct tty_struct *tty);
|
||||||
ssize_t (*read)(struct tty_struct *tty, struct file *file,
|
ssize_t (*read)(struct tty_struct *tty, struct file *file,
|
||||||
unsigned char *buf, size_t nr,
|
unsigned char *buf, size_t nr,
|
||||||
|
@ -196,18 +197,18 @@ struct tty_ldisc_ops {
|
||||||
int (*compat_ioctl)(struct tty_struct *tty, unsigned int cmd,
|
int (*compat_ioctl)(struct tty_struct *tty, unsigned int cmd,
|
||||||
unsigned long arg);
|
unsigned long arg);
|
||||||
void (*set_termios)(struct tty_struct *tty, struct ktermios *old);
|
void (*set_termios)(struct tty_struct *tty, struct ktermios *old);
|
||||||
__poll_t (*poll)(struct tty_struct *, struct file *,
|
__poll_t (*poll)(struct tty_struct *tty, struct file *file,
|
||||||
struct poll_table_struct *);
|
struct poll_table_struct *wait);
|
||||||
void (*hangup)(struct tty_struct *tty);
|
void (*hangup)(struct tty_struct *tty);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following routines are called from below.
|
* The following routines are called from below.
|
||||||
*/
|
*/
|
||||||
void (*receive_buf)(struct tty_struct *, const unsigned char *cp,
|
void (*receive_buf)(struct tty_struct *tty, const unsigned char *cp,
|
||||||
const char *fp, int count);
|
const char *fp, int count);
|
||||||
void (*write_wakeup)(struct tty_struct *);
|
void (*write_wakeup)(struct tty_struct *tty);
|
||||||
void (*dcd_change)(struct tty_struct *, unsigned int);
|
void (*dcd_change)(struct tty_struct *tty, unsigned int status);
|
||||||
int (*receive_buf2)(struct tty_struct *, const unsigned char *cp,
|
int (*receive_buf2)(struct tty_struct *tty, const unsigned char *cp,
|
||||||
const char *fp, int count);
|
const char *fp, int count);
|
||||||
|
|
||||||
struct module *owner;
|
struct module *owner;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче