Message ID | 1463999074-5751-4-git-send-email-zxq_yx_007@163.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Am 2016-05-23 12:24, schrieb xiaoqiang zhao: > * Drop the old SysBus init function > * Call qemu_chr_add_handlers in the realize callback > * Use qdev chardev prop instead of qemu_char_get_next_serial > > Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com> > --- > hw/char/lm32_juart.c | 17 ++++++++--------- > hw/lm32/lm32.h | 2 ++ > 2 files changed, 10 insertions(+), 9 deletions(-) > > diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c > index 5bf8acf..28c2cf7 100644 > --- a/hw/char/lm32_juart.c > +++ b/hw/char/lm32_juart.c > @@ -114,17 +114,13 @@ static void juart_reset(DeviceState *d) > s->jrx = 0; > } > > -static int lm32_juart_init(SysBusDevice *dev) > +static void lm32_juart_realize(DeviceState *dev, Error **errp) > { > LM32JuartState *s = LM32_JUART(dev); > > - /* FIXME use a qdev chardev prop instead of > qemu_char_get_next_serial() */ > - s->chr = qemu_char_get_next_serial(); > if (s->chr) { > qemu_chr_add_handlers(s->chr, juart_can_rx, juart_rx, > juart_event, s); > } > - > - return 0; > } > > static const VMStateDescription vmstate_lm32_juart = { > @@ -138,16 +134,19 @@ static const VMStateDescription > vmstate_lm32_juart = { > } > }; > > +static Property lm32_juart_properties[] = { > + DEFINE_PROP_CHR("chardev", LM32JuartState, chr), > + DEFINE_PROP_END_OF_LIST(), > +}; > + > static void lm32_juart_class_init(ObjectClass *klass, void *data) > { > DeviceClass *dc = DEVICE_CLASS(klass); > - SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); > > - k->init = lm32_juart_init; > dc->reset = juart_reset; > dc->vmsd = &vmstate_lm32_juart; > - /* Reason: init() method uses qemu_char_get_next_serial() */ > - dc->cannot_instantiate_with_device_add_yet = true; > + dc->props = lm32_juart_properties; > + dc->realize = lm32_juart_realize; > } > > static const TypeInfo lm32_juart_info = { > diff --git a/hw/lm32/lm32.h b/hw/lm32/lm32.h > index 18aa6fd..6761518 100644 > --- a/hw/lm32/lm32.h > +++ b/hw/lm32/lm32.h > @@ -2,6 +2,7 @@ > #define HW_LM32_H 1 > > #include "hw/char/lm32_juart.h" > +#include "sysemu/sysemu.h" > > static inline DeviceState *lm32_pic_init(qemu_irq cpu_irq) > { > @@ -21,6 +22,7 @@ static inline DeviceState *lm32_juart_init(void) > DeviceState *dev; > > dev = qdev_create(NULL, TYPE_LM32_JUART); > + qdev_prop_set_chr(dev, "chardev", serial_hds[1]); Please make the serial_hds[1] a parameter to this function, like you did with the lm32_uart_create(). Then the serial_hds[] assignements will be in one place in lm32_boards.c. Mhh, i guess for this to work with the milkymist board, milkymist-uart (hw/char/milkymist-uart.c) has to be converted too, because it still uses the qemu_char_get_next_serial() function. So if you like you may also convert this model. If not, I'll do it myself after picking your patches. > qdev_init_nofail(dev); > > return dev; -michael
> 在 2016年5月23日,19:18,Michael Walle <michael@walle.cc> 写道: > > Am 2016-05-23 12:24, schrieb xiaoqiang zhao: >> * Drop the old SysBus init function >> * Call qemu_chr_add_handlers in the realize callback >> * Use qdev chardev prop instead of qemu_char_get_next_serial >> Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com> >> --- >> hw/char/lm32_juart.c | 17 ++++++++--------- >> hw/lm32/lm32.h | 2 ++ >> 2 files changed, 10 insertions(+), 9 deletions(-) >> diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c >> index 5bf8acf..28c2cf7 100644 >> --- a/hw/char/lm32_juart.c >> +++ b/hw/char/lm32_juart.c >> @@ -114,17 +114,13 @@ static void juart_reset(DeviceState *d) >> s->jrx = 0; >> } >> -static int lm32_juart_init(SysBusDevice *dev) >> +static void lm32_juart_realize(DeviceState *dev, Error **errp) >> { >> LM32JuartState *s = LM32_JUART(dev); >> - /* FIXME use a qdev chardev prop instead of qemu_char_get_next_serial() */ >> - s->chr = qemu_char_get_next_serial(); >> if (s->chr) { >> qemu_chr_add_handlers(s->chr, juart_can_rx, juart_rx, juart_event, s); >> } >> - >> - return 0; >> } >> static const VMStateDescription vmstate_lm32_juart = { >> @@ -138,16 +134,19 @@ static const VMStateDescription vmstate_lm32_juart = { >> } >> }; >> +static Property lm32_juart_properties[] = { >> + DEFINE_PROP_CHR("chardev", LM32JuartState, chr), >> + DEFINE_PROP_END_OF_LIST(), >> +}; >> + >> static void lm32_juart_class_init(ObjectClass *klass, void *data) >> { >> DeviceClass *dc = DEVICE_CLASS(klass); >> - SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); >> - k->init = lm32_juart_init; >> dc->reset = juart_reset; >> dc->vmsd = &vmstate_lm32_juart; >> - /* Reason: init() method uses qemu_char_get_next_serial() */ >> - dc->cannot_instantiate_with_device_add_yet = true; >> + dc->props = lm32_juart_properties; >> + dc->realize = lm32_juart_realize; >> } >> static const TypeInfo lm32_juart_info = { >> diff --git a/hw/lm32/lm32.h b/hw/lm32/lm32.h >> index 18aa6fd..6761518 100644 >> --- a/hw/lm32/lm32.h >> +++ b/hw/lm32/lm32.h >> @@ -2,6 +2,7 @@ >> #define HW_LM32_H 1 >> #include "hw/char/lm32_juart.h" >> +#include "sysemu/sysemu.h" >> static inline DeviceState *lm32_pic_init(qemu_irq cpu_irq) >> { >> @@ -21,6 +22,7 @@ static inline DeviceState *lm32_juart_init(void) >> DeviceState *dev; >> dev = qdev_create(NULL, TYPE_LM32_JUART); >> + qdev_prop_set_chr(dev, "chardev", serial_hds[1]); > > Please make the serial_hds[1] a parameter to this function, like you did with the lm32_uart_create(). Then the serial_hds[] assignements will be in one place in lm32_boards.c. > > Mhh, i guess for this to work with the milkymist board, milkymist-uart (hw/char/milkymist-uart.c) has to be converted too, because it still uses the qemu_char_get_next_serial() function. So if you like you may also convert this model. If not, I'll do it myself after picking your patches. > >> qdev_init_nofail(dev); >> return dev; > > -michael Yes, i will do it. Happy to contribute ;-)
diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c index 5bf8acf..28c2cf7 100644 --- a/hw/char/lm32_juart.c +++ b/hw/char/lm32_juart.c @@ -114,17 +114,13 @@ static void juart_reset(DeviceState *d) s->jrx = 0; } -static int lm32_juart_init(SysBusDevice *dev) +static void lm32_juart_realize(DeviceState *dev, Error **errp) { LM32JuartState *s = LM32_JUART(dev); - /* FIXME use a qdev chardev prop instead of qemu_char_get_next_serial() */ - s->chr = qemu_char_get_next_serial(); if (s->chr) { qemu_chr_add_handlers(s->chr, juart_can_rx, juart_rx, juart_event, s); } - - return 0; } static const VMStateDescription vmstate_lm32_juart = { @@ -138,16 +134,19 @@ static const VMStateDescription vmstate_lm32_juart = { } }; +static Property lm32_juart_properties[] = { + DEFINE_PROP_CHR("chardev", LM32JuartState, chr), + DEFINE_PROP_END_OF_LIST(), +}; + static void lm32_juart_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); - SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); - k->init = lm32_juart_init; dc->reset = juart_reset; dc->vmsd = &vmstate_lm32_juart; - /* Reason: init() method uses qemu_char_get_next_serial() */ - dc->cannot_instantiate_with_device_add_yet = true; + dc->props = lm32_juart_properties; + dc->realize = lm32_juart_realize; } static const TypeInfo lm32_juart_info = { diff --git a/hw/lm32/lm32.h b/hw/lm32/lm32.h index 18aa6fd..6761518 100644 --- a/hw/lm32/lm32.h +++ b/hw/lm32/lm32.h @@ -2,6 +2,7 @@ #define HW_LM32_H 1 #include "hw/char/lm32_juart.h" +#include "sysemu/sysemu.h" static inline DeviceState *lm32_pic_init(qemu_irq cpu_irq) { @@ -21,6 +22,7 @@ static inline DeviceState *lm32_juart_init(void) DeviceState *dev; dev = qdev_create(NULL, TYPE_LM32_JUART); + qdev_prop_set_chr(dev, "chardev", serial_hds[1]); qdev_init_nofail(dev); return dev;
* Drop the old SysBus init function * Call qemu_chr_add_handlers in the realize callback * Use qdev chardev prop instead of qemu_char_get_next_serial Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com> --- hw/char/lm32_juart.c | 17 ++++++++--------- hw/lm32/lm32.h | 2 ++ 2 files changed, 10 insertions(+), 9 deletions(-)