Commit 3b1a696b authored by Jiri Slaby (SUSE)'s avatar Jiri Slaby (SUSE) Committed by Greg Kroah-Hartman

tty: fix up and plug in tty_ioctl kernel-doc

The ioctl helpers are well documented, except they are not plugged in
the Documentation. So fix up the minor issues in the kernel-doc and plug
it in.

The minor issues include:
* bad \t on every line (sphinx misinterprets the description otherwise)
* missing colon after Return
* superfluous \n after the comment
* make some struct members and constants a hyperlink
* and so on

Perhaps better to use --word-diff if one wants to see the "real"
changes.
Signed-off-by: default avatar"Jiri Slaby (SUSE)" <jirislaby@kernel.org>
Link: https://lore.kernel.org/r/20230919085156.1578-9-jirislaby@kernel.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5b4f9cf3
...@@ -36,6 +36,7 @@ In-detail description of the named TTY structures is in separate documents: ...@@ -36,6 +36,7 @@ In-detail description of the named TTY structures is in separate documents:
tty_struct tty_struct
tty_ldisc tty_ldisc
tty_buffer tty_buffer
tty_ioctl
tty_internals tty_internals
Writing TTY Driver Writing TTY Driver
......
.. SPDX-License-Identifier: GPL-2.0
=================
TTY IOCTL Helpers
=================
.. kernel-doc:: drivers/tty/tty_ioctl.c
...@@ -38,16 +38,13 @@ ...@@ -38,16 +38,13 @@
#define TERMIOS_TERMIO BIT(2) #define TERMIOS_TERMIO BIT(2)
#define TERMIOS_OLD BIT(3) #define TERMIOS_OLD BIT(3)
/** /**
* tty_chars_in_buffer - characters pending * tty_chars_in_buffer - characters pending
* @tty: terminal * @tty: terminal
* *
* Return the number of bytes of data in the device private * Returns: the number of bytes of data in the device private output queue. If
* output queue. If no private method is supplied there is assumed * no private method is supplied there is assumed to be no queue on the device.
* to be no queue on the device.
*/ */
unsigned int tty_chars_in_buffer(struct tty_struct *tty) unsigned int tty_chars_in_buffer(struct tty_struct *tty)
{ {
if (tty->ops->chars_in_buffer) if (tty->ops->chars_in_buffer)
...@@ -60,13 +57,12 @@ EXPORT_SYMBOL(tty_chars_in_buffer); ...@@ -60,13 +57,12 @@ EXPORT_SYMBOL(tty_chars_in_buffer);
* tty_write_room - write queue space * tty_write_room - write queue space
* @tty: terminal * @tty: terminal
* *
* Return the number of bytes that can be queued to this device * Returns: the number of bytes that can be queued to this device at the present
* at the present time. The result should be treated as a guarantee * time. The result should be treated as a guarantee and the driver cannot
* and the driver cannot offer a value it later shrinks by more than * offer a value it later shrinks by more than the number of bytes written. If
* the number of bytes written. If no method is provided 2K is always * no method is provided, 2K is always returned and data may be lost as there
* returned and data may be lost as there will be no flow control. * will be no flow control.
*/ */
unsigned int tty_write_room(struct tty_struct *tty) unsigned int tty_write_room(struct tty_struct *tty)
{ {
if (tty->ops->write_room) if (tty->ops->write_room)
...@@ -79,9 +75,9 @@ EXPORT_SYMBOL(tty_write_room); ...@@ -79,9 +75,9 @@ EXPORT_SYMBOL(tty_write_room);
* tty_driver_flush_buffer - discard internal buffer * tty_driver_flush_buffer - discard internal buffer
* @tty: terminal * @tty: terminal
* *
* Discard the internal output buffer for this device. If no method * Discard the internal output buffer for this device. If no method is provided,
* is provided then either the buffer cannot be hardware flushed or * then either the buffer cannot be hardware flushed or there is no buffer
* there is no buffer driver side. * driver side.
*/ */
void tty_driver_flush_buffer(struct tty_struct *tty) void tty_driver_flush_buffer(struct tty_struct *tty)
{ {
...@@ -94,15 +90,14 @@ EXPORT_SYMBOL(tty_driver_flush_buffer); ...@@ -94,15 +90,14 @@ EXPORT_SYMBOL(tty_driver_flush_buffer);
* tty_unthrottle - flow control * tty_unthrottle - flow control
* @tty: terminal * @tty: terminal
* *
* Indicate that a tty may continue transmitting data down the stack. * Indicate that a @tty may continue transmitting data down the stack. Takes
* Takes the termios rwsem to protect against parallel throttle/unthrottle * the &tty_struct->termios_rwsem to protect against parallel
* and also to ensure the driver can consistently reference its own * throttle/unthrottle and also to ensure the driver can consistently reference
* termios data at this point when implementing software flow control. * its own termios data at this point when implementing software flow control.
* *
* Drivers should however remember that the stack can issue a throttle, * Drivers should however remember that the stack can issue a throttle, then
* then change flow control method, then unthrottle. * change flow control method, then unthrottle.
*/ */
void tty_unthrottle(struct tty_struct *tty) void tty_unthrottle(struct tty_struct *tty)
{ {
down_write(&tty->termios_rwsem); down_write(&tty->termios_rwsem);
...@@ -118,13 +113,12 @@ EXPORT_SYMBOL(tty_unthrottle); ...@@ -118,13 +113,12 @@ EXPORT_SYMBOL(tty_unthrottle);
* tty_throttle_safe - flow control * tty_throttle_safe - flow control
* @tty: terminal * @tty: terminal
* *
* Indicate that a tty should stop transmitting data down the stack. * Indicate that a @tty should stop transmitting data down the stack.
* tty_throttle_safe will only attempt throttle if tty->flow_change is * tty_throttle_safe() will only attempt throttle if @tty->flow_change is
* TTY_THROTTLE_SAFE. Prevents an accidental throttle due to race * %TTY_THROTTLE_SAFE. Prevents an accidental throttle due to race conditions
* conditions when throttling is conditional on factors evaluated prior to * when throttling is conditional on factors evaluated prior to throttling.
* throttling.
* *
* Returns true if tty is throttled (or was already throttled) * Returns: %true if @tty is throttled (or was already throttled)
*/ */
bool tty_throttle_safe(struct tty_struct *tty) bool tty_throttle_safe(struct tty_struct *tty)
{ {
...@@ -149,12 +143,12 @@ bool tty_throttle_safe(struct tty_struct *tty) ...@@ -149,12 +143,12 @@ bool tty_throttle_safe(struct tty_struct *tty)
* tty_unthrottle_safe - flow control * tty_unthrottle_safe - flow control
* @tty: terminal * @tty: terminal
* *
* Similar to tty_unthrottle() but will only attempt unthrottle * Similar to tty_unthrottle() but will only attempt unthrottle if
* if tty->flow_change is TTY_UNTHROTTLE_SAFE. Prevents an accidental * @tty->flow_change is %TTY_UNTHROTTLE_SAFE. Prevents an accidental unthrottle
* unthrottle due to race conditions when unthrottling is conditional * due to race conditions when unthrottling is conditional on factors evaluated
* on factors evaluated prior to unthrottling. * prior to unthrottling.
* *
* Returns true if tty is unthrottled (or was already unthrottled) * Returns: %true if @tty is unthrottled (or was already unthrottled)
*/ */
bool tty_unthrottle_safe(struct tty_struct *tty) bool tty_unthrottle_safe(struct tty_struct *tty)
{ {
...@@ -180,8 +174,8 @@ bool tty_unthrottle_safe(struct tty_struct *tty) ...@@ -180,8 +174,8 @@ bool tty_unthrottle_safe(struct tty_struct *tty)
* @tty: tty we are waiting for * @tty: tty we are waiting for
* @timeout: how long we will wait * @timeout: how long we will wait
* *
* Wait for characters pending in a tty driver to hit the wire, or * Wait for characters pending in a tty driver to hit the wire, or for a
* for a timeout to occur (eg due to flow control) * timeout to occur (eg due to flow control).
* *
* Locking: none * Locking: none
*/ */
...@@ -230,15 +224,14 @@ static void unset_locked_termios(struct tty_struct *tty, const struct ktermios * ...@@ -230,15 +224,14 @@ static void unset_locked_termios(struct tty_struct *tty, const struct ktermios *
/** /**
* tty_termios_copy_hw - copy hardware settings * tty_termios_copy_hw - copy hardware settings
* @new: New termios * @new: new termios
* @old: Old termios * @old: old termios
* *
* Propagate the hardware specific terminal setting bits from * Propagate the hardware specific terminal setting bits from the @old termios
* the old termios structure to the new one. This is used in cases * structure to the @new one. This is used in cases where the hardware does not
* where the hardware does not support reconfiguration or as a helper * support reconfiguration or as a helper in some cases where only minimal
* in some cases where only minimal reconfiguration is supported * reconfiguration is supported.
*/ */
void tty_termios_copy_hw(struct ktermios *new, const struct ktermios *old) void tty_termios_copy_hw(struct ktermios *new, const struct ktermios *old)
{ {
/* The bits a dumb device handles in software. Smart devices need /* The bits a dumb device handles in software. Smart devices need
...@@ -255,10 +248,11 @@ EXPORT_SYMBOL(tty_termios_copy_hw); ...@@ -255,10 +248,11 @@ EXPORT_SYMBOL(tty_termios_copy_hw);
* @a: termios * @a: termios
* @b: termios to compare * @b: termios to compare
* *
* Check if any of the bits that affect a dumb device have changed * Check if any of the bits that affect a dumb device have changed between the
* between the two termios structures, or a speed change is needed. * two termios structures, or a speed change is needed.
*
* Returns: %true if change is needed
*/ */
bool tty_termios_hw_change(const struct ktermios *a, const struct ktermios *b) bool tty_termios_hw_change(const struct ktermios *a, const struct ktermios *b)
{ {
if (a->c_ispeed != b->c_ispeed || a->c_ospeed != b->c_ospeed) if (a->c_ispeed != b->c_ispeed || a->c_ospeed != b->c_ospeed)
...@@ -273,8 +267,7 @@ EXPORT_SYMBOL(tty_termios_hw_change); ...@@ -273,8 +267,7 @@ EXPORT_SYMBOL(tty_termios_hw_change);
* tty_get_char_size - get size of a character * tty_get_char_size - get size of a character
* @cflag: termios cflag value * @cflag: termios cflag value
* *
* Get the size (in bits) of a character depending on @cflag's %CSIZE * Returns: size (in bits) of a character depending on @cflag's %CSIZE setting
* setting.
*/ */
unsigned char tty_get_char_size(unsigned int cflag) unsigned char tty_get_char_size(unsigned int cflag)
{ {
...@@ -296,10 +289,11 @@ EXPORT_SYMBOL_GPL(tty_get_char_size); ...@@ -296,10 +289,11 @@ EXPORT_SYMBOL_GPL(tty_get_char_size);
* tty_get_frame_size - get size of a frame * tty_get_frame_size - get size of a frame
* @cflag: termios cflag value * @cflag: termios cflag value
* *
* Get the size (in bits) of a frame depending on @cflag's %CSIZE, %CSTOPB, * Get the size (in bits) of a frame depending on @cflag's %CSIZE, %CSTOPB, and
* and %PARENB setting. The result is a sum of character size, start and * %PARENB setting. The result is a sum of character size, start and stop bits
* stop bits -- one bit each -- second stop bit (if set), and parity bit * -- one bit each -- second stop bit (if set), and parity bit (if set).
* (if set). *
* Returns: size (in bits) of a frame depending on @cflag's setting.
*/ */
unsigned char tty_get_frame_size(unsigned int cflag) unsigned char tty_get_frame_size(unsigned int cflag)
{ {
...@@ -321,12 +315,11 @@ EXPORT_SYMBOL_GPL(tty_get_frame_size); ...@@ -321,12 +315,11 @@ EXPORT_SYMBOL_GPL(tty_get_frame_size);
* @tty: tty to update * @tty: tty to update
* @new_termios: desired new value * @new_termios: desired new value
* *
* Perform updates to the termios values set on this terminal. * Perform updates to the termios values set on this @tty. A master pty's
* A master pty's termios should never be set. * termios should never be set.
* *
* Locking: termios_rwsem * Locking: &tty_struct->termios_rwsem
*/ */
int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios) int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios)
{ {
struct ktermios old_termios; struct ktermios old_termios;
...@@ -444,13 +437,14 @@ __weak int kernel_termios_to_user_termios(struct termios __user *u, ...@@ -444,13 +437,14 @@ __weak int kernel_termios_to_user_termios(struct termios __user *u,
* @arg: user data * @arg: user data
* @opt: option information * @opt: option information
* *
* Helper function to prepare termios data and run necessary other * Helper function to prepare termios data and run necessary other functions
* functions before using tty_set_termios to do the actual changes. * before using tty_set_termios() to do the actual changes.
* *
* Locking: * Locking: called functions take &tty_struct->ldisc_sem and
* Called functions take ldisc and termios_rwsem locks * &tty_struct->termios_rwsem locks
*
* Returns: 0 on success, an error otherwise
*/ */
static int set_termios(struct tty_struct *tty, void __user *arg, int opt) static int set_termios(struct tty_struct *tty, void __user *arg, int opt)
{ {
struct ktermios tmp_termios; struct ktermios tmp_termios;
...@@ -626,12 +620,12 @@ static void set_sgflags(struct ktermios *termios, int flags) ...@@ -626,12 +620,12 @@ static void set_sgflags(struct ktermios *termios, int flags)
* @tty: tty structure * @tty: tty structure
* @sgttyb: pointer to old style terminal structure * @sgttyb: pointer to old style terminal structure
* *
* Updates a terminal from the legacy BSD style terminal information * Updates a terminal from the legacy BSD style terminal information structure.
* structure. *
* Locking: &tty_struct->termios_rwsem
* *
* Locking: termios_rwsem * Returns: 0 on success, an error otherwise
*/ */
static int set_sgttyb(struct tty_struct *tty, struct sgttyb __user *sgttyb) static int set_sgttyb(struct tty_struct *tty, struct sgttyb __user *sgttyb)
{ {
int retval; int retval;
...@@ -735,12 +729,15 @@ static int set_ltchars(struct tty_struct *tty, struct ltchars __user *ltchars) ...@@ -735,12 +729,15 @@ static int set_ltchars(struct tty_struct *tty, struct ltchars __user *ltchars)
/** /**
* tty_change_softcar - carrier change ioctl helper * tty_change_softcar - carrier change ioctl helper
* @tty: tty to update * @tty: tty to update
* @enable: enable/disable CLOCAL * @enable: enable/disable %CLOCAL
*
* Perform a change to the %CLOCAL state and call into the driver layer to make
* it visible.
* *
* Perform a change to the CLOCAL state and call into the driver * Locking: &tty_struct->termios_rwsem.
* layer to make it visible. All done with the termios rwsem *
* Returns: 0 on success, an error otherwise
*/ */
static int tty_change_softcar(struct tty_struct *tty, bool enable) static int tty_change_softcar(struct tty_struct *tty, bool enable)
{ {
int ret = 0; int ret = 0;
...@@ -765,11 +762,10 @@ static int tty_change_softcar(struct tty_struct *tty, bool enable) ...@@ -765,11 +762,10 @@ static int tty_change_softcar(struct tty_struct *tty, bool enable)
* @cmd: command * @cmd: command
* @arg: ioctl argument * @arg: ioctl argument
* *
* Perform non line discipline specific mode control ioctls. This * Perform non-line discipline specific mode control ioctls. This is designed
* is designed to be called by line disciplines to ensure they provide * to be called by line disciplines to ensure they provide consistent mode
* consistent mode setting. * setting.
*/ */
int tty_mode_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg) int tty_mode_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg)
{ {
struct tty_struct *real_tty; struct tty_struct *real_tty;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment