Remaining fragments of xen-unstable c/s
16537:
bf21e00155b7dd76653c5340099ecedac7a7de08
[QEMU-DM] Modem control line & msl/mcr register support.
This patch enables handling of the modem/flow control lines of a
serial port when the backend for the virtual port is a physical serial
port. During initialization, it tries to load the msr with the
detected status from the real port (this is consistent with physical
uart, which starts with its msr values set according to the status of
the modem status lines). If the ioctl returns -ENOTSUP, then the code
assumes the backend is not a real serial port and will disable any
further attempts to manipulate or read the physical port's line
status.
It's tries to be as "correct" as possible in its msr/msl handling,
with the exception of modem line status change interrupts. A real
16550 uart apparently have a delay time of 250ns between when a modem
status line changes and the IRQ line goes high. In this patch, an
"idle" port is polled for line status changes only if the guest has
enabled UART_IER_MSI is enabled, and only polled every 10 ms.
Signed-off-by: Trolle Selander <trolle.selander@gmail.com>
#define CHR_IOCTL_PP_EPP_WRITE_ADDR 10
#define CHR_IOCTL_PP_EPP_WRITE 11
+#define CHR_IOCTL_SERIAL_SET_TIOCM 12
+#define CHR_IOCTL_SERIAL_GET_TIOCM 13
+
typedef void IOEventHandler(void *opaque, int event);
struct CharDriverState {
tcsendbreak(s->fd_in, 1);
}
break;
+ case CHR_IOCTL_SERIAL_GET_TIOCM:
+ {
+ ioctl(s->fd_in, TIOCMGET, arg);
+ }
+ break;
+ case CHR_IOCTL_SERIAL_SET_TIOCM:
+ {
+ ioctl(s->fd_in, TIOCMSET, arg);
+ }
+ break;
default:
return -ENOTSUP;
}