Skip to content

Commit

Permalink
serial: move TIOCM update to a separate function
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
xantnef authored and bonzini committed Jul 14, 2017
1 parent af50855 commit 7573584
Showing 1 changed file with 19 additions and 12 deletions.
31 changes: 19 additions & 12 deletions hw/char/serial.c
Expand Up @@ -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,
unsigned size)
{
Expand Down Expand Up @@ -426,24 +444,13 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val,
break;
case 4:
{
int flags;
int old_mcr = s->mcr;
s->mcr = val & 0x1f;
if (val & UART_MCR_LOOP)
break;

if (s->poll_msl >= 0 && old_mcr != s->mcr) {

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);
serial_update_tiocm(s);
/* 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 */
timer_mod(s->modem_status_poll, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + s->char_transmit_time);
Expand Down

0 comments on commit 7573584

Please sign in to comment.