LCOV - code coverage report
Current view: top level - include/linux - tty_driver.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 6 7 85.7 %
Date: 2021-04-22 12:43:58 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _LINUX_TTY_DRIVER_H
       3             : #define _LINUX_TTY_DRIVER_H
       4             : 
       5             : /*
       6             :  * This structure defines the interface between the low-level tty
       7             :  * driver and the tty routines.  The following routines can be
       8             :  * defined; unless noted otherwise, they are optional, and can be
       9             :  * filled in with a null pointer.
      10             :  *
      11             :  * struct tty_struct * (*lookup)(struct tty_driver *self, struct file *, int idx)
      12             :  *
      13             :  *      Return the tty device corresponding to idx, NULL if there is not
      14             :  *      one currently in use and an ERR_PTR value on error. Called under
      15             :  *      tty_mutex (for now!)
      16             :  *
      17             :  *      Optional method. Default behaviour is to use the ttys array
      18             :  *
      19             :  * int (*install)(struct tty_driver *self, struct tty_struct *tty)
      20             :  *
      21             :  *      Install a new tty into the tty driver internal tables. Used in
      22             :  *      conjunction with lookup and remove methods.
      23             :  *
      24             :  *      Optional method. Default behaviour is to use the ttys array
      25             :  *
      26             :  * void (*remove)(struct tty_driver *self, struct tty_struct *tty)
      27             :  *
      28             :  *      Remove a closed tty from the tty driver internal tables. Used in
      29             :  *      conjunction with lookup and remove methods.
      30             :  *
      31             :  *      Optional method. Default behaviour is to use the ttys array
      32             :  *
      33             :  * int  (*open)(struct tty_struct * tty, struct file * filp);
      34             :  *
      35             :  *      This routine is called when a particular tty device is opened.
      36             :  *      This routine is mandatory; if this routine is not filled in,
      37             :  *      the attempted open will fail with ENODEV.
      38             :  *
      39             :  *      Required method. Called with tty lock held.
      40             :  *
      41             :  * void (*close)(struct tty_struct * tty, struct file * filp);
      42             :  *
      43             :  *      This routine is called when a particular tty device is closed.
      44             :  *      Note: called even if the corresponding open() failed.
      45             :  *
      46             :  *      Required method. Called with tty lock held.
      47             :  *
      48             :  * void (*shutdown)(struct tty_struct * tty);
      49             :  *
      50             :  *      This routine is called under the tty lock when a particular tty device
      51             :  *      is closed for the last time. It executes before the tty resources
      52             :  *      are freed so may execute while another function holds a tty kref.
      53             :  *
      54             :  * void (*cleanup)(struct tty_struct * tty);
      55             :  *
      56             :  *      This routine is called asynchronously when a particular tty device
      57             :  *      is closed for the last time freeing up the resources. This is
      58             :  *      actually the second part of shutdown for routines that might sleep.
      59             :  *
      60             :  *
      61             :  * int (*write)(struct tty_struct * tty,
      62             :  *               const unsigned char *buf, int count);
      63             :  *
      64             :  *      This routine is called by the kernel to write a series of
      65             :  *      characters to the tty device.  The characters may come from
      66             :  *      user space or kernel space.  This routine will return the
      67             :  *      number of characters actually accepted for writing.
      68             :  *
      69             :  *      Optional: Required for writable devices.
      70             :  *
      71             :  * int (*put_char)(struct tty_struct *tty, unsigned char ch);
      72             :  *
      73             :  *      This routine is called by the kernel to write a single
      74             :  *      character to the tty device.  If the kernel uses this routine,
      75             :  *      it must call the flush_chars() routine (if defined) when it is
      76             :  *      done stuffing characters into the driver.  If there is no room
      77             :  *      in the queue, the character is ignored.
      78             :  *
      79             :  *      Optional: Kernel will use the write method if not provided.
      80             :  *
      81             :  *      Note: Do not call this function directly, call tty_put_char
      82             :  *
      83             :  * void (*flush_chars)(struct tty_struct *tty);
      84             :  *
      85             :  *      This routine is called by the kernel after it has written a
      86             :  *      series of characters to the tty device using put_char().  
      87             :  *
      88             :  *      Optional:
      89             :  *
      90             :  *      Note: Do not call this function directly, call tty_driver_flush_chars
      91             :  * 
      92             :  * int  (*write_room)(struct tty_struct *tty);
      93             :  *
      94             :  *      This routine returns the numbers of characters the tty driver
      95             :  *      will accept for queuing to be written.  This number is subject
      96             :  *      to change as output buffers get emptied, or if the output flow
      97             :  *      control is acted.
      98             :  *
      99             :  *      Required if write method is provided else not needed.
     100             :  *
     101             :  *      Note: Do not call this function directly, call tty_write_room
     102             :  * 
     103             :  * int  (*ioctl)(struct tty_struct *tty, unsigned int cmd, unsigned long arg);
     104             :  *
     105             :  *      This routine allows the tty driver to implement
     106             :  *      device-specific ioctls.  If the ioctl number passed in cmd
     107             :  *      is not recognized by the driver, it should return ENOIOCTLCMD.
     108             :  *
     109             :  *      Optional
     110             :  *
     111             :  * long (*compat_ioctl)(struct tty_struct *tty,,
     112             :  *                      unsigned int cmd, unsigned long arg);
     113             :  *
     114             :  *      implement ioctl processing for 32 bit process on 64 bit system
     115             :  *
     116             :  *      Optional
     117             :  * 
     118             :  * void (*set_termios)(struct tty_struct *tty, struct ktermios * old);
     119             :  *
     120             :  *      This routine allows the tty driver to be notified when
     121             :  *      device's termios settings have changed.
     122             :  *
     123             :  *      Optional: Called under the termios lock
     124             :  *
     125             :  *
     126             :  * void (*set_ldisc)(struct tty_struct *tty);
     127             :  *
     128             :  *      This routine allows the tty driver to be notified when the
     129             :  *      device's termios settings have changed.
     130             :  *
     131             :  *      Optional: Called under BKL (currently)
     132             :  * 
     133             :  * void (*throttle)(struct tty_struct * tty);
     134             :  *
     135             :  *      This routine notifies the tty driver that input buffers for
     136             :  *      the line discipline are close to full, and it should somehow
     137             :  *      signal that no more characters should be sent to the tty.
     138             :  *
     139             :  *      Optional: Always invoke via tty_throttle(), called under the
     140             :  *      termios lock.
     141             :  * 
     142             :  * void (*unthrottle)(struct tty_struct * tty);
     143             :  *
     144             :  *      This routine notifies the tty drivers that it should signals
     145             :  *      that characters can now be sent to the tty without fear of
     146             :  *      overrunning the input buffers of the line disciplines.
     147             :  * 
     148             :  *      Optional: Always invoke via tty_unthrottle(), called under the
     149             :  *      termios lock.
     150             :  *
     151             :  * void (*stop)(struct tty_struct *tty);
     152             :  *
     153             :  *      This routine notifies the tty driver that it should stop
     154             :  *      outputting characters to the tty device.  
     155             :  *
     156             :  *      Called with ->flow_lock held. Serialized with start() method.
     157             :  *
     158             :  *      Optional:
     159             :  *
     160             :  *      Note: Call stop_tty not this method.
     161             :  * 
     162             :  * void (*start)(struct tty_struct *tty);
     163             :  *
     164             :  *      This routine notifies the tty driver that it resume sending
     165             :  *      characters to the tty device.
     166             :  *
     167             :  *      Called with ->flow_lock held. Serialized with stop() method.
     168             :  *
     169             :  *      Optional:
     170             :  *
     171             :  *      Note: Call start_tty not this method.
     172             :  * 
     173             :  * void (*hangup)(struct tty_struct *tty);
     174             :  *
     175             :  *      This routine notifies the tty driver that it should hang up the
     176             :  *      tty device.
     177             :  *
     178             :  *      Optional:
     179             :  *
     180             :  *      Called with tty lock held.
     181             :  *
     182             :  * int (*break_ctl)(struct tty_struct *tty, int state);
     183             :  *
     184             :  *      This optional routine requests the tty driver to turn on or
     185             :  *      off BREAK status on the RS-232 port.  If state is -1,
     186             :  *      then the BREAK status should be turned on; if state is 0, then
     187             :  *      BREAK should be turned off.
     188             :  *
     189             :  *      If this routine is implemented, the high-level tty driver will
     190             :  *      handle the following ioctls: TCSBRK, TCSBRKP, TIOCSBRK,
     191             :  *      TIOCCBRK.
     192             :  *
     193             :  *      If the driver sets TTY_DRIVER_HARDWARE_BREAK then the interface
     194             :  *      will also be called with actual times and the hardware is expected
     195             :  *      to do the delay work itself. 0 and -1 are still used for on/off.
     196             :  *
     197             :  *      Optional: Required for TCSBRK/BRKP/etc handling.
     198             :  *
     199             :  * void (*wait_until_sent)(struct tty_struct *tty, int timeout);
     200             :  * 
     201             :  *      This routine waits until the device has written out all of the
     202             :  *      characters in its transmitter FIFO.
     203             :  *
     204             :  *      Optional: If not provided the device is assumed to have no FIFO
     205             :  *
     206             :  *      Note: Usually correct to call tty_wait_until_sent
     207             :  *
     208             :  * void (*send_xchar)(struct tty_struct *tty, char ch);
     209             :  *
     210             :  *      This routine is used to send a high-priority XON/XOFF
     211             :  *      character to the device.
     212             :  *
     213             :  *      Optional: If not provided then the write method is called under
     214             :  *      the atomic write lock to keep it serialized with the ldisc.
     215             :  *
     216             :  * int (*resize)(struct tty_struct *tty, struct winsize *ws)
     217             :  *
     218             :  *      Called when a termios request is issued which changes the
     219             :  *      requested terminal geometry.
     220             :  *
     221             :  *      Optional: the default action is to update the termios structure
     222             :  *      without error. This is usually the correct behaviour. Drivers should
     223             :  *      not force errors here if they are not resizable objects (eg a serial
     224             :  *      line). See tty_do_resize() if you need to wrap the standard method
     225             :  *      in your own logic - the usual case.
     226             :  *
     227             :  * int (*get_icount)(struct tty_struct *tty, struct serial_icounter *icount);
     228             :  *
     229             :  *      Called when the device receives a TIOCGICOUNT ioctl. Passed a kernel
     230             :  *      structure to complete. This method is optional and will only be called
     231             :  *      if provided (otherwise EINVAL will be returned).
     232             :  */
     233             : 
     234             : #include <linux/export.h>
     235             : #include <linux/fs.h>
     236             : #include <linux/list.h>
     237             : #include <linux/cdev.h>
     238             : #include <linux/termios.h>
     239             : #include <linux/seq_file.h>
     240             : 
     241             : struct tty_struct;
     242             : struct tty_driver;
     243             : struct serial_icounter_struct;
     244             : struct serial_struct;
     245             : 
     246             : struct tty_operations {
     247             :         struct tty_struct * (*lookup)(struct tty_driver *driver,
     248             :                         struct file *filp, int idx);
     249             :         int  (*install)(struct tty_driver *driver, struct tty_struct *tty);
     250             :         void (*remove)(struct tty_driver *driver, struct tty_struct *tty);
     251             :         int  (*open)(struct tty_struct * tty, struct file * filp);
     252             :         void (*close)(struct tty_struct * tty, struct file * filp);
     253             :         void (*shutdown)(struct tty_struct *tty);
     254             :         void (*cleanup)(struct tty_struct *tty);
     255             :         int  (*write)(struct tty_struct * tty,
     256             :                       const unsigned char *buf, int count);
     257             :         int  (*put_char)(struct tty_struct *tty, unsigned char ch);
     258             :         void (*flush_chars)(struct tty_struct *tty);
     259             :         int  (*write_room)(struct tty_struct *tty);
     260             :         int  (*chars_in_buffer)(struct tty_struct *tty);
     261             :         int  (*ioctl)(struct tty_struct *tty,
     262             :                     unsigned int cmd, unsigned long arg);
     263             :         long (*compat_ioctl)(struct tty_struct *tty,
     264             :                              unsigned int cmd, unsigned long arg);
     265             :         void (*set_termios)(struct tty_struct *tty, struct ktermios * old);
     266             :         void (*throttle)(struct tty_struct * tty);
     267             :         void (*unthrottle)(struct tty_struct * tty);
     268             :         void (*stop)(struct tty_struct *tty);
     269             :         void (*start)(struct tty_struct *tty);
     270             :         void (*hangup)(struct tty_struct *tty);
     271             :         int (*break_ctl)(struct tty_struct *tty, int state);
     272             :         void (*flush_buffer)(struct tty_struct *tty);
     273             :         void (*set_ldisc)(struct tty_struct *tty);
     274             :         void (*wait_until_sent)(struct tty_struct *tty, int timeout);
     275             :         void (*send_xchar)(struct tty_struct *tty, char ch);
     276             :         int (*tiocmget)(struct tty_struct *tty);
     277             :         int (*tiocmset)(struct tty_struct *tty,
     278             :                         unsigned int set, unsigned int clear);
     279             :         int (*resize)(struct tty_struct *tty, struct winsize *ws);
     280             :         int (*get_icount)(struct tty_struct *tty,
     281             :                                 struct serial_icounter_struct *icount);
     282             :         int  (*get_serial)(struct tty_struct *tty, struct serial_struct *p);
     283             :         int  (*set_serial)(struct tty_struct *tty, struct serial_struct *p);
     284             :         void (*show_fdinfo)(struct tty_struct *tty, struct seq_file *m);
     285             : #ifdef CONFIG_CONSOLE_POLL
     286             :         int (*poll_init)(struct tty_driver *driver, int line, char *options);
     287             :         int (*poll_get_char)(struct tty_driver *driver, int line);
     288             :         void (*poll_put_char)(struct tty_driver *driver, int line, char ch);
     289             : #endif
     290             :         int (*proc_show)(struct seq_file *, void *);
     291             : } __randomize_layout;
     292             : 
     293             : struct tty_driver {
     294             :         int     magic;          /* magic number for this structure */
     295             :         struct kref kref;       /* Reference management */
     296             :         struct cdev **cdevs;
     297             :         struct module   *owner;
     298             :         const char      *driver_name;
     299             :         const char      *name;
     300             :         int     name_base;      /* offset of printed name */
     301             :         int     major;          /* major device number */
     302             :         int     minor_start;    /* start of minor device number */
     303             :         unsigned int    num;    /* number of devices allocated */
     304             :         short   type;           /* type of tty driver */
     305             :         short   subtype;        /* subtype of tty driver */
     306             :         struct ktermios init_termios; /* Initial termios */
     307             :         unsigned long   flags;          /* tty driver flags */
     308             :         struct proc_dir_entry *proc_entry; /* /proc fs entry */
     309             :         struct tty_driver *other; /* only used for the PTY driver */
     310             : 
     311             :         /*
     312             :          * Pointer to the tty data structures
     313             :          */
     314             :         struct tty_struct **ttys;
     315             :         struct tty_port **ports;
     316             :         struct ktermios **termios;
     317             :         void *driver_state;
     318             : 
     319             :         /*
     320             :          * Driver methods
     321             :          */
     322             : 
     323             :         const struct tty_operations *ops;
     324             :         struct list_head tty_drivers;
     325             : } __randomize_layout;
     326             : 
     327             : extern struct list_head tty_drivers;
     328             : 
     329             : extern struct tty_driver *__tty_alloc_driver(unsigned int lines,
     330             :                 struct module *owner, unsigned long flags);
     331             : extern void put_tty_driver(struct tty_driver *driver);
     332             : extern void tty_set_operations(struct tty_driver *driver,
     333             :                         const struct tty_operations *op);
     334             : extern struct tty_driver *tty_find_polling_driver(char *name, int *line);
     335             : 
     336             : extern void tty_driver_kref_put(struct tty_driver *driver);
     337             : 
     338             : /* Use TTY_DRIVER_* flags below */
     339             : #define tty_alloc_driver(lines, flags) \
     340             :                 __tty_alloc_driver(lines, THIS_MODULE, flags)
     341             : 
     342             : /*
     343             :  * DEPRECATED Do not use this in new code, use tty_alloc_driver instead.
     344             :  * (And change the return value checks.)
     345             :  */
     346           2 : static inline struct tty_driver *alloc_tty_driver(unsigned int lines)
     347             : {
     348           2 :         struct tty_driver *ret = tty_alloc_driver(lines, 0);
     349           2 :         if (IS_ERR(ret))
     350           0 :                 return NULL;
     351             :         return ret;
     352             : }
     353             : 
     354         339 : static inline struct tty_driver *tty_driver_kref_get(struct tty_driver *d)
     355             : {
     356         339 :         kref_get(&d->kref);
     357         176 :         return d;
     358             : }
     359             : 
     360             : /* tty driver magic number */
     361             : #define TTY_DRIVER_MAGIC                0x5402
     362             : 
     363             : /*
     364             :  * tty driver flags
     365             :  * 
     366             :  * TTY_DRIVER_RESET_TERMIOS --- requests the tty layer to reset the
     367             :  *      termios setting when the last process has closed the device.
     368             :  *      Used for PTY's, in particular.
     369             :  * 
     370             :  * TTY_DRIVER_REAL_RAW --- if set, indicates that the driver will
     371             :  *      guarantee never not to set any special character handling
     372             :  *      flags if ((IGNBRK || (!BRKINT && !PARMRK)) && (IGNPAR ||
     373             :  *      !INPCK)).  That is, if there is no reason for the driver to
     374             :  *      send notifications of parity and break characters up to the
     375             :  *      line driver, it won't do so.  This allows the line driver to
     376             :  *      optimize for this case if this flag is set.  (Note that there
     377             :  *      is also a promise, if the above case is true, not to signal
     378             :  *      overruns, either.)
     379             :  *
     380             :  * TTY_DRIVER_DYNAMIC_DEV --- if set, the individual tty devices need
     381             :  *      to be registered with a call to tty_register_device() when the
     382             :  *      device is found in the system and unregistered with a call to
     383             :  *      tty_unregister_device() so the devices will be show up
     384             :  *      properly in sysfs.  If not set, driver->num entries will be
     385             :  *      created by the tty core in sysfs when tty_register_driver() is
     386             :  *      called.  This is to be used by drivers that have tty devices
     387             :  *      that can appear and disappear while the main tty driver is
     388             :  *      registered with the tty core.
     389             :  *
     390             :  * TTY_DRIVER_DEVPTS_MEM -- don't use the standard arrays, instead
     391             :  *      use dynamic memory keyed through the devpts filesystem.  This
     392             :  *      is only applicable to the pty driver.
     393             :  *
     394             :  * TTY_DRIVER_HARDWARE_BREAK -- hardware handles break signals. Pass
     395             :  *      the requested timeout to the caller instead of using a simple
     396             :  *      on/off interface.
     397             :  *
     398             :  * TTY_DRIVER_DYNAMIC_ALLOC -- do not allocate structures which are
     399             :  *      needed per line for this driver as it would waste memory.
     400             :  *      The driver will take care.
     401             :  *
     402             :  * TTY_DRIVER_UNNUMBERED_NODE -- do not create numbered /dev nodes. In
     403             :  *      other words create /dev/ttyprintk and not /dev/ttyprintk0.
     404             :  *      Applicable only when a driver for a single tty device is
     405             :  *      being allocated.
     406             :  */
     407             : #define TTY_DRIVER_INSTALLED            0x0001
     408             : #define TTY_DRIVER_RESET_TERMIOS        0x0002
     409             : #define TTY_DRIVER_REAL_RAW             0x0004
     410             : #define TTY_DRIVER_DYNAMIC_DEV          0x0008
     411             : #define TTY_DRIVER_DEVPTS_MEM           0x0010
     412             : #define TTY_DRIVER_HARDWARE_BREAK       0x0020
     413             : #define TTY_DRIVER_DYNAMIC_ALLOC        0x0040
     414             : #define TTY_DRIVER_UNNUMBERED_NODE      0x0080
     415             : 
     416             : /* tty driver types */
     417             : #define TTY_DRIVER_TYPE_SYSTEM          0x0001
     418             : #define TTY_DRIVER_TYPE_CONSOLE         0x0002
     419             : #define TTY_DRIVER_TYPE_SERIAL          0x0003
     420             : #define TTY_DRIVER_TYPE_PTY             0x0004
     421             : #define TTY_DRIVER_TYPE_SCC             0x0005  /* scc driver */
     422             : #define TTY_DRIVER_TYPE_SYSCONS         0x0006
     423             : 
     424             : /* system subtypes (magic, used by tty_io.c) */
     425             : #define SYSTEM_TYPE_TTY                 0x0001
     426             : #define SYSTEM_TYPE_CONSOLE             0x0002
     427             : #define SYSTEM_TYPE_SYSCONS             0x0003
     428             : #define SYSTEM_TYPE_SYSPTMX             0x0004
     429             : 
     430             : /* pty subtypes (magic, used by tty_io.c) */
     431             : #define PTY_TYPE_MASTER                 0x0001
     432             : #define PTY_TYPE_SLAVE                  0x0002
     433             : 
     434             : /* serial subtype definitions */
     435             : #define SERIAL_TYPE_NORMAL      1
     436             : 
     437             : #endif /* #ifdef _LINUX_TTY_DRIVER_H */

Generated by: LCOV version 1.14