brintos

brintos / linux-shallow public Read only

0
0
Text · 4.6 KiB · 7f0abc6 Raw
126 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * TTY core internal functions4 */5 6#ifndef _TTY_INTERNAL_H7#define _TTY_INTERNAL_H8 9#define tty_msg(fn, tty, f, ...) \10	fn("%s %s: " f, tty_driver_name(tty), tty_name(tty), ##__VA_ARGS__)11 12#define tty_debug(tty, f, ...)	tty_msg(pr_debug, tty, f, ##__VA_ARGS__)13#define tty_notice(tty, f, ...)	tty_msg(pr_notice, tty, f, ##__VA_ARGS__)14#define tty_warn(tty, f, ...)	tty_msg(pr_warn, tty, f, ##__VA_ARGS__)15#define tty_err(tty, f, ...)	tty_msg(pr_err, tty, f, ##__VA_ARGS__)16 17#define tty_info_ratelimited(tty, f, ...) \18		tty_msg(pr_info_ratelimited, tty, f, ##__VA_ARGS__)19 20/*21 * Lock subclasses for tty locks22 *23 * TTY_LOCK_NORMAL is for normal ttys and master ptys.24 * TTY_LOCK_SLAVE is for slave ptys only.25 *26 * Lock subclasses are necessary for handling nested locking with pty pairs.27 * tty locks which use nested locking:28 *29 * legacy_mutex - Nested tty locks are necessary for releasing pty pairs.30 *		  The stable lock order is master pty first, then slave pty.31 * termios_rwsem - The stable lock order is tty_buffer lock->termios_rwsem.32 *		   Subclassing this lock enables the slave pty to hold its33 *		   termios_rwsem when claiming the master tty_buffer lock.34 * tty_buffer lock - slave ptys can claim nested buffer lock when handling35 *		     signal chars. The stable lock order is slave pty, then36 *		     master.37 */38enum {39	TTY_LOCK_NORMAL = 0,40	TTY_LOCK_SLAVE,41};42 43/* Values for tty->flow_change */44enum tty_flow_change {45	TTY_FLOW_NO_CHANGE,46	TTY_THROTTLE_SAFE,47	TTY_UNTHROTTLE_SAFE,48};49 50static inline void __tty_set_flow_change(struct tty_struct *tty,51					 enum tty_flow_change val)52{53	tty->flow_change = val;54}55 56static inline void tty_set_flow_change(struct tty_struct *tty,57				       enum tty_flow_change val)58{59	tty->flow_change = val;60	smp_mb();61}62 63int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout) HWJS_SUSPENDS;64void tty_ldisc_unlock(struct tty_struct *tty) HWJS_SUSPENDS;65 66int __tty_check_change(struct tty_struct *tty, int sig) HWJS_SUSPENDS;67int tty_check_change(struct tty_struct *tty) HWJS_SUSPENDS;68void __stop_tty(struct tty_struct *tty) HWJS_SUSPENDS;69void __start_tty(struct tty_struct *tty) HWJS_SUSPENDS;70void tty_write_unlock(struct tty_struct *tty) HWJS_SUSPENDS;71int tty_write_lock(struct tty_struct *tty, bool ndelay) HWJS_SUSPENDS;72void tty_vhangup_session(struct tty_struct *tty) HWJS_SUSPENDS;73void tty_open_proc_set_tty(struct file *filp, struct tty_struct *tty);74int tty_signal_session_leader(struct tty_struct *tty, int exit_session) HWJS_SUSPENDS;75void session_clear_tty(struct pid *session);76void tty_buffer_free_all(struct tty_port *port);77void tty_buffer_flush(struct tty_struct *tty, struct tty_ldisc *ld) HWJS_SUSPENDS;78void tty_buffer_init(struct tty_port *port);79void tty_buffer_set_lock_subclass(struct tty_port *port);80bool tty_buffer_restart_work(struct tty_port *port);81bool tty_buffer_cancel_work(struct tty_port *port) HWJS_SUSPENDS;82void tty_buffer_flush_work(struct tty_port *port);83speed_t tty_termios_input_baud_rate(const struct ktermios *termios);84void tty_ldisc_hangup(struct tty_struct *tty, bool reset) HWJS_SUSPENDS;85int tty_ldisc_reinit(struct tty_struct *tty, int disc) HWJS_SUSPENDS;86long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg) HWJS_SUSPENDS;87long tty_jobctrl_ioctl(struct tty_struct *tty, struct tty_struct *real_tty,88		       struct file *file, unsigned int cmd, unsigned long arg) HWJS_SUSPENDS;89void tty_default_fops(struct file_operations *fops);90struct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx);91int tty_alloc_file(struct file *file);92void tty_add_file(struct tty_struct *tty, struct file *file);93void tty_free_file(struct file *file);94int tty_release(struct inode *inode, struct file *filp) HWJS_SUSPENDS;95 96#define tty_is_writelocked(tty)  (mutex_is_locked(&tty->atomic_write_lock))97 98int tty_ldisc_setup(struct tty_struct *tty, struct tty_struct *o_tty);99void tty_ldisc_release(struct tty_struct *tty) HWJS_SUSPENDS;100int __must_check tty_ldisc_init(struct tty_struct *tty);101void tty_ldisc_deinit(struct tty_struct *tty);102 103extern int tty_ldisc_autoload;104 105/* tty_audit.c */106#ifdef CONFIG_AUDIT107void tty_audit_add_data(const struct tty_struct *tty, const void *data,108			size_t size);109void tty_audit_tiocsti(const struct tty_struct *tty, u8 ch);110#else111static inline void tty_audit_add_data(const struct tty_struct *tty,112				      const void *data, size_t size)113{114}115static inline void tty_audit_tiocsti(const struct tty_struct *tty, u8 ch)116{117}118#endif119 120ssize_t redirected_tty_write(struct kiocb *, struct iov_iter *);121 122int tty_insert_flip_string_and_push_buffer(struct tty_port *port,123					   const u8 *chars, size_t cnt) HWJS_SUSPENDS;124 125#endif126