root/include/linux/termios_internal.h
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_TERMIOS_CONV_H
#define _LINUX_TERMIOS_CONV_H

#include <linux/uaccess.h>
#include <asm/termios.h>

/*      intr=^C         quit=^\         erase=del       kill=^U
        eof=^D          vtime=\0        vmin=\1         sxtc=\0
        start=^Q        stop=^S         susp=^Z         eol=\0
        reprint=^R      discard=^O      werase=^W       lnext=^V
        eol2=\0
*/

#ifdef VDSUSP
#define INIT_C_CC_VDSUSP_EXTRA [VDSUSP] = 'Y'-0x40,
#else
#define INIT_C_CC_VDSUSP_EXTRA
#endif

#define INIT_C_CC {             \
        [VINTR] = 'C'-0x40,     \
        [VQUIT] = '\\'-0x40,    \
        [VERASE] = '\177',      \
        [VKILL] = 'U'-0x40,     \
        [VEOF] = 'D'-0x40,      \
        [VSTART] = 'Q'-0x40,    \
        [VSTOP] = 'S'-0x40,     \
        [VSUSP] = 'Z'-0x40,     \
        [VREPRINT] = 'R'-0x40,  \
        [VDISCARD] = 'O'-0x40,  \
        [VWERASE] = 'W'-0x40,   \
        [VLNEXT] = 'V'-0x40,    \
        INIT_C_CC_VDSUSP_EXTRA  \
        [VMIN] = 1 }

int user_termio_to_kernel_termios(struct ktermios *, struct termio __user *);
int kernel_termios_to_user_termio(struct termio __user *, struct ktermios *);
#ifdef TCGETS2
int user_termios_to_kernel_termios(struct ktermios *, struct termios2 __user *);
int kernel_termios_to_user_termios(struct termios2 __user *, struct ktermios *);
int user_termios_to_kernel_termios_1(struct ktermios *, struct termios __user *);
int kernel_termios_to_user_termios_1(struct termios __user *, struct ktermios *);
#else /* TCGETS2 */
int user_termios_to_kernel_termios(struct ktermios *, struct termios __user *);
int kernel_termios_to_user_termios(struct termios __user *, struct ktermios *);
#endif /* TCGETS2 */

#endif /* _LINUX_TERMIOS_CONV_H */