+static void
+uart_set_control_mode(struct uart16550* uart, tcflag_t cflags)
+{
+ uart->cntl_save.rie &= ~(UART_rIE_ERBFI | UART_rIE_EDSSI);
+ uart->cntl_save.rie |= (!(cflags & _CLOCAL)) * UART_rIE_EDSSI;
+ uart->cntl_save.rie |= (!!(cflags & _CREAD)) * UART_rIE_ERBFI;
+ uart_setie(uart);
+
+ uart->cntl_save.rlc &= ~(UART_rLC_STOPB | UART_rLC_PAREN | UART_rLC_PAREVN | 0b11);
+ uart->cntl_save.rlc |= (!!(cflags & _CSTOPB)) * UART_rLC_STOPB;
+ uart->cntl_save.rlc |= (!!(cflags & _CPARENB)) * UART_rLC_PAREN;
+ uart->cntl_save.rlc |= (!(cflags & _CPARODD)) * UART_rLC_PAREVN;
+ uart->cntl_save.rlc |= (cflags & _CSZ_MASK) >> 2;
+ uart_setlc(uart);
+}
+