diff options
Diffstat (limited to 'hw/char/imx_serial.c')
-rw-r--r-- | hw/char/imx_serial.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c index 5c3fa61e4c..5c11de2cbe 100644 --- a/hw/char/imx_serial.c +++ b/hw/char/imx_serial.c @@ -121,8 +121,8 @@ static uint64_t imx_serial_read(void *opaque, hwaddr offset, s->usr2 &= ~USR2_RDR; s->uts1 |= UTS1_RXEMPTY; imx_update(s); - if (s->chr) { - qemu_chr_accept_input(s->chr); + if (s->chr.chr) { + qemu_chr_accept_input(s->chr.chr); } } return c; @@ -175,16 +175,17 @@ static void imx_serial_write(void *opaque, hwaddr offset, unsigned char ch; DPRINTF("write(offset=0x%" HWADDR_PRIx ", value = 0x%x) to %s\n", - offset, (unsigned int)value, s->chr ? s->chr->label : "NODEV"); + offset, (unsigned int)value, + s->chr.chr ? s->chr.chr->label : "NODEV"); switch (offset >> 2) { case 0x10: /* UTXD */ ch = value; if (s->ucr2 & UCR2_TXEN) { - if (s->chr) { + if (s->chr.chr) { /* XXX this blocks entire thread. Rewrite to use * qemu_chr_fe_write and background I/O callbacks */ - qemu_chr_fe_write_all(s->chr, &ch, 1); + qemu_chr_fe_write_all(s->chr.chr, &ch, 1); } s->usr1 &= ~USR1_TRDY; imx_update(s); @@ -214,8 +215,8 @@ static void imx_serial_write(void *opaque, hwaddr offset, } if (value & UCR2_RXEN) { if (!(s->ucr2 & UCR2_RXEN)) { - if (s->chr) { - qemu_chr_accept_input(s->chr); + if (s->chr.chr) { + qemu_chr_accept_input(s->chr.chr); } } } @@ -318,8 +319,8 @@ static void imx_serial_realize(DeviceState *dev, Error **errp) { IMXSerialState *s = IMX_SERIAL(dev); - if (s->chr) { - qemu_chr_add_handlers(s->chr, imx_can_receive, imx_receive, + if (s->chr.chr) { + qemu_chr_add_handlers(s->chr.chr, imx_can_receive, imx_receive, imx_event, s); } else { DPRINTF("No char dev for uart\n"); |