Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) #ifndef _ALPHA_TERMIOS_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) #define _ALPHA_TERMIOS_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) #include <uapi/asm/termios.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) /*	eof=^D		eol=\0		eol2=\0		erase=del
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) 	werase=^W	kill=^U		reprint=^R	sxtc=\0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) 	intr=^C		quit=^\		susp=^Z		<OSF/1 VDSUSP>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) 	start=^Q	stop=^S		lnext=^V	discard=^U
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) 	vmin=\1		vtime=\0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define INIT_C_CC "\004\000\000\177\027\025\022\000\003\034\032\000\021\023\026\025\001\000"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)  * Translate a "termio" structure into a "termios". Ugh.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define user_termio_to_kernel_termios(a_termios, u_termio)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) ({										\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 	struct ktermios *k_termios = (a_termios);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 	struct termio k_termio;							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 	int canon, ret;								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 										\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 	ret = copy_from_user(&k_termio, u_termio, sizeof(k_termio));		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 	if (!ret) {								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 		/* Overwrite only the low bits.  */				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 		*(unsigned short *)&k_termios->c_iflag = k_termio.c_iflag;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 		*(unsigned short *)&k_termios->c_oflag = k_termio.c_oflag;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 		*(unsigned short *)&k_termios->c_cflag = k_termio.c_cflag;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 		*(unsigned short *)&k_termios->c_lflag = k_termio.c_lflag;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 		canon = k_termio.c_lflag & ICANON;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 										\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 		k_termios->c_cc[VINTR]  = k_termio.c_cc[_VINTR];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 		k_termios->c_cc[VQUIT]  = k_termio.c_cc[_VQUIT];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 		k_termios->c_cc[VERASE] = k_termio.c_cc[_VERASE];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 		k_termios->c_cc[VKILL]  = k_termio.c_cc[_VKILL];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 		k_termios->c_cc[VEOL2]  = k_termio.c_cc[_VEOL2];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 		k_termios->c_cc[VSWTC]  = k_termio.c_cc[_VSWTC];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 		k_termios->c_cc[canon ? VEOF : VMIN]  = k_termio.c_cc[_VEOF];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 		k_termios->c_cc[canon ? VEOL : VTIME] = k_termio.c_cc[_VEOL];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 	}									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	ret;									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)  * Translate a "termios" structure into a "termio". Ugh.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)  * Note the "fun" _VMIN overloading.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define kernel_termios_to_user_termio(u_termio, a_termios)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) ({									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 	struct ktermios *k_termios = (a_termios);			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 	struct termio k_termio;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 	int canon;							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 	k_termio.c_iflag = k_termios->c_iflag;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 	k_termio.c_oflag = k_termios->c_oflag;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 	k_termio.c_cflag = k_termios->c_cflag;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 	canon = (k_termio.c_lflag = k_termios->c_lflag) & ICANON;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 	k_termio.c_line = k_termios->c_line;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 	k_termio.c_cc[_VINTR]  = k_termios->c_cc[VINTR];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 	k_termio.c_cc[_VQUIT]  = k_termios->c_cc[VQUIT];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 	k_termio.c_cc[_VERASE] = k_termios->c_cc[VERASE];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 	k_termio.c_cc[_VKILL]  = k_termios->c_cc[VKILL];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	k_termio.c_cc[_VEOF]   = k_termios->c_cc[canon ? VEOF : VMIN];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 	k_termio.c_cc[_VEOL]   = k_termios->c_cc[canon ? VEOL : VTIME];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 	k_termio.c_cc[_VEOL2]  = k_termios->c_cc[VEOL2];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 	k_termio.c_cc[_VSWTC]  = k_termios->c_cc[VSWTC];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 	copy_to_user(u_termio, &k_termio, sizeof(k_termio));		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define user_termios_to_kernel_termios(k, u) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) 	copy_from_user(k, u, sizeof(struct termios2))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define kernel_termios_to_user_termios(u, k) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 	copy_to_user(u, k, sizeof(struct termios2))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define user_termios_to_kernel_termios_1(k, u) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 	copy_from_user(k, u, sizeof(struct termios))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define kernel_termios_to_user_termios_1(u, k) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) 	copy_to_user(u, k, sizeof(struct termios))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #endif	/* _ALPHA_TERMIOS_H */