mirror of https://github.com/xemu-project/xemu.git
serial: move TIOCM update to a separate function
will be used by the following patch Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <1499342940-56739-13-git-send-email-anton.nefedov@virtuozzo.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
af50855c25
commit
757358425e
|
@ -312,6 +312,24 @@ static void serial_write_fcr(SerialState *s, uint8_t val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void serial_update_tiocm(SerialState *s)
|
||||||
|
{
|
||||||
|
int flags;
|
||||||
|
|
||||||
|
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_GET_TIOCM, &flags);
|
||||||
|
|
||||||
|
flags &= ~(CHR_TIOCM_RTS | CHR_TIOCM_DTR);
|
||||||
|
|
||||||
|
if (s->mcr & UART_MCR_RTS) {
|
||||||
|
flags |= CHR_TIOCM_RTS;
|
||||||
|
}
|
||||||
|
if (s->mcr & UART_MCR_DTR) {
|
||||||
|
flags |= CHR_TIOCM_DTR;
|
||||||
|
}
|
||||||
|
|
||||||
|
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_TIOCM, &flags);
|
||||||
|
}
|
||||||
|
|
||||||
static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val,
|
static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val,
|
||||||
unsigned size)
|
unsigned size)
|
||||||
{
|
{
|
||||||
|
@ -426,24 +444,13 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val,
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
int flags;
|
|
||||||
int old_mcr = s->mcr;
|
int old_mcr = s->mcr;
|
||||||
s->mcr = val & 0x1f;
|
s->mcr = val & 0x1f;
|
||||||
if (val & UART_MCR_LOOP)
|
if (val & UART_MCR_LOOP)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (s->poll_msl >= 0 && old_mcr != s->mcr) {
|
if (s->poll_msl >= 0 && old_mcr != s->mcr) {
|
||||||
|
serial_update_tiocm(s);
|
||||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_GET_TIOCM, &flags);
|
|
||||||
|
|
||||||
flags &= ~(CHR_TIOCM_RTS | CHR_TIOCM_DTR);
|
|
||||||
|
|
||||||
if (val & UART_MCR_RTS)
|
|
||||||
flags |= CHR_TIOCM_RTS;
|
|
||||||
if (val & UART_MCR_DTR)
|
|
||||||
flags |= CHR_TIOCM_DTR;
|
|
||||||
|
|
||||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_TIOCM, &flags);
|
|
||||||
/* Update the modem status after a one-character-send wait-time, since there may be a response
|
/* Update the modem status after a one-character-send wait-time, since there may be a response
|
||||||
from the device/computer at the other end of the serial line */
|
from the device/computer at the other end of the serial line */
|
||||||
timer_mod(s->modem_status_poll, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + s->char_transmit_time);
|
timer_mod(s->modem_status_poll, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + s->char_transmit_time);
|
||||||
|
|
Loading…
Reference in New Issue