Message ID | 1499874119-67558-1-git-send-email-peng.hao2@zte.com.cn (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 12/07/2017 17:41, Peng Hao wrote: > Parallel device don't register be->chr_can_read function, but remote > disconnect event is handled in chr_read.So connected parallel device > can not detect remote disconnect event. The chardevs with chr_can_read=NULL > has the same problem. > > Signed-off-by: Peng Hao <peng.hao2@zte.com.cn> > Reviewed-by: Wang Yechao <wang.yechao255@zte.com.cn> > Reviewed-by: Jiang Biao <jiang.biao2@zte.com.cn> > --- > hw/char/parallel.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/hw/char/parallel.c b/hw/char/parallel.c > index 75a1a2f..b33bbb8 100644 > --- a/hw/char/parallel.c > +++ b/hw/char/parallel.c > @@ -503,6 +503,10 @@ static const VMStateDescription vmstate_parallel_isa = { > } > }; > > +static int parallel_can_receive(void *opaque) > +{ > + return 1; > +} > > static void parallel_isa_realizefn(DeviceState *dev, Error **errp) > { > @@ -535,6 +539,8 @@ static void parallel_isa_realizefn(DeviceState *dev, Error **errp) > isa_init_irq(isadev, &s->irq, isa->isairq); > qemu_register_reset(parallel_reset, s); > > + qemu_chr_fe_set_handlers(&s->chr, parallel_can_receive, NULL, > + NULL, s, NULL, true); > if (qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_READ_STATUS, &dummy) == 0) { > s->hw_driver = 1; > s->status = dummy; > Sounds good for a simple fix. Thanks, Paolo
diff --git a/hw/char/parallel.c b/hw/char/parallel.c index 75a1a2f..b33bbb8 100644 --- a/hw/char/parallel.c +++ b/hw/char/parallel.c @@ -503,6 +503,10 @@ static const VMStateDescription vmstate_parallel_isa = { } }; +static int parallel_can_receive(void *opaque) +{ + return 1; +} static void parallel_isa_realizefn(DeviceState *dev, Error **errp) { @@ -535,6 +539,8 @@ static void parallel_isa_realizefn(DeviceState *dev, Error **errp) isa_init_irq(isadev, &s->irq, isa->isairq); qemu_register_reset(parallel_reset, s); + qemu_chr_fe_set_handlers(&s->chr, parallel_can_receive, NULL, + NULL, s, NULL, true); if (qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_READ_STATUS, &dummy) == 0) { s->hw_driver = 1; s->status = dummy;