// Translate a "termio" structure into a "termios". static void termio2termios(struct termio * termio, struct termios * termios) { #define SET_LOW_BITS(x,y) (*(unsigned short *)(&x) = (y)) SET_LOW_BITS(termios->c_iflag, termio->c_iflag); SET_LOW_BITS(termios->c_oflag, termio->c_oflag); SET_LOW_BITS(termios->c_cflag, termio->c_cflag); SET_LOW_BITS(termios->c_lflag, termio->c_lflag); #undef SET_LOW_BITS memcpy(termios->c_cc, termio->c_cc, NCC); termios->c_ispeed = get_bauds( termio->c_cflag & BAUD_SPEED_MASK ); termios->c_ospeed = termios->c_ispeed; termios->c_cflag &= ~BAUD_SPEED_MASK; }
static int set_termio(struct tty_struct * tty, struct termio * termio, int channel) { struct termio tmp_termio; struct termios tmp_termios; tmp_termios = *tty->termios; memcpy_fromfs(&tmp_termio, termio, sizeof (struct termio)); #define SET_LOW_BITS(x,y) ((x) = (0xffff0000 & (x)) | (y)) SET_LOW_BITS(tmp_termios.c_iflag, tmp_termio.c_iflag); SET_LOW_BITS(tmp_termios.c_oflag, tmp_termio.c_oflag); SET_LOW_BITS(tmp_termios.c_cflag, tmp_termio.c_cflag); SET_LOW_BITS(tmp_termios.c_lflag, tmp_termio.c_lflag); memcpy(&tmp_termios.c_cc, &tmp_termio.c_cc, NCC); #undef SET_LOW_BITS return set_termios_2(tty, &tmp_termios); }